react-native-nitro-sqlite
Version:
Fast SQLite library for React Native built using Nitro Modules
49 lines (43 loc) • 1.39 kB
text/typescript
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<Row extends QueryResultRow = never>(
dbName: string,
query: string,
params?: SQLiteQueryParams,
): QueryResult<Row> {
try {
const nativeResult = HybridNitroSQLite.execute(dbName, query, params)
return buildJSQueryResult<Row>(nativeResult)
} catch (error) {
throw NitroSQLiteError.fromError(error)
}
}
export async function executeAsync<Row extends QueryResultRow = never>(
dbName: string,
query: string,
params?: SQLiteQueryParams,
): Promise<QueryResult<Row>> {
try {
const nativeResult = await HybridNitroSQLite.executeAsync(
dbName,
query,
params,
)
return buildJSQueryResult<Row>(nativeResult)
} catch (error) {
throw NitroSQLiteError.fromError(error)
}
}
function buildJSQueryResult<Row extends QueryResultRow = never>(
result: NitroSQLiteQueryResult,
): QueryResult<Row> {
const resultWithRows = result as QueryResult<Row>
resultWithRows.rows = {
_array: result.results as Row[],
length: result.results.length,
item: (idx: number) => result.results[idx] as Row | undefined,
}
return resultWithRows
}