SchemeMigrationPlan constructor
SchemeMigrationPlan(
- StdMap stored,
- StdMap actual,
- Scheme scheme
Implementation
SchemeMigrationPlan(StdMap stored, StdMap actual, Scheme scheme) {
storedRevision = stored[Scheme.kRevision] as int?;
actualRevision = actual[Scheme.kRevision]! as int;
storedKindPath = stored[Scheme.kKindPath] as String?;
actualKindPath = actual[Scheme.kKindPath]! as String;
storedVirtualColumns = getElementsMap(stored, Scheme.kVirtualColumns);
actualVirtualColumns = getElementsMap(actual, Scheme.kVirtualColumns);
storedPartialIndexes = getElementsMap(stored, Scheme.kPartialIndexes);
actualPartialIndexes = getElementsMap(actual, Scheme.kPartialIndexes);
storedSearchIndexes = getElementsMap(stored, Scheme.kSearchIndexes);
actualSearchIndexes = getElementsMap(actual, Scheme.kSearchIndexes);
performRevisionUpgrade =
storedRevision != actualRevision && storedRevision != null;
if (storedKindPath != actualKindPath) {
dropKindColumnAndIndex = storedKindPath != null;
makeKindColumnAndIndex = true;
dropVirtualColumns.addAll(storedVirtualColumns.keys);
makeVirtualColumns.addAll(actualVirtualColumns.keys);
dropPartialIndexes.addAll(storedPartialIndexes.keys);
makePartialIndexes.addAll(actualPartialIndexes.keys);
dropSearchIndexes.addAll(storedSearchIndexes.keys);
makeSearchIndexes.addAll(actualSearchIndexes.keys);
return;
}
dropKindColumnAndIndex = false;
makeKindColumnAndIndex = false;
sortElementsMigration(
storedVirtualColumns,
actualVirtualColumns,
dropVirtualColumns,
makeVirtualColumns,
);
sortElementsMigration(
storedPartialIndexes,
actualPartialIndexes,
dropPartialIndexes,
makePartialIndexes,
);
sortElementsMigration(
storedSearchIndexes,
actualSearchIndexes,
dropSearchIndexes,
makeSearchIndexes,
);
var updatedColumns = dropVirtualColumns.intersection(makeVirtualColumns);
var retainedIndexes = actualPartialIndexes.keys.toSet().difference(
makePartialIndexes,
);
for (var retainedIndex in retainedIndexes) {
var columns = scheme.getPartialIndex(retainedIndex).columns;
if (columns.any((var c) => updatedColumns.contains(c.name))) {
dropPartialIndexes.add(retainedIndex);
makePartialIndexes.add(retainedIndex);
}
}
}