sqlocal
Version:
SQLocal makes it easy to run SQLite3 in the browser, backed by the origin private file system.
79 lines • 2.4 kB
JavaScript
import { CompiledQuery, SqliteAdapter, SqliteIntrospector, SqliteQueryCompiler, } from 'kysely';
import { SQLocal } from '../index.js';
export class SQLocalKysely extends SQLocal {
constructor() {
super(...arguments);
Object.defineProperty(this, "dialect", {
enumerable: true,
configurable: true,
writable: true,
value: {
createAdapter: () => new SqliteAdapter(),
createDriver: () => new SQLocalKyselyDriver(this),
createIntrospector: (db) => new SqliteIntrospector(db),
createQueryCompiler: () => new SqliteQueryCompiler(),
}
});
}
}
class SQLocalKyselyDriver {
constructor(client) {
Object.defineProperty(this, "client", {
enumerable: true,
configurable: true,
writable: true,
value: client
});
}
async init() { }
async acquireConnection() {
return new SQLocalKyselyConnection(this.client);
}
async releaseConnection() { }
async beginTransaction(connection) {
connection.transaction = await this.client.beginTransaction();
}
async commitTransaction(connection) {
await connection.transaction?.commit();
connection.transaction = null;
}
async rollbackTransaction(connection) {
await connection.transaction?.rollback();
connection.transaction = null;
}
async destroy() {
await this.client.destroy();
}
}
class SQLocalKyselyConnection {
constructor(client) {
Object.defineProperty(this, "client", {
enumerable: true,
configurable: true,
writable: true,
value: client
});
Object.defineProperty(this, "transaction", {
enumerable: true,
configurable: true,
writable: true,
value: null
});
}
async executeQuery(query) {
let rows;
if (this.transaction === null) {
rows = await this.client.sql(query.sql, ...query.parameters);
}
else {
rows = await this.transaction.query(query);
}
return {
rows: rows,
};
}
async *streamQuery() {
throw new Error('SQLite3 does not support streaming.');
}
}
//# sourceMappingURL=client.js.map