mirror of
https://gitlab.com/soapbox-pub/ditto.git
synced 2025-12-06 11:29:46 +00:00
51 lines
1.3 KiB
TypeScript
51 lines
1.3 KiB
TypeScript
import { type DenoSqlite, type SqliteDatabase, SqliteDriver, type SqliteStatement } from '../deps.ts';
|
|
|
|
import type { DenoSqliteDialectConfig } from './deno-sqlite-dialect-config.ts';
|
|
|
|
class DenoSqliteDriver extends SqliteDriver {
|
|
constructor(config: DenoSqliteDialectConfig) {
|
|
super({
|
|
...config,
|
|
database: async () =>
|
|
new DenoSqliteDatabase(
|
|
typeof config.database === 'function' ? await config.database() : config.database,
|
|
),
|
|
});
|
|
}
|
|
}
|
|
|
|
/** HACK: This is an adapter class. */
|
|
class DenoSqliteDatabase implements SqliteDatabase {
|
|
#db: DenoSqlite;
|
|
|
|
constructor(db: DenoSqlite) {
|
|
this.#db = db;
|
|
}
|
|
|
|
close(): void {
|
|
this.#db.close();
|
|
}
|
|
|
|
prepare(sql: string): SqliteStatement {
|
|
const query = this.#db.prepareQuery(sql);
|
|
return {
|
|
// HACK: implement an actual driver to fix this.
|
|
reader: true,
|
|
all: (parameters: ReadonlyArray<unknown>) => {
|
|
const result = query.allEntries(parameters as any);
|
|
query.finalize();
|
|
return result;
|
|
},
|
|
run: (parameters: ReadonlyArray<unknown>) => {
|
|
query.execute(parameters as any);
|
|
query.finalize();
|
|
return {
|
|
changes: this.#db.changes,
|
|
lastInsertRowid: this.#db.lastInsertRowId,
|
|
};
|
|
},
|
|
};
|
|
}
|
|
}
|
|
|
|
export { DenoSqliteDriver };
|