MCPcopy Create free account
hub / github.com/bytebase/bytebase / compareForeignKeys

Function compareForeignKeys

backend/plugin/schema/differ.go:1018–1063  ·  view source on GitHub ↗

compareForeignKeys compares two lists of foreign keys.

(oldFKs, newFKs []*storepb.ForeignKeyMetadata)

Source from the content-addressed store, hash-verified

1016
1017// compareForeignKeys compares two lists of foreign keys.
1018func compareForeignKeys(oldFKs, newFKs []*storepb.ForeignKeyMetadata) []*ForeignKeyDiff {
1019 var changes []*ForeignKeyDiff
1020
1021 oldFKMap := make(map[string]*storepb.ForeignKeyMetadata)
1022 for _, fk := range oldFKs {
1023 oldFKMap[fk.Name] = fk
1024 }
1025
1026 newFKMap := make(map[string]*storepb.ForeignKeyMetadata)
1027 for _, fk := range newFKs {
1028 newFKMap[fk.Name] = fk
1029 }
1030
1031 // Check for dropped foreign keys
1032 for fkName, oldFK := range oldFKMap {
1033 if _, exists := newFKMap[fkName]; !exists {
1034 changes = append(changes, &ForeignKeyDiff{
1035 Action: MetadataDiffActionDrop,
1036 OldForeignKey: oldFK,
1037 })
1038 }
1039 }
1040
1041 // Check for new and modified foreign keys
1042 for fkName, newFK := range newFKMap {
1043 oldFK, exists := oldFKMap[fkName]
1044 if !exists {
1045 changes = append(changes, &ForeignKeyDiff{
1046 Action: MetadataDiffActionCreate,
1047 NewForeignKey: newFK,
1048 })
1049 } else if !foreignKeysEqual(oldFK, newFK) {
1050 // Drop the old FK and recreate the new one instead of altering
1051 changes = append(changes, &ForeignKeyDiff{
1052 Action: MetadataDiffActionDrop,
1053 OldForeignKey: oldFK,
1054 })
1055 changes = append(changes, &ForeignKeyDiff{
1056 Action: MetadataDiffActionCreate,
1057 NewForeignKey: newFK,
1058 })
1059 }
1060 }
1061
1062 return changes
1063}
1064
1065// foreignKeysEqual checks if two foreign keys are equal.
1066func foreignKeysEqual(fk1, fk2 *storepb.ForeignKeyMetadata) bool {

Callers 1

compareTableDetailsFunction · 0.70

Calls 1

foreignKeysEqualFunction · 0.85

Tested by

no test coverage detected