declare_schema 1.2.3.pre.ga.2 → 1.2.3.pre.ga.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +1 -1
- data/lib/declare_schema/model/habtm_model_shim.rb +1 -1
- data/lib/declare_schema/version.rb +1 -1
- data/lib/generators/declare_schema/migration/migrator.rb +37 -24
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 506475213508a2b48038ccb1e8d2b4398b03879d88a7760803ffbc9273463033
|
4
|
+
data.tar.gz: 6fac90c4db4626a52d98c71ad98c6f8615e8f041473874575f9b3ba2e2123589
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d9eda18aaa034a6b78239e76e2416b1a0f26a4094268b9a9fb1b4f807108a557d7163d7e623568cb3a6bf1bc4d5dee1d84068d7b391e5cc399b81de095aad6e
|
7
|
+
data.tar.gz: 36c6b8f67da4ece257360b4bded0dc79b08e9e31a3f9a3ba0745016ebd481ad76c13e7f8fb549e1d923c9e557056ceff10b60858bb0fa0743f61131af31f0a08
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,10 @@ Inspired by [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
4
4
|
|
5
5
|
Note: this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [1.2.3] - Unreleased
|
8
|
+
### Changed
|
9
|
+
- Fixed a bug where renaming a foreign key resulted in an incorrect migration
|
10
|
+
|
7
11
|
## [1.2.2] - 2023-01-27
|
8
12
|
### Changed
|
9
13
|
- Documented `belongs_to` and `has_and_belongs_to_many` behavior
|
data/Gemfile.lock
CHANGED
@@ -57,7 +57,7 @@ module DeclareSchema
|
|
57
57
|
|
58
58
|
def index_definitions_with_primary_key
|
59
59
|
[
|
60
|
-
IndexDefinition.new(self, foreign_keys, unique: true, name: index_name), # creates a primary composite key on both
|
60
|
+
IndexDefinition.new(self, foreign_keys, unique: true, name: index_name), # creates a primary composite key on both foreign keys
|
61
61
|
IndexDefinition.new(self, foreign_keys.last) # not unique by itself; combines with primary key to be unique
|
62
62
|
]
|
63
63
|
end
|
@@ -454,32 +454,38 @@ module Generators
|
|
454
454
|
indexes_to_drop = existing_indexes_without_primary_key - model_indexes_without_primary_key
|
455
455
|
indexes_to_add = model_indexes_without_primary_key - existing_indexes_without_primary_key
|
456
456
|
|
457
|
+
renamed_indexes_to_drop, renamed_indexes_to_add = index_changes_due_to_column_renames(indexes_to_drop, indexes_to_add, to_rename)
|
458
|
+
|
459
|
+
drop_indexes = (indexes_to_drop - renamed_indexes_to_drop).map do |i|
|
460
|
+
::DeclareSchema::SchemaChange::IndexRemove.new(new_table_name, i.columns, unique: i.unique, where: i.where, name: i.name)
|
461
|
+
end
|
462
|
+
|
463
|
+
add_indexes = (indexes_to_add - renamed_indexes_to_add).map do |i|
|
464
|
+
::DeclareSchema::SchemaChange::IndexAdd.new(new_table_name, i.columns, unique: i.unique, where: i.where, name: i.name)
|
465
|
+
end
|
466
|
+
|
467
|
+
# the order is important here - adding a :unique, for instance needs to remove then add
|
468
|
+
[Array(change_primary_key) + drop_indexes + add_indexes]
|
469
|
+
end
|
470
|
+
|
471
|
+
def index_changes_due_to_column_renames(indexes_to_drop, indexes_to_add, to_rename)
|
457
472
|
renamed_indexes_to_drop = []
|
458
473
|
renamed_indexes_to_add = []
|
459
474
|
|
460
475
|
indexes_to_drop.each { |index_to_drop|
|
461
476
|
renamed_columns = index_to_drop.columns.map do |column|
|
462
|
-
to_rename
|
477
|
+
to_rename.fetch(column, column)
|
463
478
|
end
|
464
479
|
|
465
480
|
indexes_to_add.each { |index_to_add|
|
466
|
-
if renamed_columns == index_to_add.columns
|
481
|
+
if Set.new(renamed_columns) == Set.new(index_to_add.columns)
|
467
482
|
renamed_indexes_to_drop.append(index_to_drop)
|
468
483
|
renamed_indexes_to_add.append(index_to_add)
|
469
484
|
end
|
470
485
|
}
|
471
486
|
}
|
472
487
|
|
473
|
-
|
474
|
-
::DeclareSchema::SchemaChange::IndexRemove.new(new_table_name, i.columns, unique: i.unique, where: i.where, name: i.name)
|
475
|
-
end
|
476
|
-
|
477
|
-
add_indexes = (indexes_to_add - renamed_indexes_to_add).map do |i|
|
478
|
-
::DeclareSchema::SchemaChange::IndexAdd.new(new_table_name, i.columns, unique: i.unique, where: i.where, name: i.name)
|
479
|
-
end
|
480
|
-
|
481
|
-
# the order is important here - adding a :unique, for instance needs to remove then add
|
482
|
-
[Array(change_primary_key) + drop_indexes + add_indexes]
|
488
|
+
[renamed_indexes_to_drop, renamed_indexes_to_add]
|
483
489
|
end
|
484
490
|
|
485
491
|
def change_foreign_key_constraints(model, old_table_name, to_rename)
|
@@ -492,6 +498,23 @@ module Generators
|
|
492
498
|
fks_to_drop = existing_fks - model_fks
|
493
499
|
fks_to_add = model_fks - existing_fks
|
494
500
|
|
501
|
+
renamed_fks_to_drop, renamed_fks_to_add = foreign_key_changes_due_to_column_renames(fks_to_drop, fks_to_add, to_rename)
|
502
|
+
|
503
|
+
drop_fks = (fks_to_drop - renamed_fks_to_drop).map do |fk|
|
504
|
+
::DeclareSchema::SchemaChange::ForeignKeyRemove.new(fk.child_table_name, fk.parent_table_name,
|
505
|
+
column_name: fk.foreign_key_name, name: fk.constraint_name)
|
506
|
+
end
|
507
|
+
|
508
|
+
add_fks = (fks_to_add - renamed_fks_to_add).map do |fk|
|
509
|
+
# next if fk.parent.constantize.abstract_class || fk.parent == fk.model.class_name
|
510
|
+
::DeclareSchema::SchemaChange::ForeignKeyAdd.new(fk.child_table_name, fk.parent_table_name,
|
511
|
+
column_name: fk.foreign_key_name, name: fk.constraint_name)
|
512
|
+
end
|
513
|
+
|
514
|
+
[drop_fks + add_fks]
|
515
|
+
end
|
516
|
+
|
517
|
+
def foreign_key_changes_due_to_column_renames(fks_to_drop, fks_to_add, to_rename)
|
495
518
|
renamed_fks_to_drop = []
|
496
519
|
renamed_fks_to_add = []
|
497
520
|
|
@@ -499,6 +522,7 @@ module Generators
|
|
499
522
|
fks_to_add.each { |fk_to_add|
|
500
523
|
if fk_to_add.child_table_name == fk_to_drop.child_table_name &&
|
501
524
|
fk_to_add.parent_table_name == fk_to_drop.parent_table_name &&
|
525
|
+
!fk_to_add.foreign_key.nil? &&
|
502
526
|
fk_to_add.foreign_key == to_rename[fk_to_drop.foreign_key]
|
503
527
|
|
504
528
|
renamed_fks_to_drop.append(fk_to_drop)
|
@@ -507,18 +531,7 @@ module Generators
|
|
507
531
|
}
|
508
532
|
}
|
509
533
|
|
510
|
-
|
511
|
-
::DeclareSchema::SchemaChange::ForeignKeyRemove.new(fk.child_table_name, fk.parent_table_name,
|
512
|
-
column_name: fk.foreign_key_name, name: fk.constraint_name)
|
513
|
-
end
|
514
|
-
|
515
|
-
add_fks = (fks_to_add - renamed_fks_to_add).map do |fk|
|
516
|
-
# next if fk.parent.constantize.abstract_class || fk.parent == fk.model.class_name
|
517
|
-
::DeclareSchema::SchemaChange::ForeignKeyAdd.new(fk.child_table_name, fk.parent_table_name,
|
518
|
-
column_name: fk.foreign_key_name, name: fk.constraint_name)
|
519
|
-
end
|
520
|
-
|
521
|
-
[drop_fks + add_fks]
|
534
|
+
[renamed_fks_to_drop, renamed_fks_to_add]
|
522
535
|
end
|
523
536
|
|
524
537
|
def fk_field_options(model, field_name)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: declare_schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.3.pre.ga.
|
4
|
+
version: 1.2.3.pre.ga.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Invoca Development adapted from hobo_fields by Tom Locke
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-03-
|
11
|
+
date: 2023-03-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|