drizzle-orm 1.0.0-rc.2 → 1.0.0-rc.2-640c81e

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.
Files changed (37) hide show
  1. package/package.json +60 -7
  2. package/tursodatabase/driver-core.cjs.map +1 -1
  3. package/tursodatabase/driver-core.d.cts +2 -2
  4. package/tursodatabase/driver-core.d.ts +2 -2
  5. package/tursodatabase/driver-core.js.map +1 -1
  6. package/tursodatabase/migrator.cjs +1 -1
  7. package/tursodatabase/migrator.cjs.map +1 -1
  8. package/tursodatabase/migrator.js +1 -1
  9. package/tursodatabase/migrator.js.map +1 -1
  10. package/tursodatabase/session.cjs +66 -40
  11. package/tursodatabase/session.cjs.map +1 -1
  12. package/tursodatabase/session.d.cts +13 -6
  13. package/tursodatabase/session.d.ts +13 -6
  14. package/tursodatabase/session.js +67 -41
  15. package/tursodatabase/session.js.map +1 -1
  16. package/tursodatabase-serverless/driver.cjs +63 -0
  17. package/tursodatabase-serverless/driver.cjs.map +1 -0
  18. package/tursodatabase-serverless/driver.d.cts +27 -0
  19. package/tursodatabase-serverless/driver.d.ts +27 -0
  20. package/tursodatabase-serverless/driver.js +54 -0
  21. package/tursodatabase-serverless/driver.js.map +1 -0
  22. package/tursodatabase-serverless/index.cjs +14 -0
  23. package/tursodatabase-serverless/index.d.cts +3 -0
  24. package/tursodatabase-serverless/index.d.ts +3 -0
  25. package/tursodatabase-serverless/index.js +4 -0
  26. package/tursodatabase-serverless/migrator.cjs +13 -0
  27. package/tursodatabase-serverless/migrator.cjs.map +1 -0
  28. package/tursodatabase-serverless/migrator.d.cts +10 -0
  29. package/tursodatabase-serverless/migrator.d.ts +10 -0
  30. package/tursodatabase-serverless/migrator.js +11 -0
  31. package/tursodatabase-serverless/migrator.js.map +1 -0
  32. package/tursodatabase-serverless/session.cjs +170 -0
  33. package/tursodatabase-serverless/session.cjs.map +1 -0
  34. package/tursodatabase-serverless/session.d.cts +84 -0
  35. package/tursodatabase-serverless/session.d.ts +84 -0
  36. package/tursodatabase-serverless/session.js +166 -0
  37. package/tursodatabase-serverless/session.js.map +1 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drizzle-orm",
3
- "version": "1.0.0-rc.2",
3
+ "version": "1.0.0-rc.2-640c81e",
4
4
  "description": "Drizzle ORM package for SQL databases",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -59,9 +59,10 @@
59
59
  "@sinclair/typebox": ">=0.34.8",
60
60
  "@sqlitecloud/drivers": ">=1.0.653",
61
61
  "@tidbcloud/serverless": "*",
62
- "@tursodatabase/database": ">=0.2.1",
63
- "@tursodatabase/database-common": ">=0.2.1",
64
- "@tursodatabase/database-wasm": ">=0.2.1",
62
+ "@tursodatabase/database": ">=0.6.0-pre.28 || >=0.6.0",
63
+ "@tursodatabase/database-common": ">=0.6.0-pre.28 || >=0.6.0",
64
+ "@tursodatabase/database-wasm": ">=0.6.0-pre.28 || >=0.6.0",
65
+ "@tursodatabase/serverless": ">=1.1.3",
65
66
  "@types/better-sqlite3": "*",
66
67
  "@types/mssql": "^9.1.4",
67
68
  "@types/pg": "*",
@@ -178,6 +179,9 @@
178
179
  "@tursodatabase/database-common": {
179
180
  "optional": true
180
181
  },
182
+ "@tursodatabase/serverless": {
183
+ "optional": true
184
+ },
181
185
  "@upstash/redis": {
182
186
  "optional": true
183
187
  },
@@ -215,9 +219,10 @@
215
219
  "@sinclair/typebox": "^0.34.48",
216
220
  "@sqlitecloud/drivers": "^1.0.653",
217
221
  "@tidbcloud/serverless": "^0.1.1",
218
- "@tursodatabase/database": "0.2.1",
219
- "@tursodatabase/database-common": "^0.2.1",
220
- "@tursodatabase/database-wasm": "^0.2.1",
222
+ "@tursodatabase/database": "0.6.0-pre.28",
223
+ "@tursodatabase/database-common": "0.6.0-pre.28",
224
+ "@tursodatabase/database-wasm": "0.6.0-pre.28",
225
+ "@tursodatabase/serverless": "1.1.3",
221
226
  "@types/better-sqlite3": "^7.6.12",
222
227
  "@types/node": "^25.4.0",
223
228
  "@types/pg": "^8.10.1",
@@ -3391,6 +3396,54 @@
3391
3396
  "types": "./planetscale-serverless/migrator.d.ts",
3392
3397
  "default": "./planetscale-serverless/migrator.js"
3393
3398
  },
