introspect method

SchemaDocument introspect(
  1. 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),
  );
}