getTableSchemeImpl method

  1. @override
FutureOr<TableScheme?> getTableSchemeImpl(
  1. String table,
  2. TableRelationshipReference? relationship, {
  3. Object? contextID,
})
override

Implementation that returns a TableScheme for table.

  • contextID should be Expando compatible. It informs that other calls to getTableSchemeImpl are in the same context and could have shared internal caches for the same contextID instance.

Implementation

@override
FutureOr<TableScheme?> getTableSchemeImpl(
  String table,
  TableRelationshipReference? relationship, {
  Object? contextID,
}) => executeWithPool((connection) {
  var columns = _tableInfo(connection, table);
  if (columns.isEmpty) return null;

  var idFieldName = _findIDField(table, columns);

  var fieldsTypes = _fieldsTypes(columns);

  notifyTableFieldTypes(table, fieldsTypes);

  var fieldsReferencedTablesRet = _findFieldsReferencedTables(
    connection,
    table,
    contextID: contextID,
  );

  return fieldsReferencedTablesRet.resolveMapped((fieldsReferencedTables) {
    var relationshipTablesRet = _findRelationshipTables(
      connection,
      table,
      contextID: contextID,
    );

    return relationshipTablesRet.resolveMapped((relationshipTables) {
      var tableScheme = TableScheme(
        table,
        relationship: relationship != null,
        idFieldName: idFieldName,
        fieldsTypes: fieldsTypes,
        fieldsReferencedTables: fieldsReferencedTables,
        relationshipTables: relationshipTables,
      );

      _log.info('$tableScheme');

      return tableScheme;
    });
  });
});