3399
+ "./tursodatabase-serverless/driver": {
3400
+ "import": {
3401
+ "types": "./tursodatabase-serverless/driver.d.ts",
3402
+ "default": "./tursodatabase-serverless/driver.js"
3403
+ },
3404
+ "require": {
3405
+ "types": "./tursodatabase-serverless/driver.d.cts",
3406
+ "default": "./tursodatabase-serverless/driver.cjs"
3407
+ },
3408
+ "types": "./tursodatabase-serverless/driver.d.ts",
3409
+ "default": "./tursodatabase-serverless/driver.js"
3410
+ },
3411
+ "./tursodatabase-serverless/session": {
3412
+ "import": {
3413
+ "types": "./tursodatabase-serverless/session.d.ts",
3414
+ "default": "./tursodatabase-serverless/session.js"
3415
+ },
3416
+ "require": {
3417
+ "types": "./tursodatabase-serverless/session.d.cts",
3418
+ "default": "./tursodatabase-serverless/session.cjs"
3419
+ },
3420
+ "types": "./tursodatabase-serverless/session.d.ts",
3421
+ "default": "./tursodatabase-serverless/session.js"
3422
+ },
3423
+ "./tursodatabase-serverless": {
3424
+ "import": {
3425
+ "types": "./tursodatabase-serverless/index.d.ts",
3426
+ "default": "./tursodatabase-serverless/index.js"
3427
+ },
3428
+ "require": {
3429
+ "types": "./tursodatabase-serverless/index.d.cts",
3430
+ "default": "./tursodatabase-serverless/index.cjs"
3431
+ },
3432
+ "types": "./tursodatabase-serverless/index.d.ts",
3433
+ "default": "./tursodatabase-serverless/index.js"
3434
+ },
3435
+ "./tursodatabase-serverless/migrator": {
3436
+ "import": {
3437
+ "types": "./tursodatabase-serverless/migrator.d.ts",
3438
+ "default": "./tursodatabase-serverless/migrator.js"
3439
+ },
3440
+ "require": {
3441
+ "types": "./tursodatabase-serverless/migrator.d.cts",
3442
+ "default": "./tursodatabase-serverless/migrator.cjs"
3443
+ },
3444
+ "types": "./tursodatabase-serverless/migrator.d.ts",
3445
+ "default": "./tursodatabase-serverless/migrator.js"
3446
+ },
3394
3447
  "./libsql/driver": {
3395
3448
  "import": {
3396
3449
  "types": "./libsql/driver.d.ts",
@@ -1 +1 @@
1
- {"version":3,"file":"driver-core.cjs","names":["BaseSQLiteDatabase","entityKind","SQLiteAsyncDialect","DefaultLogger","V1","TursoDatabaseSession"],"sources":["../../src/tursodatabase/driver-core.ts"],"sourcesContent":["import type { DatabasePromise } from '@tursodatabase/database-common';\nimport * as V1 from '~/_relations.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { type DrizzleConfig, jitCompatCheck } from '~/utils.ts';\nimport { TursoDatabaseSession } from './session.ts';\n\nexport type TursoDatabaseRunResult = Awaited<ReturnType<ReturnType<DatabasePromise['prepare']>['run']>>;\n\nexport class TursoDatabaseDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends BaseSQLiteDatabase<'async', TursoDatabaseRunResult, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabaseDatabase';\n\n\t/** @internal */\n\tdeclare readonly session: TursoDatabaseSession<\n\t\tTSchema,\n\t\tTRelations,\n\t\tV1.ExtractTablesWithRelations<TSchema>\n\t>;\n}\n\n/** @internal */\nexport function construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n>(\n\tclient: DatabasePromise,\n\tconfig: DrizzleConfig<TSchema, TRelations> = {},\n): TursoDatabaseDatabase<TSchema, TRelations> & {\n\t$client: DatabasePromise;\n} {\n\tconst dialect = new SQLiteAsyncDialect();\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = V1.extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tV1.createTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst relations = config.relations ?? {} as TRelations;\n\tconst session = new TursoDatabaseSession(\n\t\tclient,\n\t\tdialect,\n\t\trelations,\n\t\tschema,\n\t\t{ logger, cache: config.cache, useJitMappers: jitCompatCheck(config.jit) },\n\t);\n\tconst db = new TursoDatabaseDatabase(\n\t\t'async',\n\t\tdialect,\n\t\tsession as TursoDatabaseSession<\n\t\t\tTSchema,\n\t\t\tTRelations,\n\t\t\tV1.ExtractTablesWithRelations<TSchema>\n\t\t>,\n\t\trelations,\n\t\tschema as V1.RelationalSchemaConfig<any>,\n\t) as TursoDatabaseDatabase<TSchema, TRelations>;\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\treturn db as any;\n}\n"],"mappings":";;;;;;;;;;;;AAYA,IAAa,wBAAb,cAGUA,uCAAyE;CAClF,QAA0BC,0BAAsB;;;AAWjD,SAAgB,UAIf,QACA,SAA6C,EAAE,EAG9C;CACD,MAAM,UAAU,IAAIC,6CAAoB;CACxC,IAAI;AACJ,KAAI,OAAO,WAAW,KACrB,UAAS,IAAIC,2BAAe;UAClB,OAAO,WAAW,MAC5B,UAAS,OAAO;CAGjB,IAAI;AACJ,KAAI,OAAO,QAAQ;EAClB,MAAM,eAAeC,gBAAG,8BACvB,OAAO,QACPA,gBAAG,4BACH;AACD,WAAS;GACR,YAAY,OAAO;GACnB,QAAQ,aAAa;GACrB,eAAe,aAAa;GAC5B;;CAGF,MAAM,YAAY,OAAO,aAAa,EAAE;CAQxC,MAAM,KAAK,IAAI,sBACd,SACA,SATe,IAAIC,mDACnB,QACA,SACA,WACA,QACA;EAAE;EAAQ,OAAO,OAAO;EAAO,8CAA8B,OAAO,IAAI;EAAE,CAC1E,EASA,WACA,OACA;AACD,CAAO,GAAI,UAAU;AACrB,CAAO,GAAI,SAAS,OAAO;AAC3B,KAAW,GAAI,OACd,CAAO,GAAI,OAAO,gBAAgB,OAAO,OAAO;AAEjD,QAAO"}
1
+ {"version":3,"file":"driver-core.cjs","names":["BaseSQLiteDatabase","entityKind","SQLiteAsyncDialect","DefaultLogger","V1","TursoDatabaseSession"],"sources":["../../src/tursodatabase/driver-core.ts"],"sourcesContent":["import type { DatabasePromise, StatementPromise } from '@tursodatabase/database-common';\nimport * as V1 from '~/_relations.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { type DrizzleConfig, jitCompatCheck } from '~/utils.ts';\nimport { TursoDatabaseSession } from './session.ts';\n\nexport type TursoDatabaseRunResult = Awaited<ReturnType<StatementPromise['run']>>;\n\nexport class TursoDatabaseDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends BaseSQLiteDatabase<'async', TursoDatabaseRunResult, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabaseDatabase';\n\n\t/** @internal */\n\tdeclare readonly session: TursoDatabaseSession<\n\t\tTSchema,\n\t\tTRelations,\n\t\tV1.ExtractTablesWithRelations<TSchema>\n\t>;\n}\n\n/** @internal */\nexport function construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n>(\n\tclient: DatabasePromise,\n\tconfig: DrizzleConfig<TSchema, TRelations> = {},\n): TursoDatabaseDatabase<TSchema, TRelations> & {\n\t$client: DatabasePromise;\n} {\n\tconst dialect = new SQLiteAsyncDialect();\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = V1.extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tV1.createTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst relations = config.relations ?? {} as TRelations;\n\tconst session = new TursoDatabaseSession(\n\t\tclient,\n\t\tdialect,\n\t\trelations,\n\t\tschema,\n\t\t{ logger, cache: config.cache, useJitMappers: jitCompatCheck(config.jit) },\n\t);\n\tconst db = new TursoDatabaseDatabase(\n\t\t'async',\n\t\tdialect,\n\t\tsession as TursoDatabaseSession<\n\t\t\tTSchema,\n\t\t\tTRelations,\n\t\t\tV1.ExtractTablesWithRelations<TSchema>\n\t\t>,\n\t\trelations,\n\t\tschema as V1.RelationalSchemaConfig<any>,\n\t) as TursoDatabaseDatabase<TSchema, TRelations>;\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\treturn db as any;\n}\n"],"mappings":";;;;;;;;;;;;AAYA,IAAa,wBAAb,cAGUA,uCAAyE;CAClF,QAA0BC,0BAAsB;;;AAWjD,SAAgB,UAIf,QACA,SAA6C,EAAE,EAG9C;CACD,MAAM,UAAU,IAAIC,6CAAoB;CACxC,IAAI;AACJ,KAAI,OAAO,WAAW,KACrB,UAAS,IAAIC,2BAAe;UAClB,OAAO,WAAW,MAC5B,UAAS,OAAO;CAGjB,IAAI;AACJ,KAAI,OAAO,QAAQ;EAClB,MAAM,eAAeC,gBAAG,8BACvB,OAAO,QACPA,gBAAG,4BACH;AACD,WAAS;GACR,YAAY,OAAO;GACnB,QAAQ,aAAa;GACrB,eAAe,aAAa;GAC5B;;CAGF,MAAM,YAAY,OAAO,aAAa,EAAE;CAQxC,MAAM,KAAK,IAAI,sBACd,SACA,SATe,IAAIC,mDACnB,QACA,SACA,WACA,QACA;EAAE;EAAQ,OAAO,OAAO;EAAO,8CAA8B,OAAO,IAAI;EAAE,CAC1E,EASA,WACA,OACA;AACD,CAAO,GAAI,UAAU;AACrB,CAAO,GAAI,SAAS,OAAO;AAC3B,KAAW,GAAI,OACd,CAAO,GAAI,OAAO,gBAAgB,OAAO,OAAO;AAEjD,QAAO"}
@@ -1,10 +1,10 @@
1
1
  import { entityKind } from "../entity.cjs";
2
2
  import { AnyRelations, EmptyRelations } from "../relations.cjs";
3
3
  import { BaseSQLiteDatabase } from "../sqlite-core/db.cjs";
4
- import { DatabasePromise } from "@tursodatabase/database-common";
4
+ import { StatementPromise } from "@tursodatabase/database-common";
5
5
 
6
6
  //#region src/tursodatabase/driver-core.d.ts
7
- type TursoDatabaseRunResult = Awaited<ReturnType<ReturnType<DatabasePromise['prepare']>['run']>>;
7
+ type TursoDatabaseRunResult = Awaited<ReturnType<StatementPromise['run']>>;
8
8
  declare class TursoDatabaseDatabase<TSchema extends Record<string, unknown> = Record<string, never>, TRelations extends AnyRelations = EmptyRelations> extends BaseSQLiteDatabase<'async', TursoDatabaseRunResult, TSchema, TRelations> {
9
9
  static readonly [entityKind]: string;
10
10
  }
@@ -1,10 +1,10 @@
1
1
  import { entityKind } from "../entity.js";
2
2
  import { AnyRelations, EmptyRelations } from "../relations.js";
3
3
  import { BaseSQLiteDatabase } from "../sqlite-core/db.js";
4
- import { DatabasePromise } from "@tursodatabase/database-common";
4
+ import { StatementPromise } from "@tursodatabase/database-common";
5
5
 
6
6
  //#region src/tursodatabase/driver-core.d.ts
7
- type TursoDatabaseRunResult = Awaited<ReturnType<ReturnType<DatabasePromise['prepare']>['run']>>;
7
+ type TursoDatabaseRunResult = Awaited<ReturnType<StatementPromise['run']>>;
8
8
  declare class TursoDatabaseDatabase<TSchema extends Record<string, unknown> = Record<string, never>, TRelations extends AnyRelations = EmptyRelations> extends BaseSQLiteDatabase<'async', TursoDatabaseRunResult, TSchema, TRelations> {
9
9
  static readonly [entityKind]: string;
10
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"driver-core.js","names":[],"sources":["../../src/tursodatabase/driver-core.ts"],"sourcesContent":["import type { DatabasePromise } from '@tursodatabase/database-common';\nimport * as V1 from '~/_relations.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { type DrizzleConfig, jitCompatCheck } from '~/utils.ts';\nimport { TursoDatabaseSession } from './session.ts';\n\nexport type TursoDatabaseRunResult = Awaited<ReturnType<ReturnType<DatabasePromise['prepare']>['run']>>;\n\nexport class TursoDatabaseDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends BaseSQLiteDatabase<'async', TursoDatabaseRunResult, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabaseDatabase';\n\n\t/** @internal */\n\tdeclare readonly session: TursoDatabaseSession<\n\t\tTSchema,\n\t\tTRelations,\n\t\tV1.ExtractTablesWithRelations<TSchema>\n\t>;\n}\n\n/** @internal */\nexport function construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n>(\n\tclient: DatabasePromise,\n\tconfig: DrizzleConfig<TSchema, TRelations> = {},\n): TursoDatabaseDatabase<TSchema, TRelations> & {\n\t$client: DatabasePromise;\n} {\n\tconst dialect = new SQLiteAsyncDialect();\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = V1.extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tV1.createTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst relations = config.relations ?? {} as TRelations;\n\tconst session = new TursoDatabaseSession(\n\t\tclient,\n\t\tdialect,\n\t\trelations,\n\t\tschema,\n\t\t{ logger, cache: config.cache, useJitMappers: jitCompatCheck(config.jit) },\n\t);\n\tconst db = new TursoDatabaseDatabase(\n\t\t'async',\n\t\tdialect,\n\t\tsession as TursoDatabaseSession<\n\t\t\tTSchema,\n\t\t\tTRelations,\n\t\t\tV1.ExtractTablesWithRelations<TSchema>\n\t\t>,\n\t\trelations,\n\t\tschema as V1.RelationalSchemaConfig<any>,\n\t) as TursoDatabaseDatabase<TSchema, TRelations>;\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\treturn db as any;\n}\n"],"mappings":";;;;;;;;;AAYA,IAAa,wBAAb,cAGU,mBAAyE;CAClF,QAA0B,cAAsB;;;AAWjD,SAAgB,UAIf,QACA,SAA6C,EAAE,EAG9C;CACD,MAAM,UAAU,IAAI,oBAAoB;CACxC,IAAI;AACJ,KAAI,OAAO,WAAW,KACrB,UAAS,IAAI,eAAe;UAClB,OAAO,WAAW,MAC5B,UAAS,OAAO;CAGjB,IAAI;AACJ,KAAI,OAAO,QAAQ;EAClB,MAAM,eAAe,GAAG,8BACvB,OAAO,QACP,GAAG,4BACH;AACD,WAAS;GACR,YAAY,OAAO;GACnB,QAAQ,aAAa;GACrB,eAAe,aAAa;GAC5B;;CAGF,MAAM,YAAY,OAAO,aAAa,EAAE;CAQxC,MAAM,KAAK,IAAI,sBACd,SACA,SATe,IAAI,qBACnB,QACA,SACA,WACA,QACA;EAAE;EAAQ,OAAO,OAAO;EAAO,eAAe,eAAe,OAAO,IAAI;EAAE,CAC1E,EASA,WACA,OACA;AACD,CAAO,GAAI,UAAU;AACrB,CAAO,GAAI,SAAS,OAAO;AAC3B,KAAW,GAAI,OACd,CAAO,GAAI,OAAO,gBAAgB,OAAO,OAAO;AAEjD,QAAO"}
1
+ {"version":3,"file":"driver-core.js","names":[],"sources":["../../src/tursodatabase/driver-core.ts"],"sourcesContent":["import type { DatabasePromise, StatementPromise } from '@tursodatabase/database-common';\nimport * as V1 from '~/_relations.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { type DrizzleConfig, jitCompatCheck } from '~/utils.ts';\nimport { TursoDatabaseSession } from './session.ts';\n\nexport type TursoDatabaseRunResult = Awaited<ReturnType<StatementPromise['run']>>;\n\nexport class TursoDatabaseDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends BaseSQLiteDatabase<'async', TursoDatabaseRunResult, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabaseDatabase';\n\n\t/** @internal */\n\tdeclare readonly session: TursoDatabaseSession<\n\t\tTSchema,\n\t\tTRelations,\n\t\tV1.ExtractTablesWithRelations<TSchema>\n\t>;\n}\n\n/** @internal */\nexport function construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n>(\n\tclient: DatabasePromise,\n\tconfig: DrizzleConfig<TSchema, TRelations> = {},\n): TursoDatabaseDatabase<TSchema, TRelations> & {\n\t$client: DatabasePromise;\n} {\n\tconst dialect = new SQLiteAsyncDialect();\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = V1.extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tV1.createTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst relations = config.relations ?? {} as TRelations;\n\tconst session = new TursoDatabaseSession(\n\t\tclient,\n\t\tdialect,\n\t\trelations,\n\t\tschema,\n\t\t{ logger, cache: config.cache, useJitMappers: jitCompatCheck(config.jit) },\n\t);\n\tconst db = new TursoDatabaseDatabase(\n\t\t'async',\n\t\tdialect,\n\t\tsession as TursoDatabaseSession<\n\t\t\tTSchema,\n\t\t\tTRelations,\n\t\t\tV1.ExtractTablesWithRelations<TSchema>\n\t\t>,\n\t\trelations,\n\t\tschema as V1.RelationalSchemaConfig<any>,\n\t) as TursoDatabaseDatabase<TSchema, TRelations>;\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\treturn db as any;\n}\n"],"mappings":";;;;;;;;;AAYA,IAAa,wBAAb,cAGU,mBAAyE;CAClF,QAA0B,cAAsB;;;AAWjD,SAAgB,UAIf,QACA,SAA6C,EAAE,EAG9C;CACD,MAAM,UAAU,IAAI,oBAAoB;CACxC,IAAI;AACJ,KAAI,OAAO,WAAW,KACrB,UAAS,IAAI,eAAe;UAClB,OAAO,WAAW,MAC5B,UAAS,OAAO;CAGjB,IAAI;AACJ,KAAI,OAAO,QAAQ;EAClB,MAAM,eAAe,GAAG,8BACvB,OAAO,QACP,GAAG,4BACH;AACD,WAAS;GACR,YAAY,OAAO;GACnB,QAAQ,aAAa;GACrB,eAAe,aAAa;GAC5B;;CAGF,MAAM,YAAY,OAAO,aAAa,EAAE;CAQxC,MAAM,KAAK,IAAI,sBACd,SACA,SATe,IAAI,qBACnB,QACA,SACA,WACA,QACA;EAAE;EAAQ,OAAO,OAAO;EAAO,eAAe,eAAe,OAAO,IAAI;EAAE,CAC1E,EASA,WACA,OACA;AACD,CAAO,GAAI,UAAU;AACrB,CAAO,GAAI,SAAS,OAAO;AAC3B,KAAW,GAAI,OACd,CAAO,GAAI,OAAO,gBAAgB,OAAO,OAAO;AAEjD,QAAO"}
@@ -5,7 +5,7 @@ let __migrator_ts = require("../migrator.cjs");
5
5
  //#region src/tursodatabase/migrator.ts
6
6
  async function migrate(db, config) {
7
7
  const migrations = (0, __migrator_ts.readMigrationFiles)(config);
8
- return await db.dialect.migrate(migrations, db, config);
8
+ return db.dialect.migrate(migrations, db, config);
9
9
  }
10
10
 
11
11
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"migrator.cjs","names":[],"sources":["../../src/tursodatabase/migrator.ts"],"sourcesContent":["import type { MigrationConfig } from '~/migrator.ts';\nimport { readMigrationFiles } from '~/migrator.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { TursoDatabaseDatabase } from './driver-core.ts';\n\nexport async function migrate<TSchema extends Record<string, unknown>, TRelations extends AnyRelations>(\n\tdb: TursoDatabaseDatabase<TSchema, TRelations>,\n\tconfig: MigrationConfig,\n) {\n\tconst migrations = readMigrationFiles(config);\n\treturn await db.dialect.migrate(migrations, db, config);\n}\n"],"mappings":";;;;;AAKA,eAAsB,QACrB,IACA,QACC;CACD,MAAM,mDAAgC,OAAO;AAC7C,QAAO,MAAM,GAAG,QAAQ,QAAQ,YAAY,IAAI,OAAO"}
1
+ {"version":3,"file":"migrator.cjs","names":[],"sources":["../../src/tursodatabase/migrator.ts"],"sourcesContent":["import type { MigrationConfig } from '~/migrator.ts';\nimport { readMigrationFiles } from '~/migrator.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { TursoDatabaseDatabase } from './driver-core.ts';\n\nexport async function migrate<TSchema extends Record<string, unknown>, TRelations extends AnyRelations>(\n\tdb: TursoDatabaseDatabase<TSchema, TRelations>,\n\tconfig: MigrationConfig,\n) {\n\tconst migrations = readMigrationFiles(config);\n\treturn db.dialect.migrate(migrations, db, config);\n}\n"],"mappings":";;;;;AAKA,eAAsB,QACrB,IACA,QACC;CACD,MAAM,mDAAgC,OAAO;AAC7C,QAAO,GAAG,QAAQ,QAAQ,YAAY,IAAI,OAAO"}
@@ -3,7 +3,7 @@ import { readMigrationFiles } from "../migrator.js";
3
3
  //#region src/tursodatabase/migrator.ts
4
4
  async function migrate(db, config) {
5
5
  const migrations = readMigrationFiles(config);
6
- return await db.dialect.migrate(migrations, db, config);
6
+ return db.dialect.migrate(migrations, db, config);
7
7
  }
8
8
 
9
9
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"migrator.js","names":[],"sources":["../../src/tursodatabase/migrator.ts"],"sourcesContent":["import type { MigrationConfig } from '~/migrator.ts';\nimport { readMigrationFiles } from '~/migrator.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { TursoDatabaseDatabase } from './driver-core.ts';\n\nexport async function migrate<TSchema extends Record<string, unknown>, TRelations extends AnyRelations>(\n\tdb: TursoDatabaseDatabase<TSchema, TRelations>,\n\tconfig: MigrationConfig,\n) {\n\tconst migrations = readMigrationFiles(config);\n\treturn await db.dialect.migrate(migrations, db, config);\n}\n"],"mappings":";;;AAKA,eAAsB,QACrB,IACA,QACC;CACD,MAAM,aAAa,mBAAmB,OAAO;AAC7C,QAAO,MAAM,GAAG,QAAQ,QAAQ,YAAY,IAAI,OAAO"}
1
+ {"version":3,"file":"migrator.js","names":[],"sources":["../../src/tursodatabase/migrator.ts"],"sourcesContent":["import type { MigrationConfig } from '~/migrator.ts';\nimport { readMigrationFiles } from '~/migrator.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { TursoDatabaseDatabase } from './driver-core.ts';\n\nexport async function migrate<TSchema extends Record<string, unknown>, TRelations extends AnyRelations>(\n\tdb: TursoDatabaseDatabase<TSchema, TRelations>,\n\tconfig: MigrationConfig,\n) {\n\tconst migrations = readMigrationFiles(config);\n\treturn db.dialect.migrate(migrations, db, config);\n}\n"],"mappings":";;;AAKA,eAAsB,QACrB,IACA,QACC;CACD,MAAM,aAAa,mBAAmB,OAAO;AAC7C,QAAO,GAAG,QAAQ,QAAQ,YAAY,IAAI,OAAO"}
@@ -5,7 +5,6 @@ let __utils_ts = require("../utils.cjs");
5
5
  let __sql_sql_ts = require("../sql/sql.cjs");
