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

Function compareIndexes

backend/plugin/schema/differ.go:746–784  ·  view source on GitHub ↗

compareIndexes compares indexes between two tables.

(engine storepb.Engine, oldTable, newTable *model.TableMetadata)

Source from the content-addressed store, hash-verified

744
745// compareIndexes compares indexes between two tables.
746func compareIndexes(engine storepb.Engine, oldTable, newTable *model.TableMetadata) []*IndexDiff {
747 var changes []*IndexDiff
748
749 oldIndexes := oldTable.ListIndexes()
750 newIndexes := newTable.ListIndexes()
751
752 // Check for dropped indexes
753 for _, oldIdx := range oldIndexes {
754 if newTable.GetIndex(oldIdx.GetProto().Name) == nil {
755 changes = append(changes, &IndexDiff{
756 Action: MetadataDiffActionDrop,
757 OldIndex: oldIdx.GetProto(),
758 })
759 }
760 }
761
762 // Check for new and modified indexes
763 for _, newIdx := range newIndexes {
764 oldIdx := oldTable.GetIndex(newIdx.GetProto().Name)
765 if oldIdx == nil {
766 changes = append(changes, &IndexDiff{
767 Action: MetadataDiffActionCreate,
768 NewIndex: newIdx.GetProto(),
769 })
770 } else if !indexesEqual(engine, oldIdx.GetProto(), newIdx.GetProto()) {
771 // Drop the old index and recreate the new one instead of altering
772 changes = append(changes, &IndexDiff{
773 Action: MetadataDiffActionDrop,
774 OldIndex: oldIdx.GetProto(),
775 })
776 changes = append(changes, &IndexDiff{
777 Action: MetadataDiffActionCreate,
778 NewIndex: newIdx.GetProto(),
779 })
780 }
781 }
782
783 return changes
784}
785
786// indexesEqual checks if two indexes are equal.
787func indexesEqual(engine storepb.Engine, idx1, idx2 *storepb.IndexMetadata) bool {

Callers 1

compareTableDetailsFunction · 0.70

Calls 4

indexesEqualFunction · 0.85
ListIndexesMethod · 0.80
GetIndexMethod · 0.45
GetProtoMethod · 0.45

Tested by

no test coverage detected