drizzle-orm 0.30.2 → 0.30.3-bf39e45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/aws-data-api/pg/session.cjs +10 -3
- package/aws-data-api/pg/session.cjs.map +1 -1
- package/aws-data-api/pg/session.d.cts +3 -2
- package/aws-data-api/pg/session.d.ts +3 -2
- package/aws-data-api/pg/session.js +10 -3
- package/aws-data-api/pg/session.js.map +1 -1
- package/better-sqlite3/session.cjs +16 -3
- package/better-sqlite3/session.cjs.map +1 -1
- package/better-sqlite3/session.d.cts +3 -2
- package/better-sqlite3/session.d.ts +3 -2
- package/better-sqlite3/session.js +16 -3
- package/better-sqlite3/session.js.map +1 -1
- package/bun-sqlite/session.cjs +16 -3
- package/bun-sqlite/session.cjs.map +1 -1
- package/bun-sqlite/session.d.cts +3 -2
- package/bun-sqlite/session.d.ts +3 -2
- package/bun-sqlite/session.js +16 -3
- package/bun-sqlite/session.js.map +1 -1
- package/d1/session.cjs +16 -4
- package/d1/session.cjs.map +1 -1
- package/d1/session.d.cts +3 -2
- package/d1/session.d.ts +3 -2
- package/d1/session.js +16 -4
- package/d1/session.js.map +1 -1
- package/expo-sqlite/driver.cjs.map +1 -1
- package/expo-sqlite/driver.js.map +1 -1
- package/expo-sqlite/index.cjs.map +1 -1
- package/expo-sqlite/index.js.map +1 -1
- package/expo-sqlite/migrator.cjs.map +1 -1
- package/expo-sqlite/migrator.js.map +1 -1
- package/expo-sqlite/session.cjs +16 -3
- package/expo-sqlite/session.cjs.map +1 -1
- package/expo-sqlite/session.d.cts +4 -3
- package/expo-sqlite/session.d.ts +4 -3
- package/expo-sqlite/session.js +16 -3
- package/expo-sqlite/session.js.map +1 -1
- package/libsql/session.cjs +8 -2
- package/libsql/session.cjs.map +1 -1
- package/libsql/session.d.cts +3 -2
- package/libsql/session.d.ts +3 -2
- package/libsql/session.js +8 -2
- package/libsql/session.js.map +1 -1
- package/mysql-core/db.cjs +38 -38
- package/mysql-core/db.cjs.map +1 -1
- package/mysql-core/db.js +38 -38
- package/mysql-core/db.js.map +1 -1
- package/mysql-core/dialect.cjs.map +1 -1
- package/mysql-core/dialect.js +1 -1
- package/mysql-core/dialect.js.map +1 -1
- package/mysql-core/query-builders/delete.cjs +10 -10
- package/mysql-core/query-builders/delete.cjs.map +1 -1
- package/mysql-core/query-builders/delete.d.cts +2 -2
- package/mysql-core/query-builders/delete.d.ts +2 -2
- package/mysql-core/query-builders/delete.js +10 -10
- package/mysql-core/query-builders/delete.js.map +1 -1
- package/mysql-core/query-builders/insert.cjs +7 -7
- package/mysql-core/query-builders/insert.cjs.map +1 -1
- package/mysql-core/query-builders/insert.js +7 -7
- package/mysql-core/query-builders/insert.js.map +1 -1
- package/mysql-core/query-builders/query-builder.cjs +2 -2
- package/mysql-core/query-builders/query-builder.cjs.map +1 -1
- package/mysql-core/query-builders/query-builder.d.cts +2 -2
- package/mysql-core/query-builders/query-builder.d.ts +2 -2
- package/mysql-core/query-builders/query-builder.js +2 -2
- package/mysql-core/query-builders/query-builder.js.map +1 -1
- package/mysql-core/query-builders/select.cjs +85 -85
- package/mysql-core/query-builders/select.cjs.map +1 -1
- package/mysql-core/query-builders/select.d.cts +1 -1
- package/mysql-core/query-builders/select.d.ts +1 -1
- package/mysql-core/query-builders/select.js +85 -85
- package/mysql-core/query-builders/select.js.map +1 -1
- package/mysql-core/query-builders/select.types.cjs.map +1 -1
- package/mysql-core/query-builders/select.types.d.cts +1 -1
- package/mysql-core/query-builders/select.types.d.ts +1 -1
- package/mysql-core/query-builders/update.cjs +8 -8
- package/mysql-core/query-builders/update.cjs.map +1 -1
- package/mysql-core/query-builders/update.d.cts +1 -1
- package/mysql-core/query-builders/update.d.ts +1 -1
- package/mysql-core/query-builders/update.js +8 -8
- package/mysql-core/query-builders/update.js.map +1 -1
- package/mysql-core/view-base.cjs.map +1 -1
- package/mysql-core/view-base.js.map +1 -1
- package/mysql-proxy/migrator.cjs.map +1 -1
- package/mysql-proxy/migrator.js.map +1 -1
- package/neon-http/driver.cjs.map +1 -1
- package/neon-http/driver.d.cts +1 -1
- package/neon-http/driver.d.ts +1 -1
- package/neon-http/driver.js.map +1 -1
- package/neon-http/migrator.cjs.map +1 -1
- package/neon-http/migrator.js.map +1 -1
- package/neon-http/session.cjs +17 -6
- package/neon-http/session.cjs.map +1 -1
- package/neon-http/session.d.cts +5 -13
- package/neon-http/session.d.ts +5 -13
- package/neon-http/session.js +17 -6
- package/neon-http/session.js.map +1 -1
- package/neon-serverless/session.cjs +17 -3
- package/neon-serverless/session.cjs.map +1 -1
- package/neon-serverless/session.d.cts +3 -2
- package/neon-serverless/session.d.ts +3 -2
- package/neon-serverless/session.js +17 -3
- package/neon-serverless/session.js.map +1 -1
- package/node-postgres/session.cjs +17 -3
- package/node-postgres/session.cjs.map +1 -1
- package/node-postgres/session.d.cts +3 -2
- package/node-postgres/session.d.ts +3 -2
- package/node-postgres/session.js +17 -3
- package/node-postgres/session.js.map +1 -1
- package/op-sqlite/driver.cjs.map +1 -1
- package/op-sqlite/driver.js.map +1 -1
- package/op-sqlite/index.cjs.map +1 -1
- package/op-sqlite/index.js.map +1 -1
- package/op-sqlite/migrator.cjs.map +1 -1
- package/op-sqlite/migrator.js.map +1 -1
- package/op-sqlite/session.cjs +16 -3
- package/op-sqlite/session.cjs.map +1 -1
- package/op-sqlite/session.d.cts +4 -3
- package/op-sqlite/session.d.ts +4 -3
- package/op-sqlite/session.js +16 -3
- package/op-sqlite/session.js.map +1 -1
- package/package.json +2 -2
- package/pg-core/columns/common.cjs +1 -1
- package/pg-core/columns/common.cjs.map +1 -1
- package/pg-core/columns/common.js +1 -1
- package/pg-core/columns/common.js.map +1 -1
- package/pg-core/db.cjs +3 -2
- package/pg-core/db.cjs.map +1 -1
- package/pg-core/db.d.cts +2 -1
- package/pg-core/db.d.ts +2 -1
- package/pg-core/db.js +3 -2
- package/pg-core/db.js.map +1 -1
- package/pg-core/query-builders/delete.cjs +1 -1
- package/pg-core/query-builders/delete.cjs.map +1 -1
- package/pg-core/query-builders/delete.js +1 -1
- package/pg-core/query-builders/delete.js.map +1 -1
- package/pg-core/query-builders/insert.cjs +1 -1
- package/pg-core/query-builders/insert.cjs.map +1 -1
- package/pg-core/query-builders/insert.js +1 -1
- package/pg-core/query-builders/insert.js.map +1 -1
- package/pg-core/query-builders/query-builder.cjs +2 -2
- package/pg-core/query-builders/query-builder.cjs.map +1 -1
- package/pg-core/query-builders/query-builder.d.cts +1 -1
- package/pg-core/query-builders/query-builder.d.ts +1 -1
- package/pg-core/query-builders/query-builder.js +2 -2
- package/pg-core/query-builders/query-builder.js.map +1 -1
- package/pg-core/query-builders/query.cjs +1 -0
- package/pg-core/query-builders/query.cjs.map +1 -1
- package/pg-core/query-builders/query.js +1 -0
- package/pg-core/query-builders/query.js.map +1 -1
- package/pg-core/query-builders/raw.cjs +4 -0
- package/pg-core/query-builders/raw.cjs.map +1 -1
- package/pg-core/query-builders/raw.d.cts +1 -1
- package/pg-core/query-builders/raw.d.ts +1 -1
- package/pg-core/query-builders/raw.js +4 -0
- package/pg-core/query-builders/raw.js.map +1 -1
- package/pg-core/query-builders/refresh-materialized-view.cjs +1 -1
- package/pg-core/query-builders/refresh-materialized-view.cjs.map +1 -1
- package/pg-core/query-builders/refresh-materialized-view.js +1 -1
- package/pg-core/query-builders/refresh-materialized-view.js.map +1 -1
- package/pg-core/query-builders/select.cjs +1 -1
- package/pg-core/query-builders/select.cjs.map +1 -1
- package/pg-core/query-builders/select.js +1 -1
- package/pg-core/query-builders/select.js.map +1 -1
- package/pg-core/query-builders/update.cjs +1 -1
- package/pg-core/query-builders/update.cjs.map +1 -1
- package/pg-core/query-builders/update.js +1 -1
- package/pg-core/query-builders/update.js.map +1 -1
- package/pg-core/session.cjs +4 -2
- package/pg-core/session.cjs.map +1 -1
- package/pg-core/session.d.cts +1 -1
- package/pg-core/session.d.ts +1 -1
- package/pg-core/session.js +4 -2
- package/pg-core/session.js.map +1 -1
- package/pg-core/view.cjs +2 -2
- package/pg-core/view.cjs.map +1 -1
- package/pg-core/view.d.cts +2 -2
- package/pg-core/view.d.ts +2 -2
- package/pg-core/view.js +2 -2
- package/pg-core/view.js.map +1 -1
- package/pg-proxy/migrator.cjs.map +1 -1
- package/pg-proxy/migrator.js.map +1 -1
- package/pg-proxy/session.cjs +16 -3
- package/pg-proxy/session.cjs.map +1 -1
- package/pg-proxy/session.d.cts +3 -2
- package/pg-proxy/session.d.ts +3 -2
- package/pg-proxy/session.js +16 -3
- package/pg-proxy/session.js.map +1 -1
- package/postgres-js/session.cjs +16 -3
- package/postgres-js/session.cjs.map +1 -1
- package/postgres-js/session.d.cts +3 -2
- package/postgres-js/session.d.ts +3 -2
- package/postgres-js/session.js +16 -3
- package/postgres-js/session.js.map +1 -1
- package/session.cjs.map +1 -1
- package/sql/functions/aggregate.cjs +1 -1
- package/sql/functions/aggregate.cjs.map +1 -1
- package/sql/functions/aggregate.d.cts +1 -1
- package/sql/functions/aggregate.d.ts +1 -1
- package/sql/functions/aggregate.js +1 -1
- package/sql/functions/aggregate.js.map +1 -1
- package/sql/index.cjs +3 -3
- package/sql/index.cjs.map +1 -1
- package/sql/index.d.cts +1 -1
- package/sql/index.d.ts +1 -1
- package/sql/index.js +1 -1
- package/sql/index.js.map +1 -1
- package/sql-js/session.cjs +10 -4
- package/sql-js/session.cjs.map +1 -1
- package/sql-js/session.d.cts +4 -3
- package/sql-js/session.d.ts +4 -3
- package/sql-js/session.js +10 -4
- package/sql-js/session.js.map +1 -1
- package/sqlite-core/dialect.cjs.map +1 -1
- package/sqlite-core/dialect.js.map +1 -1
- package/sqlite-core/query-builders/delete.cjs +2 -1
- package/sqlite-core/query-builders/delete.cjs.map +1 -1
- package/sqlite-core/query-builders/delete.js +2 -1
- package/sqlite-core/query-builders/delete.js.map +1 -1
- package/sqlite-core/query-builders/insert.cjs +2 -1
- package/sqlite-core/query-builders/insert.cjs.map +1 -1
- package/sqlite-core/query-builders/insert.js +2 -1
- package/sqlite-core/query-builders/insert.js.map +1 -1
- package/sqlite-core/query-builders/query-builder.cjs +2 -2
- package/sqlite-core/query-builders/query-builder.cjs.map +1 -1
- package/sqlite-core/query-builders/query-builder.d.cts +2 -2
- package/sqlite-core/query-builders/query-builder.d.ts +2 -2
- package/sqlite-core/query-builders/query-builder.js +2 -2
- package/sqlite-core/query-builders/query-builder.js.map +1 -1
- package/sqlite-core/query-builders/query.cjs +1 -0
- package/sqlite-core/query-builders/query.cjs.map +1 -1
- package/sqlite-core/query-builders/query.js +1 -0
- package/sqlite-core/query-builders/query.js.map +1 -1
- package/sqlite-core/query-builders/raw.cjs +4 -0
- package/sqlite-core/query-builders/raw.cjs.map +1 -1
- package/sqlite-core/query-builders/raw.d.cts +1 -1
- package/sqlite-core/query-builders/raw.d.ts +1 -1
- package/sqlite-core/query-builders/raw.js +4 -0
- package/sqlite-core/query-builders/raw.js.map +1 -1
- package/sqlite-core/query-builders/select.cjs +2 -1
- package/sqlite-core/query-builders/select.cjs.map +1 -1
- package/sqlite-core/query-builders/select.js +2 -1
- package/sqlite-core/query-builders/select.js.map +1 -1
- package/sqlite-core/query-builders/select.types.cjs.map +1 -1
- package/sqlite-core/query-builders/select.types.d.cts +2 -2
- package/sqlite-core/query-builders/select.types.d.ts +2 -2
- package/sqlite-core/query-builders/update.cjs +2 -1
- package/sqlite-core/query-builders/update.cjs.map +1 -1
- package/sqlite-core/query-builders/update.js +2 -1
- package/sqlite-core/query-builders/update.js.map +1 -1
- package/sqlite-core/session.cjs +6 -6
- package/sqlite-core/session.cjs.map +1 -1
- package/sqlite-core/session.d.cts +2 -2
- package/sqlite-core/session.d.ts +2 -2
- package/sqlite-core/session.js +6 -6
- package/sqlite-core/session.js.map +1 -1
- package/sqlite-core/subquery.cjs.map +1 -1
- package/sqlite-core/subquery.d.cts +1 -1
- package/sqlite-core/subquery.d.ts +1 -1
- package/sqlite-core/view-base.cjs.map +1 -1
- package/sqlite-core/view-base.js.map +1 -1
- package/sqlite-core/view.cjs +2 -2
- package/sqlite-core/view.cjs.map +1 -1
- package/sqlite-core/view.js +2 -2
- package/sqlite-core/view.js.map +1 -1
- package/sqlite-proxy/session.cjs +16 -3
- package/sqlite-proxy/session.cjs.map +1 -1
- package/sqlite-proxy/session.d.cts +3 -2
- package/sqlite-proxy/session.d.ts +3 -2
- package/sqlite-proxy/session.js +16 -3
- package/sqlite-proxy/session.js.map +1 -1
- package/subquery.cjs.map +1 -1
- package/subquery.js.map +1 -1
- package/tracing-utils.cjs.map +1 -1
- package/tracing-utils.js.map +1 -1
- package/vercel-postgres/session.cjs +8 -2
- package/vercel-postgres/session.cjs.map +1 -1
- package/vercel-postgres/session.d.cts +3 -2
- package/vercel-postgres/session.d.ts +3 -2
- package/vercel-postgres/session.js +8 -2
- package/vercel-postgres/session.js.map +1 -1
- package/version.cjs +1 -1
- package/version.d.cts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
package/sql-js/session.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/sql-js/session.ts"],"sourcesContent":["import type { BindParams, Database, Statement } from 'sql.js';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery as PreparedQueryBase, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface SQLJsSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class SQLJsSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'sync', void, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'SQLJsSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: SQLJsSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t): PreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(stmt, query, this.logger, fields, executeMethod);\n\t}\n\n\toverride prepareOneTimeQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): PreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: SQLJsTransaction<TFullSchema, TSchema>) => T,\n\t\tconfig: SQLiteTransactionConfig = {},\n\t): T {\n\t\tconst tx = new SQLJsTransaction('sync', this.dialect, this, this.schema);\n\t\tthis.run(sql.raw(`begin${config.behavior ? ` ${config.behavior}` : ''}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class SQLJsTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'sync', void, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'SQLJsTransaction';\n\n\toverride transaction<T>(transaction: (tx: SQLJsTransaction<TFullSchema, TSchema>) => T): T {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new SQLJsTransaction('sync', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\ttx.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\ttx.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\ttx.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class PreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends PreparedQueryBase<\n\t{ type: 'sync'; run: void; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic readonly [entityKind]: string = 'SQLJsPreparedQuery';\n\n\tconstructor(\n\t\tprivate stmt: Statement,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate customResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown,\n\t\tprivate isOneTimeQuery = false,\n\t) {\n\t\tsuper('sync', executeMethod, query);\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): void {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst result = this.stmt.run(params as BindParams);\n\n\t\tif (this.isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tall(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tconst { fields, joinsNotNullableMap, logger, query, stmt, isOneTimeQuery, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\tstmt.bind(params as BindParams);\n\t\t\tconst rows: unknown[] = [];\n\t\t\twhile (stmt.step()) {\n\t\t\t\trows.push(stmt.getAsObject());\n\t\t\t}\n\n\t\t\tif (isOneTimeQuery) {\n\t\t\t\tthis.free();\n\t\t\t}\n\n\t\t\treturn rows;\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows, normalizeFieldValue) as T['all'];\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow(fields!, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap));\n\t}\n\n\tget(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, stmt, isOneTimeQuery, joinsNotNullableMap, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst result = stmt.getAsObject(params as BindParams);\n\n\t\t\tif (isOneTimeQuery) {\n\t\t\t\tthis.free();\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tconst row = stmt.get(params as BindParams);\n\n\t\tif (isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\tif (!row || (row.length === 0 && fields!.length > 0)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper([row], normalizeFieldValue) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap);\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): T['values'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tthis.stmt.bind(params as BindParams);\n\t\tconst rows: unknown[] = [];\n\t\twhile (this.stmt.step()) {\n\t\t\trows.push(this.stmt.get());\n\t\t}\n\n\t\tif (this.isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\treturn rows;\n\t}\n\n\tfree(): boolean {\n\t\treturn this.stmt.free();\n\t}\n}\n\nfunction normalizeFieldValue(value: unknown) {\n\tif (value instanceof Uint8Array) { // eslint-disable-line no-instanceof/no-instanceof\n\t\tif (typeof Buffer !== 'undefined') {\n\t\t\tif (!(value instanceof Buffer)) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\treturn Buffer.from(value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof TextDecoder !== 'undefined') {\n\t\t\treturn new TextDecoder().decode(value);\n\t\t}\n\t\tthrow new Error('TextDecoder is not available. Please provide either Buffer or TextDecoder polyfill.');\n\t}\n\treturn value;\n}\n"],"mappings":"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","names":["PreparedQueryBase","rows"]}
|
|
1
|
+
{"version":3,"sources":["../../src/sql-js/session.ts"],"sourcesContent":["import type { BindParams, Database, Statement } from 'sql.js';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery as PreparedQueryBase, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface SQLJsSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class SQLJsSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'sync', void, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'SQLJsSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: SQLJsSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t): PreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(stmt, query, this.logger, fields, executeMethod, isResponseInArrayMode);\n\t}\n\n\toverride prepareOneTimeQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): PreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: SQLJsTransaction<TFullSchema, TSchema>) => T,\n\t\tconfig: SQLiteTransactionConfig = {},\n\t): T {\n\t\tconst tx = new SQLJsTransaction('sync', this.dialect, this, this.schema);\n\t\tthis.run(sql.raw(`begin${config.behavior ? ` ${config.behavior}` : ''}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class SQLJsTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'sync', void, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'SQLJsTransaction';\n\n\toverride transaction<T>(transaction: (tx: SQLJsTransaction<TFullSchema, TSchema>) => T): T {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new SQLJsTransaction('sync', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\ttx.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\ttx.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\ttx.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class PreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends PreparedQueryBase<\n\t{ type: 'sync'; run: void; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic readonly [entityKind]: string = 'SQLJsPreparedQuery';\n\n\tconstructor(\n\t\tprivate stmt: Statement,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown,\n\t\tprivate isOneTimeQuery = false,\n\t) {\n\t\tsuper('sync', executeMethod, query);\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): void {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst result = this.stmt.run(params as BindParams);\n\n\t\tif (this.isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tall(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tconst { fields, joinsNotNullableMap, logger, query, stmt, isOneTimeQuery, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\tstmt.bind(params as BindParams);\n\t\t\tconst rows: unknown[] = [];\n\t\t\twhile (stmt.step()) {\n\t\t\t\trows.push(stmt.getAsObject());\n\t\t\t}\n\n\t\t\tif (isOneTimeQuery) {\n\t\t\t\tthis.free();\n\t\t\t}\n\n\t\t\treturn rows;\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows, normalizeFieldValue) as T['all'];\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow(fields!, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap));\n\t}\n\n\tget(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, stmt, isOneTimeQuery, joinsNotNullableMap, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst result = stmt.getAsObject(params as BindParams);\n\n\t\t\tif (isOneTimeQuery) {\n\t\t\t\tthis.free();\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tconst row = stmt.get(params as BindParams);\n\n\t\tif (isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\tif (!row || (row.length === 0 && fields!.length > 0)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper([row], normalizeFieldValue) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap);\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): T['values'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tthis.stmt.bind(params as BindParams);\n\t\tconst rows: unknown[] = [];\n\t\twhile (this.stmt.step()) {\n\t\t\trows.push(this.stmt.get());\n\t\t}\n\n\t\tif (this.isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\treturn rows;\n\t}\n\n\tfree(): boolean {\n\t\treturn this.stmt.free();\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nfunction normalizeFieldValue(value: unknown) {\n\tif (value instanceof Uint8Array) { // eslint-disable-line no-instanceof/no-instanceof\n\t\tif (typeof Buffer !== 'undefined') {\n\t\t\tif (!(value instanceof Buffer)) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\treturn Buffer.from(value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof TextDecoder !== 'undefined') {\n\t\t\treturn new TextDecoder().decode(value);\n\t\t}\n\t\tthrow new Error('TextDecoder is not available. Please provide either Buffer or TextDecoder polyfill.');\n\t}\n\treturn value;\n}\n"],"mappings":"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","names":["PreparedQueryBase","rows"]}
|
package/sql-js/session.d.cts
CHANGED
|
@@ -18,8 +18,8 @@ export declare class SQLJsSession<TFullSchema extends Record<string, unknown>, T
|
|
|
18
18
|
static readonly [entityKind]: string;
|
|
19
19
|
private logger;
|
|
20
20
|
constructor(client: Database, dialect: SQLiteSyncDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options?: SQLJsSessionOptions);
|
|
21
|
-
prepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod): PreparedQuery<T>;
|
|
22
|
-
prepareOneTimeQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper?: (rows: unknown[][]) => unknown): PreparedQuery<T>;
|
|
21
|
+
prepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, isResponseInArrayMode: boolean): PreparedQuery<T>;
|
|
22
|
+
prepareOneTimeQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => unknown): PreparedQuery<T>;
|
|
23
23
|
transaction<T>(transaction: (tx: SQLJsTransaction<TFullSchema, TSchema>) => T, config?: SQLiteTransactionConfig): T;
|
|
24
24
|
}
|
|
25
25
|
export declare class SQLJsTransaction<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends SQLiteTransaction<'sync', void, TFullSchema, TSchema> {
|
|
@@ -37,10 +37,11 @@ export declare class PreparedQuery<T extends PreparedQueryConfig = PreparedQuery
|
|
|
37
37
|
private stmt;
|
|
38
38
|
private logger;
|
|
39
39
|
private fields;
|
|
40
|
+
private _isResponseInArrayMode;
|
|
40
41
|
private customResultMapper?;
|
|
41
42
|
private isOneTimeQuery;
|
|
42
43
|
static readonly [entityKind]: string;
|
|
43
|
-
constructor(stmt: Statement, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper?: ((rows: unknown[][], mapColumnValue?: ((value: unknown) => unknown) | undefined) => unknown) | undefined, isOneTimeQuery?: boolean);
|
|
44
|
+
constructor(stmt: Statement, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: unknown[][], mapColumnValue?: ((value: unknown) => unknown) | undefined) => unknown) | undefined, isOneTimeQuery?: boolean);
|
|
44
45
|
run(placeholderValues?: Record<string, unknown>): void;
|
|
45
46
|
all(placeholderValues?: Record<string, unknown>): T['all'];
|
|
46
47
|
get(placeholderValues?: Record<string, unknown>): T['get'];
|
package/sql-js/session.d.ts
CHANGED
|
@@ -18,8 +18,8 @@ export declare class SQLJsSession<TFullSchema extends Record<string, unknown>, T
|
|
|
18
18
|
static readonly [entityKind]: string;
|
|
19
19
|
private logger;
|
|
20
20
|
constructor(client: Database, dialect: SQLiteSyncDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options?: SQLJsSessionOptions);
|
|
21
|
-
prepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod): PreparedQuery<T>;
|
|
22
|
-
prepareOneTimeQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper?: (rows: unknown[][]) => unknown): PreparedQuery<T>;
|
|
21
|
+
prepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, isResponseInArrayMode: boolean): PreparedQuery<T>;
|
|
22
|
+
prepareOneTimeQuery<T extends Omit<PreparedQueryConfig, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => unknown): PreparedQuery<T>;
|
|
23
23
|
transaction<T>(transaction: (tx: SQLJsTransaction<TFullSchema, TSchema>) => T, config?: SQLiteTransactionConfig): T;
|
|
24
24
|
}
|
|
25
25
|
export declare class SQLJsTransaction<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends SQLiteTransaction<'sync', void, TFullSchema, TSchema> {
|
|
@@ -37,10 +37,11 @@ export declare class PreparedQuery<T extends PreparedQueryConfig = PreparedQuery
|
|
|
37
37
|
private stmt;
|
|
38
38
|
private logger;
|
|
39
39
|
private fields;
|
|
40
|
+
private _isResponseInArrayMode;
|
|
40
41
|
private customResultMapper?;
|
|
41
42
|
private isOneTimeQuery;
|
|
42
43
|
static readonly [entityKind]: string;
|
|
43
|
-
constructor(stmt: Statement, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper?: ((rows: unknown[][], mapColumnValue?: ((value: unknown) => unknown) | undefined) => unknown) | undefined, isOneTimeQuery?: boolean);
|
|
44
|
+
constructor(stmt: Statement, query: Query, logger: Logger, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: unknown[][], mapColumnValue?: ((value: unknown) => unknown) | undefined) => unknown) | undefined, isOneTimeQuery?: boolean);
|
|
44
45
|
run(placeholderValues?: Record<string, unknown>): void;
|
|
45
46
|
all(placeholderValues?: Record<string, unknown>): T['all'];
|
|
46
47
|
get(placeholderValues?: Record<string, unknown>): T['get'];
|
package/sql-js/session.js
CHANGED
|
@@ -13,11 +13,11 @@ class SQLJsSession extends SQLiteSession {
|
|
|
13
13
|
}
|
|
14
14
|
static [entityKind] = "SQLJsSession";
|
|
15
15
|
logger;
|
|
16
|
-
prepareQuery(query, fields, executeMethod) {
|
|
16
|
+
prepareQuery(query, fields, executeMethod, isResponseInArrayMode) {
|
|
17
17
|
const stmt = this.client.prepare(query.sql);
|
|
18
|
-
return new PreparedQuery(stmt, query, this.logger, fields, executeMethod);
|
|
18
|
+
return new PreparedQuery(stmt, query, this.logger, fields, executeMethod, isResponseInArrayMode);
|
|
19
19
|
}
|
|
20
|
-
prepareOneTimeQuery(query, fields, executeMethod, customResultMapper) {
|
|
20
|
+
prepareOneTimeQuery(query, fields, executeMethod, isResponseInArrayMode, customResultMapper) {
|
|
21
21
|
const stmt = this.client.prepare(query.sql);
|
|
22
22
|
return new PreparedQuery(
|
|
23
23
|
stmt,
|
|
@@ -25,6 +25,7 @@ class SQLJsSession extends SQLiteSession {
|
|
|
25
25
|
this.logger,
|
|
26
26
|
fields,
|
|
27
27
|
executeMethod,
|
|
28
|
+
isResponseInArrayMode,
|
|
28
29
|
customResultMapper,
|
|
29
30
|
true
|
|
30
31
|
);
|
|
@@ -59,11 +60,12 @@ class SQLJsTransaction extends SQLiteTransaction {
|
|
|
59
60
|
}
|
|
60
61
|
}
|
|
61
62
|
class PreparedQuery extends PreparedQueryBase {
|
|
62
|
-
constructor(stmt, query, logger, fields, executeMethod, customResultMapper, isOneTimeQuery = false) {
|
|
63
|
+
constructor(stmt, query, logger, fields, executeMethod, _isResponseInArrayMode, customResultMapper, isOneTimeQuery = false) {
|
|
63
64
|
super("sync", executeMethod, query);
|
|
64
65
|
this.stmt = stmt;
|
|
65
66
|
this.logger = logger;
|
|
66
67
|
this.fields = fields;
|
|
68
|
+
this._isResponseInArrayMode = _isResponseInArrayMode;
|
|
67
69
|
this.customResultMapper = customResultMapper;
|
|
68
70
|
this.isOneTimeQuery = isOneTimeQuery;
|
|
69
71
|
}
|
|
@@ -137,6 +139,10 @@ class PreparedQuery extends PreparedQueryBase {
|
|
|
137
139
|
free() {
|
|
138
140
|
return this.stmt.free();
|
|
139
141
|
}
|
|
142
|
+
/** @internal */
|
|
143
|
+
isResponseInArrayMode() {
|
|
144
|
+
return this._isResponseInArrayMode;
|
|
145
|
+
}
|
|
140
146
|
}
|
|
141
147
|
function normalizeFieldValue(value) {
|
|
142
148
|
if (value instanceof Uint8Array) {
|
package/sql-js/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/sql-js/session.ts"],"sourcesContent":["import type { BindParams, Database, Statement } from 'sql.js';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery as PreparedQueryBase, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface SQLJsSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class SQLJsSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'sync', void, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'SQLJsSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: SQLJsSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t): PreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(stmt, query, this.logger, fields, executeMethod);\n\t}\n\n\toverride prepareOneTimeQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): PreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: SQLJsTransaction<TFullSchema, TSchema>) => T,\n\t\tconfig: SQLiteTransactionConfig = {},\n\t): T {\n\t\tconst tx = new SQLJsTransaction('sync', this.dialect, this, this.schema);\n\t\tthis.run(sql.raw(`begin${config.behavior ? ` ${config.behavior}` : ''}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class SQLJsTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'sync', void, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'SQLJsTransaction';\n\n\toverride transaction<T>(transaction: (tx: SQLJsTransaction<TFullSchema, TSchema>) => T): T {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new SQLJsTransaction('sync', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\ttx.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\ttx.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\ttx.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class PreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends PreparedQueryBase<\n\t{ type: 'sync'; run: void; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic readonly [entityKind]: string = 'SQLJsPreparedQuery';\n\n\tconstructor(\n\t\tprivate stmt: Statement,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate customResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown,\n\t\tprivate isOneTimeQuery = false,\n\t) {\n\t\tsuper('sync', executeMethod, query);\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): void {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst result = this.stmt.run(params as BindParams);\n\n\t\tif (this.isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tall(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tconst { fields, joinsNotNullableMap, logger, query, stmt, isOneTimeQuery, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\tstmt.bind(params as BindParams);\n\t\t\tconst rows: unknown[] = [];\n\t\t\twhile (stmt.step()) {\n\t\t\t\trows.push(stmt.getAsObject());\n\t\t\t}\n\n\t\t\tif (isOneTimeQuery) {\n\t\t\t\tthis.free();\n\t\t\t}\n\n\t\t\treturn rows;\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows, normalizeFieldValue) as T['all'];\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow(fields!, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap));\n\t}\n\n\tget(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, stmt, isOneTimeQuery, joinsNotNullableMap, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst result = stmt.getAsObject(params as BindParams);\n\n\t\t\tif (isOneTimeQuery) {\n\t\t\t\tthis.free();\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tconst row = stmt.get(params as BindParams);\n\n\t\tif (isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\tif (!row || (row.length === 0 && fields!.length > 0)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper([row], normalizeFieldValue) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap);\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): T['values'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tthis.stmt.bind(params as BindParams);\n\t\tconst rows: unknown[] = [];\n\t\twhile (this.stmt.step()) {\n\t\t\trows.push(this.stmt.get());\n\t\t}\n\n\t\tif (this.isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\treturn rows;\n\t}\n\n\tfree(): boolean {\n\t\treturn this.stmt.free();\n\t}\n}\n\nfunction normalizeFieldValue(value: unknown) {\n\tif (value instanceof Uint8Array) { // eslint-disable-line no-instanceof/no-instanceof\n\t\tif (typeof Buffer !== 'undefined') {\n\t\t\tif (!(value instanceof Buffer)) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\treturn Buffer.from(value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof TextDecoder !== 'undefined') {\n\t\t\treturn new TextDecoder().decode(value);\n\t\t}\n\t\tthrow new Error('TextDecoder is not available. Please provide either Buffer or TextDecoder polyfill.');\n\t}\n\treturn value;\n}\n"],"mappings":"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","names":["rows"]}
|
|
1
|
+
{"version":3,"sources":["../../src/sql-js/session.ts"],"sourcesContent":["import type { BindParams, Database, Statement } from 'sql.js';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery as PreparedQueryBase, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface SQLJsSessionOptions {\n\tlogger?: Logger;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class SQLJsSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'sync', void, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'SQLJsSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: SQLJsSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t): PreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(stmt, query, this.logger, fields, executeMethod, isResponseInArrayMode);\n\t}\n\n\toverride prepareOneTimeQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t): PreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: SQLJsTransaction<TFullSchema, TSchema>) => T,\n\t\tconfig: SQLiteTransactionConfig = {},\n\t): T {\n\t\tconst tx = new SQLJsTransaction('sync', this.dialect, this, this.schema);\n\t\tthis.run(sql.raw(`begin${config.behavior ? ` ${config.behavior}` : ''}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class SQLJsTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'sync', void, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'SQLJsTransaction';\n\n\toverride transaction<T>(transaction: (tx: SQLJsTransaction<TFullSchema, TSchema>) => T): T {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new SQLJsTransaction('sync', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\ttx.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\ttx.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\ttx.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class PreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends PreparedQueryBase<\n\t{ type: 'sync'; run: void; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic readonly [entityKind]: string = 'SQLJsPreparedQuery';\n\n\tconstructor(\n\t\tprivate stmt: Statement,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown,\n\t\tprivate isOneTimeQuery = false,\n\t) {\n\t\tsuper('sync', executeMethod, query);\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): void {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst result = this.stmt.run(params as BindParams);\n\n\t\tif (this.isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tall(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tconst { fields, joinsNotNullableMap, logger, query, stmt, isOneTimeQuery, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\tstmt.bind(params as BindParams);\n\t\t\tconst rows: unknown[] = [];\n\t\t\twhile (stmt.step()) {\n\t\t\t\trows.push(stmt.getAsObject());\n\t\t\t}\n\n\t\t\tif (isOneTimeQuery) {\n\t\t\t\tthis.free();\n\t\t\t}\n\n\t\t\treturn rows;\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows, normalizeFieldValue) as T['all'];\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow(fields!, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap));\n\t}\n\n\tget(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, stmt, isOneTimeQuery, joinsNotNullableMap, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst result = stmt.getAsObject(params as BindParams);\n\n\t\t\tif (isOneTimeQuery) {\n\t\t\t\tthis.free();\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tconst row = stmt.get(params as BindParams);\n\n\t\tif (isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\tif (!row || (row.length === 0 && fields!.length > 0)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper([row], normalizeFieldValue) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, row.map((v) => normalizeFieldValue(v)), joinsNotNullableMap);\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): T['values'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tthis.stmt.bind(params as BindParams);\n\t\tconst rows: unknown[] = [];\n\t\twhile (this.stmt.step()) {\n\t\t\trows.push(this.stmt.get());\n\t\t}\n\n\t\tif (this.isOneTimeQuery) {\n\t\t\tthis.free();\n\t\t}\n\n\t\treturn rows;\n\t}\n\n\tfree(): boolean {\n\t\treturn this.stmt.free();\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nfunction normalizeFieldValue(value: unknown) {\n\tif (value instanceof Uint8Array) { // eslint-disable-line no-instanceof/no-instanceof\n\t\tif (typeof Buffer !== 'undefined') {\n\t\t\tif (!(value instanceof Buffer)) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\treturn Buffer.from(value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof TextDecoder !== 'undefined') {\n\t\t\treturn new TextDecoder().decode(value);\n\t\t}\n\t\tthrow new Error('TextDecoder is not available. Please provide either Buffer or TextDecoder polyfill.');\n\t}\n\treturn value;\n}\n"],"mappings":"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","names":["rows"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/sqlite-core/dialect.ts"],"sourcesContent":["import { aliasedTable, aliasedTableColumn, mapColumnsInAliasedSQLToAlias, mapColumnsInSQLToAlias } from '~/alias.ts';\nimport type { AnyColumn } from '~/column.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { DrizzleError } from '~/errors.ts';\nimport type { MigrationConfig, MigrationMeta } from '~/migrator.ts';\nimport {\n\ttype BuildRelationalQueryResult,\n\ttype DBQueryConfig,\n\tgetOperators,\n\tgetOrderByOperators,\n\tMany,\n\tnormalizeRelation,\n\tOne,\n\ttype Relation,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { Name } from '~/sql/index.ts';\nimport { and, eq } from '~/sql/index.ts';\nimport { Param, type QueryWithTypings, SQL, sql, type SQLChunk } from '~/sql/sql.ts';\nimport { SQLiteColumn } from '~/sqlite-core/columns/index.ts';\nimport type { SQLiteDeleteConfig, SQLiteInsertConfig, SQLiteUpdateConfig } from '~/sqlite-core/query-builders/index.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { Subquery, SubqueryConfig } from '~/subquery.ts';\nimport { getTableName, Table } from '~/table.ts';\nimport { orderSelectedFields, type UpdateSet } from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type {\n\tSelectedFieldsOrdered,\n\tSQLiteSelectConfig,\n\tSQLiteSelectJoinConfig,\n} from './query-builders/select.types.ts';\nimport type { SQLiteSession } from './session.ts';\nimport { SQLiteViewBase } from './view-base.ts';\n\nexport abstract class SQLiteDialect {\n\tstatic readonly [entityKind]: string = 'SQLiteDialect';\n\n\tescapeName(name: string): string {\n\t\treturn `\"${name}\"`;\n\t}\n\n\tescapeParam(_num: number): string {\n\t\treturn '?';\n\t}\n\n\tescapeString(str: string): string {\n\t\treturn `'${str.replace(/'/g, \"''\")}'`;\n\t}\n\n\tprivate buildWithCTE(queries: Subquery[] | undefined): SQL | undefined {\n\t\tif (!queries?.length) return undefined;\n\n\t\tconst withSqlChunks = [sql`with `];\n\t\tfor (const [i, w] of queries.entries()) {\n\t\t\twithSqlChunks.push(sql`${sql.identifier(w[SubqueryConfig].alias)} as (${w[SubqueryConfig].sql})`);\n\t\t\tif (i < queries.length - 1) {\n\t\t\t\twithSqlChunks.push(sql`, `);\n\t\t\t}\n\t\t}\n\t\twithSqlChunks.push(sql` `);\n\t\treturn sql.join(withSqlChunks);\n\t}\n\n\tbuildDeleteQuery({ table, where, returning, withList }: SQLiteDeleteConfig): SQL {\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\treturn sql`${withSql}delete from ${table}${whereSql}${returningSql}`;\n\t}\n\n\tbuildUpdateSet(table: SQLiteTable, set: UpdateSet): SQL {\n\t\tconst setEntries = Object.entries(set);\n\n\t\tconst setSize = setEntries.length;\n\t\treturn sql.join(\n\t\t\tsetEntries\n\t\t\t\t.flatMap(([colName, value], i): SQL[] => {\n\t\t\t\t\tconst col: SQLiteColumn = table[Table.Symbol.Columns][colName]!;\n\t\t\t\t\tconst res = sql`${sql.identifier(col.name)} = ${value}`;\n\t\t\t\t\tif (i < setSize - 1) {\n\t\t\t\t\t\treturn [res, sql.raw(', ')];\n\t\t\t\t\t}\n\t\t\t\t\treturn [res];\n\t\t\t\t}),\n\t\t);\n\t}\n\n\tbuildUpdateQuery({ table, set, where, returning, withList }: SQLiteUpdateConfig): SQL {\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst setSql = this.buildUpdateSet(table, set);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\treturn sql`${withSql}update ${table} set ${setSql}${whereSql}${returningSql}`;\n\t}\n\n\t/**\n\t * Builds selection SQL with provided fields/expressions\n\t *\n\t * Examples:\n\t *\n\t * `select <selection> from`\n\t *\n\t * `insert ... returning <selection>`\n\t *\n\t * If `isSingleTable` is true, then columns won't be prefixed with table name\n\t */\n\tprivate buildSelection(\n\t\tfields: SelectedFieldsOrdered,\n\t\t{ isSingleTable = false }: { isSingleTable?: boolean } = {},\n\t): SQL {\n\t\tconst columnsLen = fields.length;\n\n\t\tconst chunks = fields\n\t\t\t.flatMap(({ field }, i) => {\n\t\t\t\tconst chunk: SQLChunk[] = [];\n\n\t\t\t\tif (is(field, SQL.Aliased) && field.isSelectionField) {\n\t\t\t\t\tchunk.push(sql.identifier(field.fieldAlias));\n\t\t\t\t} else if (is(field, SQL.Aliased) || is(field, SQL)) {\n\t\t\t\t\tconst query = is(field, SQL.Aliased) ? field.sql : field;\n\n\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tnew SQL(\n\t\t\t\t\t\t\t\tquery.queryChunks.map((c) => {\n\t\t\t\t\t\t\t\t\tif (is(c, Column)) {\n\t\t\t\t\t\t\t\t\t\treturn sql.identifier(c.name);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn c;\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunk.push(query);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (is(field, SQL.Aliased)) {\n\t\t\t\t\t\tchunk.push(sql` as ${sql.identifier(field.fieldAlias)}`);\n\t\t\t\t\t}\n\t\t\t\t} else if (is(field, Column)) {\n\t\t\t\t\tconst tableName = field.table[Table.Symbol.Name];\n\t\t\t\t\tconst columnName = field.name;\n\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\tchunk.push(sql.identifier(columnName));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunk.push(sql`${sql.identifier(tableName)}.${sql.identifier(columnName)}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (i < columnsLen - 1) {\n\t\t\t\t\tchunk.push(sql`, `);\n\t\t\t\t}\n\n\t\t\t\treturn chunk;\n\t\t\t});\n\n\t\treturn sql.join(chunks);\n\t}\n\n\tbuildSelectQuery(\n\t\t{\n\t\t\twithList,\n\t\t\tfields,\n\t\t\tfieldsFlat,\n\t\t\twhere,\n\t\t\thaving,\n\t\t\ttable,\n\t\t\tjoins,\n\t\t\torderBy,\n\t\t\tgroupBy,\n\t\t\tlimit,\n\t\t\toffset,\n\t\t\tdistinct,\n\t\t\tsetOperators,\n\t\t}: SQLiteSelectConfig,\n\t): SQL {\n\t\tconst fieldsList = fieldsFlat ?? orderSelectedFields<SQLiteColumn>(fields);\n\t\tfor (const f of fieldsList) {\n\t\t\tif (\n\t\t\t\tis(f.field, Column)\n\t\t\t\t&& getTableName(f.field.table)\n\t\t\t\t\t!== (is(table, Subquery)\n\t\t\t\t\t\t? table[SubqueryConfig].alias\n\t\t\t\t\t\t: is(table, SQLiteViewBase)\n\t\t\t\t\t\t? table[ViewBaseConfig].name\n\t\t\t\t\t\t: is(table, SQL)\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: getTableName(table))\n\t\t\t\t&& !((table) =>\n\t\t\t\t\tjoins?.some(({ alias }) =>\n\t\t\t\t\t\talias === (table[Table.Symbol.IsAlias] ? getTableName(table) : table[Table.Symbol.BaseName])\n\t\t\t\t\t))(f.field.table)\n\t\t\t) {\n\t\t\t\tconst tableName = getTableName(f.field.table);\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Your \"${\n\t\t\t\t\t\tf.path.join('->')\n\t\t\t\t\t}\" field references a column \"${tableName}\".\"${f.field.name}\", but the table \"${tableName}\" is not part of the query! Did you forget to join it?`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst isSingleTable = !joins || joins.length === 0;\n\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst distinctSql = distinct ? sql` distinct` : undefined;\n\n\t\tconst selection = this.buildSelection(fieldsList, { isSingleTable });\n\n\t\tconst tableSql = (() => {\n\t\t\tif (is(table, Table) && table[Table.Symbol.OriginalName] !== table[Table.Symbol.Name]) {\n\t\t\t\treturn sql`${sql.identifier(table[Table.Symbol.OriginalName])} ${sql.identifier(table[Table.Symbol.Name])}`;\n\t\t\t}\n\n\t\t\treturn table;\n\t\t})();\n\n\t\tconst joinsArray: SQL[] = [];\n\n\t\tif (joins) {\n\t\t\tfor (const [index, joinMeta] of joins.entries()) {\n\t\t\t\tif (index === 0) {\n\t\t\t\t\tjoinsArray.push(sql` `);\n\t\t\t\t}\n\t\t\t\tconst table = joinMeta.table;\n\n\t\t\t\tif (is(table, SQLiteTable)) {\n\t\t\t\t\tconst tableName = table[SQLiteTable.Symbol.Name];\n\t\t\t\t\tconst tableSchema = table[SQLiteTable.Symbol.Schema];\n\t\t\t\t\tconst origTableName = table[SQLiteTable.Symbol.OriginalName];\n\t\t\t\t\tconst alias = tableName === origTableName ? undefined : joinMeta.alias;\n\t\t\t\t\tjoinsArray.push(\n\t\t\t\t\t\tsql`${sql.raw(joinMeta.joinType)} join ${tableSchema ? sql`${sql.identifier(tableSchema)}.` : undefined}${\n\t\t\t\t\t\t\tsql.identifier(origTableName)\n\t\t\t\t\t\t}${alias && sql` ${sql.identifier(alias)}`} on ${joinMeta.on}`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tjoinsArray.push(\n\t\t\t\t\t\tsql`${sql.raw(joinMeta.joinType)} join ${table} on ${joinMeta.on}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (index < joins.length - 1) {\n\t\t\t\t\tjoinsArray.push(sql` `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst joinsSql = sql.join(joinsArray);\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\tconst havingSql = having ? sql` having ${having}` : undefined;\n\n\t\tconst orderByList: (SQLiteColumn | SQL | SQL.Aliased)[] = [];\n\t\tif (orderBy) {\n\t\t\tfor (const [index, orderByValue] of orderBy.entries()) {\n\t\t\t\torderByList.push(orderByValue);\n\n\t\t\t\tif (index < orderBy.length - 1) {\n\t\t\t\t\torderByList.push(sql`, `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst groupByList: (SQL | AnyColumn | SQL.Aliased)[] = [];\n\t\tif (groupBy) {\n\t\t\tfor (const [index, groupByValue] of groupBy.entries()) {\n\t\t\t\tgroupByList.push(groupByValue);\n\n\t\t\t\tif (index < groupBy.length - 1) {\n\t\t\t\t\tgroupByList.push(sql`, `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst groupBySql = groupByList.length > 0 ? sql` group by ${sql.join(groupByList)}` : undefined;\n\n\t\tconst orderBySql = orderByList.length > 0 ? sql` order by ${sql.join(orderByList)}` : undefined;\n\n\t\tconst limitSql = limit ? sql` limit ${limit}` : undefined;\n\n\t\tconst offsetSql = offset ? sql` offset ${offset}` : undefined;\n\n\t\tconst finalQuery =\n\t\t\tsql`${withSql}select${distinctSql} ${selection} from ${tableSql}${joinsSql}${whereSql}${groupBySql}${havingSql}${orderBySql}${limitSql}${offsetSql}`;\n\n\t\tif (setOperators.length > 0) {\n\t\t\treturn this.buildSetOperations(finalQuery, setOperators);\n\t\t}\n\n\t\treturn finalQuery;\n\t}\n\n\tbuildSetOperations(leftSelect: SQL, setOperators: SQLiteSelectConfig['setOperators']): SQL {\n\t\tconst [setOperator, ...rest] = setOperators;\n\n\t\tif (!setOperator) {\n\t\t\tthrow new Error('Cannot pass undefined values to any set operator');\n\t\t}\n\n\t\tif (rest.length === 0) {\n\t\t\treturn this.buildSetOperationQuery({ leftSelect, setOperator });\n\t\t}\n\n\t\t// Some recursive magic here\n\t\treturn this.buildSetOperations(\n\t\t\tthis.buildSetOperationQuery({ leftSelect, setOperator }),\n\t\t\trest,\n\t\t);\n\t}\n\n\tbuildSetOperationQuery({\n\t\tleftSelect,\n\t\tsetOperator: { type, isAll, rightSelect, limit, orderBy, offset },\n\t}: { leftSelect: SQL; setOperator: SQLiteSelectConfig['setOperators'][number] }): SQL {\n\t\t// SQLite doesn't support parenthesis in set operations\n\t\tconst leftChunk = sql`${leftSelect.getSQL()} `;\n\t\tconst rightChunk = sql`${rightSelect.getSQL()}`;\n\n\t\tlet orderBySql;\n\t\tif (orderBy && orderBy.length > 0) {\n\t\t\tconst orderByValues: (SQL<unknown> | Name)[] = [];\n\n\t\t\t// The next bit is necessary because the sql operator replaces ${table.column} with `table`.`column`\n\t\t\t// which is invalid Sql syntax, Table from one of the SELECTs cannot be used in global ORDER clause\n\t\t\tfor (const singleOrderBy of orderBy) {\n\t\t\t\tif (is(singleOrderBy, SQLiteColumn)) {\n\t\t\t\t\torderByValues.push(sql.identifier(singleOrderBy.name));\n\t\t\t\t} else if (is(singleOrderBy, SQL)) {\n\t\t\t\t\tfor (let i = 0; i < singleOrderBy.queryChunks.length; i++) {\n\t\t\t\t\t\tconst chunk = singleOrderBy.queryChunks[i];\n\n\t\t\t\t\t\tif (is(chunk, SQLiteColumn)) {\n\t\t\t\t\t\t\tsingleOrderBy.queryChunks[i] = sql.identifier(chunk.name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\torderByValues.push(sql`${singleOrderBy}`);\n\t\t\t\t} else {\n\t\t\t\t\torderByValues.push(sql`${singleOrderBy}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\torderBySql = sql` order by ${sql.join(orderByValues, sql`, `)}`;\n\t\t}\n\n\t\tconst limitSql = limit ? sql` limit ${limit}` : undefined;\n\n\t\tconst operatorChunk = sql.raw(`${type} ${isAll ? 'all ' : ''}`);\n\n\t\tconst offsetSql = offset ? sql` offset ${offset}` : undefined;\n\n\t\treturn sql`${leftChunk}${operatorChunk}${rightChunk}${orderBySql}${limitSql}${offsetSql}`;\n\t}\n\n\tbuildInsertQuery({ table, values, onConflict, returning, withList }: SQLiteInsertConfig): SQL {\n\t\t// const isSingleValue = values.length === 1;\n\t\tconst valuesSqlList: ((SQLChunk | SQL)[] | SQL)[] = [];\n\t\tconst columns: Record<string, SQLiteColumn> = table[Table.Symbol.Columns];\n\n\t\tconst colEntries: [string, SQLiteColumn][] = Object.entries(columns);\n\t\tconst insertOrder = colEntries.map(([, column]) => sql.identifier(column.name));\n\n\t\tfor (const [valueIndex, value] of values.entries()) {\n\t\t\tconst valueList: (SQLChunk | SQL)[] = [];\n\t\t\tfor (const [fieldName, col] of colEntries) {\n\t\t\t\tconst colValue = value[fieldName];\n\t\t\t\tif (colValue === undefined || (is(colValue, Param) && colValue.value === undefined)) {\n\t\t\t\t\tlet defaultValue;\n\t\t\t\t\tif (col.default !== null && col.default !== undefined) {\n\t\t\t\t\t\tdefaultValue = is(col.default, SQL) ? col.default : sql.param(col.default, col);\n\t\t\t\t\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t\t\t\t\t} else if (col.defaultFn !== undefined) {\n\t\t\t\t\t\tconst defaultFnResult = col.defaultFn();\n\t\t\t\t\t\tdefaultValue = is(defaultFnResult, SQL) ? defaultFnResult : sql.param(defaultFnResult, col);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdefaultValue = sql`null`;\n\t\t\t\t\t}\n\t\t\t\t\tvalueList.push(defaultValue);\n\t\t\t\t} else {\n\t\t\t\t\tvalueList.push(colValue);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvaluesSqlList.push(valueList);\n\t\t\tif (valueIndex < values.length - 1) {\n\t\t\t\tvaluesSqlList.push(sql`, `);\n\t\t\t}\n\t\t}\n\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst valuesSql = sql.join(valuesSqlList);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst onConflictSql = onConflict ? sql` on conflict ${onConflict}` : undefined;\n\n\t\t// if (isSingleValue && valuesSqlList.length === 0){\n\t\t// \treturn sql`insert into ${table} default values ${onConflictSql}${returningSql}`;\n\t\t// }\n\n\t\treturn sql`${withSql}insert into ${table} ${insertOrder} values ${valuesSql}${onConflictSql}${returningSql}`;\n\t}\n\n\tsqlToQuery(sql: SQL): QueryWithTypings {\n\t\treturn sql.toQuery({\n\t\t\tescapeName: this.escapeName,\n\t\t\tescapeParam: this.escapeParam,\n\t\t\tescapeString: this.escapeString,\n\t\t});\n\t}\n\n\tbuildRelationalQuery({\n\t\tfullSchema,\n\t\tschema,\n\t\ttableNamesMap,\n\t\ttable,\n\t\ttableConfig,\n\t\tqueryConfig: config,\n\t\ttableAlias,\n\t\tnestedQueryRelation,\n\t\tjoinOn,\n\t}: {\n\t\tfullSchema: Record<string, unknown>;\n\t\tschema: TablesRelationalConfig;\n\t\ttableNamesMap: Record<string, string>;\n\t\ttable: SQLiteTable;\n\t\ttableConfig: TableRelationalConfig;\n\t\tqueryConfig: true | DBQueryConfig<'many', true>;\n\t\ttableAlias: string;\n\t\tnestedQueryRelation?: Relation;\n\t\tjoinOn?: SQL;\n\t}): BuildRelationalQueryResult<SQLiteTable, SQLiteColumn> {\n\t\tlet selection: BuildRelationalQueryResult<SQLiteTable, SQLiteColumn>['selection'] = [];\n\t\tlet limit, offset, orderBy: SQLiteSelectConfig['orderBy'] = [], where;\n\t\tconst joins: SQLiteSelectJoinConfig[] = [];\n\n\t\tif (config === true) {\n\t\t\tconst selectionEntries = Object.entries(tableConfig.columns);\n\t\t\tselection = selectionEntries.map((\n\t\t\t\t[key, value],\n\t\t\t) => ({\n\t\t\t\tdbKey: value.name,\n\t\t\t\ttsKey: key,\n\t\t\t\tfield: aliasedTableColumn(value as SQLiteColumn, tableAlias),\n\t\t\t\trelationTableTsKey: undefined,\n\t\t\t\tisJson: false,\n\t\t\t\tselection: [],\n\t\t\t}));\n\t\t} else {\n\t\t\tconst aliasedColumns = Object.fromEntries(\n\t\t\t\tObject.entries(tableConfig.columns).map(([key, value]) => [key, aliasedTableColumn(value, tableAlias)]),\n\t\t\t);\n\n\t\t\tif (config.where) {\n\t\t\t\tconst whereSql = typeof config.where === 'function'\n\t\t\t\t\t? config.where(aliasedColumns, getOperators())\n\t\t\t\t\t: config.where;\n\t\t\t\twhere = whereSql && mapColumnsInSQLToAlias(whereSql, tableAlias);\n\t\t\t}\n\n\t\t\tconst fieldsSelection: { tsKey: string; value: SQLiteColumn | SQL.Aliased }[] = [];\n\t\t\tlet selectedColumns: string[] = [];\n\n\t\t\t// Figure out which columns to select\n\t\t\tif (config.columns) {\n\t\t\t\tlet isIncludeMode = false;\n\n\t\t\t\tfor (const [field, value] of Object.entries(config.columns)) {\n\t\t\t\t\tif (value === undefined) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (field in tableConfig.columns) {\n\t\t\t\t\t\tif (!isIncludeMode && value === true) {\n\t\t\t\t\t\t\tisIncludeMode = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tselectedColumns.push(field);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (selectedColumns.length > 0) {\n\t\t\t\t\tselectedColumns = isIncludeMode\n\t\t\t\t\t\t? selectedColumns.filter((c) => config.columns?.[c] === true)\n\t\t\t\t\t\t: Object.keys(tableConfig.columns).filter((key) => !selectedColumns.includes(key));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Select all columns if selection is not specified\n\t\t\t\tselectedColumns = Object.keys(tableConfig.columns);\n\t\t\t}\n\n\t\t\tfor (const field of selectedColumns) {\n\t\t\t\tconst column = tableConfig.columns[field]! as SQLiteColumn;\n\t\t\t\tfieldsSelection.push({ tsKey: field, value: column });\n\t\t\t}\n\n\t\t\tlet selectedRelations: {\n\t\t\t\ttsKey: string;\n\t\t\t\tqueryConfig: true | DBQueryConfig<'many', false>;\n\t\t\t\trelation: Relation;\n\t\t\t}[] = [];\n\n\t\t\t// Figure out which relations to select\n\t\t\tif (config.with) {\n\t\t\t\tselectedRelations = Object.entries(config.with)\n\t\t\t\t\t.filter((entry): entry is [typeof entry[0], NonNullable<typeof entry[1]>] => !!entry[1])\n\t\t\t\t\t.map(([tsKey, queryConfig]) => ({ tsKey, queryConfig, relation: tableConfig.relations[tsKey]! }));\n\t\t\t}\n\n\t\t\tlet extras;\n\n\t\t\t// Figure out which extras to select\n\t\t\tif (config.extras) {\n\t\t\t\textras = typeof config.extras === 'function'\n\t\t\t\t\t? config.extras(aliasedColumns, { sql })\n\t\t\t\t\t: config.extras;\n\t\t\t\tfor (const [tsKey, value] of Object.entries(extras)) {\n\t\t\t\t\tfieldsSelection.push({\n\t\t\t\t\t\ttsKey,\n\t\t\t\t\t\tvalue: mapColumnsInAliasedSQLToAlias(value, tableAlias),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Transform `fieldsSelection` into `selection`\n\t\t\t// `fieldsSelection` shouldn't be used after this point\n\t\t\tfor (const { tsKey, value } of fieldsSelection) {\n\t\t\t\tselection.push({\n\t\t\t\t\tdbKey: is(value, SQL.Aliased) ? value.fieldAlias : tableConfig.columns[tsKey]!.name,\n\t\t\t\t\ttsKey,\n\t\t\t\t\tfield: is(value, Column) ? aliasedTableColumn(value, tableAlias) : value,\n\t\t\t\t\trelationTableTsKey: undefined,\n\t\t\t\t\tisJson: false,\n\t\t\t\t\tselection: [],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet orderByOrig = typeof config.orderBy === 'function'\n\t\t\t\t? config.orderBy(aliasedColumns, getOrderByOperators())\n\t\t\t\t: config.orderBy ?? [];\n\t\t\tif (!Array.isArray(orderByOrig)) {\n\t\t\t\torderByOrig = [orderByOrig];\n\t\t\t}\n\t\t\torderBy = orderByOrig.map((orderByValue) => {\n\t\t\t\tif (is(orderByValue, Column)) {\n\t\t\t\t\treturn aliasedTableColumn(orderByValue, tableAlias) as SQLiteColumn;\n\t\t\t\t}\n\t\t\t\treturn mapColumnsInSQLToAlias(orderByValue, tableAlias);\n\t\t\t});\n\n\t\t\tlimit = config.limit;\n\t\t\toffset = config.offset;\n\n\t\t\t// Process all relations\n\t\t\tfor (\n\t\t\t\tconst {\n\t\t\t\t\ttsKey: selectedRelationTsKey,\n\t\t\t\t\tqueryConfig: selectedRelationConfigValue,\n\t\t\t\t\trelation,\n\t\t\t\t} of selectedRelations\n\t\t\t) {\n\t\t\t\tconst normalizedRelation = normalizeRelation(schema, tableNamesMap, relation);\n\t\t\t\tconst relationTableName = relation.referencedTable[Table.Symbol.Name];\n\t\t\t\tconst relationTableTsName = tableNamesMap[relationTableName]!;\n\t\t\t\tconst relationTableAlias = `${tableAlias}_${selectedRelationTsKey}`;\n\t\t\t\t// const relationTable = schema[relationTableTsName]!;\n\t\t\t\tconst joinOn = and(\n\t\t\t\t\t...normalizedRelation.fields.map((field, i) =>\n\t\t\t\t\t\teq(\n\t\t\t\t\t\t\taliasedTableColumn(normalizedRelation.references[i]!, relationTableAlias),\n\t\t\t\t\t\t\taliasedTableColumn(field, tableAlias),\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tconst builtRelation = this.buildRelationalQuery({\n\t\t\t\t\tfullSchema,\n\t\t\t\t\tschema,\n\t\t\t\t\ttableNamesMap,\n\t\t\t\t\ttable: fullSchema[relationTableTsName] as SQLiteTable,\n\t\t\t\t\ttableConfig: schema[relationTableTsName]!,\n\t\t\t\t\tqueryConfig: is(relation, One)\n\t\t\t\t\t\t? (selectedRelationConfigValue === true\n\t\t\t\t\t\t\t? { limit: 1 }\n\t\t\t\t\t\t\t: { ...selectedRelationConfigValue, limit: 1 })\n\t\t\t\t\t\t: selectedRelationConfigValue,\n\t\t\t\t\ttableAlias: relationTableAlias,\n\t\t\t\t\tjoinOn,\n\t\t\t\t\tnestedQueryRelation: relation,\n\t\t\t\t});\n\t\t\t\tconst field = (sql`(${builtRelation.sql})`).as(selectedRelationTsKey);\n\t\t\t\tselection.push({\n\t\t\t\t\tdbKey: selectedRelationTsKey,\n\t\t\t\t\ttsKey: selectedRelationTsKey,\n\t\t\t\t\tfield,\n\t\t\t\t\trelationTableTsKey: relationTableTsName,\n\t\t\t\t\tisJson: true,\n\t\t\t\t\tselection: builtRelation.selection,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (selection.length === 0) {\n\t\t\tthrow new DrizzleError({\n\t\t\t\tmessage:\n\t\t\t\t\t`No fields selected for table \"${tableConfig.tsName}\" (\"${tableAlias}\"). You need to have at least one item in \"columns\", \"with\" or \"extras\". If you need to select all columns, omit the \"columns\" key or set it to undefined.`,\n\t\t\t});\n\t\t}\n\n\t\tlet result;\n\n\t\twhere = and(joinOn, where);\n\n\t\tif (nestedQueryRelation) {\n\t\t\tlet field = sql`json_array(${\n\t\t\t\tsql.join(\n\t\t\t\t\tselection.map(({ field }) =>\n\t\t\t\t\t\tis(field, SQLiteColumn) ? sql.identifier(field.name) : is(field, SQL.Aliased) ? field.sql : field\n\t\t\t\t\t),\n\t\t\t\t\tsql`, `,\n\t\t\t\t)\n\t\t\t})`;\n\t\t\tif (is(nestedQueryRelation, Many)) {\n\t\t\t\tfield = sql`coalesce(json_group_array(${field}), json_array())`;\n\t\t\t}\n\t\t\tconst nestedSelection = [{\n\t\t\t\tdbKey: 'data',\n\t\t\t\ttsKey: 'data',\n\t\t\t\tfield: field.as('data'),\n\t\t\t\tisJson: true,\n\t\t\t\trelationTableTsKey: tableConfig.tsName,\n\t\t\t\tselection,\n\t\t\t}];\n\n\t\t\tconst needsSubquery = limit !== undefined || offset !== undefined || orderBy.length > 0;\n\n\t\t\tif (needsSubquery) {\n\t\t\t\tresult = this.buildSelectQuery({\n\t\t\t\t\ttable: aliasedTable(table, tableAlias),\n\t\t\t\t\tfields: {},\n\t\t\t\t\tfieldsFlat: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpath: [],\n\t\t\t\t\t\t\tfield: sql.raw('*'),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\twhere,\n\t\t\t\t\tlimit,\n\t\t\t\t\toffset,\n\t\t\t\t\torderBy,\n\t\t\t\t\tsetOperators: [],\n\t\t\t\t});\n\n\t\t\t\twhere = undefined;\n\t\t\t\tlimit = undefined;\n\t\t\t\toffset = undefined;\n\t\t\t\torderBy = undefined;\n\t\t\t} else {\n\t\t\t\tresult = aliasedTable(table, tableAlias);\n\t\t\t}\n\n\t\t\tresult = this.buildSelectQuery({\n\t\t\t\ttable: is(result, SQLiteTable) ? result : new Subquery(result, {}, tableAlias),\n\t\t\t\tfields: {},\n\t\t\t\tfieldsFlat: nestedSelection.map(({ field }) => ({\n\t\t\t\t\tpath: [],\n\t\t\t\t\tfield: is(field, Column) ? aliasedTableColumn(field, tableAlias) : field,\n\t\t\t\t})),\n\t\t\t\tjoins,\n\t\t\t\twhere,\n\t\t\t\tlimit,\n\t\t\t\toffset,\n\t\t\t\torderBy,\n\t\t\t\tsetOperators: [],\n\t\t\t});\n\t\t} else {\n\t\t\tresult = this.buildSelectQuery({\n\t\t\t\ttable: aliasedTable(table, tableAlias),\n\t\t\t\tfields: {},\n\t\t\t\tfieldsFlat: selection.map(({ field }) => ({\n\t\t\t\t\tpath: [],\n\t\t\t\t\tfield: is(field, Column) ? aliasedTableColumn(field, tableAlias) : field,\n\t\t\t\t})),\n\t\t\t\tjoins,\n\t\t\t\twhere,\n\t\t\t\tlimit,\n\t\t\t\toffset,\n\t\t\t\torderBy,\n\t\t\t\tsetOperators: [],\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\ttableTsKey: tableConfig.tsName,\n\t\t\tsql: result,\n\t\t\tselection,\n\t\t};\n\t}\n}\n\nexport class SQLiteSyncDialect extends SQLiteDialect {\n\tstatic readonly [entityKind]: string = 'SQLiteSyncDialect';\n\n\tmigrate(\n\t\tmigrations: MigrationMeta[],\n\t\tsession: SQLiteSession<'sync', unknown, Record<string, unknown>, TablesRelationalConfig>,\n\t\tconfig?: string | MigrationConfig,\n\t): void {\n\t\tconst migrationsTable = config === undefined\n\t\t\t? '__drizzle_migrations'\n\t\t\t: typeof config === 'string'\n\t\t\t? '__drizzle_migrations'\n\t\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric\n\t\t\t)\n\t\t`;\n\t\tsession.run(migrationTableCreate);\n\n\t\tconst dbMigrations = session.values<[number, string, string]>(\n\t\t\tsql`SELECT id, hash, created_at FROM ${sql.identifier(migrationsTable)} ORDER BY created_at DESC LIMIT 1`,\n\t\t);\n\n\t\tconst lastDbMigration = dbMigrations[0] ?? undefined;\n\t\tsession.run(sql`BEGIN`);\n\n\t\ttry {\n\t\t\tfor (const migration of migrations) {\n\t\t\t\tif (!lastDbMigration || Number(lastDbMigration[2])! < migration.folderMillis) {\n\t\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\t\tsession.run(sql.raw(stmt));\n\t\t\t\t\t}\n\t\t\t\t\tsession.run(\n\t\t\t\t\t\tsql`INSERT INTO ${\n\t\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t\t} (\"hash\", \"created_at\") VALUES(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsession.run(sql`COMMIT`);\n\t\t} catch (e) {\n\t\t\tsession.run(sql`ROLLBACK`);\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport class SQLiteAsyncDialect extends SQLiteDialect {\n\tstatic readonly [entityKind]: string = 'SQLiteAsyncDialect';\n\n\tasync migrate(\n\t\tmigrations: MigrationMeta[],\n\t\tsession: SQLiteSession<'async', unknown, Record<string, unknown>, TablesRelationalConfig>,\n\t\tconfig?: string | MigrationConfig,\n\t): Promise<void> {\n\t\tconst migrationsTable = config === undefined\n\t\t\t? '__drizzle_migrations'\n\t\t\t: typeof config === 'string'\n\t\t\t\t? '__drizzle_migrations'\n\t\t\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric\n\t\t\t)\n\t\t`;\n\t\tawait session.run(migrationTableCreate);\n\n\t\tconst dbMigrations = await session.values<[number, string, string]>(\n\t\t\tsql`SELECT id, hash, created_at FROM ${sql.identifier(migrationsTable)} ORDER BY created_at DESC LIMIT 1`,\n\t\t);\n\n\t\tconst lastDbMigration = dbMigrations[0] ?? undefined;\n\n\t\tawait session.transaction(async (tx) => {\n\t\t\tfor (const migration of migrations) {\n\t\t\t\tif (!lastDbMigration || Number(lastDbMigration[2])! < migration.folderMillis) {\n\t\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\t\tawait tx.run(sql.raw(stmt));\n\t\t\t\t\t}\n\t\t\t\t\tawait tx.run(\n\t\t\t\t\t\tsql`INSERT INTO ${\n\t\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t\t} (\"hash\", \"created_at\") VALUES(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n"],"mappings":"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","names":["import_sql","import_table","table","sql","joinOn","field"]}
|
|
1
|
+
{"version":3,"sources":["../../src/sqlite-core/dialect.ts"],"sourcesContent":["import { aliasedTable, aliasedTableColumn, mapColumnsInAliasedSQLToAlias, mapColumnsInSQLToAlias } from '~/alias.ts';\nimport type { AnyColumn } from '~/column.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { DrizzleError } from '~/errors.ts';\nimport type { MigrationConfig, MigrationMeta } from '~/migrator.ts';\nimport {\n\ttype BuildRelationalQueryResult,\n\ttype DBQueryConfig,\n\tgetOperators,\n\tgetOrderByOperators,\n\tMany,\n\tnormalizeRelation,\n\tOne,\n\ttype Relation,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { Name } from '~/sql/index.ts';\nimport { and, eq } from '~/sql/index.ts';\nimport { Param, type QueryWithTypings, SQL, sql, type SQLChunk } from '~/sql/sql.ts';\nimport { SQLiteColumn } from '~/sqlite-core/columns/index.ts';\nimport type { SQLiteDeleteConfig, SQLiteInsertConfig, SQLiteUpdateConfig } from '~/sqlite-core/query-builders/index.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { Subquery, SubqueryConfig } from '~/subquery.ts';\nimport { getTableName, Table } from '~/table.ts';\nimport { orderSelectedFields, type UpdateSet } from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type {\n\tSelectedFieldsOrdered,\n\tSQLiteSelectConfig,\n\tSQLiteSelectJoinConfig,\n} from './query-builders/select.types.ts';\nimport type { SQLiteSession } from './session.ts';\nimport { SQLiteViewBase } from './view-base.ts';\n\nexport abstract class SQLiteDialect {\n\tstatic readonly [entityKind]: string = 'SQLiteDialect';\n\n\tescapeName(name: string): string {\n\t\treturn `\"${name}\"`;\n\t}\n\n\tescapeParam(_num: number): string {\n\t\treturn '?';\n\t}\n\n\tescapeString(str: string): string {\n\t\treturn `'${str.replace(/'/g, \"''\")}'`;\n\t}\n\n\tprivate buildWithCTE(queries: Subquery[] | undefined): SQL | undefined {\n\t\tif (!queries?.length) return undefined;\n\n\t\tconst withSqlChunks = [sql`with `];\n\t\tfor (const [i, w] of queries.entries()) {\n\t\t\twithSqlChunks.push(sql`${sql.identifier(w[SubqueryConfig].alias)} as (${w[SubqueryConfig].sql})`);\n\t\t\tif (i < queries.length - 1) {\n\t\t\t\twithSqlChunks.push(sql`, `);\n\t\t\t}\n\t\t}\n\t\twithSqlChunks.push(sql` `);\n\t\treturn sql.join(withSqlChunks);\n\t}\n\n\tbuildDeleteQuery({ table, where, returning, withList }: SQLiteDeleteConfig): SQL {\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\treturn sql`${withSql}delete from ${table}${whereSql}${returningSql}`;\n\t}\n\n\tbuildUpdateSet(table: SQLiteTable, set: UpdateSet): SQL {\n\t\tconst setEntries = Object.entries(set);\n\n\t\tconst setSize = setEntries.length;\n\t\treturn sql.join(\n\t\t\tsetEntries\n\t\t\t\t.flatMap(([colName, value], i): SQL[] => {\n\t\t\t\t\tconst col: SQLiteColumn = table[Table.Symbol.Columns][colName]!;\n\t\t\t\t\tconst res = sql`${sql.identifier(col.name)} = ${value}`;\n\t\t\t\t\tif (i < setSize - 1) {\n\t\t\t\t\t\treturn [res, sql.raw(', ')];\n\t\t\t\t\t}\n\t\t\t\t\treturn [res];\n\t\t\t\t}),\n\t\t);\n\t}\n\n\tbuildUpdateQuery({ table, set, where, returning, withList }: SQLiteUpdateConfig): SQL {\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst setSql = this.buildUpdateSet(table, set);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\treturn sql`${withSql}update ${table} set ${setSql}${whereSql}${returningSql}`;\n\t}\n\n\t/**\n\t * Builds selection SQL with provided fields/expressions\n\t *\n\t * Examples:\n\t *\n\t * `select <selection> from`\n\t *\n\t * `insert ... returning <selection>`\n\t *\n\t * If `isSingleTable` is true, then columns won't be prefixed with table name\n\t */\n\tprivate buildSelection(\n\t\tfields: SelectedFieldsOrdered,\n\t\t{ isSingleTable = false }: { isSingleTable?: boolean } = {},\n\t): SQL {\n\t\tconst columnsLen = fields.length;\n\n\t\tconst chunks = fields\n\t\t\t.flatMap(({ field }, i) => {\n\t\t\t\tconst chunk: SQLChunk[] = [];\n\n\t\t\t\tif (is(field, SQL.Aliased) && field.isSelectionField) {\n\t\t\t\t\tchunk.push(sql.identifier(field.fieldAlias));\n\t\t\t\t} else if (is(field, SQL.Aliased) || is(field, SQL)) {\n\t\t\t\t\tconst query = is(field, SQL.Aliased) ? field.sql : field;\n\n\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tnew SQL(\n\t\t\t\t\t\t\t\tquery.queryChunks.map((c) => {\n\t\t\t\t\t\t\t\t\tif (is(c, Column)) {\n\t\t\t\t\t\t\t\t\t\treturn sql.identifier(c.name);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn c;\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunk.push(query);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (is(field, SQL.Aliased)) {\n\t\t\t\t\t\tchunk.push(sql` as ${sql.identifier(field.fieldAlias)}`);\n\t\t\t\t\t}\n\t\t\t\t} else if (is(field, Column)) {\n\t\t\t\t\tconst tableName = field.table[Table.Symbol.Name];\n\t\t\t\t\tconst columnName = field.name;\n\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\tchunk.push(sql.identifier(columnName));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunk.push(sql`${sql.identifier(tableName)}.${sql.identifier(columnName)}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (i < columnsLen - 1) {\n\t\t\t\t\tchunk.push(sql`, `);\n\t\t\t\t}\n\n\t\t\t\treturn chunk;\n\t\t\t});\n\n\t\treturn sql.join(chunks);\n\t}\n\n\tbuildSelectQuery(\n\t\t{\n\t\t\twithList,\n\t\t\tfields,\n\t\t\tfieldsFlat,\n\t\t\twhere,\n\t\t\thaving,\n\t\t\ttable,\n\t\t\tjoins,\n\t\t\torderBy,\n\t\t\tgroupBy,\n\t\t\tlimit,\n\t\t\toffset,\n\t\t\tdistinct,\n\t\t\tsetOperators,\n\t\t}: SQLiteSelectConfig,\n\t): SQL {\n\t\tconst fieldsList = fieldsFlat ?? orderSelectedFields<SQLiteColumn>(fields);\n\t\tfor (const f of fieldsList) {\n\t\t\tif (\n\t\t\t\tis(f.field, Column)\n\t\t\t\t&& getTableName(f.field.table)\n\t\t\t\t\t!== (is(table, Subquery)\n\t\t\t\t\t\t? table[SubqueryConfig].alias\n\t\t\t\t\t\t: is(table, SQLiteViewBase)\n\t\t\t\t\t\t? table[ViewBaseConfig].name\n\t\t\t\t\t\t: is(table, SQL)\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: getTableName(table))\n\t\t\t\t&& !((table) =>\n\t\t\t\t\tjoins?.some(({ alias }) =>\n\t\t\t\t\t\talias === (table[Table.Symbol.IsAlias] ? getTableName(table) : table[Table.Symbol.BaseName])\n\t\t\t\t\t))(f.field.table)\n\t\t\t) {\n\t\t\t\tconst tableName = getTableName(f.field.table);\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Your \"${\n\t\t\t\t\t\tf.path.join('->')\n\t\t\t\t\t}\" field references a column \"${tableName}\".\"${f.field.name}\", but the table \"${tableName}\" is not part of the query! Did you forget to join it?`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst isSingleTable = !joins || joins.length === 0;\n\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst distinctSql = distinct ? sql` distinct` : undefined;\n\n\t\tconst selection = this.buildSelection(fieldsList, { isSingleTable });\n\n\t\tconst tableSql = (() => {\n\t\t\tif (is(table, Table) && table[Table.Symbol.OriginalName] !== table[Table.Symbol.Name]) {\n\t\t\t\treturn sql`${sql.identifier(table[Table.Symbol.OriginalName])} ${sql.identifier(table[Table.Symbol.Name])}`;\n\t\t\t}\n\n\t\t\treturn table;\n\t\t})();\n\n\t\tconst joinsArray: SQL[] = [];\n\n\t\tif (joins) {\n\t\t\tfor (const [index, joinMeta] of joins.entries()) {\n\t\t\t\tif (index === 0) {\n\t\t\t\t\tjoinsArray.push(sql` `);\n\t\t\t\t}\n\t\t\t\tconst table = joinMeta.table;\n\n\t\t\t\tif (is(table, SQLiteTable)) {\n\t\t\t\t\tconst tableName = table[SQLiteTable.Symbol.Name];\n\t\t\t\t\tconst tableSchema = table[SQLiteTable.Symbol.Schema];\n\t\t\t\t\tconst origTableName = table[SQLiteTable.Symbol.OriginalName];\n\t\t\t\t\tconst alias = tableName === origTableName ? undefined : joinMeta.alias;\n\t\t\t\t\tjoinsArray.push(\n\t\t\t\t\t\tsql`${sql.raw(joinMeta.joinType)} join ${tableSchema ? sql`${sql.identifier(tableSchema)}.` : undefined}${\n\t\t\t\t\t\t\tsql.identifier(origTableName)\n\t\t\t\t\t\t}${alias && sql` ${sql.identifier(alias)}`} on ${joinMeta.on}`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tjoinsArray.push(\n\t\t\t\t\t\tsql`${sql.raw(joinMeta.joinType)} join ${table} on ${joinMeta.on}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (index < joins.length - 1) {\n\t\t\t\t\tjoinsArray.push(sql` `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst joinsSql = sql.join(joinsArray);\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\tconst havingSql = having ? sql` having ${having}` : undefined;\n\n\t\tconst orderByList: (SQLiteColumn | SQL | SQL.Aliased)[] = [];\n\t\tif (orderBy) {\n\t\t\tfor (const [index, orderByValue] of orderBy.entries()) {\n\t\t\t\torderByList.push(orderByValue);\n\n\t\t\t\tif (index < orderBy.length - 1) {\n\t\t\t\t\torderByList.push(sql`, `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst groupByList: (SQL | AnyColumn | SQL.Aliased)[] = [];\n\t\tif (groupBy) {\n\t\t\tfor (const [index, groupByValue] of groupBy.entries()) {\n\t\t\t\tgroupByList.push(groupByValue);\n\n\t\t\t\tif (index < groupBy.length - 1) {\n\t\t\t\t\tgroupByList.push(sql`, `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst groupBySql = groupByList.length > 0 ? sql` group by ${sql.join(groupByList)}` : undefined;\n\n\t\tconst orderBySql = orderByList.length > 0 ? sql` order by ${sql.join(orderByList)}` : undefined;\n\n\t\tconst limitSql = limit ? sql` limit ${limit}` : undefined;\n\n\t\tconst offsetSql = offset ? sql` offset ${offset}` : undefined;\n\n\t\tconst finalQuery =\n\t\t\tsql`${withSql}select${distinctSql} ${selection} from ${tableSql}${joinsSql}${whereSql}${groupBySql}${havingSql}${orderBySql}${limitSql}${offsetSql}`;\n\n\t\tif (setOperators.length > 0) {\n\t\t\treturn this.buildSetOperations(finalQuery, setOperators);\n\t\t}\n\n\t\treturn finalQuery;\n\t}\n\n\tbuildSetOperations(leftSelect: SQL, setOperators: SQLiteSelectConfig['setOperators']): SQL {\n\t\tconst [setOperator, ...rest] = setOperators;\n\n\t\tif (!setOperator) {\n\t\t\tthrow new Error('Cannot pass undefined values to any set operator');\n\t\t}\n\n\t\tif (rest.length === 0) {\n\t\t\treturn this.buildSetOperationQuery({ leftSelect, setOperator });\n\t\t}\n\n\t\t// Some recursive magic here\n\t\treturn this.buildSetOperations(\n\t\t\tthis.buildSetOperationQuery({ leftSelect, setOperator }),\n\t\t\trest,\n\t\t);\n\t}\n\n\tbuildSetOperationQuery({\n\t\tleftSelect,\n\t\tsetOperator: { type, isAll, rightSelect, limit, orderBy, offset },\n\t}: { leftSelect: SQL; setOperator: SQLiteSelectConfig['setOperators'][number] }): SQL {\n\t\t// SQLite doesn't support parenthesis in set operations\n\t\tconst leftChunk = sql`${leftSelect.getSQL()} `;\n\t\tconst rightChunk = sql`${rightSelect.getSQL()}`;\n\n\t\tlet orderBySql;\n\t\tif (orderBy && orderBy.length > 0) {\n\t\t\tconst orderByValues: (SQL<unknown> | Name)[] = [];\n\n\t\t\t// The next bit is necessary because the sql operator replaces ${table.column} with `table`.`column`\n\t\t\t// which is invalid Sql syntax, Table from one of the SELECTs cannot be used in global ORDER clause\n\t\t\tfor (const singleOrderBy of orderBy) {\n\t\t\t\tif (is(singleOrderBy, SQLiteColumn)) {\n\t\t\t\t\torderByValues.push(sql.identifier(singleOrderBy.name));\n\t\t\t\t} else if (is(singleOrderBy, SQL)) {\n\t\t\t\t\tfor (let i = 0; i < singleOrderBy.queryChunks.length; i++) {\n\t\t\t\t\t\tconst chunk = singleOrderBy.queryChunks[i];\n\n\t\t\t\t\t\tif (is(chunk, SQLiteColumn)) {\n\t\t\t\t\t\t\tsingleOrderBy.queryChunks[i] = sql.identifier(chunk.name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\torderByValues.push(sql`${singleOrderBy}`);\n\t\t\t\t} else {\n\t\t\t\t\torderByValues.push(sql`${singleOrderBy}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\torderBySql = sql` order by ${sql.join(orderByValues, sql`, `)}`;\n\t\t}\n\n\t\tconst limitSql = limit ? sql` limit ${limit}` : undefined;\n\n\t\tconst operatorChunk = sql.raw(`${type} ${isAll ? 'all ' : ''}`);\n\n\t\tconst offsetSql = offset ? sql` offset ${offset}` : undefined;\n\n\t\treturn sql`${leftChunk}${operatorChunk}${rightChunk}${orderBySql}${limitSql}${offsetSql}`;\n\t}\n\n\tbuildInsertQuery({ table, values, onConflict, returning, withList }: SQLiteInsertConfig): SQL {\n\t\t// const isSingleValue = values.length === 1;\n\t\tconst valuesSqlList: ((SQLChunk | SQL)[] | SQL)[] = [];\n\t\tconst columns: Record<string, SQLiteColumn> = table[Table.Symbol.Columns];\n\n\t\tconst colEntries: [string, SQLiteColumn][] = Object.entries(columns);\n\t\tconst insertOrder = colEntries.map(([, column]) => sql.identifier(column.name));\n\n\t\tfor (const [valueIndex, value] of values.entries()) {\n\t\t\tconst valueList: (SQLChunk | SQL)[] = [];\n\t\t\tfor (const [fieldName, col] of colEntries) {\n\t\t\t\tconst colValue = value[fieldName];\n\t\t\t\tif (colValue === undefined || (is(colValue, Param) && colValue.value === undefined)) {\n\t\t\t\t\tlet defaultValue;\n\t\t\t\t\tif (col.default !== null && col.default !== undefined) {\n\t\t\t\t\t\tdefaultValue = is(col.default, SQL) ? col.default : sql.param(col.default, col);\n\t\t\t\t\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t\t\t\t\t} else if (col.defaultFn !== undefined) {\n\t\t\t\t\t\tconst defaultFnResult = col.defaultFn();\n\t\t\t\t\t\tdefaultValue = is(defaultFnResult, SQL) ? defaultFnResult : sql.param(defaultFnResult, col);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdefaultValue = sql`null`;\n\t\t\t\t\t}\n\t\t\t\t\tvalueList.push(defaultValue);\n\t\t\t\t} else {\n\t\t\t\t\tvalueList.push(colValue);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvaluesSqlList.push(valueList);\n\t\t\tif (valueIndex < values.length - 1) {\n\t\t\t\tvaluesSqlList.push(sql`, `);\n\t\t\t}\n\t\t}\n\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst valuesSql = sql.join(valuesSqlList);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst onConflictSql = onConflict ? sql` on conflict ${onConflict}` : undefined;\n\n\t\t// if (isSingleValue && valuesSqlList.length === 0){\n\t\t// \treturn sql`insert into ${table} default values ${onConflictSql}${returningSql}`;\n\t\t// }\n\n\t\treturn sql`${withSql}insert into ${table} ${insertOrder} values ${valuesSql}${onConflictSql}${returningSql}`;\n\t}\n\n\tsqlToQuery(sql: SQL): QueryWithTypings {\n\t\treturn sql.toQuery({\n\t\t\tescapeName: this.escapeName,\n\t\t\tescapeParam: this.escapeParam,\n\t\t\tescapeString: this.escapeString,\n\t\t});\n\t}\n\n\tbuildRelationalQuery({\n\t\tfullSchema,\n\t\tschema,\n\t\ttableNamesMap,\n\t\ttable,\n\t\ttableConfig,\n\t\tqueryConfig: config,\n\t\ttableAlias,\n\t\tnestedQueryRelation,\n\t\tjoinOn,\n\t}: {\n\t\tfullSchema: Record<string, unknown>;\n\t\tschema: TablesRelationalConfig;\n\t\ttableNamesMap: Record<string, string>;\n\t\ttable: SQLiteTable;\n\t\ttableConfig: TableRelationalConfig;\n\t\tqueryConfig: true | DBQueryConfig<'many', true>;\n\t\ttableAlias: string;\n\t\tnestedQueryRelation?: Relation;\n\t\tjoinOn?: SQL;\n\t}): BuildRelationalQueryResult<SQLiteTable, SQLiteColumn> {\n\t\tlet selection: BuildRelationalQueryResult<SQLiteTable, SQLiteColumn>['selection'] = [];\n\t\tlet limit, offset, orderBy: SQLiteSelectConfig['orderBy'] = [], where;\n\t\tconst joins: SQLiteSelectJoinConfig[] = [];\n\n\t\tif (config === true) {\n\t\t\tconst selectionEntries = Object.entries(tableConfig.columns);\n\t\t\tselection = selectionEntries.map((\n\t\t\t\t[key, value],\n\t\t\t) => ({\n\t\t\t\tdbKey: value.name,\n\t\t\t\ttsKey: key,\n\t\t\t\tfield: aliasedTableColumn(value as SQLiteColumn, tableAlias),\n\t\t\t\trelationTableTsKey: undefined,\n\t\t\t\tisJson: false,\n\t\t\t\tselection: [],\n\t\t\t}));\n\t\t} else {\n\t\t\tconst aliasedColumns = Object.fromEntries(\n\t\t\t\tObject.entries(tableConfig.columns).map(([key, value]) => [key, aliasedTableColumn(value, tableAlias)]),\n\t\t\t);\n\n\t\t\tif (config.where) {\n\t\t\t\tconst whereSql = typeof config.where === 'function'\n\t\t\t\t\t? config.where(aliasedColumns, getOperators())\n\t\t\t\t\t: config.where;\n\t\t\t\twhere = whereSql && mapColumnsInSQLToAlias(whereSql, tableAlias);\n\t\t\t}\n\n\t\t\tconst fieldsSelection: { tsKey: string; value: SQLiteColumn | SQL.Aliased }[] = [];\n\t\t\tlet selectedColumns: string[] = [];\n\n\t\t\t// Figure out which columns to select\n\t\t\tif (config.columns) {\n\t\t\t\tlet isIncludeMode = false;\n\n\t\t\t\tfor (const [field, value] of Object.entries(config.columns)) {\n\t\t\t\t\tif (value === undefined) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (field in tableConfig.columns) {\n\t\t\t\t\t\tif (!isIncludeMode && value === true) {\n\t\t\t\t\t\t\tisIncludeMode = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tselectedColumns.push(field);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (selectedColumns.length > 0) {\n\t\t\t\t\tselectedColumns = isIncludeMode\n\t\t\t\t\t\t? selectedColumns.filter((c) => config.columns?.[c] === true)\n\t\t\t\t\t\t: Object.keys(tableConfig.columns).filter((key) => !selectedColumns.includes(key));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Select all columns if selection is not specified\n\t\t\t\tselectedColumns = Object.keys(tableConfig.columns);\n\t\t\t}\n\n\t\t\tfor (const field of selectedColumns) {\n\t\t\t\tconst column = tableConfig.columns[field]! as SQLiteColumn;\n\t\t\t\tfieldsSelection.push({ tsKey: field, value: column });\n\t\t\t}\n\n\t\t\tlet selectedRelations: {\n\t\t\t\ttsKey: string;\n\t\t\t\tqueryConfig: true | DBQueryConfig<'many', false>;\n\t\t\t\trelation: Relation;\n\t\t\t}[] = [];\n\n\t\t\t// Figure out which relations to select\n\t\t\tif (config.with) {\n\t\t\t\tselectedRelations = Object.entries(config.with)\n\t\t\t\t\t.filter((entry): entry is [typeof entry[0], NonNullable<typeof entry[1]>] => !!entry[1])\n\t\t\t\t\t.map(([tsKey, queryConfig]) => ({ tsKey, queryConfig, relation: tableConfig.relations[tsKey]! }));\n\t\t\t}\n\n\t\t\tlet extras;\n\n\t\t\t// Figure out which extras to select\n\t\t\tif (config.extras) {\n\t\t\t\textras = typeof config.extras === 'function'\n\t\t\t\t\t? config.extras(aliasedColumns, { sql })\n\t\t\t\t\t: config.extras;\n\t\t\t\tfor (const [tsKey, value] of Object.entries(extras)) {\n\t\t\t\t\tfieldsSelection.push({\n\t\t\t\t\t\ttsKey,\n\t\t\t\t\t\tvalue: mapColumnsInAliasedSQLToAlias(value, tableAlias),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Transform `fieldsSelection` into `selection`\n\t\t\t// `fieldsSelection` shouldn't be used after this point\n\t\t\tfor (const { tsKey, value } of fieldsSelection) {\n\t\t\t\tselection.push({\n\t\t\t\t\tdbKey: is(value, SQL.Aliased) ? value.fieldAlias : tableConfig.columns[tsKey]!.name,\n\t\t\t\t\ttsKey,\n\t\t\t\t\tfield: is(value, Column) ? aliasedTableColumn(value, tableAlias) : value,\n\t\t\t\t\trelationTableTsKey: undefined,\n\t\t\t\t\tisJson: false,\n\t\t\t\t\tselection: [],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet orderByOrig = typeof config.orderBy === 'function'\n\t\t\t\t? config.orderBy(aliasedColumns, getOrderByOperators())\n\t\t\t\t: config.orderBy ?? [];\n\t\t\tif (!Array.isArray(orderByOrig)) {\n\t\t\t\torderByOrig = [orderByOrig];\n\t\t\t}\n\t\t\torderBy = orderByOrig.map((orderByValue) => {\n\t\t\t\tif (is(orderByValue, Column)) {\n\t\t\t\t\treturn aliasedTableColumn(orderByValue, tableAlias) as SQLiteColumn;\n\t\t\t\t}\n\t\t\t\treturn mapColumnsInSQLToAlias(orderByValue, tableAlias);\n\t\t\t});\n\n\t\t\tlimit = config.limit;\n\t\t\toffset = config.offset;\n\n\t\t\t// Process all relations\n\t\t\tfor (\n\t\t\t\tconst {\n\t\t\t\t\ttsKey: selectedRelationTsKey,\n\t\t\t\t\tqueryConfig: selectedRelationConfigValue,\n\t\t\t\t\trelation,\n\t\t\t\t} of selectedRelations\n\t\t\t) {\n\t\t\t\tconst normalizedRelation = normalizeRelation(schema, tableNamesMap, relation);\n\t\t\t\tconst relationTableName = relation.referencedTable[Table.Symbol.Name];\n\t\t\t\tconst relationTableTsName = tableNamesMap[relationTableName]!;\n\t\t\t\tconst relationTableAlias = `${tableAlias}_${selectedRelationTsKey}`;\n\t\t\t\t// const relationTable = schema[relationTableTsName]!;\n\t\t\t\tconst joinOn = and(\n\t\t\t\t\t...normalizedRelation.fields.map((field, i) =>\n\t\t\t\t\t\teq(\n\t\t\t\t\t\t\taliasedTableColumn(normalizedRelation.references[i]!, relationTableAlias),\n\t\t\t\t\t\t\taliasedTableColumn(field, tableAlias),\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tconst builtRelation = this.buildRelationalQuery({\n\t\t\t\t\tfullSchema,\n\t\t\t\t\tschema,\n\t\t\t\t\ttableNamesMap,\n\t\t\t\t\ttable: fullSchema[relationTableTsName] as SQLiteTable,\n\t\t\t\t\ttableConfig: schema[relationTableTsName]!,\n\t\t\t\t\tqueryConfig: is(relation, One)\n\t\t\t\t\t\t? (selectedRelationConfigValue === true\n\t\t\t\t\t\t\t? { limit: 1 }\n\t\t\t\t\t\t\t: { ...selectedRelationConfigValue, limit: 1 })\n\t\t\t\t\t\t: selectedRelationConfigValue,\n\t\t\t\t\ttableAlias: relationTableAlias,\n\t\t\t\t\tjoinOn,\n\t\t\t\t\tnestedQueryRelation: relation,\n\t\t\t\t});\n\t\t\t\tconst field = (sql`(${builtRelation.sql})`).as(selectedRelationTsKey);\n\t\t\t\tselection.push({\n\t\t\t\t\tdbKey: selectedRelationTsKey,\n\t\t\t\t\ttsKey: selectedRelationTsKey,\n\t\t\t\t\tfield,\n\t\t\t\t\trelationTableTsKey: relationTableTsName,\n\t\t\t\t\tisJson: true,\n\t\t\t\t\tselection: builtRelation.selection,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (selection.length === 0) {\n\t\t\tthrow new DrizzleError({\n\t\t\t\tmessage:\n\t\t\t\t\t`No fields selected for table \"${tableConfig.tsName}\" (\"${tableAlias}\"). You need to have at least one item in \"columns\", \"with\" or \"extras\". If you need to select all columns, omit the \"columns\" key or set it to undefined.`,\n\t\t\t});\n\t\t}\n\n\t\tlet result;\n\n\t\twhere = and(joinOn, where);\n\n\t\tif (nestedQueryRelation) {\n\t\t\tlet field = sql`json_array(${\n\t\t\t\tsql.join(\n\t\t\t\t\tselection.map(({ field }) =>\n\t\t\t\t\t\tis(field, SQLiteColumn) ? sql.identifier(field.name) : is(field, SQL.Aliased) ? field.sql : field\n\t\t\t\t\t),\n\t\t\t\t\tsql`, `,\n\t\t\t\t)\n\t\t\t})`;\n\t\t\tif (is(nestedQueryRelation, Many)) {\n\t\t\t\tfield = sql`coalesce(json_group_array(${field}), json_array())`;\n\t\t\t}\n\t\t\tconst nestedSelection = [{\n\t\t\t\tdbKey: 'data',\n\t\t\t\ttsKey: 'data',\n\t\t\t\tfield: field.as('data'),\n\t\t\t\tisJson: true,\n\t\t\t\trelationTableTsKey: tableConfig.tsName,\n\t\t\t\tselection,\n\t\t\t}];\n\n\t\t\tconst needsSubquery = limit !== undefined || offset !== undefined || orderBy.length > 0;\n\n\t\t\tif (needsSubquery) {\n\t\t\t\tresult = this.buildSelectQuery({\n\t\t\t\t\ttable: aliasedTable(table, tableAlias),\n\t\t\t\t\tfields: {},\n\t\t\t\t\tfieldsFlat: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpath: [],\n\t\t\t\t\t\t\tfield: sql.raw('*'),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\twhere,\n\t\t\t\t\tlimit,\n\t\t\t\t\toffset,\n\t\t\t\t\torderBy,\n\t\t\t\t\tsetOperators: [],\n\t\t\t\t});\n\n\t\t\t\twhere = undefined;\n\t\t\t\tlimit = undefined;\n\t\t\t\toffset = undefined;\n\t\t\t\torderBy = undefined;\n\t\t\t} else {\n\t\t\t\tresult = aliasedTable(table, tableAlias);\n\t\t\t}\n\n\t\t\tresult = this.buildSelectQuery({\n\t\t\t\ttable: is(result, SQLiteTable) ? result : new Subquery(result, {}, tableAlias),\n\t\t\t\tfields: {},\n\t\t\t\tfieldsFlat: nestedSelection.map(({ field }) => ({\n\t\t\t\t\tpath: [],\n\t\t\t\t\tfield: is(field, Column) ? aliasedTableColumn(field, tableAlias) : field,\n\t\t\t\t})),\n\t\t\t\tjoins,\n\t\t\t\twhere,\n\t\t\t\tlimit,\n\t\t\t\toffset,\n\t\t\t\torderBy,\n\t\t\t\tsetOperators: [],\n\t\t\t});\n\t\t} else {\n\t\t\tresult = this.buildSelectQuery({\n\t\t\t\ttable: aliasedTable(table, tableAlias),\n\t\t\t\tfields: {},\n\t\t\t\tfieldsFlat: selection.map(({ field }) => ({\n\t\t\t\t\tpath: [],\n\t\t\t\t\tfield: is(field, Column) ? aliasedTableColumn(field, tableAlias) : field,\n\t\t\t\t})),\n\t\t\t\tjoins,\n\t\t\t\twhere,\n\t\t\t\tlimit,\n\t\t\t\toffset,\n\t\t\t\torderBy,\n\t\t\t\tsetOperators: [],\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\ttableTsKey: tableConfig.tsName,\n\t\t\tsql: result,\n\t\t\tselection,\n\t\t};\n\t}\n}\n\nexport class SQLiteSyncDialect extends SQLiteDialect {\n\tstatic readonly [entityKind]: string = 'SQLiteSyncDialect';\n\n\tmigrate(\n\t\tmigrations: MigrationMeta[],\n\t\tsession: SQLiteSession<'sync', unknown, Record<string, unknown>, TablesRelationalConfig>,\n\t\tconfig?: string | MigrationConfig,\n\t): void {\n\t\tconst migrationsTable = config === undefined\n\t\t\t? '__drizzle_migrations'\n\t\t\t: typeof config === 'string'\n\t\t\t? '__drizzle_migrations'\n\t\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric\n\t\t\t)\n\t\t`;\n\t\tsession.run(migrationTableCreate);\n\n\t\tconst dbMigrations = session.values<[number, string, string]>(\n\t\t\tsql`SELECT id, hash, created_at FROM ${sql.identifier(migrationsTable)} ORDER BY created_at DESC LIMIT 1`,\n\t\t);\n\n\t\tconst lastDbMigration = dbMigrations[0] ?? undefined;\n\t\tsession.run(sql`BEGIN`);\n\n\t\ttry {\n\t\t\tfor (const migration of migrations) {\n\t\t\t\tif (!lastDbMigration || Number(lastDbMigration[2])! < migration.folderMillis) {\n\t\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\t\tsession.run(sql.raw(stmt));\n\t\t\t\t\t}\n\t\t\t\t\tsession.run(\n\t\t\t\t\t\tsql`INSERT INTO ${\n\t\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t\t} (\"hash\", \"created_at\") VALUES(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsession.run(sql`COMMIT`);\n\t\t} catch (e) {\n\t\t\tsession.run(sql`ROLLBACK`);\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport class SQLiteAsyncDialect extends SQLiteDialect {\n\tstatic readonly [entityKind]: string = 'SQLiteAsyncDialect';\n\n\tasync migrate(\n\t\tmigrations: MigrationMeta[],\n\t\tsession: SQLiteSession<'async', unknown, Record<string, unknown>, TablesRelationalConfig>,\n\t\tconfig?: string | MigrationConfig,\n\t): Promise<void> {\n\t\tconst migrationsTable = config === undefined\n\t\t\t? '__drizzle_migrations'\n\t\t\t: typeof config === 'string'\n\t\t\t? '__drizzle_migrations'\n\t\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric\n\t\t\t)\n\t\t`;\n\t\tawait session.run(migrationTableCreate);\n\n\t\tconst dbMigrations = await session.values<[number, string, string]>(\n\t\t\tsql`SELECT id, hash, created_at FROM ${sql.identifier(migrationsTable)} ORDER BY created_at DESC LIMIT 1`,\n\t\t);\n\n\t\tconst lastDbMigration = dbMigrations[0] ?? undefined;\n\n\t\tawait session.transaction(async (tx) => {\n\t\t\tfor (const migration of migrations) {\n\t\t\t\tif (!lastDbMigration || Number(lastDbMigration[2])! < migration.folderMillis) {\n\t\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\t\tawait tx.run(sql.raw(stmt));\n\t\t\t\t\t}\n\t\t\t\t\tawait tx.run(\n\t\t\t\t\t\tsql`INSERT INTO ${\n\t\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t\t} (\"hash\", \"created_at\") VALUES(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n"],"mappings":"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","names":["import_sql","import_table","table","sql","joinOn","field"]}
|