verifyDatabaseIntegrity static method
Returns true if the database structure is up to date. If not, it will
print a warning using writeWarning.
Implementation
static Future<bool> verifyDatabaseIntegrity(DatabaseSession session) async {
var warnings = <String>[];
var liveDatabase = await session.db.analyzer.analyze();
var targetTables = session.db.serializationManager
.getTargetTableDefinitions();
for (var table in targetTables) {
var liveTable = liveDatabase.findTableNamed(table.name);
if (liveTable == null) {
warnings.add('Table "${table.name}" is missing.');
continue;
}
var mismatches = liveTable.like(table).asStringList();
if (mismatches.isNotEmpty) {
warnings.add(
'Table "${table.name}" is not like the target database:\n'
' - ${mismatches.join('\n - ')}',
);
continue;
}
}
if (warnings.isNotEmpty) {
writeError('WARNING: The database does not match the target database:');
for (var warning in warnings) {
writeError(' - $warning');
}
writeError(
'Hint: Did you forget to run `serverpod generate`, apply the migrations '
'(--apply-migrations), or run a repair migration (--apply-repair-migration)?',
);
}
return warnings.isEmpty;
}