fromRawRows static method

SupabaseForeignKeyConstraint fromRawRows(
  1. String name,
  2. List<List> rows,
  3. String nameConverter(
    1. String
    ), {
  4. String? joinTableName,
})

Creates a SupabaseForeignKeyConstraint from a list of raw SQL query result rows.

All rows must belong to the same foreign key constraint, identified by name. Each row typically represents one column pair in a composite foreign key. The nameConverter function transforms database identifiers to Dart conventions. The optional joinTableName is used for many-to-many relationships.

Implementation

static SupabaseForeignKeyConstraint fromRawRows(
  String name,
  List<List<dynamic>> rows,
  String Function(String) nameConverter, {
  String? joinTableName,
}) {
  if (rows.isEmpty) {
    throw ArgumentError(
      'Cannot create ForeignKeyConstraint from empty rows.',
    );
  }
  final firstRow = rows.first;
  final originalLocalColumns =
      rows.map<String>((row) => row[1] as String).toList();
  final originalForeignTblName = firstRow[3] as String;
  final originalForeignCols =
      rows.map<String>((row) => row[4] as String).toList();

  return SupabaseForeignKeyConstraint(
    constraintName: name,
    columns: originalLocalColumns.map(nameConverter).toList(),
    originalColumns: originalLocalColumns,
    localColumns: originalLocalColumns.map(_makeSafeDartIdentifier).toList(),
    foreignTableSchema: firstRow[2] as String,
    foreignTableName: nameConverter(originalForeignTblName),
    originalForeignTableName: originalForeignTblName,
    localForeignTableName: _makeSafeDartClassName(originalForeignTblName),
    foreignColumns: originalForeignCols.map(nameConverter).toList(),
    originalForeignColumns: originalForeignCols,
    localForeignColumns:
        originalForeignCols.map(_makeSafeDartIdentifier).toList(),
    updateRule: firstRow[5] as String,
    deleteRule: firstRow[6] as String,
    matchOption: firstRow[7] as String,
    isDeferrable: (firstRow[8] as String? ?? 'NO') == 'YES',
    initiallyDeferred: (firstRow[9] as String? ?? 'NO') == 'YES',
    joinTableName: joinTableName, // Set the join table name
  );
}