6
6
  let __logger_ts = require("../logger.cjs");
7
7
  let __cache_core_index_ts = require("../cache/core/index.cjs");
8
- let __errors_ts = require("../errors.cjs");
9
8
  let __relations_ts = require("../relations.cjs");
10
9
  let __sqlite_core_index_ts = require("../sqlite-core/index.cjs");
11
10
  let __sqlite_core_session_ts = require("../sqlite-core/session.cjs");
@@ -25,114 +24,141 @@ var TursoDatabaseSession = class TursoDatabaseSession extends __sqlite_core_sess
25
24
  this.cache = options.cache ?? new __cache_core_index_ts.NoopCache();
26
25
  }
27
26
  prepareQuery(query, fields, executeMethod, customResultMapper, queryMetadata, cacheConfig) {
28
- return new TursoDatabasePreparedQuery(this.client.prepare(query.sql), query, this.logger, this.cache, queryMetadata, cacheConfig, fields, executeMethod, this.options.useJitMappers, customResultMapper);
27
+ return new TursoDatabasePreparedQuery(this.client, query, this.logger, this.cache, queryMetadata, cacheConfig, fields, executeMethod, this.options.useJitMappers, customResultMapper);
28
+ }
29
+ prepareOneTimeQuery(query, fields, executeMethod, customResultMapper, queryMetadata, cacheConfig) {
30
+ return new TursoDatabasePreparedQuery(this.client, query, this.logger, this.cache, queryMetadata, cacheConfig, fields, executeMethod, this.options.useJitMappers, customResultMapper, true);
29
31
  }
