executeQueryAsMaps method

  1. @override
Future<List<Map<String, dynamic>>> executeQueryAsMaps(
  1. JsonQuery query
)
override

Execute a query and deserialize results to maps.

If the query includes relations via include, results are automatically deserialized into nested structures using the RelationDeserializer.

Implementation

@override
Future<List<Map<String, dynamic>>> executeQueryAsMaps(JsonQuery query) async {
  // Compile to get relation metadata
  final sqlQuery = compiler.compile(query);

  // Execute the query
  final result = await _executeWithLogging(
    sql: sqlQuery.sql,
    parameters: sqlQuery.args,
    model: query.modelName,
    operation: query.action,
    execute: () => adapter.queryRaw(sqlQuery),
  );

  // Convert to maps (flat results)
  final flatMaps = _resultSetToMaps(result);

  // Check if we need to deserialize relations
  if (sqlQuery.hasRelations &&
      sqlQuery.relationMetadata is CompiledRelations) {
    final compiledRelations = sqlQuery.relationMetadata as CompiledRelations;

    // Use relation deserializer to nest flat JOIN results
    final deserializer = RelationDeserializer(
      schema: compiler.schema ?? schemaRegistry,
    );

    return deserializer.deserialize(
      rows: flatMaps,
      baseModel: query.modelName,
      columnAliases: compiledRelations.columnAliases,
      includedRelations: compiledRelations.includedRelations,
    );
  }

  return flatMaps;
}