import { HybridNitroSQLite } from '../nitro' import type { QueryResult, QueryResultRow, SQLiteQueryParams } from '../types' import NitroSQLiteError from '../NitroSQLiteError' import type { NitroSQLiteQueryResult } from '../specs/NitroSQLiteQueryResult.nitro' export function execute( dbName: string, query: string, params?: SQLiteQueryParams, ): QueryResult { try { const nativeResult = HybridNitroSQLite.execute(dbName, query, params) return buildJSQueryResult(nativeResult) } catch (error) { throw NitroSQLiteError.fromError(error) } } export async function executeAsync( dbName: string, query: string, params?: SQLiteQueryParams, ): Promise> { try { const nativeResult = await HybridNitroSQLite.executeAsync( dbName, query, params, ) return buildJSQueryResult(nativeResult) } catch (error) { throw NitroSQLiteError.fromError(error) } } function buildJSQueryResult( result: NitroSQLiteQueryResult, ): QueryResult { const resultWithRows = result as QueryResult resultWithRows.rows = { _array: result.results as Row[], length: result.results.length, item: (idx: number) => result.results[idx] as Row | undefined, } return resultWithRows // return Object.assign(result, { // rows: { // _array: result.results, // length: result.results.length, // item: (idx: number) => result.results[idx], // }, // }) }