in public/dexie.js [1910:1961]
function getSchemaDiff(oldSchema, newSchema) {
var diff = {
del: [],
add: [],
change: [], // Array of {name: tableName, recreate: newDefinition, del: delIndexNames, add: newIndexDefs, change: changedIndexDefs}
};
for (var table in oldSchema) {
if (!newSchema[table]) diff.del.push(table);
}
for (table in newSchema) {
var oldDef = oldSchema[table],
newDef = newSchema[table];
if (!oldDef) {
diff.add.push([table, newDef]);
} else {
var change = {
name: table,
def: newDef,
recreate: false,
del: [],
add: [],
change: [],
};
if (oldDef.primKey.src !== newDef.primKey.src) {
// Primary key has changed. Remove and re-add table.
change.recreate = true;
diff.change.push(change);
} else {
// Same primary key. Just find out what differs:
var oldIndexes = oldDef.idxByName;
var newIndexes = newDef.idxByName;
for (var idxName in oldIndexes) {
if (!newIndexes[idxName]) change.del.push(idxName);
}
for (idxName in newIndexes) {
var oldIdx = oldIndexes[idxName],
newIdx = newIndexes[idxName];
if (!oldIdx) change.add.push(newIdx);
else if (oldIdx.src !== newIdx.src) change.change.push(newIdx);
}
if (
change.del.length > 0 ||
change.add.length > 0 ||
change.change.length > 0
) {
diff.change.push(change);
}
}
}
}
return diff;
}