executeQueryAsMaps method
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;
}