listIndexes method

  1. @override
Future<List<SchemaIndex>> listIndexes(
  1. String table, {
  2. String? schema,
})
inherited

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;
}