30
32
  prepareRelationalQuery(query, fields, executeMethod, customResultMapper, config) {
31
- return new TursoDatabasePreparedQuery(this.client.prepare(query.sql), query, this.logger, this.cache, void 0, void 0, fields, executeMethod, this.options.useJitMappers, customResultMapper, true, config);
33
+ return new TursoDatabasePreparedQuery(this.client, query, this.logger, this.cache, void 0, void 0, fields, executeMethod, this.options.useJitMappers, customResultMapper, false, true, config);
34
+ }
35
+ prepareOneTimeRelationalQuery(query, fields, executeMethod, customResultMapper, config) {
36
+ return new TursoDatabasePreparedQuery(this.client, query, this.logger, this.cache, void 0, void 0, fields, executeMethod, this.options.useJitMappers, customResultMapper, true, true, config);
32
37
  }
33
- async transaction(transaction, _config, tx) {
38
+ async transaction(transaction) {
34
39
  const session = new TursoDatabaseSession(this.client, this.dialect, this.relations, this.schema, this.options);
35
- const localTx = tx ?? new TursoDatabaseTransaction("async", this.dialect, session, this.relations, this.schema);
40
+ const localTx = new TursoDatabaseTransaction("async", this.dialect, session, this.relations, this.schema);
36
41
  return await this.client.transaction(async () => await transaction(localTx))();
37
42
  }
38
43
  async run(query) {
39
44
  const staticQuery = this.dialect.sqlToQuery(query);
40
- try {
41
- return await this.prepareOneTimeQuery(staticQuery, void 0, "run").run();
42
- } catch (err) {
43
- throw new __errors_ts.DrizzleError({
44
- cause: err,
45
- message: `Failed to run the query '${staticQuery.sql}'`
46
- });
47
- }
45
+ return this.prepareOneTimeQuery(staticQuery, void 0, "run").run();
48
46
  }
49
47
  async all(query) {
50
- return await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run").all();
48
+ return this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run").all();
51
49
  }
52
50
  async get(query) {
53
- return await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run").get();
51
+ return this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run").get();
54
52
  }
55
53
  async values(query) {
56
- return await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run").values();
54
+ return this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run").values();
57
55
  }
58
56
  };
