From ecc9db86dd4dd7c3d19be30535836ef7a4da2e45 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 6 Aug 2023 23:30:46 -0500 Subject: [PATCH] Import kysely-deno-sqlite as a dep --- lib/kysely-deno-sqlite/deps.ts | 17 --- lib/kysely-deno-sqlite/mod.ts | 4 - .../src/deno-sqlite-dialect-config.ts | 7 -- .../src/deno-sqlite-dialect.ts | 41 ------- .../src/deno-sqlite-driver.ts | 106 ------------------ src/db/builder.ts | 3 +- src/deps.ts | 3 +- 7 files changed, 3 insertions(+), 178 deletions(-) delete mode 100644 lib/kysely-deno-sqlite/deps.ts delete mode 100644 lib/kysely-deno-sqlite/mod.ts delete mode 100644 lib/kysely-deno-sqlite/src/deno-sqlite-dialect-config.ts delete mode 100644 lib/kysely-deno-sqlite/src/deno-sqlite-dialect.ts delete mode 100644 lib/kysely-deno-sqlite/src/deno-sqlite-driver.ts diff --git a/lib/kysely-deno-sqlite/deps.ts b/lib/kysely-deno-sqlite/deps.ts deleted file mode 100644 index 71a9fa88..00000000 --- a/lib/kysely-deno-sqlite/deps.ts +++ /dev/null @@ -1,17 +0,0 @@ -export { - CompiledQuery, - type DatabaseConnection, - type DatabaseIntrospector, - type Dialect, - type DialectAdapter, - type Driver, - Kysely, - type QueryCompiler, - type QueryResult, - SqliteAdapter, - type SqliteDialectConfig, - SqliteIntrospector, - SqliteQueryCompiler, -} from 'npm:kysely@^0.25.0'; - -export type { DB as DenoSqlite } from 'https://deno.land/x/sqlite@v3.7.3/mod.ts'; diff --git a/lib/kysely-deno-sqlite/mod.ts b/lib/kysely-deno-sqlite/mod.ts deleted file mode 100644 index a0e19980..00000000 --- a/lib/kysely-deno-sqlite/mod.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { DenoSqliteDialect } from './src/deno-sqlite-dialect.ts'; -export { DenoSqliteDriver } from './src/deno-sqlite-driver.ts'; - -export type { DenoSqliteDialectConfig } from './src/deno-sqlite-dialect-config.ts'; diff --git a/lib/kysely-deno-sqlite/src/deno-sqlite-dialect-config.ts b/lib/kysely-deno-sqlite/src/deno-sqlite-dialect-config.ts deleted file mode 100644 index 12bba773..00000000 --- a/lib/kysely-deno-sqlite/src/deno-sqlite-dialect-config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { type DenoSqlite, type SqliteDialectConfig } from '../deps.ts'; - -interface DenoSqliteDialectConfig extends Omit { - database: DenoSqlite | (() => Promise); -} - -export type { DenoSqliteDialectConfig }; diff --git a/lib/kysely-deno-sqlite/src/deno-sqlite-dialect.ts b/lib/kysely-deno-sqlite/src/deno-sqlite-dialect.ts deleted file mode 100644 index f3aa5175..00000000 --- a/lib/kysely-deno-sqlite/src/deno-sqlite-dialect.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { - type DatabaseIntrospector, - type Dialect, - type DialectAdapter, - type Driver, - Kysely, - type QueryCompiler, - SqliteAdapter, - SqliteIntrospector, - SqliteQueryCompiler, -} from '../deps.ts'; - -import { DenoSqliteDriver } from './deno-sqlite-driver.ts'; - -import type { DenoSqliteDialectConfig } from './deno-sqlite-dialect-config.ts'; - -class DenoSqliteDialect implements Dialect { - readonly #config: DenoSqliteDialectConfig; - - constructor(config: DenoSqliteDialectConfig) { - this.#config = Object.freeze({ ...config }); - } - - createDriver(): Driver { - return new DenoSqliteDriver(this.#config); - } - - createQueryCompiler(): QueryCompiler { - return new SqliteQueryCompiler(); - } - - createAdapter(): DialectAdapter { - return new SqliteAdapter(); - } - - createIntrospector(db: Kysely): DatabaseIntrospector { - return new SqliteIntrospector(db); - } -} - -export { DenoSqliteDialect }; diff --git a/lib/kysely-deno-sqlite/src/deno-sqlite-driver.ts b/lib/kysely-deno-sqlite/src/deno-sqlite-driver.ts deleted file mode 100644 index adf49ab7..00000000 --- a/lib/kysely-deno-sqlite/src/deno-sqlite-driver.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { CompiledQuery, type DatabaseConnection, type DenoSqlite, type Driver, type QueryResult } from '../deps.ts'; - -import type { DenoSqliteDialectConfig } from './deno-sqlite-dialect-config.ts'; - -class DenoSqliteDriver implements Driver { - readonly #config: DenoSqliteDialectConfig; - readonly #connectionMutex = new ConnectionMutex(); - - #db?: DenoSqlite; - #connection?: DatabaseConnection; - - constructor(config: DenoSqliteDialectConfig) { - this.#config = Object.freeze({ ...config }); - } - - async init(): Promise { - this.#db = typeof this.#config.database === 'function' ? await this.#config.database() : this.#config.database; - - this.#connection = new DenoSqliteConnection(this.#db); - - if (this.#config.onCreateConnection) { - await this.#config.onCreateConnection(this.#connection); - } - } - - async acquireConnection(): Promise { - // SQLite only has one single connection. We use a mutex here to wait - // until the single connection has been released. - await this.#connectionMutex.lock(); - return this.#connection!; - } - - async beginTransaction(connection: DatabaseConnection): Promise { - await connection.executeQuery(CompiledQuery.raw('begin')); - } - - async commitTransaction(connection: DatabaseConnection): Promise { - await connection.executeQuery(CompiledQuery.raw('commit')); - } - - async rollbackTransaction(connection: DatabaseConnection): Promise { - await connection.executeQuery(CompiledQuery.raw('rollback')); - } - - // deno-lint-ignore require-await - async releaseConnection(): Promise { - this.#connectionMutex.unlock(); - } - - // deno-lint-ignore require-await - async destroy(): Promise { - this.#db?.close(); - } -} - -class DenoSqliteConnection implements DatabaseConnection { - readonly #db: DenoSqlite; - - constructor(db: DenoSqlite) { - this.#db = db; - } - - executeQuery({ sql, parameters }: CompiledQuery): Promise> { - // @ts-expect-error `parameters` types are incompatible, but they should match in reality. - const rows = this.#db.queryEntries(sql, parameters); - - const { changes, lastInsertRowId } = this.#db; - - return Promise.resolve({ - rows: rows as O[], - numAffectedRows: BigInt(changes), - insertId: BigInt(lastInsertRowId), - }); - } - - // deno-lint-ignore require-yield - async *streamQuery(): AsyncIterableIterator> { - throw new Error('Sqlite driver doesn\'t support streaming'); - } -} - -class ConnectionMutex { - #promise?: Promise; - #resolve?: () => void; - - async lock(): Promise { - while (this.#promise) { - await this.#promise; - } - - this.#promise = new Promise((resolve) => { - this.#resolve = resolve; - }); - } - - unlock(): void { - const resolve = this.#resolve; - - this.#promise = undefined; - this.#resolve = undefined; - - resolve?.(); - } -} - -export { DenoSqliteDriver }; diff --git a/src/db/builder.ts b/src/db/builder.ts index 8a029fb4..0dd2c81a 100644 --- a/src/db/builder.ts +++ b/src/db/builder.ts @@ -1,5 +1,4 @@ -import { Kysely, Sqlite } from '@/deps.ts'; -import { DenoSqliteDialect } from '../../lib/kysely-deno-sqlite/mod.ts'; +import { DenoSqliteDialect, Kysely, Sqlite } from '@/deps.ts'; interface Tables { events: EventsTable; diff --git a/src/deps.ts b/src/deps.ts index b721ec9a..f5a311dc 100644 --- a/src/deps.ts +++ b/src/deps.ts @@ -50,4 +50,5 @@ export * as secp from 'npm:@noble/secp256k1@^2.0.0'; export { LRUCache } from 'npm:lru-cache@^10.0.0'; export { DB as Sqlite } from 'https://deno.land/x/sqlite@v3.7.3/mod.ts'; export * as dotenv from 'https://deno.land/std@0.197.0/dotenv/mod.ts'; -export { DummyDriver, Kysely, SqliteAdapter, SqliteIntrospector, SqliteQueryCompiler } from 'npm:kysely@^0.25.0'; +export { Kysely } from 'npm:kysely@^0.25.0'; +export { DenoSqliteDialect } from 'https://gitlab.com/soapbox-pub/kysely-deno-sqlite/-/raw/76748303a45fac64a889cd2b9265c6c9b8ef2e8b/mod.ts';