introspect method
SchemaDocument
introspect(
- Database database
Reads schema metadata from database.
Implementation
SchemaDocument introspect(sqlite.Database database) {
final tableRows = database.select('''
SELECT name, sql
FROM sqlite_master
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY name ASC
''');
final explicitRows = <sqlite.Row>[];
final implicitRelationTables = <String>[];
for (final row in tableRows) {
final tableName = row['name'] as String;
if (isImplicitManyToManyTableName(tableName)) {
implicitRelationTables.add(tableName);
continue;
}
explicitRows.add(row);
}
final models = explicitRows
.map(
(row) => _introspectModel(
database,
row['name'] as String,
row['sql'] as String? ?? '',
),
)
.toList(growable: false);
final modelsWithImplicitRelations = _attachImplicitManyToManyRelations(
models,
implicitRelationTables,
);
return SchemaDocument(
models: List<ModelDefinition>.unmodifiable(modelsWithImplicitRelations),
);
}