listIndexes method
Lists indexes for table within an optional schema.
Implementation
@override
Future<List<SchemaIndex>> listIndexes(String table, {String? schema}) async {
final sql = _schemaCompiler.dialect.compileIndexes(table, schema: schema);
if (sql == null) {
throw UnsupportedError('$driverName should support index listing.');
}
final rows = await queryRaw(
sql,
_profile.schemaQueryParameters('indexes', table, schema),
);
final indexes = <SchemaIndex>[];
for (final row in rows) {
final name = (row['name'] ?? row['index_name']) as String;
if (_profile.ignoreSystemTables && name.startsWith('sqlite_')) {
continue;
}
final columns = _splitColumns(row['columns']).isNotEmpty
? _splitColumns(row['columns'])
: await _indexColumns(name, schema: schema);
final partialFlag = row['partial'];
final partial = switch (partialFlag) {
num value => value != 0,
bool value => value,
_ => false,
};
final whereClause = partial
? await _indexWhereClause(name, schema: schema)
: null;
final uniqueFlag = row['unique'];
final unique = switch (uniqueFlag) {
num value => value != 0,
bool value => value,
_ => false,
};
final primaryFlag = row['primary'];
final primary = switch (primaryFlag) {
num value => value != 0,
bool value => value,
_ => false,
};
indexes.add(
SchemaIndex(
name: name,
columns: columns,
schema: _exposedSchema(
_schemaOrDefault((row['schema'] ?? schema) as String?),
),
tableName: (row['table_name'] as String?) ?? table,
unique: unique,
primary: primary,
whereClause: (row['where_clause'] as String?) ?? whereClause,
method: row['method'] as String?,
),
);
}
return indexes;
}