compareIndexes compares indexes between two tables.
(engine storepb.Engine, oldTable, newTable *model.TableMetadata)
| 744 | |
| 745 | // compareIndexes compares indexes between two tables. |
| 746 | func 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. |
| 787 | func indexesEqual(engine storepb.Engine, idx1, idx2 *storepb.IndexMetadata) bool { |
no test coverage detected