drizzle-orm 1.0.0-beta.22-41a7d21 → 1.0.0-beta.22-bf0fa46
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/bun-sql/sqlite/migrator.cjs +1 -1
- package/bun-sql/sqlite/migrator.cjs.map +1 -1
- package/bun-sql/sqlite/migrator.js +1 -1
- package/bun-sql/sqlite/migrator.js.map +1 -1
- package/d1/migrator.cjs +1 -1
- package/d1/migrator.cjs.map +1 -1
- package/d1/migrator.js +1 -1
- package/d1/migrator.js.map +1 -1
- package/durable-sqlite/migrator.cjs +1 -1
- package/durable-sqlite/migrator.js +1 -1
- package/libsql/migrator.cjs +1 -1
- package/libsql/migrator.cjs.map +1 -1
- package/libsql/migrator.js +1 -1
- package/libsql/migrator.js.map +1 -1
- package/mysql-proxy/migrator.cjs +2 -2
- package/mysql-proxy/migrator.cjs.map +1 -1
- package/mysql-proxy/migrator.js +2 -2
- package/mysql-proxy/migrator.js.map +1 -1
- package/op-sqlite/migrator.cjs +1 -1
- package/op-sqlite/migrator.cjs.map +1 -1
- package/op-sqlite/migrator.js +1 -1
- package/op-sqlite/migrator.js.map +1 -1
- package/package.json +67 -13
- package/pg-proxy/migrator.cjs +2 -2
- package/pg-proxy/migrator.cjs.map +1 -1
- package/pg-proxy/migrator.js +2 -2
- package/pg-proxy/migrator.js.map +1 -1
- package/singlestore-proxy/migrator.cjs +2 -2
- package/singlestore-proxy/migrator.cjs.map +1 -1
- package/singlestore-proxy/migrator.js +2 -2
- package/singlestore-proxy/migrator.js.map +1 -1
- package/sqlite-cloud/migrator.cjs +1 -1
- package/sqlite-cloud/migrator.cjs.map +1 -1
- package/sqlite-cloud/migrator.js +1 -1
- package/sqlite-cloud/migrator.js.map +1 -1
- package/sqlite-core/dialect.cjs +7 -7
- package/sqlite-core/dialect.cjs.map +1 -1
- package/sqlite-core/dialect.d.cts +2 -1
- package/sqlite-core/dialect.d.ts +2 -1
- package/sqlite-core/dialect.js +7 -7
- package/sqlite-core/dialect.js.map +1 -1
- package/sqlite-proxy/migrator.cjs +40 -2
- package/sqlite-proxy/migrator.cjs.map +1 -1
- package/sqlite-proxy/migrator.js +39 -2
- package/sqlite-proxy/migrator.js.map +1 -1
- package/tursodatabase/migrator.cjs +1 -1
- package/tursodatabase/migrator.cjs.map +1 -1
- package/tursodatabase/migrator.js +1 -1
- package/tursodatabase/migrator.js.map +1 -1
- package/up-migrations/cockroach.cjs +6 -12
- package/up-migrations/cockroach.cjs.map +1 -1
- package/up-migrations/cockroach.d.cts +1 -5
- package/up-migrations/cockroach.d.ts +1 -5
- package/up-migrations/cockroach.js +6 -12
- package/up-migrations/cockroach.js.map +1 -1
- package/up-migrations/effect-pg.cjs +6 -12
- package/up-migrations/effect-pg.cjs.map +1 -1
- package/up-migrations/effect-pg.d.cts +1 -5
- package/up-migrations/effect-pg.d.ts +1 -5
- package/up-migrations/effect-pg.js +6 -12
- package/up-migrations/effect-pg.js.map +1 -1
- package/up-migrations/mssql.cjs +6 -12
- package/up-migrations/mssql.cjs.map +1 -1
- package/up-migrations/mssql.d.cts +1 -5
- package/up-migrations/mssql.d.ts +1 -5
- package/up-migrations/mssql.js +6 -12
- package/up-migrations/mssql.js.map +1 -1
- package/up-migrations/mysql-proxy.cjs +73 -0
- package/up-migrations/mysql-proxy.cjs.map +1 -0
- package/up-migrations/mysql-proxy.d.cts +16 -0
- package/up-migrations/mysql-proxy.d.ts +16 -0
- package/up-migrations/mysql-proxy.js +71 -0
- package/up-migrations/mysql-proxy.js.map +1 -0
- package/up-migrations/mysql.cjs +12 -28
- package/up-migrations/mysql.cjs.map +1 -1
- package/up-migrations/mysql.d.cts +1 -5
- package/up-migrations/mysql.d.ts +1 -5
- package/up-migrations/mysql.js +12 -28
- package/up-migrations/mysql.js.map +1 -1
- package/up-migrations/pg-proxy.cjs +79 -0
- package/up-migrations/pg-proxy.cjs.map +1 -0
- package/up-migrations/pg-proxy.d.cts +16 -0
- package/up-migrations/pg-proxy.d.ts +16 -0
- package/up-migrations/pg-proxy.js +77 -0
- package/up-migrations/pg-proxy.js.map +1 -0
- package/up-migrations/pg.cjs +9 -13
- package/up-migrations/pg.cjs.map +1 -1
- package/up-migrations/pg.d.cts +2 -6
- package/up-migrations/pg.d.ts +2 -6
- package/up-migrations/pg.js +9 -13
- package/up-migrations/pg.js.map +1 -1
- package/up-migrations/singlestore-proxy.cjs +73 -0
- package/up-migrations/singlestore-proxy.cjs.map +1 -0
- package/up-migrations/singlestore-proxy.d.cts +16 -0
- package/up-migrations/singlestore-proxy.d.ts +16 -0
- package/up-migrations/singlestore-proxy.js +71 -0
- package/up-migrations/singlestore-proxy.js.map +1 -0
- package/up-migrations/singlestore.cjs +9 -25
- package/up-migrations/singlestore.cjs.map +1 -1
- package/up-migrations/singlestore.d.cts +1 -5
- package/up-migrations/singlestore.d.ts +1 -5
- package/up-migrations/singlestore.js +9 -25
- package/up-migrations/singlestore.js.map +1 -1
- package/up-migrations/sqlite-proxy.cjs +80 -0
- package/up-migrations/sqlite-proxy.cjs.map +1 -0
- package/up-migrations/sqlite-proxy.d.cts +16 -0
- package/up-migrations/sqlite-proxy.d.ts +16 -0
- package/up-migrations/sqlite-proxy.js +78 -0
- package/up-migrations/sqlite-proxy.js.map +1 -0
- package/up-migrations/sqlite.cjs +17 -48
- package/up-migrations/sqlite.cjs.map +1 -1
- package/up-migrations/sqlite.d.cts +3 -10
- package/up-migrations/sqlite.d.ts +5 -12
- package/up-migrations/sqlite.js +17 -48
- package/up-migrations/sqlite.js.map +1 -1
- package/up-migrations/utils.cjs +47 -0
- package/up-migrations/utils.cjs.map +1 -0
- package/up-migrations/utils.d.cts +25 -0
- package/up-migrations/utils.d.ts +25 -0
- package/up-migrations/utils.js +44 -0
- package/up-migrations/utils.js.map +1 -0
- package/sqlite-proxy/migrator.internal.cjs +0 -61
- package/sqlite-proxy/migrator.internal.cjs.map +0 -1
- package/sqlite-proxy/migrator.internal.d.cts +0 -26
- package/sqlite-proxy/migrator.internal.d.ts +0 -26
- package/sqlite-proxy/migrator.internal.js +0 -59
- package/sqlite-proxy/migrator.internal.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrator.js","names":[],"sources":["../../src/singlestore-proxy/migrator.ts"],"sourcesContent":["import type { MigrationConfig, MigratorInitFailResponse } from '~/migrator.ts';\nimport { readMigrationFiles } from '~/migrator.ts';\nimport { getMigrationsToRun } from '~/migrator.utils.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport { sql } from '~/sql/sql.ts';\nimport { upgradeIfNeeded } from '~/up-migrations/singlestore.ts';\nimport type { SingleStoreRemoteDatabase } from './driver.ts';\n\nexport type ProxyMigrator = (migrationQueries: string[]) => Promise<void>;\n\nexport async function migrate<TSchema extends Record<string, unknown>, TRelations extends AnyRelations>(\n\tdb: SingleStoreRemoteDatabase<TSchema, TRelations>,\n\tcallback: ProxyMigrator,\n\tconfig: MigrationConfig,\n): Promise<void | MigratorInitFailResponse> {\n\tconst migrations = readMigrationFiles(config);\n\n\tconst migrationsTable = config.migrationsTable ?? '__drizzle_migrations';\n\n\t// Detect DB version and upgrade table schema if needed\n\tconst { newDb } = await upgradeIfNeeded(migrationsTable, db
|
|
1
|
+
{"version":3,"file":"migrator.js","names":[],"sources":["../../src/singlestore-proxy/migrator.ts"],"sourcesContent":["import type { MigrationConfig, MigratorInitFailResponse } from '~/migrator.ts';\nimport { readMigrationFiles } from '~/migrator.ts';\nimport { getMigrationsToRun } from '~/migrator.utils.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport { sql } from '~/sql/sql.ts';\nimport { upgradeIfNeeded } from '~/up-migrations/singlestore-proxy.ts';\nimport type { SingleStoreRemoteDatabase } from './driver.ts';\n\nexport type ProxyMigrator = (migrationQueries: string[]) => Promise<void>;\n\nexport async function migrate<TSchema extends Record<string, unknown>, TRelations extends AnyRelations>(\n\tdb: SingleStoreRemoteDatabase<TSchema, TRelations>,\n\tcallback: ProxyMigrator,\n\tconfig: MigrationConfig,\n): Promise<void | MigratorInitFailResponse> {\n\tconst migrations = readMigrationFiles(config);\n\n\tconst migrationsTable = config.migrationsTable ?? '__drizzle_migrations';\n\n\t// Detect DB version and upgrade table schema if needed\n\tconst { newDb } = await upgradeIfNeeded(migrationsTable, db, callback, migrations);\n\n\tif (newDb) {\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 BIGINT,\n\t\t\t\tname TEXT,\n\t\t\t\tapplied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n\t\t\t)\n\t\t`;\n\t\tawait db.session.execute(migrationTableCreate);\n\t}\n\n\tconst dbMigrations = await db.select({\n\t\tid: sql.raw('id'),\n\t\thash: sql.raw('hash'),\n\t\tcreated_at: sql.raw('created_at'),\n\t\tname: sql.raw('name'),\n\t}).from(sql.identifier(migrationsTable).getSQL()) as {\n\t\tid: number;\n\t\thash: string;\n\t\tcreated_at: string;\n\t\tname: string | null;\n\t}[];\n\n\tif (typeof config === 'object' && config.init) {\n\t\tif (dbMigrations.length) {\n\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t}\n\n\t\tif (migrations.length > 1) {\n\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t}\n\n\t\tconst [migration] = migrations;\n\n\t\tif (!migration) return;\n\n\t\tawait callback([\n\t\t\tdb.dialect.sqlToQuery(\n\t\t\t\tsql`insert into ${\n\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t} (\\`hash\\`, \\`created_at\\`, \\`name\\`) values(${migration.hash}, '${migration.folderMillis}', ${migration.name})`\n\t\t\t\t\t.inlineParams(),\n\t\t\t).sql,\n\t\t]);\n\n\t\treturn;\n\t}\n\n\tconst migrationsToRun = getMigrationsToRun({ localMigrations: migrations, dbMigrations });\n\tconst queriesToRun: string[] = [];\n\tfor (const migration of migrationsToRun) {\n\t\tqueriesToRun.push(\n\t\t\t...migration.sql,\n\t\t\tdb.dialect.sqlToQuery(\n\t\t\t\tsql`insert into ${\n\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t} (\\`hash\\`, \\`created_at\\`, \\`name\\`) values(${migration.hash}, '${migration.folderMillis}', ${migration.name})`\n\t\t\t\t\t.inlineParams(),\n\t\t\t).sql,\n\t\t);\n\t}\n\n\tawait callback(queriesToRun);\n\n\treturn;\n}\n"],"mappings":";;;;;;AAUA,eAAsB,QACrB,IACA,UACA,QAC2C;CAC3C,MAAM,aAAa,mBAAmB,OAAO;CAE7C,MAAM,kBAAkB,OAAO,mBAAmB;CAGlD,MAAM,EAAE,UAAU,MAAM,gBAAgB,iBAAiB,IAAI,UAAU,WAAW;AAElF,KAAI,OAAO;EACV,MAAM,uBAAuB,GAAG;gCACF,IAAI,WAAW,gBAAgB,CAAC;;;;;;;;AAQ9D,QAAM,GAAG,QAAQ,QAAQ,qBAAqB;;CAG/C,MAAM,eAAe,MAAM,GAAG,OAAO;EACpC,IAAI,IAAI,IAAI,KAAK;EACjB,MAAM,IAAI,IAAI,OAAO;EACrB,YAAY,IAAI,IAAI,aAAa;EACjC,MAAM,IAAI,IAAI,OAAO;EACrB,CAAC,CAAC,KAAK,IAAI,WAAW,gBAAgB,CAAC,QAAQ,CAAC;AAOjD,KAAI,OAAO,WAAW,YAAY,OAAO,MAAM;AAC9C,MAAI,aAAa,OAChB,QAAO,EAAE,UAAU,sBAA+B;AAGnD,MAAI,WAAW,SAAS,EACvB,QAAO,EAAE,UAAU,mBAA4B;EAGhD,MAAM,CAAC,aAAa;AAEpB,MAAI,CAAC,UAAW;AAEhB,QAAM,SAAS,CACd,GAAG,QAAQ,WACV,GAAG,eACF,IAAI,WAAW,gBAAgB,CAC/B,+CAA+C,UAAU,KAAK,KAAK,UAAU,aAAa,KAAK,UAAU,KAAK,GAC7G,cAAc,CAChB,CAAC,IACF,CAAC;AAEF;;CAGD,MAAM,kBAAkB,mBAAmB;EAAE,iBAAiB;EAAY;EAAc,CAAC;CACzF,MAAM,eAAyB,EAAE;AACjC,MAAK,MAAM,aAAa,gBACvB,cAAa,KACZ,GAAG,UAAU,KACb,GAAG,QAAQ,WACV,GAAG,eACF,IAAI,WAAW,gBAAgB,CAC/B,+CAA+C,UAAU,KAAK,KAAK,UAAU,aAAa,KAAK,UAAU,KAAK,GAC7G,cAAc,CAChB,CAAC,IACF;AAGF,OAAM,SAAS,aAAa"}
|
|
@@ -10,7 +10,7 @@ async function migrate(db, config) {
|
|
|
10
10
|
const migrations = (0, __migrator_ts.readMigrationFiles)(config);
|
|
11
11
|
const { session } = db;
|
|
12
12
|
const migrationsTable = config === void 0 ? "__drizzle_migrations" : typeof config === "string" ? "__drizzle_migrations" : config.migrationsTable ?? "__drizzle_migrations";
|
|
13
|
-
const { newDb } = await (0, __up_migrations_sqlite_ts.upgradeAsyncIfNeeded)(migrationsTable,
|
|
13
|
+
const { newDb } = await (0, __up_migrations_sqlite_ts.upgradeAsyncIfNeeded)(migrationsTable, db, migrations);
|
|
14
14
|
if (newDb) {
|
|
15
15
|
const migrationTableCreate = __sql_sql_ts.sql`
|
|
16
16
|
CREATE TABLE IF NOT EXISTS ${__sql_sql_ts.sql.identifier(migrationsTable)} (
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrator.cjs","names":["sql"],"sources":["../../src/sqlite-cloud/migrator.ts"],"sourcesContent":["import type { MigrationConfig, MigratorInitFailResponse } from '~/migrator.ts';\nimport { readMigrationFiles } from '~/migrator.ts';\nimport { getMigrationsToRun } from '~/migrator.utils.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport { type SQL, sql } from '~/sql/sql.ts';\nimport { upgradeAsyncIfNeeded } from '~/up-migrations/sqlite.ts';\nimport type { SQLiteCloudDatabase } from './driver.ts';\n\nexport async function migrate<TSchema extends Record<string, unknown>, TRelations extends AnyRelations>(\n\tdb: SQLiteCloudDatabase<TSchema, TRelations>,\n\tconfig: MigrationConfig,\n): Promise<void | MigratorInitFailResponse> {\n\tconst migrations = readMigrationFiles(config);\n\tconst { session } = db;\n\n\tconst migrationsTable = config === undefined\n\t\t? '__drizzle_migrations'\n\t\t: typeof config === 'string'\n\t\t? '__drizzle_migrations'\n\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\n\t// Detect DB version and upgrade table schema if needed\n\tconst { newDb } = await upgradeAsyncIfNeeded(migrationsTable,
|
|
1
|
+
{"version":3,"file":"migrator.cjs","names":["sql"],"sources":["../../src/sqlite-cloud/migrator.ts"],"sourcesContent":["import type { MigrationConfig, MigratorInitFailResponse } from '~/migrator.ts';\nimport { readMigrationFiles } from '~/migrator.ts';\nimport { getMigrationsToRun } from '~/migrator.utils.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport { type SQL, sql } from '~/sql/sql.ts';\nimport { upgradeAsyncIfNeeded } from '~/up-migrations/sqlite.ts';\nimport type { SQLiteCloudDatabase } from './driver.ts';\n\nexport async function migrate<TSchema extends Record<string, unknown>, TRelations extends AnyRelations>(\n\tdb: SQLiteCloudDatabase<TSchema, TRelations>,\n\tconfig: MigrationConfig,\n): Promise<void | MigratorInitFailResponse> {\n\tconst migrations = readMigrationFiles(config);\n\tconst { session } = db;\n\n\tconst migrationsTable = config === undefined\n\t\t? '__drizzle_migrations'\n\t\t: typeof config === 'string'\n\t\t? '__drizzle_migrations'\n\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\n\t// Detect DB version and upgrade table schema if needed\n\tconst { newDb } = await upgradeAsyncIfNeeded(migrationsTable, db, migrations);\n\n\tif (newDb) {\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid INTEGER PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric,\n\t\t\t\tname text,\n\t\t\t\tapplied_at TEXT\n\t\t)\n\t\t`;\n\t\tawait session.run(migrationTableCreate);\n\t}\n\n\tconst dbMigrations = await session.all<{ id: number; hash: string; created_at: string; name: string | null }>(\n\t\tsql`SELECT id, hash, created_at, name FROM ${sql.identifier(migrationsTable)}`,\n\t);\n\n\tif (typeof config === 'object' && config.init) {\n\t\tif (dbMigrations.length) {\n\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t}\n\n\t\tif (migrations.length > 1) {\n\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t}\n\n\t\tconst [migration] = migrations;\n\n\t\tif (!migration) return;\n\n\t\tawait session.run(\n\t\t\tsql`insert into ${\n\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t} (\"hash\", \"created_at\", \"name\", \"applied_at\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${\n\t\t\t\tnew Date().toISOString()\n\t\t\t})`\n\t\t\t\t.inlineParams(),\n\t\t);\n\n\t\treturn;\n\t}\n\n\tconst migrationsToRun = getMigrationsToRun({ localMigrations: migrations, dbMigrations });\n\tawait session.run(sql`BEGIN TRANSACTION`);\n\ttry {\n\t\tconst stmts = sql.join(\n\t\t\tmigrationsToRun.reduce(\n\t\t\t\t(statements, migration) => {\n\t\t\t\t\tstatements.push(\n\t\t\t\t\t\tsql.raw(migration.sql.join('')),\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\", \"name\", \"applied_at\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${\n\t\t\t\t\t\t\tnew Date().toISOString()\n\t\t\t\t\t\t});`\n\t\t\t\t\t\t\t.inlineParams(),\n\t\t\t\t\t);\n\n\t\t\t\t\treturn statements;\n\t\t\t\t},\n\t\t\t\t[] as SQL[],\n\t\t\t),\n\t\t);\n\n\t\tawait session.run(stmts);\n\n\t\tawait session.run(sql`COMMIT`);\n\t} catch (error) {\n\t\tawait session.run(sql`ROLLBACK`);\n\t\tthrow error;\n\t}\n}\n"],"mappings":";;;;;;;;AAQA,eAAsB,QACrB,IACA,QAC2C;CAC3C,MAAM,mDAAgC,OAAO;CAC7C,MAAM,EAAE,YAAY;CAEpB,MAAM,kBAAkB,WAAW,SAChC,yBACA,OAAO,WAAW,WAClB,yBACA,OAAO,mBAAmB;CAG7B,MAAM,EAAE,UAAU,0DAA2B,iBAAiB,IAAI,WAAW;AAE7E,KAAI,OAAO;EACV,MAAM,uBAAuB,gBAAG;gCACFA,iBAAI,WAAW,gBAAgB,CAAC;;;;;;;;AAQ9D,QAAM,QAAQ,IAAI,qBAAqB;;CAGxC,MAAM,eAAe,MAAM,QAAQ,IAClC,gBAAG,0CAA0CA,iBAAI,WAAW,gBAAgB,GAC5E;AAED,KAAI,OAAO,WAAW,YAAY,OAAO,MAAM;AAC9C,MAAI,aAAa,OAChB,QAAO,EAAE,UAAU,sBAA+B;AAGnD,MAAI,WAAW,SAAS,EACvB,QAAO,EAAE,UAAU,mBAA4B;EAGhD,MAAM,CAAC,aAAa;AAEpB,MAAI,CAAC,UAAW;AAEhB,QAAM,QAAQ,IACb,gBAAG,eACFA,iBAAI,WAAW,gBAAgB,CAC/B,uDAAuD,UAAU,KAAK,IAAI,UAAU,aAAa,IAAI,UAAU,KAAK,qBACpH,IAAI,MAAM,EAAC,aAAa,CACxB,GACC,cAAc,CAChB;AAED;;CAGD,MAAM,8DAAqC;EAAE,iBAAiB;EAAY;EAAc,CAAC;AACzF,OAAM,QAAQ,IAAI,gBAAG,oBAAoB;AACzC,KAAI;EACH,MAAM,QAAQA,iBAAI,KACjB,gBAAgB,QACd,YAAY,cAAc;AAC1B,cAAW,KACVA,iBAAI,IAAI,UAAU,IAAI,KAAK,GAAG,CAAC,EAC/B,gBAAG,eACFA,iBAAI,WAAW,gBAAgB,CAC/B,uDAAuD,UAAU,KAAK,IAAI,UAAU,aAAa,IAAI,UAAU,KAAK,qBACpH,IAAI,MAAM,EAAC,aAAa,CACxB,IACC,cAAc,CAChB;AAED,UAAO;KAER,EAAE,CACF,CACD;AAED,QAAM,QAAQ,IAAI,MAAM;AAExB,QAAM,QAAQ,IAAI,gBAAG,SAAS;UACtB,OAAO;AACf,QAAM,QAAQ,IAAI,gBAAG,WAAW;AAChC,QAAM"}
|
package/sqlite-cloud/migrator.js
CHANGED
|
@@ -8,7 +8,7 @@ async function migrate(db, config) {
|
|
|
8
8
|
const migrations = readMigrationFiles(config);
|
|
9
9
|
const { session } = db;
|
|
10
10
|
const migrationsTable = config === void 0 ? "__drizzle_migrations" : typeof config === "string" ? "__drizzle_migrations" : config.migrationsTable ?? "__drizzle_migrations";
|
|
11
|
-
const { newDb } = await upgradeAsyncIfNeeded(migrationsTable,
|
|
11
|
+
const { newDb } = await upgradeAsyncIfNeeded(migrationsTable, db, migrations);
|
|
12
12
|
if (newDb) {
|
|
13
13
|
const migrationTableCreate = sql`
|
|
14
14
|
CREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrator.js","names":[],"sources":["../../src/sqlite-cloud/migrator.ts"],"sourcesContent":["import type { MigrationConfig, MigratorInitFailResponse } from '~/migrator.ts';\nimport { readMigrationFiles } from '~/migrator.ts';\nimport { getMigrationsToRun } from '~/migrator.utils.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport { type SQL, sql } from '~/sql/sql.ts';\nimport { upgradeAsyncIfNeeded } from '~/up-migrations/sqlite.ts';\nimport type { SQLiteCloudDatabase } from './driver.ts';\n\nexport async function migrate<TSchema extends Record<string, unknown>, TRelations extends AnyRelations>(\n\tdb: SQLiteCloudDatabase<TSchema, TRelations>,\n\tconfig: MigrationConfig,\n): Promise<void | MigratorInitFailResponse> {\n\tconst migrations = readMigrationFiles(config);\n\tconst { session } = db;\n\n\tconst migrationsTable = config === undefined\n\t\t? '__drizzle_migrations'\n\t\t: typeof config === 'string'\n\t\t? '__drizzle_migrations'\n\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\n\t// Detect DB version and upgrade table schema if needed\n\tconst { newDb } = await upgradeAsyncIfNeeded(migrationsTable,
|
|
1
|
+
{"version":3,"file":"migrator.js","names":[],"sources":["../../src/sqlite-cloud/migrator.ts"],"sourcesContent":["import type { MigrationConfig, MigratorInitFailResponse } from '~/migrator.ts';\nimport { readMigrationFiles } from '~/migrator.ts';\nimport { getMigrationsToRun } from '~/migrator.utils.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport { type SQL, sql } from '~/sql/sql.ts';\nimport { upgradeAsyncIfNeeded } from '~/up-migrations/sqlite.ts';\nimport type { SQLiteCloudDatabase } from './driver.ts';\n\nexport async function migrate<TSchema extends Record<string, unknown>, TRelations extends AnyRelations>(\n\tdb: SQLiteCloudDatabase<TSchema, TRelations>,\n\tconfig: MigrationConfig,\n): Promise<void | MigratorInitFailResponse> {\n\tconst migrations = readMigrationFiles(config);\n\tconst { session } = db;\n\n\tconst migrationsTable = config === undefined\n\t\t? '__drizzle_migrations'\n\t\t: typeof config === 'string'\n\t\t? '__drizzle_migrations'\n\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\n\t// Detect DB version and upgrade table schema if needed\n\tconst { newDb } = await upgradeAsyncIfNeeded(migrationsTable, db, migrations);\n\n\tif (newDb) {\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid INTEGER PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric,\n\t\t\t\tname text,\n\t\t\t\tapplied_at TEXT\n\t\t)\n\t\t`;\n\t\tawait session.run(migrationTableCreate);\n\t}\n\n\tconst dbMigrations = await session.all<{ id: number; hash: string; created_at: string; name: string | null }>(\n\t\tsql`SELECT id, hash, created_at, name FROM ${sql.identifier(migrationsTable)}`,\n\t);\n\n\tif (typeof config === 'object' && config.init) {\n\t\tif (dbMigrations.length) {\n\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t}\n\n\t\tif (migrations.length > 1) {\n\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t}\n\n\t\tconst [migration] = migrations;\n\n\t\tif (!migration) return;\n\n\t\tawait session.run(\n\t\t\tsql`insert into ${\n\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t} (\"hash\", \"created_at\", \"name\", \"applied_at\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${\n\t\t\t\tnew Date().toISOString()\n\t\t\t})`\n\t\t\t\t.inlineParams(),\n\t\t);\n\n\t\treturn;\n\t}\n\n\tconst migrationsToRun = getMigrationsToRun({ localMigrations: migrations, dbMigrations });\n\tawait session.run(sql`BEGIN TRANSACTION`);\n\ttry {\n\t\tconst stmts = sql.join(\n\t\t\tmigrationsToRun.reduce(\n\t\t\t\t(statements, migration) => {\n\t\t\t\t\tstatements.push(\n\t\t\t\t\t\tsql.raw(migration.sql.join('')),\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\", \"name\", \"applied_at\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${\n\t\t\t\t\t\t\tnew Date().toISOString()\n\t\t\t\t\t\t});`\n\t\t\t\t\t\t\t.inlineParams(),\n\t\t\t\t\t);\n\n\t\t\t\t\treturn statements;\n\t\t\t\t},\n\t\t\t\t[] as SQL[],\n\t\t\t),\n\t\t);\n\n\t\tawait session.run(stmts);\n\n\t\tawait session.run(sql`COMMIT`);\n\t} catch (error) {\n\t\tawait session.run(sql`ROLLBACK`);\n\t\tthrow error;\n\t}\n}\n"],"mappings":";;;;;;AAQA,eAAsB,QACrB,IACA,QAC2C;CAC3C,MAAM,aAAa,mBAAmB,OAAO;CAC7C,MAAM,EAAE,YAAY;CAEpB,MAAM,kBAAkB,WAAW,SAChC,yBACA,OAAO,WAAW,WAClB,yBACA,OAAO,mBAAmB;CAG7B,MAAM,EAAE,UAAU,MAAM,qBAAqB,iBAAiB,IAAI,WAAW;AAE7E,KAAI,OAAO;EACV,MAAM,uBAAuB,GAAG;gCACF,IAAI,WAAW,gBAAgB,CAAC;;;;;;;;AAQ9D,QAAM,QAAQ,IAAI,qBAAqB;;CAGxC,MAAM,eAAe,MAAM,QAAQ,IAClC,GAAG,0CAA0C,IAAI,WAAW,gBAAgB,GAC5E;AAED,KAAI,OAAO,WAAW,YAAY,OAAO,MAAM;AAC9C,MAAI,aAAa,OAChB,QAAO,EAAE,UAAU,sBAA+B;AAGnD,MAAI,WAAW,SAAS,EACvB,QAAO,EAAE,UAAU,mBAA4B;EAGhD,MAAM,CAAC,aAAa;AAEpB,MAAI,CAAC,UAAW;AAEhB,QAAM,QAAQ,IACb,GAAG,eACF,IAAI,WAAW,gBAAgB,CAC/B,uDAAuD,UAAU,KAAK,IAAI,UAAU,aAAa,IAAI,UAAU,KAAK,qBACpH,IAAI,MAAM,EAAC,aAAa,CACxB,GACC,cAAc,CAChB;AAED;;CAGD,MAAM,kBAAkB,mBAAmB;EAAE,iBAAiB;EAAY;EAAc,CAAC;AACzF,OAAM,QAAQ,IAAI,GAAG,oBAAoB;AACzC,KAAI;EACH,MAAM,QAAQ,IAAI,KACjB,gBAAgB,QACd,YAAY,cAAc;AAC1B,cAAW,KACV,IAAI,IAAI,UAAU,IAAI,KAAK,GAAG,CAAC,EAC/B,GAAG,eACF,IAAI,WAAW,gBAAgB,CAC/B,uDAAuD,UAAU,KAAK,IAAI,UAAU,aAAa,IAAI,UAAU,KAAK,qBACpH,IAAI,MAAM,EAAC,aAAa,CACxB,IACC,cAAc,CAChB;AAED,UAAO;KAER,EAAE,CACF,CACD;AAED,QAAM,QAAQ,IAAI,MAAM;AAExB,QAAM,QAAQ,IAAI,GAAG,SAAS;UACtB,OAAO;AACf,QAAM,QAAQ,IAAI,GAAG,WAAW;AAChC,QAAM"}
|
package/sqlite-core/dialect.cjs
CHANGED
|
@@ -12,13 +12,13 @@ let ___relations_ts = require("../_relations.cjs");
|
|
|
12
12
|
___relations_ts = require_runtime.__toESM(___relations_ts);
|
|
13
13
|
let __migrator_utils_ts = require("../migrator.utils.cjs");
|
|
14
14
|
let __errors_ts = require("../errors.cjs");
|
|
15
|
-
let __up_migrations_sqlite_ts = require("../up-migrations/sqlite.cjs");
|
|
16
15
|
let __relations_ts = require("../relations.cjs");
|
|
17
16
|
let __alias_ts = require("../alias.cjs");
|
|
18
17
|
let __casing_ts = require("../casing.cjs");
|
|
19
18
|
let __sql_index_ts = require("../sql/index.cjs");
|
|
20
19
|
let __sqlite_core_columns_index_ts = require("./columns/index.cjs");
|
|
21
20
|
let __sqlite_core_table_ts = require("./table.cjs");
|
|
21
|
+
let __up_migrations_sqlite_ts = require("../up-migrations/sqlite.cjs");
|
|
22
22
|
|
|
23
23
|
//#region src/sqlite-core/dialect.ts
|
|
24
24
|
var SQLiteDialect = class {
|
|
@@ -600,9 +600,9 @@ var SQLiteSyncDialect = class extends SQLiteDialect {
|
|
|
600
600
|
};
|
|
601
601
|
var SQLiteAsyncDialect = class extends SQLiteDialect {
|
|
602
602
|
static [__entity_ts.entityKind] = "SQLiteAsyncDialect";
|
|
603
|
-
async migrate(migrations,
|
|
603
|
+
async migrate(migrations, db, config) {
|
|
604
604
|
const migrationsTable = config === void 0 ? "__drizzle_migrations" : typeof config === "string" ? "__drizzle_migrations" : config.migrationsTable ?? "__drizzle_migrations";
|
|
605
|
-
const { newDb } = await (0, __up_migrations_sqlite_ts.upgradeAsyncIfNeeded)(migrationsTable,
|
|
605
|
+
const { newDb } = await (0, __up_migrations_sqlite_ts.upgradeAsyncIfNeeded)(migrationsTable, db, migrations);
|
|
606
606
|
if (newDb) {
|
|
607
607
|
const migrationTableCreate = __sql_sql_ts.sql`
|
|
608
608
|
CREATE TABLE IF NOT EXISTS ${__sql_sql_ts.sql.identifier(migrationsTable)} (
|
|
@@ -613,22 +613,22 @@ var SQLiteAsyncDialect = class extends SQLiteDialect {
|
|
|
613
613
|
applied_at TEXT
|
|
614
614
|
)
|
|
615
615
|
`;
|
|
616
|
-
await session.run(migrationTableCreate);
|
|
616
|
+
await db.session.run(migrationTableCreate);
|
|
617
617
|
}
|
|
618
|
-
const dbMigrations = await session.all(__sql_sql_ts.sql`SELECT id, hash, created_at, name FROM ${__sql_sql_ts.sql.identifier(migrationsTable)};`);
|
|
618
|
+
const dbMigrations = await db.session.all(__sql_sql_ts.sql`SELECT id, hash, created_at, name FROM ${__sql_sql_ts.sql.identifier(migrationsTable)};`);
|
|
619
619
|
if (typeof config === "object" && config.init) {
|
|
620
620
|
if (dbMigrations.length) return { exitCode: "databaseMigrations" };
|
|
621
621
|
if (migrations.length > 1) return { exitCode: "localMigrations" };
|
|
622
622
|
const [migration] = migrations;
|
|
623
623
|
if (!migration) return;
|
|
624
|
-
await session.run(__sql_sql_ts.sql`insert into ${__sql_sql_ts.sql.identifier(migrationsTable)} ("hash", "created_at", "name", "applied_at") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${(/* @__PURE__ */ new Date()).toISOString()})`);
|
|
624
|
+
await db.session.run(__sql_sql_ts.sql`insert into ${__sql_sql_ts.sql.identifier(migrationsTable)} ("hash", "created_at", "name", "applied_at") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${(/* @__PURE__ */ new Date()).toISOString()})`);
|
|
625
625
|
return;
|
|
626
626
|
}
|
|
627
627
|
const migrationsToRun = (0, __migrator_utils_ts.getMigrationsToRun)({
|
|
628
628
|
localMigrations: migrations,
|
|
629
629
|
dbMigrations
|
|
630
630
|
});
|
|
631
|
-
await session.transaction(async (tx) => {
|
|
631
|
+
await db.session.transaction(async (tx) => {
|
|
632
632
|
for (const migration of migrationsToRun) {
|
|
633
633
|
for (const stmt of migration.sql) await tx.run(__sql_sql_ts.sql.raw(stmt));
|
|
634
634
|
await tx.run(__sql_sql_ts.sql`insert into ${__sql_sql_ts.sql.identifier(migrationsTable)} ("hash", "created_at", "name", "applied_at") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${(/* @__PURE__ */ new Date()).toISOString()})`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialect.cjs","names":["entityKind","CasingCache","sql","Table","SQL","Column","Subquery","SQLiteTable","View","ViewBaseConfig","SQLiteViewBase","SQLiteColumn","Param","V1","DrizzleError","TableColumns","One"],"sources":["../../src/sqlite-core/dialect.ts"],"sourcesContent":["import * as V1 from '~/_relations.ts';\nimport {\n\taliasedTable,\n\taliasedTableColumn,\n\tgetOriginalColumnFromAlias,\n\tmapColumnsInAliasedSQLToAlias,\n\tmapColumnsInSQLToAlias,\n} from '~/alias.ts';\nimport { CasingCache } from '~/casing.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, MigratorInitFailResponse } from '~/migrator.ts';\nimport { getMigrationsToRun } from '~/migrator.utils.ts';\nimport {\n\ttype AnyOne,\n\t// AggregatedField,\n\ttype AnyRelations,\n\ttype BuildRelationalQueryResult,\n\ttype ColumnWithTSName,\n\ttype DBQueryConfig,\n\tgetTableAsAliasSQL,\n\tOne,\n\ttype Relation,\n\trelationExtrasToSQL,\n\trelationsFilterToSQL,\n\trelationsOrderToSQL,\n\trelationToSQL,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n\ttype WithContainer,\n} from '~/relations.ts';\nimport type { Name, Placeholder, SQLWrapper } from '~/sql/index.ts';\nimport { and, eq, isSQLWrapper } from '~/sql/index.ts';\nimport { Param, type QueryWithTypings, SQL, sql, type SQLChunk, View } from '~/sql/sql.ts';\nimport { SQLiteColumn, type SQLiteCustomColumn } from '~/sqlite-core/columns/index.ts';\nimport type {\n\tAnySQLiteSelectQueryBuilder,\n\tSQLiteDeleteConfig,\n\tSQLiteInsertConfig,\n\tSQLiteUpdateConfig,\n} from '~/sqlite-core/query-builders/index.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { getTableName, getTableUniqueName, Table, TableColumns } from '~/table.ts';\nimport { upgradeAsyncIfNeeded, upgradeSyncIfNeeded } from '~/up-migrations/sqlite.ts';\nimport { type Casing, 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';\nimport type { SQLiteView } from './view.ts';\n\nexport interface SQLiteDialectConfig {\n\tcasing?: Casing;\n}\n\nexport abstract class SQLiteDialect {\n\tstatic readonly [entityKind]: string = 'SQLiteDialect';\n\n\t/** @internal */\n\treadonly casing: CasingCache;\n\n\tconstructor(config?: SQLiteDialectConfig) {\n\t\tthis.casing = new CasingCache(config?.casing);\n\t}\n\n\tescapeName(name: string): string {\n\t\treturn `\"${name.replace(/\"/g, '\"\"')}\"`;\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._.alias)} as (${w._.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({\n\t\ttable,\n\t\twhere,\n\t\treturning,\n\t\twithList,\n\t\tlimit,\n\t\torderBy,\n\t}: 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\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\n\n\t\treturn sql`${withSql}delete from ${table}${whereSql}${returningSql}${orderBySql}${limitSql}`;\n\t}\n\n\tbuildUpdateSet(table: SQLiteTable, set: UpdateSet): SQL {\n\t\tconst tableColumns = table[Table.Symbol.Columns];\n\n\t\tconst columnNames = Object.keys(tableColumns).filter(\n\t\t\t(colName) =>\n\t\t\t\tset[colName] !== undefined\n\t\t\t\t|| tableColumns[colName]?.onUpdateFn !== undefined,\n\t\t);\n\n\t\tconst setLength = columnNames.length;\n\t\treturn sql.join(\n\t\t\tcolumnNames.flatMap((colName, i) => {\n\t\t\t\tconst col = tableColumns[colName]!;\n\n\t\t\t\tconst onUpdateFnResult = col.onUpdateFn?.();\n\t\t\t\tconst value = set[colName]\n\t\t\t\t\t?? (is(onUpdateFnResult, SQL)\n\t\t\t\t\t\t? onUpdateFnResult\n\t\t\t\t\t\t: sql.param(onUpdateFnResult, col));\n\t\t\t\tconst res = sql`${sql.identifier(this.casing.getColumnCasing(col))} = ${value}`;\n\n\t\t\t\tif (i < setLength - 1) {\n\t\t\t\t\treturn [res, sql.raw(', ')];\n\t\t\t\t}\n\t\t\t\treturn [res];\n\t\t\t}),\n\t\t);\n\t}\n\n\tbuildUpdateQuery({\n\t\ttable,\n\t\tset,\n\t\twhere,\n\t\treturning,\n\t\twithList,\n\t\tjoins,\n\t\tfrom,\n\t\tlimit,\n\t\torderBy,\n\t}: SQLiteUpdateConfig): SQL {\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst setSql = this.buildUpdateSet(table, set);\n\n\t\tconst fromSql = from && sql.join([sql.raw(' from '), this.buildFromTable(from)]);\n\n\t\tconst joinsSql = this.buildJoins(joins);\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\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\n\n\t\treturn sql`${withSql}update ${table} set ${setSql}${fromSql}${joinsSql}${whereSql}${returningSql}${orderBySql}${limitSql}`;\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.flatMap(({ field }, i) => {\n\t\t\tconst chunk: SQLChunk[] = [];\n\n\t\t\tif (is(field, SQL.Aliased) && field.isSelectionField) {\n\t\t\t\tif (!isSingleTable && field.origin !== undefined) {\n\t\t\t\t\tchunk.push(sql.identifier(field.origin), sql.raw('.'));\n\t\t\t\t}\n\t\t\t\tchunk.push(sql.identifier(field.fieldAlias));\n\t\t\t} else if (is(field, SQL.Aliased) || is(field, SQL)) {\n\t\t\t\tconst query = is(field, SQL.Aliased) ? field.sql : field;\n\n\t\t\t\tif (isSingleTable) {\n\t\t\t\t\tconst newSql = new SQL(\n\t\t\t\t\t\tquery.queryChunks.map((c) => {\n\t\t\t\t\t\t\tif (is(c, Column)) {\n\t\t\t\t\t\t\t\treturn sql.identifier(this.casing.getColumnCasing(c));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn c;\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\n\t\t\t\t\tchunk.push(query.shouldInlineParams ? newSql.inlineParams() : newSql);\n\t\t\t\t} else {\n\t\t\t\t\tchunk.push(query);\n\t\t\t\t}\n\n\t\t\t\tif (is(field, SQL.Aliased)) {\n\t\t\t\t\tchunk.push(sql` as ${sql.identifier(field.fieldAlias)}`);\n\t\t\t\t}\n\t\t\t} else if (is(field, Column)) {\n\t\t\t\tif (field.columnType === 'SQLiteNumericBigInt') {\n\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tfield.isAlias\n\t\t\t\t\t\t\t\t? sql`cast(${\n\t\t\t\t\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\t\t\t\t\tthis.casing.getColumnCasing(\n\t\t\t\t\t\t\t\t\t\t\tgetOriginalColumnFromAlias(field),\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t} as text) as ${field}`\n\t\t\t\t\t\t\t\t: sql`cast(${sql.identifier(this.casing.getColumnCasing(field))} as text)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tfield.isAlias\n\t\t\t\t\t\t\t\t? sql`cast(${getOriginalColumnFromAlias(field)} as text) as ${field}`\n\t\t\t\t\t\t\t\t: sql`cast(${field} as text)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tfield.isAlias\n\t\t\t\t\t\t\t\t? sql`${sql.identifier(this.casing.getColumnCasing(getOriginalColumnFromAlias(field)))} as ${field}`\n\t\t\t\t\t\t\t\t: sql.identifier(this.casing.getColumnCasing(field)),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tfield.isAlias\n\t\t\t\t\t\t\t\t? sql`${getOriginalColumnFromAlias(field)} as ${field}`\n\t\t\t\t\t\t\t\t: field,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (is(field, Subquery)) {\n\t\t\t\tconst entries = Object.entries(field._.selectedFields) as [\n\t\t\t\t\tstring,\n\t\t\t\t\tSQL.Aliased | Column | SQL,\n\t\t\t\t][];\n\n\t\t\t\tif (entries.length === 1) {\n\t\t\t\t\tconst entry = entries[0]![1];\n\n\t\t\t\t\tconst fieldDecoder = is(entry, SQL)\n\t\t\t\t\t\t? entry.decoder\n\t\t\t\t\t\t: is(entry, Column)\n\t\t\t\t\t\t? { mapFromDriverValue: (v: any) => entry.mapFromDriverValue(v) }\n\t\t\t\t\t\t: entry.sql.decoder;\n\t\t\t\t\tif (fieldDecoder) field._.sql.decoder = fieldDecoder;\n\t\t\t\t}\n\t\t\t\tchunk.push(field);\n\t\t\t}\n\n\t\t\tif (i < columnsLen - 1) {\n\t\t\t\tchunk.push(sql`, `);\n\t\t\t}\n\n\t\t\treturn chunk;\n\t\t});\n\n\t\treturn sql.join(chunks);\n\t}\n\n\tprivate buildJoins(\n\t\tjoins: SQLiteSelectJoinConfig[] | undefined,\n\t): SQL | undefined {\n\t\tif (!joins || joins.length === 0) {\n\t\t\treturn undefined;\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\t\t\t\tconst onSql = joinMeta.on ? sql` on ${joinMeta.on}` : undefined;\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(\n\t\t\t\t\t\t\t\torigTableName,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}${alias && sql` ${sql.identifier(alias)}`}${onSql}`,\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}${onSql}`,\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\treturn sql.join(joinsArray);\n\t}\n\n\tprivate buildLimit(limit: number | Placeholder | undefined): SQL | undefined {\n\t\treturn typeof limit === 'object'\n\t\t\t\t|| (typeof limit === 'number' && limit >= 0)\n\t\t\t? sql` limit ${limit}`\n\t\t\t: undefined;\n\t}\n\n\tprivate buildOrderBy(\n\t\torderBy: (SQLiteColumn | SQL | SQL.Aliased)[] | undefined,\n\t): SQL | undefined {\n\t\tconst orderByList: (SQLiteColumn | SQL | SQL.Aliased)[] = [];\n\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\treturn orderByList.length > 0\n\t\t\t? sql` order by ${sql.join(orderByList)}`\n\t\t\t: undefined;\n\t}\n\n\tprivate buildFromTable(\n\t\ttable: SQL | Subquery | SQLiteViewBase | SQLiteTable | undefined,\n\t): SQL | Subquery | SQLiteViewBase | SQLiteTable | undefined {\n\t\tif (is(table, Table) && table[Table.Symbol.IsAlias]) {\n\t\t\treturn sql`${sql`${sql.identifier(table[Table.Symbol.Schema] ?? '')}.`.if(table[Table.Symbol.Schema])}${\n\t\t\t\tsql.identifier(\n\t\t\t\t\ttable[Table.Symbol.OriginalName],\n\t\t\t\t)\n\t\t\t} ${sql.identifier(table[Table.Symbol.Name])}`;\n\t\t}\n\n\t\tif (is(table, View) && table[ViewBaseConfig].isAlias) {\n\t\t\tlet fullName = sql`${sql.identifier(table[ViewBaseConfig].originalName)}`;\n\t\t\tif (table[ViewBaseConfig].schema) {\n\t\t\t\tfullName = sql`${sql.identifier(table[ViewBaseConfig].schema)}.${fullName}`;\n\t\t\t}\n\t\t\treturn sql`${fullName} ${sql.identifier(table[ViewBaseConfig].name)}`;\n\t\t}\n\n\t\treturn table;\n\t}\n\n\tbuildSelectQuery({\n\t\twithList,\n\t\tfields,\n\t\tfieldsFlat,\n\t\twhere,\n\t\thaving,\n\t\ttable,\n\t\tjoins,\n\t\torderBy,\n\t\tgroupBy,\n\t\tlimit,\n\t\toffset,\n\t\tdistinct,\n\t\tsetOperators,\n\t}: SQLiteSelectConfig): 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._.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(\n\t\t\t\t\t\t({ alias }) =>\n\t\t\t\t\t\t\talias\n\t\t\t\t\t\t\t\t=== (table[Table.Symbol.IsAlias]\n\t\t\t\t\t\t\t\t\t? getTableName(table)\n\t\t\t\t\t\t\t\t\t: 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\t\t'->',\n\t\t\t\t\t\t)\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 = this.buildFromTable(table);\n\n\t\tconst joinsSql = this.buildJoins(joins);\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\tconst havingSql = having ? sql` having ${having}` : undefined;\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\n\t\t\t? sql` group by ${sql.join(groupByList)}`\n\t\t\t: undefined;\n\n\t\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\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(\n\t\tleftSelect: SQL,\n\t\tsetOperators: SQLiteSelectConfig['setOperators'],\n\t): 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}: {\n\t\tleftSelect: SQL;\n\t\tsetOperator: SQLiteSelectConfig['setOperators'][number];\n\t}): 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(\n\t\t\t\t\t\t\t\tthis.casing.getColumnCasing(chunk),\n\t\t\t\t\t\t\t);\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 = typeof limit === 'object' || (typeof limit === 'number' && limit >= 0)\n\t\t\t? sql` limit ${limit}`\n\t\t\t: 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({\n\t\ttable,\n\t\tvalues: valuesOrSelect,\n\t\tonConflict,\n\t\treturning,\n\t\twithList,\n\t\tselect,\n\t}: 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).filter(\n\t\t\t([_, col]) => !col.shouldDisableInsert(),\n\t\t);\n\t\tconst insertOrder = colEntries.map(([, column]) => sql.identifier(this.casing.getColumnCasing(column)));\n\n\t\tif (select) {\n\t\t\tconst select = valuesOrSelect as AnySQLiteSelectQueryBuilder | SQL;\n\n\t\t\tif (is(select, SQL)) {\n\t\t\t\tvaluesSqlList.push(select);\n\t\t\t} else {\n\t\t\t\tvaluesSqlList.push(select.getSQL());\n\t\t\t}\n\t\t} else {\n\t\t\tconst values = valuesOrSelect as Record<string, Param | SQL>[];\n\t\t\tvaluesSqlList.push(sql.raw('values '));\n\n\t\t\tfor (const [valueIndex, value] of values.entries()) {\n\t\t\t\tconst valueList: (SQLChunk | SQL)[] = [];\n\t\t\t\tfor (const [fieldName, col] of colEntries) {\n\t\t\t\t\tconst colValue = value[fieldName];\n\t\t\t\t\tif (\n\t\t\t\t\t\tcolValue === undefined\n\t\t\t\t\t\t|| (is(colValue, Param) && colValue.value === undefined)\n\t\t\t\t\t) {\n\t\t\t\t\t\tlet defaultValue;\n\t\t\t\t\t\tif (col.default !== null && col.default !== undefined) {\n\t\t\t\t\t\t\tdefaultValue = is(col.default, SQL)\n\t\t\t\t\t\t\t\t? col.default\n\t\t\t\t\t\t\t\t: sql.param(col.default, col);\n\t\t\t\t\t\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t\t\t\t\t\t} else if (col.defaultFn !== undefined) {\n\t\t\t\t\t\t\tconst defaultFnResult = col.defaultFn();\n\t\t\t\t\t\t\tdefaultValue = is(defaultFnResult, SQL)\n\t\t\t\t\t\t\t\t? defaultFnResult\n\t\t\t\t\t\t\t\t: sql.param(defaultFnResult, col);\n\t\t\t\t\t\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t\t\t\t\t\t} else if (!col.default && col.onUpdateFn !== undefined) {\n\t\t\t\t\t\t\tconst onUpdateFnResult = col.onUpdateFn();\n\t\t\t\t\t\t\tdefaultValue = is(onUpdateFnResult, SQL)\n\t\t\t\t\t\t\t\t? onUpdateFnResult\n\t\t\t\t\t\t\t\t: sql.param(onUpdateFnResult, col);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdefaultValue = sql`null`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalueList.push(defaultValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalueList.push(colValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvaluesSqlList.push(valueList);\n\t\t\t\tif (valueIndex < values.length - 1) {\n\t\t\t\t\tvaluesSqlList.push(sql`, `);\n\t\t\t\t}\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?.length ? sql.join(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} ${valuesSql}${onConflictSql}${returningSql}`;\n\t}\n\n\tsqlToQuery(sql: SQL, invokeSource?: 'indexes' | undefined): QueryWithTypings {\n\t\treturn sql.toQuery({\n\t\t\tcasing: this.casing,\n\t\t\tescapeName: this.escapeName,\n\t\t\tescapeParam: this.escapeParam,\n\t\t\tescapeString: this.escapeString,\n\t\t\tinvokeSource,\n\t\t});\n\t}\n\n\t/** @deprecated */\n\t_buildRelationalQuery({\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: V1.TablesRelationalConfig;\n\t\ttableNamesMap: Record<string, string>;\n\t\ttable: SQLiteTable;\n\t\ttableConfig: V1.TableRelationalConfig;\n\t\tqueryConfig: true | V1.DBQueryConfig<'many', true>;\n\t\ttableAlias: string;\n\t\tnestedQueryRelation?: V1.Relation;\n\t\tjoinOn?: SQL;\n\t}): V1.BuildRelationalQueryResult<SQLiteTable, SQLiteColumn> {\n\t\tlet selection: V1.BuildRelationalQueryResult<\n\t\t\tSQLiteTable,\n\t\t\tSQLiteColumn\n\t\t>['selection'] = [];\n\t\tlet limit,\n\t\t\toffset,\n\t\t\torderBy: SQLiteSelectConfig['orderBy'] = [],\n\t\t\twhere;\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(([key, value]) => ({\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]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\taliasedTableColumn(value, tableAlias),\n\t\t\t\t]),\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, V1.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: {\n\t\t\t\ttsKey: string;\n\t\t\t\tvalue: SQLiteColumn | SQL.Aliased;\n\t\t\t}[] = [];\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(\n\t\t\t\t\t\t\t(key) => !selectedColumns.includes(key),\n\t\t\t\t\t\t);\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 | V1.DBQueryConfig<'many', false>;\n\t\t\t\trelation: V1.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(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tentry,\n\t\t\t\t\t\t): entry is [(typeof entry)[0], NonNullable<(typeof entry)[1]>] => !!entry[1],\n\t\t\t\t\t)\n\t\t\t\t\t.map(([tsKey, queryConfig]) => ({\n\t\t\t\t\t\ttsKey,\n\t\t\t\t\t\tqueryConfig,\n\t\t\t\t\t\trelation: tableConfig.relations[tsKey]!,\n\t\t\t\t\t}));\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)\n\t\t\t\t\t\t? value.fieldAlias\n\t\t\t\t\t\t: tableConfig.columns[tsKey]!.name,\n\t\t\t\t\ttsKey,\n\t\t\t\t\tfield: is(value, Column)\n\t\t\t\t\t\t? aliasedTableColumn(value, tableAlias)\n\t\t\t\t\t\t: 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, V1.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 = V1.normalizeRelation(\n\t\t\t\t\tschema,\n\t\t\t\t\ttableNamesMap,\n\t\t\t\t\trelation,\n\t\t\t\t);\n\t\t\t\tconst relationTableName = getTableUniqueName(relation.referencedTable);\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(\n\t\t\t\t\t\t\t\tnormalizedRelation.references[i]!,\n\t\t\t\t\t\t\t\trelationTableAlias,\n\t\t\t\t\t\t\t),\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, V1.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)\n\t\t\t\t\t\t\t? sql.identifier(this.casing.getColumnCasing(field))\n\t\t\t\t\t\t\t: is(field, SQL.Aliased)\n\t\t\t\t\t\t\t? field.sql\n\t\t\t\t\t\t\t: 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, V1.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\t{\n\t\t\t\t\tdbKey: 'data',\n\t\t\t\t\ttsKey: 'data',\n\t\t\t\t\tfield: field.as('data'),\n\t\t\t\t\tisJson: true,\n\t\t\t\t\trelationTableTsKey: tableConfig.tsName,\n\t\t\t\t\tselection,\n\t\t\t\t},\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)\n\t\t\t\t\t? result\n\t\t\t\t\t: 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)\n\t\t\t\t\t\t? aliasedTableColumn(field, tableAlias)\n\t\t\t\t\t\t: 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)\n\t\t\t\t\t\t? aliasedTableColumn(field, tableAlias)\n\t\t\t\t\t\t: 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\tprivate nestedSelectionerror() {\n\t\tthrow new DrizzleError({\n\t\t\tmessage: `Views with nested selections are not supported by the relational query builder`,\n\t\t});\n\t}\n\n\tprivate buildRqbColumn(table: Table | View, column: unknown, key: string) {\n\t\tif (is(column, Column)) {\n\t\t\tconst name = sql`${table}.${sql.identifier(this.casing.getColumnCasing(column))}`;\n\n\t\t\tswitch (column.columnType) {\n\t\t\t\tcase 'SQLiteBigInt':\n\t\t\t\tcase 'SQLiteBlobJson':\n\t\t\t\tcase 'SQLiteBlobBuffer': {\n\t\t\t\t\treturn sql`hex(${name}) as ${sql.identifier(key)}`;\n\t\t\t\t}\n\n\t\t\t\tcase 'SQLiteNumeric':\n\t\t\t\tcase 'SQLiteNumericNumber':\n\t\t\t\tcase 'SQLiteNumericBigInt': {\n\t\t\t\t\treturn sql`cast(${name} as text) as ${sql.identifier(key)}`;\n\t\t\t\t}\n\n\t\t\t\tcase 'SQLiteCustomColumn': {\n\t\t\t\t\treturn sql`${(<SQLiteCustomColumn<any>> column).jsonSelectIdentifier(name, sql)} as ${sql.identifier(key)}`;\n\t\t\t\t}\n\n\t\t\t\tdefault: {\n\t\t\t\t\treturn sql`${name} as ${sql.identifier(key)}`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn sql`${table}.${\n\t\t\tis(column, SQL.Aliased)\n\t\t\t\t? sql.identifier(column.fieldAlias)\n\t\t\t\t: isSQLWrapper(column)\n\t\t\t\t? sql.identifier(key)\n\t\t\t\t: this.nestedSelectionerror()\n\t\t} as ${sql.identifier(key)}`;\n\t}\n\n\tprivate unwrapAllColumns = (\n\t\ttable: Table | View,\n\t\tselection: BuildRelationalQueryResult['selection'],\n\t) => {\n\t\treturn sql.join(\n\t\t\tObject.entries(table[TableColumns]).map(([k, v]) => {\n\t\t\t\tselection.push({\n\t\t\t\t\tkey: k,\n\t\t\t\t\tfield: v as Column | SQL | SQLWrapper | SQL.Aliased,\n\t\t\t\t});\n\n\t\t\t\treturn this.buildRqbColumn(table, v, k);\n\t\t\t}),\n\t\t\tsql`, `,\n\t\t);\n\t};\n\n\tprivate getSelectedTableColumns = (\n\t\ttable: Table | View,\n\t\tcolumns: Record<string, boolean | undefined>,\n\t) => {\n\t\tconst selectedColumns: ColumnWithTSName[] = [];\n\t\tconst columnContainer = table[TableColumns];\n\t\tconst entries = Object.entries(columns);\n\n\t\tlet colSelectionMode: boolean | undefined;\n\t\tfor (const [k, v] of entries) {\n\t\t\tif (v === undefined) continue;\n\t\t\tcolSelectionMode = colSelectionMode || v;\n\n\t\t\tif (v) {\n\t\t\t\tconst column = columnContainer[k]!;\n\n\t\t\t\tselectedColumns.push({\n\t\t\t\t\tcolumn: column as Column | SQL | SQLWrapper | SQL.Aliased,\n\t\t\t\t\ttsName: k,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (colSelectionMode === false) {\n\t\t\tfor (const [k, v] of Object.entries(columnContainer)) {\n\t\t\t\tif (columns[k] === false) continue;\n\n\t\t\t\tselectedColumns.push({\n\t\t\t\t\tcolumn: v as Column | SQL | SQLWrapper | SQL.Aliased | Table,\n\t\t\t\t\ttsName: k,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn selectedColumns;\n\t};\n\n\tprivate buildColumns = (\n\t\ttable: SQLiteTable | SQLiteView,\n\t\tselection: BuildRelationalQueryResult['selection'],\n\t\tparams?: DBQueryConfig<'many'>,\n\t) =>\n\t\tparams?.columns\n\t\t\t? (() => {\n\t\t\t\tconst columnIdentifiers: SQL[] = [];\n\n\t\t\t\tconst selectedColumns = this.getSelectedTableColumns(\n\t\t\t\t\ttable,\n\t\t\t\t\tparams?.columns,\n\t\t\t\t);\n\n\t\t\t\tfor (const { column, tsName } of selectedColumns) {\n\t\t\t\t\tcolumnIdentifiers.push(this.buildRqbColumn(table, column, tsName));\n\t\t\t\t\tselection.push({\n\t\t\t\t\t\tkey: tsName,\n\t\t\t\t\t\tfield: column,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn columnIdentifiers.length\n\t\t\t\t\t? sql.join(columnIdentifiers, sql`, `)\n\t\t\t\t\t: undefined;\n\t\t\t})()\n\t\t\t: this.unwrapAllColumns(table, selection);\n\n\tbuildRelationalQuery({\n\t\tschema,\n\t\ttable,\n\t\ttableConfig,\n\t\tqueryConfig: config,\n\t\trelationWhere,\n\t\tmode,\n\t\tisNested,\n\t\terrorPath,\n\t\tdepth,\n\t\tthroughJoin,\n\t\tjsonb,\n\t}: {\n\t\tschema: TablesRelationalConfig;\n\t\ttable: SQLiteTable | SQLiteView;\n\t\ttableConfig: TableRelationalConfig;\n\t\tqueryConfig?: DBQueryConfig<'many'> | true;\n\t\trelationWhere?: SQL;\n\t\tmode: 'first' | 'many';\n\t\tisNested?: boolean;\n\t\terrorPath?: string;\n\t\tdepth?: number;\n\t\tthroughJoin?: SQL;\n\t\tjsonb: SQL;\n\t}): BuildRelationalQueryResult {\n\t\tconst selection: BuildRelationalQueryResult['selection'] = [];\n\t\tconst isSingle = mode === 'first';\n\t\tconst params = config === true ? undefined : config;\n\t\tconst currentPath = errorPath ?? '';\n\t\tconst currentDepth = depth ?? 0;\n\t\tif (!currentDepth) table = aliasedTable(table, `d${currentDepth}`);\n\n\t\tconst limit = isSingle ? 1 : params?.limit;\n\t\tconst offset = params?.offset;\n\n\t\tconst columns = this.buildColumns(table, selection, params);\n\n\t\tconst where: SQL | undefined = params?.where && relationWhere\n\t\t\t? and(\n\t\t\t\trelationsFilterToSQL(\n\t\t\t\t\ttable,\n\t\t\t\t\tparams.where,\n\t\t\t\t\ttableConfig.relations,\n\t\t\t\t\tschema,\n\t\t\t\t\tthis.casing,\n\t\t\t\t),\n\t\t\t\trelationWhere,\n\t\t\t)\n\t\t\t: params?.where\n\t\t\t? relationsFilterToSQL(\n\t\t\t\ttable,\n\t\t\t\tparams.where,\n\t\t\t\ttableConfig.relations,\n\t\t\t\tschema,\n\t\t\t\tthis.casing,\n\t\t\t)\n\t\t\t: relationWhere;\n\t\tconst order = params?.orderBy\n\t\t\t? relationsOrderToSQL(table, params.orderBy)\n\t\t\t: undefined;\n\t\tconst extras = params?.extras\n\t\t\t? relationExtrasToSQL(table, params.extras)\n\t\t\t: undefined;\n\t\tif (extras) selection.push(...extras.selection);\n\n\t\tconst joins = params\n\t\t\t? (() => {\n\t\t\t\tconst { with: joins } = params as WithContainer;\n\t\t\t\tif (!joins) return;\n\n\t\t\t\tconst withEntries = Object.entries(joins).filter(([_, v]) => v);\n\t\t\t\tif (!withEntries.length) return;\n\n\t\t\t\treturn sql.join(\n\t\t\t\t\twithEntries.map(([k, join]) => {\n\t\t\t\t\t\t// if (is(tableConfig.relations[k]!, AggregatedField)) {\n\t\t\t\t\t\t// \tconst relation = tableConfig.relations[k]!;\n\n\t\t\t\t\t\t// \trelation.onTable(table);\n\t\t\t\t\t\t// \tconst query = relation.getSQL();\n\n\t\t\t\t\t\t// \tselection.push({\n\t\t\t\t\t\t// \t\tkey: k,\n\t\t\t\t\t\t// \t\tfield: relation,\n\t\t\t\t\t\t// \t});\n\n\t\t\t\t\t\t// \treturn sql`(${query}) as ${sql.identifier(k)}`;\n\t\t\t\t\t\t// }\n\n\t\t\t\t\t\tconst relation = tableConfig.relations[k]! as Relation;\n\t\t\t\t\t\tconst isSingle = is(relation, One);\n\t\t\t\t\t\tconst targetTable = aliasedTable(\n\t\t\t\t\t\t\trelation.targetTable,\n\t\t\t\t\t\t\t`d${currentDepth + 1}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst throughTable = relation.throughTable\n\t\t\t\t\t\t\t? aliasedTable(relation.throughTable, `tr${currentDepth}`)\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tconst { filter, joinCondition } = relationToSQL(\n\t\t\t\t\t\t\tthis.casing,\n\t\t\t\t\t\t\trelation,\n\t\t\t\t\t\t\ttable,\n\t\t\t\t\t\t\ttargetTable,\n\t\t\t\t\t\t\tthroughTable,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst throughJoin = throughTable\n\t\t\t\t\t\t\t? sql` inner join ${getTableAsAliasSQL(throughTable)} on ${joinCondition!}`\n\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\tconst innerQuery = this.buildRelationalQuery({\n\t\t\t\t\t\t\ttable: targetTable as SQLiteTable | SQLiteView,\n\t\t\t\t\t\t\tmode: isSingle ? 'first' : 'many',\n\t\t\t\t\t\t\tschema,\n\t\t\t\t\t\t\tqueryConfig: join as DBQueryConfig,\n\t\t\t\t\t\t\ttableConfig: schema[relation.targetTableName]!,\n\t\t\t\t\t\t\trelationWhere: filter,\n\t\t\t\t\t\t\tisNested: true,\n\t\t\t\t\t\t\terrorPath: `${currentPath.length ? `${currentPath}.` : ''}${k}`,\n\t\t\t\t\t\t\tdepth: currentDepth + 1,\n\t\t\t\t\t\t\tthroughJoin,\n\t\t\t\t\t\t\tjsonb,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tselection.push({\n\t\t\t\t\t\t\tfield: targetTable,\n\t\t\t\t\t\t\tkey: k,\n\t\t\t\t\t\t\tselection: innerQuery.selection,\n\t\t\t\t\t\t\tisArray: !isSingle,\n\t\t\t\t\t\t\tisOptional: ((relation as AnyOne).optional ?? false)\n\t\t\t\t\t\t\t\t|| (join !== true\n\t\t\t\t\t\t\t\t\t&& !!(join as Exclude<typeof join, boolean | undefined>)\n\t\t\t\t\t\t\t\t\t\t.where),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst jsonColumns = sql.join(\n\t\t\t\t\t\t\tinnerQuery.selection.map((s) => {\n\t\t\t\t\t\t\t\treturn sql`${sql.raw(this.escapeString(s.key))}, ${\n\t\t\t\t\t\t\t\t\ts.selection\n\t\t\t\t\t\t\t\t\t\t? sql`${jsonb}(${sql.identifier(s.key)})`\n\t\t\t\t\t\t\t\t\t\t: sql.identifier(s.key)\n\t\t\t\t\t\t\t\t}`;\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tsql`, `,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst json = isNested ? jsonb : sql`json`;\n\n\t\t\t\t\t\tconst joinQuery = isSingle\n\t\t\t\t\t\t\t? sql`(select ${json}_object(${jsonColumns}) as ${sql.identifier('r')} from (${innerQuery.sql}) as ${\n\t\t\t\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\t\t\t\t't',\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}) as ${sql.identifier(k)}`\n\t\t\t\t\t\t\t: sql`coalesce((select ${json}_group_array(json_object(${jsonColumns})) as ${\n\t\t\t\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\t\t\t\t'r',\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t} from (${innerQuery.sql}) as ${sql.identifier('t')}), ${jsonb}_array()) as ${sql.identifier(k)}`;\n\n\t\t\t\t\t\treturn joinQuery;\n\t\t\t\t\t}),\n\t\t\t\t\tsql`, `,\n\t\t\t\t);\n\t\t\t})()\n\t\t\t: undefined;\n\n\t\tconst selectionArr = [columns, extras?.sql, joins].filter(\n\t\t\t(e) => e !== undefined,\n\t\t);\n\t\tif (!selectionArr.length) {\n\t\t\tthrow new DrizzleError({\n\t\t\t\tmessage: `No fields selected for table \"${tableConfig.name}\"${currentPath ? ` (\"${currentPath}\")` : ''}`,\n\t\t\t});\n\t\t}\n\t\tconst selectionSet = sql.join(selectionArr, sql`, `);\n\n\t\tconst query = sql`select ${selectionSet} from ${getTableAsAliasSQL(table)}${throughJoin}${\n\t\t\tsql` where ${where}`.if(\n\t\t\t\twhere,\n\t\t\t)\n\t\t}${sql` order by ${order}`.if(order)}${sql` limit ${limit}`.if(limit !== undefined)}${\n\t\t\tsql` offset ${offset}`.if(\n\t\t\t\toffset !== undefined,\n\t\t\t)\n\t\t}`;\n\n\t\treturn {\n\t\t\tsql: query,\n\t\t\tselection,\n\t\t};\n\t}\n}\n\nexport class SQLiteSyncDialect extends SQLiteDialect {\n\tstatic override readonly [entityKind]: string = 'SQLiteSyncDialect';\n\n\tmigrate(\n\t\tmigrations: MigrationMeta[],\n\t\tsession: SQLiteSession<\n\t\t\t'sync',\n\t\t\tunknown,\n\t\t\tRecord<string, unknown>,\n\t\t\tAnyRelations,\n\t\t\tV1.TablesRelationalConfig\n\t\t>,\n\t\tconfig?: string | Omit<MigrationConfig, 'migrationsFolder'>,\n\t): void | MigratorInitFailResponse {\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\t// Detect DB version and upgrade table schema if needed\n\t\tconst { newDb } = upgradeSyncIfNeeded(migrationsTable, session, migrations);\n\n\t\tif (newDb) {\n\t\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid INTEGER PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric,\n\t\t\t\tname text,\n\t\t\t\tapplied_at TEXT\n\t\t\t)`;\n\t\t\tsession.run(migrationTableCreate);\n\t\t}\n\n\t\tconst dbMigrations = session.all<{\n\t\t\tid: number;\n\t\t\thash: string;\n\t\t\tcreated_at: string;\n\t\t\tname: string | null;\n\t\t}>(\n\t\t\tsql`SELECT id, hash, created_at, name FROM ${sql.identifier(migrationsTable)}`,\n\t\t);\n\n\t\tif (typeof config === 'object' && config.init) {\n\t\t\tif (dbMigrations.length) {\n\t\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t\t}\n\n\t\t\tif (migrations.length > 1) {\n\t\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t\t}\n\n\t\t\tconst [migration] = migrations;\n\n\t\t\tif (!migration) return;\n\n\t\t\tsession.run(\n\t\t\t\tsql`insert into ${\n\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\tmigrationsTable,\n\t\t\t\t\t)\n\t\t\t\t} (\"hash\", \"created_at\", \"name\", \"applied_at\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${\n\t\t\t\t\tnew Date().toISOString()\n\t\t\t\t})`,\n\t\t\t);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst migrationsToRun = getMigrationsToRun({\n\t\t\tlocalMigrations: migrations,\n\t\t\tdbMigrations,\n\t\t});\n\t\tsession.run(sql`BEGIN`);\n\n\t\ttry {\n\t\t\tfor (const migration of migrationsToRun) {\n\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\tsession.run(sql.raw(stmt));\n\t\t\t\t}\n\t\t\t\tsession.run(\n\t\t\t\t\tsql`INSERT INTO ${\n\t\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\t\tmigrationsTable,\n\t\t\t\t\t\t)\n\t\t\t\t\t} (\"hash\", \"created_at\", \"name\", \"applied_at\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${\n\t\t\t\t\t\tnew Date().toISOString()\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 override readonly [entityKind]: string = 'SQLiteAsyncDialect';\n\n\tasync migrate(\n\t\tmigrations: MigrationMeta[],\n\t\tsession: SQLiteSession<\n\t\t\t'async',\n\t\t\tunknown,\n\t\t\tRecord<string, unknown>,\n\t\t\tAnyRelations,\n\t\t\tV1.TablesRelationalConfig\n\t\t>,\n\t\tconfig?: string | Omit<MigrationConfig, 'migrationsFolder'>,\n\t): Promise<void | MigratorInitFailResponse> {\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\t// Detect DB version and upgrade table schema if needed\n\t\tconst { newDb } = await upgradeAsyncIfNeeded(\n\t\t\tmigrationsTable,\n\t\t\tsession,\n\t\t\tmigrations,\n\t\t);\n\n\t\tif (newDb) {\n\t\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid INTEGER PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric,\n\t\t\t\tname text,\n\t\t\t\tapplied_at TEXT\n\t\t)\n\t\t`;\n\t\t\tawait session.run(migrationTableCreate);\n\t\t}\n\n\t\tconst dbMigrations = await session.all<{\n\t\t\tid: number;\n\t\t\thash: string;\n\t\t\tcreated_at: string;\n\t\t\tname: string | null;\n\t\t}>(\n\t\t\tsql`SELECT id, hash, created_at, name FROM ${sql.identifier(migrationsTable)};`,\n\t\t);\n\n\t\tif (typeof config === 'object' && config.init) {\n\t\t\tif (dbMigrations.length) {\n\t\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t\t}\n\n\t\t\tif (migrations.length > 1) {\n\t\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t\t}\n\n\t\t\tconst [migration] = migrations;\n\n\t\t\tif (!migration) return;\n\n\t\t\tawait session.run(\n\t\t\t\tsql`insert into ${\n\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\tmigrationsTable,\n\t\t\t\t\t)\n\t\t\t\t} (\"hash\", \"created_at\", \"name\", \"applied_at\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${\n\t\t\t\t\tnew Date().toISOString()\n\t\t\t\t})`,\n\t\t\t);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst migrationsToRun = getMigrationsToRun({\n\t\t\tlocalMigrations: migrations,\n\t\t\tdbMigrations,\n\t\t});\n\t\tawait session.transaction(async (tx) => {\n\t\t\tfor (const migration of migrationsToRun) {\n\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\tawait tx.run(sql.raw(stmt));\n\t\t\t\t}\n\t\t\t\tawait tx.run(\n\t\t\t\t\tsql`insert into ${\n\t\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\t\tmigrationsTable,\n\t\t\t\t\t\t)\n\t\t\t\t\t} (\"hash\", \"created_at\", \"name\", \"applied_at\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${\n\t\t\t\t\t\tnew Date().toISOString()\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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"}
|
|
1
|
+
{"version":3,"file":"dialect.cjs","names":["entityKind","CasingCache","sql","Table","SQL","Column","Subquery","SQLiteTable","View","ViewBaseConfig","SQLiteViewBase","SQLiteColumn","Param","V1","DrizzleError","TableColumns","One"],"sources":["../../src/sqlite-core/dialect.ts"],"sourcesContent":["import * as V1 from '~/_relations.ts';\nimport {\n\taliasedTable,\n\taliasedTableColumn,\n\tgetOriginalColumnFromAlias,\n\tmapColumnsInAliasedSQLToAlias,\n\tmapColumnsInSQLToAlias,\n} from '~/alias.ts';\nimport { CasingCache } from '~/casing.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, MigratorInitFailResponse } from '~/migrator.ts';\nimport { getMigrationsToRun } from '~/migrator.utils.ts';\nimport {\n\ttype AnyOne,\n\t// AggregatedField,\n\ttype AnyRelations,\n\ttype BuildRelationalQueryResult,\n\ttype ColumnWithTSName,\n\ttype DBQueryConfig,\n\tgetTableAsAliasSQL,\n\tOne,\n\ttype Relation,\n\trelationExtrasToSQL,\n\trelationsFilterToSQL,\n\trelationsOrderToSQL,\n\trelationToSQL,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n\ttype WithContainer,\n} from '~/relations.ts';\nimport type { Name, Placeholder, SQLWrapper } from '~/sql/index.ts';\nimport { and, eq, isSQLWrapper } from '~/sql/index.ts';\nimport { Param, type QueryWithTypings, SQL, sql, type SQLChunk, View } from '~/sql/sql.ts';\nimport { SQLiteColumn, type SQLiteCustomColumn } from '~/sqlite-core/columns/index.ts';\nimport type {\n\tAnySQLiteSelectQueryBuilder,\n\tSQLiteDeleteConfig,\n\tSQLiteInsertConfig,\n\tSQLiteUpdateConfig,\n} from '~/sqlite-core/query-builders/index.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { getTableName, getTableUniqueName, Table, TableColumns } from '~/table.ts';\nimport { upgradeAsyncIfNeeded, upgradeSyncIfNeeded } from '~/up-migrations/sqlite.ts';\nimport { type Casing, orderSelectedFields, type UpdateSet } from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type { BaseSQLiteDatabase } from './db.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';\nimport type { SQLiteView } from './view.ts';\n\nexport interface SQLiteDialectConfig {\n\tcasing?: Casing;\n}\n\nexport abstract class SQLiteDialect {\n\tstatic readonly [entityKind]: string = 'SQLiteDialect';\n\n\t/** @internal */\n\treadonly casing: CasingCache;\n\n\tconstructor(config?: SQLiteDialectConfig) {\n\t\tthis.casing = new CasingCache(config?.casing);\n\t}\n\n\tescapeName(name: string): string {\n\t\treturn `\"${name.replace(/\"/g, '\"\"')}\"`;\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._.alias)} as (${w._.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({\n\t\ttable,\n\t\twhere,\n\t\treturning,\n\t\twithList,\n\t\tlimit,\n\t\torderBy,\n\t}: 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\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\n\n\t\treturn sql`${withSql}delete from ${table}${whereSql}${returningSql}${orderBySql}${limitSql}`;\n\t}\n\n\tbuildUpdateSet(table: SQLiteTable, set: UpdateSet): SQL {\n\t\tconst tableColumns = table[Table.Symbol.Columns];\n\n\t\tconst columnNames = Object.keys(tableColumns).filter(\n\t\t\t(colName) =>\n\t\t\t\tset[colName] !== undefined\n\t\t\t\t|| tableColumns[colName]?.onUpdateFn !== undefined,\n\t\t);\n\n\t\tconst setLength = columnNames.length;\n\t\treturn sql.join(\n\t\t\tcolumnNames.flatMap((colName, i) => {\n\t\t\t\tconst col = tableColumns[colName]!;\n\n\t\t\t\tconst onUpdateFnResult = col.onUpdateFn?.();\n\t\t\t\tconst value = set[colName]\n\t\t\t\t\t?? (is(onUpdateFnResult, SQL)\n\t\t\t\t\t\t? onUpdateFnResult\n\t\t\t\t\t\t: sql.param(onUpdateFnResult, col));\n\t\t\t\tconst res = sql`${sql.identifier(this.casing.getColumnCasing(col))} = ${value}`;\n\n\t\t\t\tif (i < setLength - 1) {\n\t\t\t\t\treturn [res, sql.raw(', ')];\n\t\t\t\t}\n\t\t\t\treturn [res];\n\t\t\t}),\n\t\t);\n\t}\n\n\tbuildUpdateQuery({\n\t\ttable,\n\t\tset,\n\t\twhere,\n\t\treturning,\n\t\twithList,\n\t\tjoins,\n\t\tfrom,\n\t\tlimit,\n\t\torderBy,\n\t}: SQLiteUpdateConfig): SQL {\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst setSql = this.buildUpdateSet(table, set);\n\n\t\tconst fromSql = from && sql.join([sql.raw(' from '), this.buildFromTable(from)]);\n\n\t\tconst joinsSql = this.buildJoins(joins);\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\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\n\n\t\treturn sql`${withSql}update ${table} set ${setSql}${fromSql}${joinsSql}${whereSql}${returningSql}${orderBySql}${limitSql}`;\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.flatMap(({ field }, i) => {\n\t\t\tconst chunk: SQLChunk[] = [];\n\n\t\t\tif (is(field, SQL.Aliased) && field.isSelectionField) {\n\t\t\t\tif (!isSingleTable && field.origin !== undefined) {\n\t\t\t\t\tchunk.push(sql.identifier(field.origin), sql.raw('.'));\n\t\t\t\t}\n\t\t\t\tchunk.push(sql.identifier(field.fieldAlias));\n\t\t\t} else if (is(field, SQL.Aliased) || is(field, SQL)) {\n\t\t\t\tconst query = is(field, SQL.Aliased) ? field.sql : field;\n\n\t\t\t\tif (isSingleTable) {\n\t\t\t\t\tconst newSql = new SQL(\n\t\t\t\t\t\tquery.queryChunks.map((c) => {\n\t\t\t\t\t\t\tif (is(c, Column)) {\n\t\t\t\t\t\t\t\treturn sql.identifier(this.casing.getColumnCasing(c));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn c;\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\n\t\t\t\t\tchunk.push(query.shouldInlineParams ? newSql.inlineParams() : newSql);\n\t\t\t\t} else {\n\t\t\t\t\tchunk.push(query);\n\t\t\t\t}\n\n\t\t\t\tif (is(field, SQL.Aliased)) {\n\t\t\t\t\tchunk.push(sql` as ${sql.identifier(field.fieldAlias)}`);\n\t\t\t\t}\n\t\t\t} else if (is(field, Column)) {\n\t\t\t\tif (field.columnType === 'SQLiteNumericBigInt') {\n\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tfield.isAlias\n\t\t\t\t\t\t\t\t? sql`cast(${\n\t\t\t\t\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\t\t\t\t\tthis.casing.getColumnCasing(\n\t\t\t\t\t\t\t\t\t\t\tgetOriginalColumnFromAlias(field),\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t} as text) as ${field}`\n\t\t\t\t\t\t\t\t: sql`cast(${sql.identifier(this.casing.getColumnCasing(field))} as text)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tfield.isAlias\n\t\t\t\t\t\t\t\t? sql`cast(${getOriginalColumnFromAlias(field)} as text) as ${field}`\n\t\t\t\t\t\t\t\t: sql`cast(${field} as text)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tfield.isAlias\n\t\t\t\t\t\t\t\t? sql`${sql.identifier(this.casing.getColumnCasing(getOriginalColumnFromAlias(field)))} as ${field}`\n\t\t\t\t\t\t\t\t: sql.identifier(this.casing.getColumnCasing(field)),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tfield.isAlias\n\t\t\t\t\t\t\t\t? sql`${getOriginalColumnFromAlias(field)} as ${field}`\n\t\t\t\t\t\t\t\t: field,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (is(field, Subquery)) {\n\t\t\t\tconst entries = Object.entries(field._.selectedFields) as [\n\t\t\t\t\tstring,\n\t\t\t\t\tSQL.Aliased | Column | SQL,\n\t\t\t\t][];\n\n\t\t\t\tif (entries.length === 1) {\n\t\t\t\t\tconst entry = entries[0]![1];\n\n\t\t\t\t\tconst fieldDecoder = is(entry, SQL)\n\t\t\t\t\t\t? entry.decoder\n\t\t\t\t\t\t: is(entry, Column)\n\t\t\t\t\t\t? { mapFromDriverValue: (v: any) => entry.mapFromDriverValue(v) }\n\t\t\t\t\t\t: entry.sql.decoder;\n\t\t\t\t\tif (fieldDecoder) field._.sql.decoder = fieldDecoder;\n\t\t\t\t}\n\t\t\t\tchunk.push(field);\n\t\t\t}\n\n\t\t\tif (i < columnsLen - 1) {\n\t\t\t\tchunk.push(sql`, `);\n\t\t\t}\n\n\t\t\treturn chunk;\n\t\t});\n\n\t\treturn sql.join(chunks);\n\t}\n\n\tprivate buildJoins(\n\t\tjoins: SQLiteSelectJoinConfig[] | undefined,\n\t): SQL | undefined {\n\t\tif (!joins || joins.length === 0) {\n\t\t\treturn undefined;\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\t\t\t\tconst onSql = joinMeta.on ? sql` on ${joinMeta.on}` : undefined;\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(\n\t\t\t\t\t\t\t\torigTableName,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}${alias && sql` ${sql.identifier(alias)}`}${onSql}`,\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}${onSql}`,\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\treturn sql.join(joinsArray);\n\t}\n\n\tprivate buildLimit(limit: number | Placeholder | undefined): SQL | undefined {\n\t\treturn typeof limit === 'object'\n\t\t\t\t|| (typeof limit === 'number' && limit >= 0)\n\t\t\t? sql` limit ${limit}`\n\t\t\t: undefined;\n\t}\n\n\tprivate buildOrderBy(\n\t\torderBy: (SQLiteColumn | SQL | SQL.Aliased)[] | undefined,\n\t): SQL | undefined {\n\t\tconst orderByList: (SQLiteColumn | SQL | SQL.Aliased)[] = [];\n\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\treturn orderByList.length > 0\n\t\t\t? sql` order by ${sql.join(orderByList)}`\n\t\t\t: undefined;\n\t}\n\n\tprivate buildFromTable(\n\t\ttable: SQL | Subquery | SQLiteViewBase | SQLiteTable | undefined,\n\t): SQL | Subquery | SQLiteViewBase | SQLiteTable | undefined {\n\t\tif (is(table, Table) && table[Table.Symbol.IsAlias]) {\n\t\t\treturn sql`${sql`${sql.identifier(table[Table.Symbol.Schema] ?? '')}.`.if(table[Table.Symbol.Schema])}${\n\t\t\t\tsql.identifier(\n\t\t\t\t\ttable[Table.Symbol.OriginalName],\n\t\t\t\t)\n\t\t\t} ${sql.identifier(table[Table.Symbol.Name])}`;\n\t\t}\n\n\t\tif (is(table, View) && table[ViewBaseConfig].isAlias) {\n\t\t\tlet fullName = sql`${sql.identifier(table[ViewBaseConfig].originalName)}`;\n\t\t\tif (table[ViewBaseConfig].schema) {\n\t\t\t\tfullName = sql`${sql.identifier(table[ViewBaseConfig].schema)}.${fullName}`;\n\t\t\t}\n\t\t\treturn sql`${fullName} ${sql.identifier(table[ViewBaseConfig].name)}`;\n\t\t}\n\n\t\treturn table;\n\t}\n\n\tbuildSelectQuery({\n\t\twithList,\n\t\tfields,\n\t\tfieldsFlat,\n\t\twhere,\n\t\thaving,\n\t\ttable,\n\t\tjoins,\n\t\torderBy,\n\t\tgroupBy,\n\t\tlimit,\n\t\toffset,\n\t\tdistinct,\n\t\tsetOperators,\n\t}: SQLiteSelectConfig): 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._.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(\n\t\t\t\t\t\t({ alias }) =>\n\t\t\t\t\t\t\talias\n\t\t\t\t\t\t\t\t=== (table[Table.Symbol.IsAlias]\n\t\t\t\t\t\t\t\t\t? getTableName(table)\n\t\t\t\t\t\t\t\t\t: 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\t\t'->',\n\t\t\t\t\t\t)\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 = this.buildFromTable(table);\n\n\t\tconst joinsSql = this.buildJoins(joins);\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\tconst havingSql = having ? sql` having ${having}` : undefined;\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\n\t\t\t? sql` group by ${sql.join(groupByList)}`\n\t\t\t: undefined;\n\n\t\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\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(\n\t\tleftSelect: SQL,\n\t\tsetOperators: SQLiteSelectConfig['setOperators'],\n\t): 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}: {\n\t\tleftSelect: SQL;\n\t\tsetOperator: SQLiteSelectConfig['setOperators'][number];\n\t}): 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(\n\t\t\t\t\t\t\t\tthis.casing.getColumnCasing(chunk),\n\t\t\t\t\t\t\t);\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 = typeof limit === 'object' || (typeof limit === 'number' && limit >= 0)\n\t\t\t? sql` limit ${limit}`\n\t\t\t: 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({\n\t\ttable,\n\t\tvalues: valuesOrSelect,\n\t\tonConflict,\n\t\treturning,\n\t\twithList,\n\t\tselect,\n\t}: 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).filter(\n\t\t\t([_, col]) => !col.shouldDisableInsert(),\n\t\t);\n\t\tconst insertOrder = colEntries.map(([, column]) => sql.identifier(this.casing.getColumnCasing(column)));\n\n\t\tif (select) {\n\t\t\tconst select = valuesOrSelect as AnySQLiteSelectQueryBuilder | SQL;\n\n\t\t\tif (is(select, SQL)) {\n\t\t\t\tvaluesSqlList.push(select);\n\t\t\t} else {\n\t\t\t\tvaluesSqlList.push(select.getSQL());\n\t\t\t}\n\t\t} else {\n\t\t\tconst values = valuesOrSelect as Record<string, Param | SQL>[];\n\t\t\tvaluesSqlList.push(sql.raw('values '));\n\n\t\t\tfor (const [valueIndex, value] of values.entries()) {\n\t\t\t\tconst valueList: (SQLChunk | SQL)[] = [];\n\t\t\t\tfor (const [fieldName, col] of colEntries) {\n\t\t\t\t\tconst colValue = value[fieldName];\n\t\t\t\t\tif (\n\t\t\t\t\t\tcolValue === undefined\n\t\t\t\t\t\t|| (is(colValue, Param) && colValue.value === undefined)\n\t\t\t\t\t) {\n\t\t\t\t\t\tlet defaultValue;\n\t\t\t\t\t\tif (col.default !== null && col.default !== undefined) {\n\t\t\t\t\t\t\tdefaultValue = is(col.default, SQL)\n\t\t\t\t\t\t\t\t? col.default\n\t\t\t\t\t\t\t\t: sql.param(col.default, col);\n\t\t\t\t\t\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t\t\t\t\t\t} else if (col.defaultFn !== undefined) {\n\t\t\t\t\t\t\tconst defaultFnResult = col.defaultFn();\n\t\t\t\t\t\t\tdefaultValue = is(defaultFnResult, SQL)\n\t\t\t\t\t\t\t\t? defaultFnResult\n\t\t\t\t\t\t\t\t: sql.param(defaultFnResult, col);\n\t\t\t\t\t\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t\t\t\t\t\t} else if (!col.default && col.onUpdateFn !== undefined) {\n\t\t\t\t\t\t\tconst onUpdateFnResult = col.onUpdateFn();\n\t\t\t\t\t\t\tdefaultValue = is(onUpdateFnResult, SQL)\n\t\t\t\t\t\t\t\t? onUpdateFnResult\n\t\t\t\t\t\t\t\t: sql.param(onUpdateFnResult, col);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdefaultValue = sql`null`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalueList.push(defaultValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalueList.push(colValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvaluesSqlList.push(valueList);\n\t\t\t\tif (valueIndex < values.length - 1) {\n\t\t\t\t\tvaluesSqlList.push(sql`, `);\n\t\t\t\t}\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?.length ? sql.join(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} ${valuesSql}${onConflictSql}${returningSql}`;\n\t}\n\n\tsqlToQuery(sql: SQL, invokeSource?: 'indexes' | undefined): QueryWithTypings {\n\t\treturn sql.toQuery({\n\t\t\tcasing: this.casing,\n\t\t\tescapeName: this.escapeName,\n\t\t\tescapeParam: this.escapeParam,\n\t\t\tescapeString: this.escapeString,\n\t\t\tinvokeSource,\n\t\t});\n\t}\n\n\t/** @deprecated */\n\t_buildRelationalQuery({\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: V1.TablesRelationalConfig;\n\t\ttableNamesMap: Record<string, string>;\n\t\ttable: SQLiteTable;\n\t\ttableConfig: V1.TableRelationalConfig;\n\t\tqueryConfig: true | V1.DBQueryConfig<'many', true>;\n\t\ttableAlias: string;\n\t\tnestedQueryRelation?: V1.Relation;\n\t\tjoinOn?: SQL;\n\t}): V1.BuildRelationalQueryResult<SQLiteTable, SQLiteColumn> {\n\t\tlet selection: V1.BuildRelationalQueryResult<\n\t\t\tSQLiteTable,\n\t\t\tSQLiteColumn\n\t\t>['selection'] = [];\n\t\tlet limit,\n\t\t\toffset,\n\t\t\torderBy: SQLiteSelectConfig['orderBy'] = [],\n\t\t\twhere;\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(([key, value]) => ({\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]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\taliasedTableColumn(value, tableAlias),\n\t\t\t\t]),\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, V1.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: {\n\t\t\t\ttsKey: string;\n\t\t\t\tvalue: SQLiteColumn | SQL.Aliased;\n\t\t\t}[] = [];\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(\n\t\t\t\t\t\t\t(key) => !selectedColumns.includes(key),\n\t\t\t\t\t\t);\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 | V1.DBQueryConfig<'many', false>;\n\t\t\t\trelation: V1.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(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tentry,\n\t\t\t\t\t\t): entry is [(typeof entry)[0], NonNullable<(typeof entry)[1]>] => !!entry[1],\n\t\t\t\t\t)\n\t\t\t\t\t.map(([tsKey, queryConfig]) => ({\n\t\t\t\t\t\ttsKey,\n\t\t\t\t\t\tqueryConfig,\n\t\t\t\t\t\trelation: tableConfig.relations[tsKey]!,\n\t\t\t\t\t}));\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)\n\t\t\t\t\t\t? value.fieldAlias\n\t\t\t\t\t\t: tableConfig.columns[tsKey]!.name,\n\t\t\t\t\ttsKey,\n\t\t\t\t\tfield: is(value, Column)\n\t\t\t\t\t\t? aliasedTableColumn(value, tableAlias)\n\t\t\t\t\t\t: 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, V1.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 = V1.normalizeRelation(\n\t\t\t\t\tschema,\n\t\t\t\t\ttableNamesMap,\n\t\t\t\t\trelation,\n\t\t\t\t);\n\t\t\t\tconst relationTableName = getTableUniqueName(relation.referencedTable);\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(\n\t\t\t\t\t\t\t\tnormalizedRelation.references[i]!,\n\t\t\t\t\t\t\t\trelationTableAlias,\n\t\t\t\t\t\t\t),\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, V1.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)\n\t\t\t\t\t\t\t? sql.identifier(this.casing.getColumnCasing(field))\n\t\t\t\t\t\t\t: is(field, SQL.Aliased)\n\t\t\t\t\t\t\t? field.sql\n\t\t\t\t\t\t\t: 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, V1.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\t{\n\t\t\t\t\tdbKey: 'data',\n\t\t\t\t\ttsKey: 'data',\n\t\t\t\t\tfield: field.as('data'),\n\t\t\t\t\tisJson: true,\n\t\t\t\t\trelationTableTsKey: tableConfig.tsName,\n\t\t\t\t\tselection,\n\t\t\t\t},\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)\n\t\t\t\t\t? result\n\t\t\t\t\t: 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)\n\t\t\t\t\t\t? aliasedTableColumn(field, tableAlias)\n\t\t\t\t\t\t: 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)\n\t\t\t\t\t\t? aliasedTableColumn(field, tableAlias)\n\t\t\t\t\t\t: 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\tprivate nestedSelectionerror() {\n\t\tthrow new DrizzleError({\n\t\t\tmessage: `Views with nested selections are not supported by the relational query builder`,\n\t\t});\n\t}\n\n\tprivate buildRqbColumn(table: Table | View, column: unknown, key: string) {\n\t\tif (is(column, Column)) {\n\t\t\tconst name = sql`${table}.${sql.identifier(this.casing.getColumnCasing(column))}`;\n\n\t\t\tswitch (column.columnType) {\n\t\t\t\tcase 'SQLiteBigInt':\n\t\t\t\tcase 'SQLiteBlobJson':\n\t\t\t\tcase 'SQLiteBlobBuffer': {\n\t\t\t\t\treturn sql`hex(${name}) as ${sql.identifier(key)}`;\n\t\t\t\t}\n\n\t\t\t\tcase 'SQLiteNumeric':\n\t\t\t\tcase 'SQLiteNumericNumber':\n\t\t\t\tcase 'SQLiteNumericBigInt': {\n\t\t\t\t\treturn sql`cast(${name} as text) as ${sql.identifier(key)}`;\n\t\t\t\t}\n\n\t\t\t\tcase 'SQLiteCustomColumn': {\n\t\t\t\t\treturn sql`${(<SQLiteCustomColumn<any>> column).jsonSelectIdentifier(name, sql)} as ${sql.identifier(key)}`;\n\t\t\t\t}\n\n\t\t\t\tdefault: {\n\t\t\t\t\treturn sql`${name} as ${sql.identifier(key)}`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn sql`${table}.${\n\t\t\tis(column, SQL.Aliased)\n\t\t\t\t? sql.identifier(column.fieldAlias)\n\t\t\t\t: isSQLWrapper(column)\n\t\t\t\t? sql.identifier(key)\n\t\t\t\t: this.nestedSelectionerror()\n\t\t} as ${sql.identifier(key)}`;\n\t}\n\n\tprivate unwrapAllColumns = (\n\t\ttable: Table | View,\n\t\tselection: BuildRelationalQueryResult['selection'],\n\t) => {\n\t\treturn sql.join(\n\t\t\tObject.entries(table[TableColumns]).map(([k, v]) => {\n\t\t\t\tselection.push({\n\t\t\t\t\tkey: k,\n\t\t\t\t\tfield: v as Column | SQL | SQLWrapper | SQL.Aliased,\n\t\t\t\t});\n\n\t\t\t\treturn this.buildRqbColumn(table, v, k);\n\t\t\t}),\n\t\t\tsql`, `,\n\t\t);\n\t};\n\n\tprivate getSelectedTableColumns = (\n\t\ttable: Table | View,\n\t\tcolumns: Record<string, boolean | undefined>,\n\t) => {\n\t\tconst selectedColumns: ColumnWithTSName[] = [];\n\t\tconst columnContainer = table[TableColumns];\n\t\tconst entries = Object.entries(columns);\n\n\t\tlet colSelectionMode: boolean | undefined;\n\t\tfor (const [k, v] of entries) {\n\t\t\tif (v === undefined) continue;\n\t\t\tcolSelectionMode = colSelectionMode || v;\n\n\t\t\tif (v) {\n\t\t\t\tconst column = columnContainer[k]!;\n\n\t\t\t\tselectedColumns.push({\n\t\t\t\t\tcolumn: column as Column | SQL | SQLWrapper | SQL.Aliased,\n\t\t\t\t\ttsName: k,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (colSelectionMode === false) {\n\t\t\tfor (const [k, v] of Object.entries(columnContainer)) {\n\t\t\t\tif (columns[k] === false) continue;\n\n\t\t\t\tselectedColumns.push({\n\t\t\t\t\tcolumn: v as Column | SQL | SQLWrapper | SQL.Aliased | Table,\n\t\t\t\t\ttsName: k,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn selectedColumns;\n\t};\n\n\tprivate buildColumns = (\n\t\ttable: SQLiteTable | SQLiteView,\n\t\tselection: BuildRelationalQueryResult['selection'],\n\t\tparams?: DBQueryConfig<'many'>,\n\t) =>\n\t\tparams?.columns\n\t\t\t? (() => {\n\t\t\t\tconst columnIdentifiers: SQL[] = [];\n\n\t\t\t\tconst selectedColumns = this.getSelectedTableColumns(\n\t\t\t\t\ttable,\n\t\t\t\t\tparams?.columns,\n\t\t\t\t);\n\n\t\t\t\tfor (const { column, tsName } of selectedColumns) {\n\t\t\t\t\tcolumnIdentifiers.push(this.buildRqbColumn(table, column, tsName));\n\t\t\t\t\tselection.push({\n\t\t\t\t\t\tkey: tsName,\n\t\t\t\t\t\tfield: column,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn columnIdentifiers.length\n\t\t\t\t\t? sql.join(columnIdentifiers, sql`, `)\n\t\t\t\t\t: undefined;\n\t\t\t})()\n\t\t\t: this.unwrapAllColumns(table, selection);\n\n\tbuildRelationalQuery({\n\t\tschema,\n\t\ttable,\n\t\ttableConfig,\n\t\tqueryConfig: config,\n\t\trelationWhere,\n\t\tmode,\n\t\tisNested,\n\t\terrorPath,\n\t\tdepth,\n\t\tthroughJoin,\n\t\tjsonb,\n\t}: {\n\t\tschema: TablesRelationalConfig;\n\t\ttable: SQLiteTable | SQLiteView;\n\t\ttableConfig: TableRelationalConfig;\n\t\tqueryConfig?: DBQueryConfig<'many'> | true;\n\t\trelationWhere?: SQL;\n\t\tmode: 'first' | 'many';\n\t\tisNested?: boolean;\n\t\terrorPath?: string;\n\t\tdepth?: number;\n\t\tthroughJoin?: SQL;\n\t\tjsonb: SQL;\n\t}): BuildRelationalQueryResult {\n\t\tconst selection: BuildRelationalQueryResult['selection'] = [];\n\t\tconst isSingle = mode === 'first';\n\t\tconst params = config === true ? undefined : config;\n\t\tconst currentPath = errorPath ?? '';\n\t\tconst currentDepth = depth ?? 0;\n\t\tif (!currentDepth) table = aliasedTable(table, `d${currentDepth}`);\n\n\t\tconst limit = isSingle ? 1 : params?.limit;\n\t\tconst offset = params?.offset;\n\n\t\tconst columns = this.buildColumns(table, selection, params);\n\n\t\tconst where: SQL | undefined = params?.where && relationWhere\n\t\t\t? and(\n\t\t\t\trelationsFilterToSQL(\n\t\t\t\t\ttable,\n\t\t\t\t\tparams.where,\n\t\t\t\t\ttableConfig.relations,\n\t\t\t\t\tschema,\n\t\t\t\t\tthis.casing,\n\t\t\t\t),\n\t\t\t\trelationWhere,\n\t\t\t)\n\t\t\t: params?.where\n\t\t\t? relationsFilterToSQL(\n\t\t\t\ttable,\n\t\t\t\tparams.where,\n\t\t\t\ttableConfig.relations,\n\t\t\t\tschema,\n\t\t\t\tthis.casing,\n\t\t\t)\n\t\t\t: relationWhere;\n\t\tconst order = params?.orderBy\n\t\t\t? relationsOrderToSQL(table, params.orderBy)\n\t\t\t: undefined;\n\t\tconst extras = params?.extras\n\t\t\t? relationExtrasToSQL(table, params.extras)\n\t\t\t: undefined;\n\t\tif (extras) selection.push(...extras.selection);\n\n\t\tconst joins = params\n\t\t\t? (() => {\n\t\t\t\tconst { with: joins } = params as WithContainer;\n\t\t\t\tif (!joins) return;\n\n\t\t\t\tconst withEntries = Object.entries(joins).filter(([_, v]) => v);\n\t\t\t\tif (!withEntries.length) return;\n\n\t\t\t\treturn sql.join(\n\t\t\t\t\twithEntries.map(([k, join]) => {\n\t\t\t\t\t\t// if (is(tableConfig.relations[k]!, AggregatedField)) {\n\t\t\t\t\t\t// \tconst relation = tableConfig.relations[k]!;\n\n\t\t\t\t\t\t// \trelation.onTable(table);\n\t\t\t\t\t\t// \tconst query = relation.getSQL();\n\n\t\t\t\t\t\t// \tselection.push({\n\t\t\t\t\t\t// \t\tkey: k,\n\t\t\t\t\t\t// \t\tfield: relation,\n\t\t\t\t\t\t// \t});\n\n\t\t\t\t\t\t// \treturn sql`(${query}) as ${sql.identifier(k)}`;\n\t\t\t\t\t\t// }\n\n\t\t\t\t\t\tconst relation = tableConfig.relations[k]! as Relation;\n\t\t\t\t\t\tconst isSingle = is(relation, One);\n\t\t\t\t\t\tconst targetTable = aliasedTable(\n\t\t\t\t\t\t\trelation.targetTable,\n\t\t\t\t\t\t\t`d${currentDepth + 1}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst throughTable = relation.throughTable\n\t\t\t\t\t\t\t? aliasedTable(relation.throughTable, `tr${currentDepth}`)\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tconst { filter, joinCondition } = relationToSQL(\n\t\t\t\t\t\t\tthis.casing,\n\t\t\t\t\t\t\trelation,\n\t\t\t\t\t\t\ttable,\n\t\t\t\t\t\t\ttargetTable,\n\t\t\t\t\t\t\tthroughTable,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst throughJoin = throughTable\n\t\t\t\t\t\t\t? sql` inner join ${getTableAsAliasSQL(throughTable)} on ${joinCondition!}`\n\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\tconst innerQuery = this.buildRelationalQuery({\n\t\t\t\t\t\t\ttable: targetTable as SQLiteTable | SQLiteView,\n\t\t\t\t\t\t\tmode: isSingle ? 'first' : 'many',\n\t\t\t\t\t\t\tschema,\n\t\t\t\t\t\t\tqueryConfig: join as DBQueryConfig,\n\t\t\t\t\t\t\ttableConfig: schema[relation.targetTableName]!,\n\t\t\t\t\t\t\trelationWhere: filter,\n\t\t\t\t\t\t\tisNested: true,\n\t\t\t\t\t\t\terrorPath: `${currentPath.length ? `${currentPath}.` : ''}${k}`,\n\t\t\t\t\t\t\tdepth: currentDepth + 1,\n\t\t\t\t\t\t\tthroughJoin,\n\t\t\t\t\t\t\tjsonb,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tselection.push({\n\t\t\t\t\t\t\tfield: targetTable,\n\t\t\t\t\t\t\tkey: k,\n\t\t\t\t\t\t\tselection: innerQuery.selection,\n\t\t\t\t\t\t\tisArray: !isSingle,\n\t\t\t\t\t\t\tisOptional: ((relation as AnyOne).optional ?? false)\n\t\t\t\t\t\t\t\t|| (join !== true\n\t\t\t\t\t\t\t\t\t&& !!(join as Exclude<typeof join, boolean | undefined>)\n\t\t\t\t\t\t\t\t\t\t.where),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst jsonColumns = sql.join(\n\t\t\t\t\t\t\tinnerQuery.selection.map((s) => {\n\t\t\t\t\t\t\t\treturn sql`${sql.raw(this.escapeString(s.key))}, ${\n\t\t\t\t\t\t\t\t\ts.selection\n\t\t\t\t\t\t\t\t\t\t? sql`${jsonb}(${sql.identifier(s.key)})`\n\t\t\t\t\t\t\t\t\t\t: sql.identifier(s.key)\n\t\t\t\t\t\t\t\t}`;\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tsql`, `,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst json = isNested ? jsonb : sql`json`;\n\n\t\t\t\t\t\tconst joinQuery = isSingle\n\t\t\t\t\t\t\t? sql`(select ${json}_object(${jsonColumns}) as ${sql.identifier('r')} from (${innerQuery.sql}) as ${\n\t\t\t\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\t\t\t\t't',\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}) as ${sql.identifier(k)}`\n\t\t\t\t\t\t\t: sql`coalesce((select ${json}_group_array(json_object(${jsonColumns})) as ${\n\t\t\t\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\t\t\t\t'r',\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t} from (${innerQuery.sql}) as ${sql.identifier('t')}), ${jsonb}_array()) as ${sql.identifier(k)}`;\n\n\t\t\t\t\t\treturn joinQuery;\n\t\t\t\t\t}),\n\t\t\t\t\tsql`, `,\n\t\t\t\t);\n\t\t\t})()\n\t\t\t: undefined;\n\n\t\tconst selectionArr = [columns, extras?.sql, joins].filter(\n\t\t\t(e) => e !== undefined,\n\t\t);\n\t\tif (!selectionArr.length) {\n\t\t\tthrow new DrizzleError({\n\t\t\t\tmessage: `No fields selected for table \"${tableConfig.name}\"${currentPath ? ` (\"${currentPath}\")` : ''}`,\n\t\t\t});\n\t\t}\n\t\tconst selectionSet = sql.join(selectionArr, sql`, `);\n\n\t\tconst query = sql`select ${selectionSet} from ${getTableAsAliasSQL(table)}${throughJoin}${\n\t\t\tsql` where ${where}`.if(\n\t\t\t\twhere,\n\t\t\t)\n\t\t}${sql` order by ${order}`.if(order)}${sql` limit ${limit}`.if(limit !== undefined)}${\n\t\t\tsql` offset ${offset}`.if(\n\t\t\t\toffset !== undefined,\n\t\t\t)\n\t\t}`;\n\n\t\treturn {\n\t\t\tsql: query,\n\t\t\tselection,\n\t\t};\n\t}\n}\n\nexport class SQLiteSyncDialect extends SQLiteDialect {\n\tstatic override readonly [entityKind]: string = 'SQLiteSyncDialect';\n\n\tmigrate(\n\t\tmigrations: MigrationMeta[],\n\t\tsession: SQLiteSession<\n\t\t\t'sync',\n\t\t\tunknown,\n\t\t\tRecord<string, unknown>,\n\t\t\tAnyRelations,\n\t\t\tV1.TablesRelationalConfig\n\t\t>,\n\t\tconfig?: string | Omit<MigrationConfig, 'migrationsFolder'>,\n\t): void | MigratorInitFailResponse {\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\t// Detect DB version and upgrade table schema if needed\n\t\tconst { newDb } = upgradeSyncIfNeeded(migrationsTable, session, migrations);\n\n\t\tif (newDb) {\n\t\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid INTEGER PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric,\n\t\t\t\tname text,\n\t\t\t\tapplied_at TEXT\n\t\t\t)`;\n\t\t\tsession.run(migrationTableCreate);\n\t\t}\n\n\t\tconst dbMigrations = session.all<{\n\t\t\tid: number;\n\t\t\thash: string;\n\t\t\tcreated_at: string;\n\t\t\tname: string | null;\n\t\t}>(\n\t\t\tsql`SELECT id, hash, created_at, name FROM ${sql.identifier(migrationsTable)}`,\n\t\t);\n\n\t\tif (typeof config === 'object' && config.init) {\n\t\t\tif (dbMigrations.length) {\n\t\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t\t}\n\n\t\t\tif (migrations.length > 1) {\n\t\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t\t}\n\n\t\t\tconst [migration] = migrations;\n\n\t\t\tif (!migration) return;\n\n\t\t\tsession.run(\n\t\t\t\tsql`insert into ${\n\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\tmigrationsTable,\n\t\t\t\t\t)\n\t\t\t\t} (\"hash\", \"created_at\", \"name\", \"applied_at\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${\n\t\t\t\t\tnew Date().toISOString()\n\t\t\t\t})`,\n\t\t\t);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst migrationsToRun = getMigrationsToRun({\n\t\t\tlocalMigrations: migrations,\n\t\t\tdbMigrations,\n\t\t});\n\t\tsession.run(sql`BEGIN`);\n\n\t\ttry {\n\t\t\tfor (const migration of migrationsToRun) {\n\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\tsession.run(sql.raw(stmt));\n\t\t\t\t}\n\t\t\t\tsession.run(\n\t\t\t\t\tsql`INSERT INTO ${\n\t\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\t\tmigrationsTable,\n\t\t\t\t\t\t)\n\t\t\t\t\t} (\"hash\", \"created_at\", \"name\", \"applied_at\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${\n\t\t\t\t\t\tnew Date().toISOString()\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 override readonly [entityKind]: string = 'SQLiteAsyncDialect';\n\n\tasync migrate(\n\t\tmigrations: MigrationMeta[],\n\t\tdb: BaseSQLiteDatabase<'async', unknown, Record<string, unknown>>,\n\t\tconfig?: string | Omit<MigrationConfig, 'migrationsFolder'>,\n\t): Promise<void | MigratorInitFailResponse> {\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\t// Detect DB version and upgrade table schema if needed\n\t\tconst { newDb } = await upgradeAsyncIfNeeded(\n\t\t\tmigrationsTable,\n\t\t\tdb,\n\t\t\tmigrations,\n\t\t);\n\n\t\tif (newDb) {\n\t\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid INTEGER PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric,\n\t\t\t\tname text,\n\t\t\t\tapplied_at TEXT\n\t\t)\n\t\t`;\n\t\t\tawait db.session.run(migrationTableCreate);\n\t\t}\n\n\t\tconst dbMigrations = await db.session.all<{\n\t\t\tid: number;\n\t\t\thash: string;\n\t\t\tcreated_at: string;\n\t\t\tname: string | null;\n\t\t}>(\n\t\t\tsql`SELECT id, hash, created_at, name FROM ${sql.identifier(migrationsTable)};`,\n\t\t);\n\n\t\tif (typeof config === 'object' && config.init) {\n\t\t\tif (dbMigrations.length) {\n\t\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t\t}\n\n\t\t\tif (migrations.length > 1) {\n\t\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t\t}\n\n\t\t\tconst [migration] = migrations;\n\n\t\t\tif (!migration) return;\n\n\t\t\tawait db.session.run(\n\t\t\t\tsql`insert into ${\n\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\tmigrationsTable,\n\t\t\t\t\t)\n\t\t\t\t} (\"hash\", \"created_at\", \"name\", \"applied_at\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${\n\t\t\t\t\tnew Date().toISOString()\n\t\t\t\t})`,\n\t\t\t);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst migrationsToRun = getMigrationsToRun({\n\t\t\tlocalMigrations: migrations,\n\t\t\tdbMigrations,\n\t\t});\n\t\tawait db.session.transaction(async (tx) => {\n\t\t\tfor (const migration of migrationsToRun) {\n\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\tawait tx.run(sql.raw(stmt));\n\t\t\t\t}\n\t\t\t\tawait tx.run(\n\t\t\t\t\tsql`insert into ${\n\t\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\t\tmigrationsTable,\n\t\t\t\t\t\t)\n\t\t\t\t\t} (\"hash\", \"created_at\", \"name\", \"applied_at\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${\n\t\t\t\t\t\tnew Date().toISOString()\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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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SQLiteView } from "./view.cjs";
|
|
2
|
+
import { BaseSQLiteDatabase } from "./db.cjs";
|
|
2
3
|
import { SQLiteSession } from "./session.cjs";
|
|
3
4
|
import { SQLiteSelectConfig } from "./query-builders/select.types.cjs";
|
|
4
5
|
import { entityKind } from "../entity.cjs";
|
|
@@ -156,7 +157,7 @@ declare class SQLiteSyncDialect extends SQLiteDialect {
|
|
|
156
157
|
}
|
|
157
158
|
declare class SQLiteAsyncDialect extends SQLiteDialect {
|
|
158
159
|
static readonly [entityKind]: string;
|
|
159
|
-
migrate(migrations: MigrationMeta[],
|
|
160
|
+
migrate(migrations: MigrationMeta[], db: BaseSQLiteDatabase<'async', unknown, Record<string, unknown>>, config?: string | Omit<MigrationConfig, 'migrationsFolder'>): Promise<void | MigratorInitFailResponse>;
|
|
160
161
|
}
|
|
161
162
|
//#endregion
|
|
162
163
|
export { SQLiteAsyncDialect, SQLiteDialect, SQLiteDialectConfig, SQLiteSyncDialect };
|
package/sqlite-core/dialect.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SQLiteView } from "./view.js";
|
|
2
|
+
import { BaseSQLiteDatabase } from "./db.js";
|
|
2
3
|
import { SQLiteSession } from "./session.js";
|
|
3
4
|
import { SQLiteSelectConfig } from "./query-builders/select.types.js";
|
|
4
5
|
import { entityKind } from "../entity.js";
|
|
@@ -156,7 +157,7 @@ declare class SQLiteSyncDialect extends SQLiteDialect {
|
|
|
156
157
|
}
|
|
157
158
|
declare class SQLiteAsyncDialect extends SQLiteDialect {
|
|
158
159
|
static readonly [entityKind]: string;
|
|
159
|
-
migrate(migrations: MigrationMeta[],
|
|
160
|
+
migrate(migrations: MigrationMeta[], db: BaseSQLiteDatabase<'async', unknown, Record<string, unknown>>, config?: string | Omit<MigrationConfig, 'migrationsFolder'>): Promise<void | MigratorInitFailResponse>;
|
|
160
161
|
}
|
|
161
162
|
//#endregion
|
|
162
163
|
export { SQLiteAsyncDialect, SQLiteDialect, SQLiteDialectConfig, SQLiteSyncDialect };
|
package/sqlite-core/dialect.js
CHANGED
|
@@ -9,13 +9,13 @@ import { Param, SQL, View, sql } from "../sql/sql.js";
|
|
|
9
9
|
import * as V1 from "../_relations.js";
|
|
10
10
|
import { getMigrationsToRun } from "../migrator.utils.js";
|
|
11
11
|
import { DrizzleError } from "../errors.js";
|
|
12
|
-
import { upgradeAsyncIfNeeded, upgradeSyncIfNeeded } from "../up-migrations/sqlite.js";
|
|
13
12
|
import { One, getTableAsAliasSQL, relationExtrasToSQL, relationToSQL, relationsFilterToSQL, relationsOrderToSQL } from "../relations.js";
|
|
14
13
|
import { aliasedTable, aliasedTableColumn, getOriginalColumnFromAlias, mapColumnsInAliasedSQLToAlias, mapColumnsInSQLToAlias } from "../alias.js";
|
|
15
14
|
import { CasingCache } from "../casing.js";
|
|
16
15
|
import { and, eq, isSQLWrapper as isSQLWrapper$1 } from "../sql/index.js";
|
|
17
16
|
import { SQLiteColumn } from "./columns/index.js";
|
|
18
17
|
import { SQLiteTable } from "./table.js";
|
|
18
|
+
import { upgradeAsyncIfNeeded, upgradeSyncIfNeeded } from "../up-migrations/sqlite.js";
|
|
19
19
|
|
|
20
20
|
//#region src/sqlite-core/dialect.ts
|
|
21
21
|
var SQLiteDialect = class {
|
|
@@ -597,9 +597,9 @@ var SQLiteSyncDialect = class extends SQLiteDialect {
|
|
|
597
597
|
};
|
|
598
598
|
var SQLiteAsyncDialect = class extends SQLiteDialect {
|
|
599
599
|
static [entityKind] = "SQLiteAsyncDialect";
|
|
600
|
-
async migrate(migrations,
|
|
600
|
+
async migrate(migrations, db, config) {
|
|
601
601
|
const migrationsTable = config === void 0 ? "__drizzle_migrations" : typeof config === "string" ? "__drizzle_migrations" : config.migrationsTable ?? "__drizzle_migrations";
|
|
602
|
-
const { newDb } = await upgradeAsyncIfNeeded(migrationsTable,
|
|
602
|
+
const { newDb } = await upgradeAsyncIfNeeded(migrationsTable, db, migrations);
|
|
603
603
|
if (newDb) {
|
|
604
604
|
const migrationTableCreate = sql`
|
|
605
605
|
CREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (
|
|
@@ -610,22 +610,22 @@ var SQLiteAsyncDialect = class extends SQLiteDialect {
|
|
|
610
610
|
applied_at TEXT
|
|
611
611
|
)
|
|
612
612
|
`;
|
|
613
|
-
await session.run(migrationTableCreate);
|
|
613
|
+
await db.session.run(migrationTableCreate);
|
|
614
614
|
}
|
|
615
|
-
const dbMigrations = await session.all(sql`SELECT id, hash, created_at, name FROM ${sql.identifier(migrationsTable)};`);
|
|
615
|
+
const dbMigrations = await db.session.all(sql`SELECT id, hash, created_at, name FROM ${sql.identifier(migrationsTable)};`);
|
|
616
616
|
if (typeof config === "object" && config.init) {
|
|
617
617
|
if (dbMigrations.length) return { exitCode: "databaseMigrations" };
|
|
618
618
|
if (migrations.length > 1) return { exitCode: "localMigrations" };
|
|
619
619
|
const [migration] = migrations;
|
|
620
620
|
if (!migration) return;
|
|
621
|
-
await session.run(sql`insert into ${sql.identifier(migrationsTable)} ("hash", "created_at", "name", "applied_at") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${(/* @__PURE__ */ new Date()).toISOString()})`);
|
|
621
|
+
await db.session.run(sql`insert into ${sql.identifier(migrationsTable)} ("hash", "created_at", "name", "applied_at") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${(/* @__PURE__ */ new Date()).toISOString()})`);
|
|
622
622
|
return;
|
|
623
623
|
}
|
|
624
624
|
const migrationsToRun = getMigrationsToRun({
|
|
625
625
|
localMigrations: migrations,
|
|
626
626
|
dbMigrations
|
|
627
627
|
});
|
|
628
|
-
await session.transaction(async (tx) => {
|
|
628
|
+
await db.session.transaction(async (tx) => {
|
|
629
629
|
for (const migration of migrationsToRun) {
|
|
630
630
|
for (const stmt of migration.sql) await tx.run(sql.raw(stmt));
|
|
631
631
|
await tx.run(sql`insert into ${sql.identifier(migrationsTable)} ("hash", "created_at", "name", "applied_at") values(${migration.hash}, ${migration.folderMillis}, ${migration.name}, ${(/* @__PURE__ */ new Date()).toISOString()})`);
|