Add support for both wasm/ffi version of sqlite3

This commit is contained in:
2024-01-21 20:35:36 +08:00
parent ae43c53299
commit 4d886cb85a
12 changed files with 117 additions and 14 deletions

36
utils/db_ffi.ts Normal file
View File

@@ -0,0 +1,36 @@
import { Database, DatabaseOpenOptions } from "sqlite3/mod.ts";
import { QueryParameterSet, Row, RowObject } from "./db_interface.ts";
export class DbFfi {
db;
constructor(path: string, options?: DatabaseOpenOptions) {
this.db = new Database(path, options);
}
close(_force?: boolean) {
this.db.close();
}
execute(sql: string) {
this.db.exec(sql);
}
query<R extends Row = Row>(
sql: string,
params?: QueryParameterSet,
): Array<R> {
return this.db.prepare(sql).values(params);
}
queryEntries<O extends RowObject = RowObject>(
sql: string,
params?: QueryParameterSet,
): Array<O> {
return this.db.prepare(sql).all(params);
}
transaction<V>(fn: () => V): V {
const re = this.db.transaction(fn);
return re();
}
}

28
utils/db_interface.ts Normal file
View File

@@ -0,0 +1,28 @@
export type Row = Array<unknown>;
export type RowObject = Record<string, unknown>;
export type QueryParameter =
| boolean
| number
| bigint
| string
| null
| undefined
| Date
| Uint8Array;
export type QueryParameterSet =
| Record<string, QueryParameter>
| Array<QueryParameter>;
export interface Db {
close(force?: boolean): void;
execute(sql: string): void;
query<R extends Row = Row>(
sql: string,
params?: QueryParameterSet,
): Array<R>;
queryEntries<O extends RowObject = RowObject>(
sql: string,
params?: QueryParameterSet,
): Array<O>;
transaction<V>(fn: () => V): V;
}

7
utils/db_wasm.ts Normal file
View File

@@ -0,0 +1,7 @@
import { DB, SqliteOptions } from "sqlite/mod.ts";
export class DbWasm extends DB {
constructor(dbPath: string, options?: SqliteOptions) {
super(dbPath, options);
}
}