fromRawRows static method
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
);
}