59
- var TursoDatabaseTransaction = class extends __sqlite_core_index_ts.SQLiteTransaction {
57
+ var TursoDatabaseTransaction = class TursoDatabaseTransaction extends __sqlite_core_index_ts.SQLiteTransaction {
60
58
  static [__entity_ts.entityKind] = "TursoDatabaseTransaction";
61
- async transaction(_transaction) {
62
- throw new Error("Nested transactions are not supported");
59
+ async transaction(transaction) {
60
+ const savepointName = `sp${this.nestedIndex}`;
61
+ const tx = new TursoDatabaseTransaction("async", this.dialect, this.session, this.relations, this.schema, this.nestedIndex + 1);
62
+ await this.session.run(__sql_sql_ts.sql.raw(`savepoint ${savepointName}`));
63
+ try {
64
+ const result = await transaction(tx);
65
+ await this.session.run(__sql_sql_ts.sql.raw(`release savepoint ${savepointName}`));
66
+ return result;
67
+ } catch (err) {
68
+ await this.session.run(__sql_sql_ts.sql.raw(`rollback to savepoint ${savepointName}`));
69
+ throw err;
70
+ }
63
71
  }
64
72
  };
65
73
  var TursoDatabasePreparedQuery = class extends __sqlite_core_session_ts.SQLitePreparedQuery {
66
74
  static [__entity_ts.entityKind] = "TursoDatabasePreparedQuery";
67
75
  jitMapper;
68
- constructor(stmt, query, logger, cache, queryMetadata, cacheConfig, fields, executeMethod, useJitMappers, customResultMapper, isRqbV2Query, rqbConfig) {
76
+ stmt;
77
+ constructor(client, query, logger, cache, queryMetadata, cacheConfig, fields, executeMethod, useJitMappers, customResultMapper, isOneTimeQuery, isRqbV2Query, rqbConfig) {
69
78
  super("async", executeMethod, query, cache, queryMetadata, cacheConfig);
70
- this.stmt = stmt;
79
+ this.client = client;
71
80
  this.logger = logger;
72
81
  this.fields = fields;
73
82
  this.useJitMappers = useJitMappers;
74
83
  this.customResultMapper = customResultMapper;
84
+ this.isOneTimeQuery = isOneTimeQuery;
75
85
  this.isRqbV2Query = isRqbV2Query;
76
86
  this.rqbConfig = rqbConfig;
77
87
  }
78
88
  async run(placeholderValues) {
79
- const { stmt, query, logger } = this;
89
+ const { query, logger } = this;
80
90
  const params = (0, __sql_sql_ts.fillPlaceholders)(query.params, placeholderValues ?? {});
81
91
  logger.logQuery(query.sql, params);
82
- return await this.queryWithCache(query.sql, params, async () => {
83
- return await (params.length ? stmt.run(...params) : stmt.run());
92
+ return this.queryWithCache(query.sql, params, async () => {
93
+ if (this.isOneTimeQuery) return this.client.run(query.sql, ...params);
94
+ this.stmt ??= await this.client.prepare(query.sql);
95
+ return this.stmt.run(...params);
84
96
  });
85
97
  }
86
98
  async all(placeholderValues) {
87
- if (this.isRqbV2Query) return await this.allRqbV2(placeholderValues);
88
- const { fields, logger, query, customResultMapper, joinsNotNullableMap, stmt } = this;
99
+ if (this.isRqbV2Query) return this.allRqbV2(placeholderValues);
100
+ const { fields, logger, query, customResultMapper, joinsNotNullableMap } = this;
89
101
  if (!fields && !customResultMapper) {
90
102
  const params = (0, __sql_sql_ts.fillPlaceholders)(query.params, placeholderValues ?? {});
91
103
  logger.logQuery(query.sql, params);
92
- return await this.queryWithCache(query.sql, params, async () => {
93
- return await (params.length ? stmt.raw(false).all(...params) : stmt.raw(false).all());
104
+ return this.queryWithCache(query.sql, params, async () => {
105
+ if (this.isOneTimeQuery) return this.client.all(query.sql, ...params);
106
+ this.stmt ??= await this.client.prepare(query.sql);
107
+ return this.stmt.raw(false).all(...params);
94
108
  });
95
109
  }
96
110
  const rows = await this.values(placeholderValues);
97
111
  return this.useJitMappers ? (this.jitMapper = this.jitMapper ?? (0, __utils_ts.makeJitQueryMapper)(fields, joinsNotNullableMap))(rows) : rows.map((row) => (0, __utils_ts.mapResultRow)(fields, row, joinsNotNullableMap));
98
112
  }
99
113
  async allRqbV2(placeholderValues) {
100
- const { logger, query, customResultMapper, stmt } = this;
114
+ const { logger, query, customResultMapper } = this;
101
115
  const params = (0, __sql_sql_ts.fillPlaceholders)(query.params, placeholderValues ?? {});
102
116
  logger.logQuery(query.sql, params);
103
- const rows = await (params.length ? stmt.raw(false).all(...params) : stmt.raw(false).all());
117
+ const rows = await this.queryWithCache(query.sql, params, async () => {
118
+ if (this.isOneTimeQuery) return this.client.all(query.sql, ...params);
119
+ this.stmt ??= await this.client.prepare(query.sql);
120
+ return this.stmt.raw(false).all(...params);
121
+ });
104
122
  return this.useJitMappers ? (this.jitMapper = this.jitMapper ?? (0, __relations_ts.makeJitRqbMapper)(this.rqbConfig))(rows) : customResultMapper(rows);
105
123
  }
106
124
  async get(placeholderValues) {
107
- if (this.isRqbV2Query) return await this.getRqbV2(placeholderValues);
108
- const { fields, logger, query, stmt, customResultMapper, joinsNotNullableMap } = this;
125
+ if (this.isRqbV2Query) return this.getRqbV2(placeholderValues);
126
+ const { fields, logger, query, customResultMapper, joinsNotNullableMap } = this;
109
127
  const params = (0, __sql_sql_ts.fillPlaceholders)(query.params, placeholderValues ?? {});
110
128
  if (!fields && !customResultMapper) {
111
129
  logger.logQuery(query.sql, params);
112
- return await this.queryWithCache(query.sql, params, async () => {
113
- return await (params.length ? stmt.raw(false).get(...params) : stmt.raw(false).get());
130
+ return this.queryWithCache(query.sql, params, async () => {
131
+ if (this.isOneTimeQuery) return this.client.get(query.sql, ...params);
132
+ this.stmt ??= await this.client.prepare(query.sql);
133
+ return this.stmt.raw(false).get(...params);
114
134
  });
115
135
  }
116
136
  const row = await this.queryWithCache(query.sql, params, async () => {
117
- return await (params.length ? stmt.raw(true).get(...params) : stmt.raw(true).get());
137
+ this.stmt ??= await this.client.prepare(query.sql);
138
+ return this.stmt.raw(true).get(...params);
118
139
  });
119
140
  if (row === void 0) return row;
120
141
  return this.useJitMappers ? (this.jitMapper = this.jitMapper ?? (0, __utils_ts.makeJitQueryMapper)(fields, joinsNotNullableMap))([row])[0] : (0, __utils_ts.mapResultRow)(fields, row, joinsNotNullableMap);
121
142
  }
122
143
  async getRqbV2(placeholderValues) {
123
- const { logger, query, stmt, customResultMapper } = this;
144
+ const { logger, query, customResultMapper } = this;
124
145
  const params = (0, __sql_sql_ts.fillPlaceholders)(query.params, placeholderValues ?? {});
125
146
  logger.logQuery(query.sql, params);
126
- const row = await (params.length ? stmt.raw(false).get(...params) : stmt.raw(false).get());
147
+ const row = await this.queryWithCache(query.sql, params, async () => {
148
+ if (this.isOneTimeQuery) return this.client.get(query.sql, ...params);
149
+ this.stmt ??= await this.client.prepare(query.sql);
150
+ return this.stmt.raw(false).get(...params);
151
+ });
127
152
  if (row === void 0) return row;
128
153
  return this.useJitMappers ? (this.jitMapper = this.jitMapper ?? (0, __relations_ts.makeJitRqbMapper)(this.rqbConfig))([row]) : customResultMapper([row]);
129
154
  }
130
155
  async values(placeholderValues) {
131
- const { logger, stmt, query } = this;
156
+ const { logger, query } = this;
132
157
  const params = (0, __sql_sql_ts.fillPlaceholders)(query.params, placeholderValues ?? {});
133
158
  logger.logQuery(query.sql, params);
134
- return await this.queryWithCache(query.sql, params, async () => {
135
- return await (params.length ? stmt.raw(true).all(...params) : stmt.raw(true).all());
159
+ return this.queryWithCache(query.sql, params, async () => {
160
+ this.stmt ??= await this.client.prepare(query.sql);
161
+ return this.stmt.raw(true).all(...params);
136
162
  });
137
163
  }
138
164
  };
@@ -1 +1 @@
1
- {"version":3,"file":"session.cjs","names":["SQLiteSession","entityKind","NoopLogger","NoopCache","DrizzleError","SQLiteTransaction","SQLitePreparedQuery"],"sources":["../../src/tursodatabase/session.ts"],"sourcesContent":["import type { DatabasePromise } from '@tursodatabase/database-common';\nimport type * as V1 from '~/_relations.ts';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DrizzleError } from '~/errors.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport {\n\ttype AnyRelations,\n\tmakeJitRqbMapper,\n\ttype RelationalQueryMapperConfig,\n\ttype RelationalRowsMapper,\n} from '~/relations.ts';\nimport { fillPlaceholders, type Query, type SQL } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tResult,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { makeJitQueryMapper, mapResultRow, type RowsMapper } from '~/utils.ts';\nimport type { TursoDatabaseRunResult } from './driver-core.ts';\n\nexport interface TursoDatabaseSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n\tuseJitMappers?: boolean;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class TursoDatabaseSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteSession<'async', TursoDatabaseRunResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabaseSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: DatabasePromise,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate relations: TRelations,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: TursoDatabaseSessionOptions,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): TursoDatabasePreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\n\t\treturn new TursoDatabasePreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tthis.options.useJitMappers,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tprepareRelationalQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => unknown,\n\t\tconfig: RelationalQueryMapperConfig,\n\t): TursoDatabasePreparedQuery<T, true> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\n\t\treturn new TursoDatabasePreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tthis.options.useJitMappers,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t\tconfig,\n\t\t);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (db: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t\t_config?: SQLiteTransactionConfig,\n\t\ttx?: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>,\n\t): Promise<T> {\n\t\tconst session = new TursoDatabaseSession<TFullSchema, TRelations, TSchema>(\n\t\t\tthis.client,\n\t\t\tthis.dialect,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t\tthis.options,\n\t\t);\n\t\tconst localTx = tx ?? new TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>(\n\t\t\t'async',\n\t\t\tthis.dialect,\n\t\t\tsession,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t);\n\n\t\tconst clientTx = this.client.transaction(async () => await transaction(localTx));\n\n\t\tconst result = await clientTx();\n\t\treturn result;\n\t}\n\n\toverride async run(query: SQL): Result<'async', TursoDatabaseRunResult> {\n\t\tconst staticQuery = this.dialect.sqlToQuery(query);\n\t\ttry {\n\t\t\treturn await this.prepareOneTimeQuery(staticQuery, undefined, 'run').run() as Result<\n\t\t\t\t'async',\n\t\t\t\tTursoDatabaseRunResult\n\t\t\t>;\n\t\t} catch (err) {\n\t\t\tthrow new DrizzleError({ cause: err, message: `Failed to run the query '${staticQuery.sql}'` });\n\t\t}\n\t}\n\n\toverride async all<T = unknown>(query: SQL): Result<'async', T[]> {\n\t\treturn await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run').all() as Result<\n\t\t\t'async',\n\t\t\tT[]\n\t\t>;\n\t}\n\n\toverride async get<T = unknown>(query: SQL): Result<'async', T> {\n\t\treturn await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run').get() as Result<\n\t\t\t'async',\n\t\t\tT\n\t\t>;\n\t}\n\n\toverride async values<T extends any[] = unknown[]>(\n\t\tquery: SQL,\n\t): Result<'async', T[]> {\n\t\treturn await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run').values() as Result<\n\t\t\t'async',\n\t\t\tT[]\n\t\t>;\n\t}\n}\n\nexport class TursoDatabaseTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteTransaction<'async', TursoDatabaseRunResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabaseTransaction';\n\n\toverride async transaction<T>(\n\t\t_transaction: (tx: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\t// Not supported by driver\n\t\tthrow new Error('Nested transactions are not supported');\n\n\t\t// const savepointName = `sp${this.nestedIndex}`;\n\n\t\t// const tx = new TursoDatabaseTransaction(\n\t\t// \t'async',\n\t\t// \tthis.dialect,\n\t\t// \tthis.session,\n\t\t// \tthis.relations,\n\t\t// \tthis.schema,\n\t\t// \tthis.nestedIndex + 1,\n\t\t// );\n\n\t\t// await this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\t// try {\n\t\t// \tconst result = await (<TursoDatabaseSession<TFullSchema, TRelations, TSchema>> (this.session)).transaction(\n\t\t// \t\ttransaction,\n\t\t// \t\tundefined,\n\t\t// \t\ttx,\n\t\t// \t);\n\t\t// \tawait this.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t// \treturn result;\n\t\t// } catch (err) {\n\t\t// \tawait this.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t// \tthrow err;\n\t\t// }\n\t}\n}\n\nexport class TursoDatabasePreparedQuery<\n\tT extends PreparedQueryConfig = PreparedQueryConfig,\n\tTIsRqbV2 extends boolean = false,\n> extends SQLitePreparedQuery<\n\t{\n\t\ttype: 'async';\n\t\trun: TursoDatabaseRunResult;\n\t\tall: T['all'];\n\t\tget: T['get'];\n\t\tvalues: T['values'];\n\t\texecute: T['execute'];\n\t}\n> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabasePreparedQuery';\n\tprivate jitMapper?: RowsMapper<any> | RelationalRowsMapper<any>;\n\n\tconstructor(\n\t\tprivate stmt: ReturnType<DatabasePromise['prepare']>,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tcache: Cache,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\t/** @internal */ public fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate useJitMappers: boolean | undefined,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown,\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t\tprivate rqbConfig?: RelationalQueryMapperConfig,\n\t) {\n\t\tsuper('async', executeMethod, query, cache, queryMetadata, cacheConfig);\n\t}\n\n\tasync run(placeholderValues?: Record<string, unknown>): Promise<TursoDatabaseRunResult> {\n\t\tconst { stmt, query, logger } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (params.length ? stmt.run(...params) : stmt.run());\n\t\t});\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tif (this.isRqbV2Query) return await this.allRqbV2(placeholderValues);\n\n\t\tconst { fields, logger, query, customResultMapper, joinsNotNullableMap, stmt } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\t\treturn await (params.length ? stmt.raw(false).all(...params) : stmt.raw(false).all());\n\t\t\t});\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\n\t\treturn this.useJitMappers\n\t\t\t? (this.jitMapper = this.jitMapper as RowsMapper<T['all']>\n\t\t\t\t?? makeJitQueryMapper<T['all']>(fields!, joinsNotNullableMap))(rows)\n\t\t\t: rows.map((row) => mapResultRow(fields!, row, joinsNotNullableMap));\n\t}\n\n\tprivate async allRqbV2(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { logger, query, customResultMapper, stmt } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst rows = await (params.length ? stmt.raw(false).all(...params) : stmt.raw(false).all());\n\n\t\treturn this.useJitMappers\n\t\t\t? (this.jitMapper = this.jitMapper as RelationalRowsMapper<T['all']>\n\t\t\t\t?? makeJitRqbMapper<T['all']>(this.rqbConfig!))(rows)\n\t\t\t: (customResultMapper as (\n\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t) => unknown)(rows as Record<string, unknown>[]) as T['all'];\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tif (this.isRqbV2Query) return await this.getRqbV2(placeholderValues);\n\n\t\tconst { fields, logger, query, stmt, customResultMapper, joinsNotNullableMap } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\t\treturn await (params.length ? stmt.raw(false).get(...params) : stmt.raw(false).get());\n\t\t\t});\n\t\t}\n\n\t\tconst row = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (params.length ? stmt.raw(true).get(...params) : stmt.raw(true).get());\n\t\t});\n\n\t\tif (row === undefined) return row;\n\n\t\treturn this.useJitMappers\n\t\t\t? (this.jitMapper = this.jitMapper as RowsMapper<T['get'][]>\n\t\t\t\t?? makeJitQueryMapper<T['get'][]>(fields!, joinsNotNullableMap))(\n\t\t\t\t\t[row],\n\t\t\t\t)[0]\n\t\t\t: mapResultRow(fields!, row, joinsNotNullableMap);\n\t}\n\n\tprivate async getRqbV2(placeholderValues?: Record<string, unknown>) {\n\t\tconst { logger, query, stmt, customResultMapper } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst row = await (params.length ? stmt.raw(false).get(...params) : stmt.raw(false).get());\n\n\t\tif (row === undefined) return row;\n\n\t\treturn this.useJitMappers\n\t\t\t? (this.jitMapper = this.jitMapper as RelationalRowsMapper<T['get'][]>\n\t\t\t\t?? makeJitRqbMapper<T['get'][]>(this.rqbConfig!))([row])\n\t\t\t: (customResultMapper as (\n\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t) => unknown)([row] as Record<string, unknown>[]) as T['get'];\n\t}\n\n\tasync values(placeholderValues?: Record<string, unknown>): Promise<T['values']> {\n\t\tconst { logger, stmt, query } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (params.length ? stmt.raw(true).all(...params) : stmt.raw(true).all());\n\t\t});\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"session.cjs","names":["SQLiteSession","entityKind","NoopLogger","NoopCache","SQLiteTransaction","sql","SQLitePreparedQuery"],"sources":["../../src/tursodatabase/session.ts"],"sourcesContent":["import type { DatabasePromise, StatementPromise } from '@tursodatabase/database-common';\nimport type * as V1 from '~/_relations.ts';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport {\n\ttype AnyRelations,\n\tmakeJitRqbMapper,\n\ttype RelationalQueryMapperConfig,\n\ttype RelationalRowsMapper,\n} from '~/relations.ts';\nimport { fillPlaceholders, type Query, type SQL, sql } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tResult,\n\tSQLiteExecuteMethod,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { makeJitQueryMapper, mapResultRow, type RowsMapper } from '~/utils.ts';\nimport type { TursoDatabaseRunResult } from './driver-core.ts';\n\nexport interface TursoDatabaseSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n\tuseJitMappers?: boolean;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class TursoDatabaseSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteSession<'async', TursoDatabaseRunResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabaseSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: DatabasePromise,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate relations: TRelations,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: TursoDatabaseSessionOptions,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): TursoDatabasePreparedQuery<T> {\n\t\treturn new TursoDatabasePreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tthis.options.useJitMappers,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride prepareOneTimeQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): TursoDatabasePreparedQuery<T> {\n\t\treturn new TursoDatabasePreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tthis.options.useJitMappers,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\tprepareRelationalQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => unknown,\n\t\tconfig: RelationalQueryMapperConfig,\n\t): TursoDatabasePreparedQuery<T, true> {\n\t\treturn new TursoDatabasePreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tthis.options.useJitMappers,\n\t\t\tcustomResultMapper,\n\t\t\tfalse,\n\t\t\ttrue,\n\t\t\tconfig,\n\t\t);\n\t}\n\n\toverride prepareOneTimeRelationalQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => unknown,\n\t\tconfig: RelationalQueryMapperConfig,\n\t): TursoDatabasePreparedQuery<T, true> {\n\t\treturn new TursoDatabasePreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tthis.options.useJitMappers,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t\ttrue,\n\t\t\tconfig,\n\t\t);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (db: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tconst session = new TursoDatabaseSession<TFullSchema, TRelations, TSchema>(\n\t\t\tthis.client,\n\t\t\tthis.dialect,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t\tthis.options,\n\t\t);\n\t\tconst localTx = new TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>(\n\t\t\t'async',\n\t\t\tthis.dialect,\n\t\t\tsession,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t);\n\n\t\tconst clientTx = this.client.transaction(async () => await transaction(localTx));\n\n\t\tconst result = await clientTx();\n\t\treturn result;\n\t}\n\n\toverride async run(query: SQL): Result<'async', TursoDatabaseRunResult> {\n\t\tconst staticQuery = this.dialect.sqlToQuery(query);\n\n\t\treturn this.prepareOneTimeQuery(staticQuery, undefined, 'run').run() as Result<\n\t\t\t'async',\n\t\t\tTursoDatabaseRunResult\n\t\t>;\n\t}\n\n\toverride async all<T = unknown>(query: SQL): Result<'async', T[]> {\n\t\treturn this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run').all() as Result<\n\t\t\t'async',\n\t\t\tT[]\n\t\t>;\n\t}\n\n\toverride async get<T = unknown>(query: SQL): Result<'async', T> {\n\t\treturn this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run').get() as Result<\n\t\t\t'async',\n\t\t\tT\n\t\t>;\n\t}\n\n\toverride async values<T extends any[] = unknown[]>(\n\t\tquery: SQL,\n\t): Result<'async', T[]> {\n\t\treturn this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run').values() as Result<\n\t\t\t'async',\n\t\t\tT[]\n\t\t>;\n\t}\n}\n\nexport class TursoDatabaseTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteTransaction<'async', TursoDatabaseRunResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabaseTransaction';\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\n\t\tconst tx = new TursoDatabaseTransaction(\n\t\t\t'async',\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t\tthis.nestedIndex + 1,\n\t\t);\n\n\t\tawait this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class TursoDatabasePreparedQuery<\n\tT extends PreparedQueryConfig = PreparedQueryConfig,\n\tTIsRqbV2 extends boolean = false,\n> extends SQLitePreparedQuery<\n\t{\n\t\ttype: 'async';\n\t\trun: TursoDatabaseRunResult;\n\t\tall: T['all'];\n\t\tget: T['get'];\n\t\tvalues: T['values'];\n\t\texecute: T['execute'];\n\t}\n> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabasePreparedQuery';\n\tprivate jitMapper?: RowsMapper<any> | RelationalRowsMapper<any>;\n\tprivate stmt?: StatementPromise;\n\n\tconstructor(\n\t\tprivate client: DatabasePromise,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tcache: Cache,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\t/** @internal */ public fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate useJitMappers: boolean | undefined,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown,\n\t\tprivate isOneTimeQuery?: boolean,\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t\tprivate rqbConfig?: RelationalQueryMapperConfig,\n\t) {\n\t\tsuper('async', executeMethod, query, cache, queryMetadata, cacheConfig);\n\t}\n\n\tasync run(placeholderValues?: Record<string, unknown>): Promise<TursoDatabaseRunResult> {\n\t\tconst { query, logger } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\t\treturn this.queryWithCache(query.sql, params, async () => {\n\t\t\tif (this.isOneTimeQuery) return this.client.run(query.sql, ...params);\n\n\t\t\tthis.stmt ??= await this.client.prepare(query.sql);\n\t\t\treturn (this.stmt.run(...params));\n\t\t});\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tif (this.isRqbV2Query) return this.allRqbV2(placeholderValues);\n\n\t\tconst { fields, logger, query, customResultMapper, joinsNotNullableMap } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn this.queryWithCache(query.sql, params, async () => {\n\t\t\t\tif (this.isOneTimeQuery) return this.client.all(query.sql, ...params);\n\n\t\t\t\tthis.stmt ??= await this.client.prepare(query.sql);\n\t\t\t\treturn (this.stmt.raw(false).all(...params));\n\t\t\t});\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\n\t\treturn this.useJitMappers\n\t\t\t? (this.jitMapper = this.jitMapper as RowsMapper<T['all']>\n\t\t\t\t?? makeJitQueryMapper<T['all']>(fields!, joinsNotNullableMap))(rows)\n\t\t\t: rows.map((row) => mapResultRow(fields!, row, joinsNotNullableMap));\n\t}\n\n\tprivate async allRqbV2(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { logger, query, customResultMapper } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst rows = await this.queryWithCache(query.sql, params, async () => {\n\t\t\tif (this.isOneTimeQuery) return this.client.all(query.sql, ...params);\n\n\t\t\tthis.stmt ??= await this.client.prepare(query.sql);\n\t\t\treturn (this.stmt.raw(false).all(...params));\n\t\t});\n\n\t\treturn this.useJitMappers\n\t\t\t? (this.jitMapper = this.jitMapper as RelationalRowsMapper<T['all']>\n\t\t\t\t?? makeJitRqbMapper<T['all']>(this.rqbConfig!))(rows)\n\t\t\t: (customResultMapper as (\n\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t) => unknown)(rows as Record<string, unknown>[]) as T['all'];\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tif (this.isRqbV2Query) return this.getRqbV2(placeholderValues);\n\n\t\tconst { fields, logger, query, customResultMapper, joinsNotNullableMap } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn this.queryWithCache(query.sql, params, async () => {\n\t\t\t\tif (this.isOneTimeQuery) return this.client.get(query.sql, ...params);\n\n\t\t\t\tthis.stmt ??= await this.client.prepare(query.sql);\n\t\t\t\treturn (this.stmt.raw(false).get(...params));\n\t\t\t});\n\t\t}\n\n\t\tconst row = await this.queryWithCache(query.sql, params, async () => {\n\t\t\tthis.stmt ??= await this.client.prepare(query.sql);\n\t\t\treturn (this.stmt.raw(true).get(...params));\n\t\t});\n\n\t\tif (row === undefined) return row;\n\n\t\treturn this.useJitMappers\n\t\t\t? (this.jitMapper = this.jitMapper as RowsMapper<T['get'][]>\n\t\t\t\t?? makeJitQueryMapper<T['get'][]>(fields!, joinsNotNullableMap))(\n\t\t\t\t\t[row],\n\t\t\t\t)[0]\n\t\t\t: mapResultRow(fields!, row, joinsNotNullableMap);\n\t}\n\n\tprivate async getRqbV2(placeholderValues?: Record<string, unknown>) {\n\t\tconst { logger, query, customResultMapper } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst row = await this.queryWithCache(query.sql, params, async () => {\n\t\t\tif (this.isOneTimeQuery) return this.client.get(query.sql, ...params);\n\n\t\t\tthis.stmt ??= await this.client.prepare(query.sql);\n\t\t\treturn (this.stmt.raw(false).get(...params));\n\t\t});\n\n\t\tif (row === undefined) return row;\n\n\t\treturn this.useJitMappers\n\t\t\t? (this.jitMapper = this.jitMapper as RelationalRowsMapper<T['get'][]>\n\t\t\t\t?? makeJitRqbMapper<T['get'][]>(this.rqbConfig!))([row])\n\t\t\t: (customResultMapper as (\n\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t) => unknown)([row] as Record<string, unknown>[]) as T['get'];\n\t}\n\n\tasync values(placeholderValues?: Record<string, unknown>): Promise<T['values']> {\n\t\tconst { logger, query } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\t\treturn this.queryWithCache(query.sql, params, async () => {\n\t\t\tthis.stmt ??= await this.client.prepare(query.sql);\n\t\t\treturn (this.stmt.raw(true).all(...params));\n\t\t});\n\t}\n}\n"],"mappings":"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"}
@@ -6,7 +6,7 @@ import { AnyRelations, RelationalQueryMapperConfig } from "../relations.cjs";
6
6
  import { WithCacheConfig } from "../cache/core/types.cjs";
7
7
  import { Logger } from "../logger.cjs";
8
8
  import { SQLiteAsyncDialect } from "../sqlite-core/dialect.cjs";
9
- import { PreparedQueryConfig, Result, SQLiteExecuteMethod, SQLitePreparedQuery, SQLiteSession, SQLiteTransactionConfig } from "../sqlite-core/session.cjs";
9
+ import { PreparedQueryConfig, Result, SQLiteExecuteMethod, SQLitePreparedQuery, SQLiteSession } from "../sqlite-core/session.cjs";
10
10
  import { Cache } from "../cache/core/index.cjs";
11
11
  import { SQLiteTransaction as SQLiteTransaction$1 } from "../sqlite-core/index.cjs";
12
12
  import { SelectedFieldsOrdered } from "../sqlite-core/query-builders/select.types.cjs";
@@ -32,8 +32,13 @@ declare class TursoDatabaseSession<TFullSchema extends Record<string, unknown>,
32
32
  type: 'select' | 'update' | 'delete' | 'insert';
33
33
  tables: string[];
34
34
  }, cacheConfig?: WithCacheConfig): TursoDatabasePreparedQuery<T>;
35
+ prepareOneTimeQuery<T extends Omit<PreparedQueryConfig$1, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper?: (rows: unknown[][]) => unknown, queryMetadata?: {
36
+ type: 'select' | 'update' | 'delete' | 'insert';
37
+ tables: string[];
38
+ }, cacheConfig?: WithCacheConfig): TursoDatabasePreparedQuery<T>;
35
39
  prepareRelationalQuery<T extends Omit<PreparedQueryConfig$1, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper: (rows: Record<string, unknown>[]) => unknown, config: RelationalQueryMapperConfig): TursoDatabasePreparedQuery<T, true>;
36
- transaction<T>(transaction: (db: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>, _config?: SQLiteTransactionConfig, tx?: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>): Promise<T>;
40
+ prepareOneTimeRelationalQuery<T extends Omit<PreparedQueryConfig$1, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper: (rows: Record<string, unknown>[]) => unknown, config: RelationalQueryMapperConfig): TursoDatabasePreparedQuery<T, true>;
41
+ transaction<T>(transaction: (db: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>): Promise<T>;
37
42
  run(query: SQL): Result<'async', TursoDatabaseRunResult>;
38
43
  all<T = unknown>(query: SQL): Result<'async', T[]>;
39
44
  get<T = unknown>(query: SQL): Result<'async', T>;
@@ -41,7 +46,7 @@ declare class TursoDatabaseSession<TFullSchema extends Record<string, unknown>,
41
46
  }
42
47
  declare class TursoDatabaseTransaction<TFullSchema extends Record<string, unknown>, TRelations extends AnyRelations, TSchema extends V1.TablesRelationalConfig> extends SQLiteTransaction$1<'async', TursoDatabaseRunResult, TFullSchema, TRelations, TSchema> {
43
48
  static readonly [entityKind]: string;
44
- transaction<T>(_transaction: (tx: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>): Promise<T>;
49
+ transaction<T>(transaction: (tx: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>): Promise<T>;
45
50
  }
46
51
  declare class TursoDatabasePreparedQuery<T extends PreparedQueryConfig$1 = PreparedQueryConfig$1, TIsRqbV2 extends boolean = false> extends SQLitePreparedQuery<{
47
52
  type: 'async';
@@ -51,20 +56,22 @@ declare class TursoDatabasePreparedQuery<T extends PreparedQueryConfig$1 = Prepa
51
56
  values: T['values'];
52
57
  execute: T['execute'];
53
58
  }> {
54
- private stmt;
59
+ private client;
55
60
  private logger;
56
61
  private useJitMappers;
57
62
  private customResultMapper?;
63
+ private isOneTimeQuery?;
58
64
  private isRqbV2Query?;
59
65
  private rqbConfig?;
60
66
  static readonly [entityKind]: string;
61
67
  private jitMapper?;
62
- constructor(stmt: ReturnType<DatabasePromise['prepare']>, query: Query, logger: Logger, cache: Cache, queryMetadata: {
68
+ private stmt?;
69
+ constructor(client: DatabasePromise, query: Query, logger: Logger, cache: Cache, queryMetadata: {
63
70
  type: 'select' | 'update' | 'delete' | 'insert';
64
71
  tables: string[];
65
72
  } | undefined, cacheConfig: WithCacheConfig | undefined, /** @internal */
66
73
 
67
- fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, useJitMappers: boolean | undefined, customResultMapper?: ((rows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown) | undefined, isRqbV2Query?: TIsRqbV2 | undefined, rqbConfig?: RelationalQueryMapperConfig | undefined);
74
+ fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, useJitMappers: boolean | undefined, customResultMapper?: ((rows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown) | undefined, isOneTimeQuery?: boolean | undefined, isRqbV2Query?: TIsRqbV2 | undefined, rqbConfig?: RelationalQueryMapperConfig | undefined);
68
75
  run(placeholderValues?: Record<string, unknown>): Promise<TursoDatabaseRunResult>;
69
76
  all(placeholderValues?: Record<string, unknown>): Promise<T['all']>;
70
77
  private allRqbV2;
@@ -7,7 +7,7 @@ import * as V1 from "../_relations.js";
7
7
  import { AnyRelations, RelationalQueryMapperConfig } from "../relations.js";
8
8
  import { SQLiteAsyncDialect } from "../sqlite-core/dialect.js";
9
9
  import { SQLiteTransaction } from "../sqlite-core/index.js";
10
- import { PreparedQueryConfig, Result, SQLiteExecuteMethod, SQLitePreparedQuery, SQLiteSession, SQLiteTransactionConfig } from "../sqlite-core/session.js";
10
+ import { PreparedQueryConfig, Result, SQLiteExecuteMethod, SQLitePreparedQuery, SQLiteSession } from "../sqlite-core/session.js";
11
11
  import { WithCacheConfig } from "../cache/core/types.js";
12
12
  import { SelectedFieldsOrdered } from "../sqlite-core/query-builders/select.types.js";
13
13
  import { DatabasePromise } from "@tursodatabase/database-common";
@@ -32,8 +32,13 @@ declare class TursoDatabaseSession<TFullSchema extends Record<string, unknown>,
32
32
  type: 'select' | 'update' | 'delete' | 'insert';
33
33
  tables: string[];
34
34
  }, cacheConfig?: WithCacheConfig): TursoDatabasePreparedQuery<T>;
35
+ prepareOneTimeQuery<T extends Omit<PreparedQueryConfig$1, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper?: (rows: unknown[][]) => unknown, queryMetadata?: {
36
+ type: 'select' | 'update' | 'delete' | 'insert';
37
+ tables: string[];
38
+ }, cacheConfig?: WithCacheConfig): TursoDatabasePreparedQuery<T>;
35
39
  prepareRelationalQuery<T extends Omit<PreparedQueryConfig$1, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper: (rows: Record<string, unknown>[]) => unknown, config: RelationalQueryMapperConfig): TursoDatabasePreparedQuery<T, true>;
36
- transaction<T>(transaction: (db: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>, _config?: SQLiteTransactionConfig, tx?: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>): Promise<T>;
40
+ prepareOneTimeRelationalQuery<T extends Omit<PreparedQueryConfig$1, 'run'>>(query: Query, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, customResultMapper: (rows: Record<string, unknown>[]) => unknown, config: RelationalQueryMapperConfig): TursoDatabasePreparedQuery<T, true>;
41
+ transaction<T>(transaction: (db: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>): Promise<T>;
37
42
  run(query: SQL): Result<'async', TursoDatabaseRunResult>;
38
43
  all<T = unknown>(query: SQL): Result<'async', T[]>;
39
44
  get<T = unknown>(query: SQL): Result<'async', T>;
@@ -41,7 +46,7 @@ declare class TursoDatabaseSession<TFullSchema extends Record<string, unknown>,
41
46
  }
42
47
  declare class TursoDatabaseTransaction<TFullSchema extends Record<string, unknown>, TRelations extends AnyRelations, TSchema extends V1.TablesRelationalConfig> extends SQLiteTransaction<'async', TursoDatabaseRunResult, TFullSchema, TRelations, TSchema> {
43
48
  static readonly [entityKind]: string;
44
- transaction<T>(_transaction: (tx: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>): Promise<T>;
49
+ transaction<T>(transaction: (tx: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>): Promise<T>;
45
50
  }
46
51
  declare class TursoDatabasePreparedQuery<T extends PreparedQueryConfig$1 = PreparedQueryConfig$1, TIsRqbV2 extends boolean = false> extends SQLitePreparedQuery<{
47
52
  type: 'async';
@@ -51,20 +56,22 @@ declare class TursoDatabasePreparedQuery<T extends PreparedQueryConfig$1 = Prepa
51
56
  values: T['values'];
52
57
  execute: T['execute'];
53
58
  }> {
54
- private stmt;
59
+ private client;
55
60
  private logger;
56
61
  private useJitMappers;
57
62
  private customResultMapper?;
63
+ private isOneTimeQuery?;
58
64
  private isRqbV2Query?;
59
65
  private rqbConfig?;
60
66
  static readonly [entityKind]: string;
61
67
  private jitMapper?;
62
- constructor(stmt: ReturnType<DatabasePromise['prepare']>, query: Query, logger: Logger, cache: Cache, queryMetadata: {
68
+ private stmt?;
69
+ constructor(client: DatabasePromise, query: Query, logger: Logger, cache: Cache, queryMetadata: {
63
70
  type: 'select' | 'update' | 'delete' | 'insert';
64
71
  tables: string[];
65
72
  } | undefined, cacheConfig: WithCacheConfig | undefined, /** @internal */
66
73
 
67
- fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, useJitMappers: boolean | undefined, customResultMapper?: ((rows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown) | undefined, isRqbV2Query?: TIsRqbV2 | undefined, rqbConfig?: RelationalQueryMapperConfig | undefined);
74
+ fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, useJitMappers: boolean | undefined, customResultMapper?: ((rows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown) | undefined, isOneTimeQuery?: boolean | undefined, isRqbV2Query?: TIsRqbV2 | undefined, rqbConfig?: RelationalQueryMapperConfig | undefined);
68
75
  run(placeholderValues?: Record<string, unknown>): Promise<TursoDatabaseRunResult>;
69
76
  all(placeholderValues?: Record<string, unknown>): Promise<T['all']>;
70
77
  private allRqbV2;