queryRaw method

  1. @override
Future<SqlResultSet> queryRaw(
  1. SqlQuery query
)
override

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,
    );
  }
}