SchemeMigrationPlan constructor

SchemeMigrationPlan(
  1. StdMap stored,
  2. StdMap actual,
  3. 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);
    }
  }
}