findFieldsReferencedTablesImpl method
Future<Map<String, TableFieldReference> >
findFieldsReferencedTablesImpl(
- DBMySqlConnectionWrapper connection,
- String table
override
Finds the foreign keys of table, with connection: the referenced
table (and field) of each referencing field, by the field name.
Implemented by the adapters that introspect their schema (see listTablesNamesImpl). Default: throws UnsupportedError.
Implementation
@override
Future<Map<String, TableFieldReference>> findFieldsReferencedTablesImpl(
DBMySqlConnectionWrapper connection,
String table,
) async {
var sql = findFieldsReferencedTablesSQL(databaseName, table);
var results = await connection.query(sql);
var referenceFields = results
.map((r) => r.toColumnMap())
.toList(growable: false);
var mapEntriesRet = referenceFields
.map((e) {
var sourceTable = e['TABLE_NAME'];
var sourceField = e['COLUMN_NAME'];
var targetTable = e['REFERENCED_TABLE_NAME'];
var targetField = e['REFERENCED_COLUMN_NAME'];
if (targetTable == null || targetField == null) return null;
var sourceFieldsTypesRet = getTableFieldsTypes(table);
var targetFieldsTypesRet = getTableFieldsTypes(targetTable);
return sourceFieldsTypesRet.resolveBoth(targetFieldsTypesRet, (
sourceFieldsTypes,
targetFieldsTypes,
) {
var sourceFieldType = sourceFieldsTypes?[sourceField] ?? String;
var targetFieldType = targetFieldsTypes?[targetField] ?? String;
var reference = TableFieldReference(
sourceTable,
sourceField,
sourceFieldType,
targetTable,
targetField,
targetFieldType,
);
return MapEntry<String, TableFieldReference>(
sourceField,
reference,
);
});
})
.nonNulls
.resolveAll();
return mapEntriesRet.resolveMapped((mapEntries) {
var map = Map<String, TableFieldReference>.fromEntries(mapEntries);
return map;
});
}