queryRaw method
Execute a raw SQL query and return results
Implementation
@override
Future<SqlResultSet> queryRaw(SqlQuery query) async {
try {
// Convert PostgreSQL-style placeholders ($1, $2) to SQLite-style (?, ?)
final sqliteQuery = _convertPlaceholders(query.sql);
// Execute query
final List<Map<String, dynamic>> result = await _database.rawQuery(
sqliteQuery,
query.args,
);
if (result.isEmpty) {
return const SqlResultSet(
columnNames: [],
columnTypes: [],
rows: [],
);
}
// Extract column names and infer types
final columnNames = result.first.keys.toList();
final columnTypes = _inferColumnTypes(result.first, query.argTypes);
// Convert to row format
final rows = result.map((row) {
return columnNames.map((col) => _convertValue(row[col])).toList();
}).toList();
return SqlResultSet(
columnNames: columnNames,
columnTypes: columnTypes,
rows: rows,
);
} catch (e) {
throw AdapterError(
'Failed to execute query: ${e.toString()}',
originalError: e,
);
}
}