Skip to content

Commit 01473c7

Browse files
philippthunsethboyles
authored andcommitted
Prevent ForeignKeyConstraintViolation during migration
- Reproduced reported issue by enhancing the unit test. - Fixed ForeignKeyConstraintViolation by re-ordering migration statements. Fixes issue #3803.
1 parent 0998bf8 commit 01473c7

File tree

2 files changed

+5
-1
lines changed

2 files changed

+5
-1
lines changed

db/migrations/20240115163000_add_delete_cascade_to_foreign_keys.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
ForeignKey.new(:build_labels, :fk_build_labels_resource_guid, :resource_guid, :builds, :guid),
99
ForeignKey.new(:build_annotations, :fk_build_annotations_resource_guid, :resource_guid, :builds, :guid),
1010
ForeignKey.new(:kpack_lifecycle_data, :fk_kpack_lifecycle_build_guid, :build_guid, :builds, :guid),
11-
ForeignKey.new(:buildpack_lifecycle_data, :fk_buildpack_lifecycle_build_guid, :build_guid, :builds, :guid, new_constraint: true),
1211
ForeignKey.new(:buildpack_lifecycle_buildpacks, :fk_blbuildpack_bldata_guid, :buildpack_lifecycle_data_guid, :buildpack_lifecycle_data, :guid),
12+
ForeignKey.new(:buildpack_lifecycle_data, :fk_buildpack_lifecycle_build_guid, :build_guid, :builds, :guid, new_constraint: true),
1313
ForeignKey.new(:task_labels, :fk_task_labels_resource_guid, :resource_guid, :tasks, :guid),
1414
ForeignKey.new(:task_annotations, :fk_task_annotations_resource_guid, :resource_guid, :tasks, :guid),
1515
ForeignKey.new(:revision_labels, :fk_revision_labels_resource_guid, :resource_guid, :revisions, :guid),

spec/migrations/20240115163000_add_delete_cascade_to_foreign_keys_spec.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,16 @@
2828
it 'deleted orphaned buildpack_lifecycle_data entries but kept valid ones' do
2929
db[:builds].insert(guid: 'build_guid')
3030
db[:buildpack_lifecycle_data].insert(guid: 'bld_guid', build_guid: 'build_guid')
31+
db[:buildpack_lifecycle_buildpacks].insert(guid: 'blb_guid', buildpack_lifecycle_data_guid: 'bld_guid')
3132
db[:buildpack_lifecycle_data].insert(guid: 'another_bld_guid', build_guid: 'not_exists')
33+
db[:buildpack_lifecycle_buildpacks].insert(guid: 'another_blb_guid', buildpack_lifecycle_data_guid: 'another_bld_guid')
3234

3335
Sequel::Migrator.run(db, migrations_path, target: current_migration_index, allow_missing_migration_files: true)
3436

3537
expect(db[:buildpack_lifecycle_data].where(guid: 'bld_guid').count).to eq(1)
38+
expect(db[:buildpack_lifecycle_buildpacks].where(guid: 'blb_guid').count).to eq(1)
3639
expect(db[:buildpack_lifecycle_data].where(guid: 'another_bld_guid').count).to eq(0)
40+
expect(db[:buildpack_lifecycle_buildpacks].where(guid: 'another_blb_guid').count).to eq(0)
3741
end
3842
end
3943
end

0 commit comments

Comments
 (0)