drizzle-orm 1.0.0-beta.22-db6c385 → 1.0.0-beta.22-aaec768
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/postgres/driver.cjs +1 -1
- package/bun-sql/postgres/driver.cjs.map +1 -1
- package/bun-sql/postgres/driver.js +1 -1
- package/bun-sql/postgres/driver.js.map +1 -1
- package/bun-sql/postgres/session.cjs +8 -3
- package/bun-sql/postgres/session.cjs.map +1 -1
- package/bun-sql/postgres/session.js +8 -3
- package/bun-sql/postgres/session.js.map +1 -1
- package/cache/core/cache-effect.d.cts +1 -1
- package/cache/core/cache-effect.d.ts +1 -1
- package/cache/upstash/cache.d.cts +1 -1
- package/cache/upstash/cache.d.ts +1 -1
- package/package.json +1 -1
- package/pg-core/async/db.cjs +10 -5
- package/pg-core/async/db.cjs.map +1 -1
- package/pg-core/async/db.d.cts +2 -1
- package/pg-core/async/db.d.ts +2 -1
- package/pg-core/async/db.js +10 -5
- package/pg-core/async/db.js.map +1 -1
- package/pg-core/async/select.cjs +1 -1
- package/pg-core/async/select.cjs.map +1 -1
- package/pg-core/async/select.js +1 -1
- package/pg-core/async/select.js.map +1 -1
- package/pg-core/dialect.cjs +10 -0
- package/pg-core/dialect.cjs.map +1 -1
- package/pg-core/dialect.d.cts +1 -0
- package/pg-core/dialect.d.ts +1 -0
- package/pg-core/dialect.js +10 -0
- package/pg-core/dialect.js.map +1 -1
- package/pg-core/query-builders/select.cjs.map +1 -1
- package/pg-core/query-builders/select.d.cts +1 -0
- package/pg-core/query-builders/select.d.ts +1 -0
- package/pg-core/query-builders/select.js.map +1 -1
- package/pg-core/query-builders/select.types.d.cts +1 -0
- package/pg-core/query-builders/select.types.d.ts +1 -0
- package/sql/sql.cjs +21 -2
- package/sql/sql.cjs.map +1 -1
- package/sql/sql.d.cts +2 -0
- package/sql/sql.d.ts +2 -0
- package/sql/sql.js +21 -2
- package/sql/sql.js.map +1 -1
- package/sqlite-core/query-builders/raw.d.cts +1 -0
- package/sqlite-core/query-builders/raw.d.ts +1 -0
|
@@ -192,7 +192,7 @@ function construct(client, config = {}) {
|
|
|
192
192
|
const db = new BunSQLDatabase(dialect, new require_bun_sql_postgres_session.BunSQLSession(client, dialect, relations, {
|
|
193
193
|
logger,
|
|
194
194
|
cache: config.cache
|
|
195
|
-
}), relations);
|
|
195
|
+
}), relations, false, true);
|
|
196
196
|
db.$client = client;
|
|
197
197
|
db.$cache = config.cache;
|
|
198
198
|
if (db.$cache) db.$cache["invalidate"] = config.cache?.onMutate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.cjs","names":["makePgArray","castToText","castToTextArr","parseGeometryXY","parseGeometryTuple","parsePgArray","PgAsyncDatabase","entityKind","PgDialect","DefaultLogger","BunSQLSession","SQL"],"sources":["../../../src/bun-sql/postgres/driver.ts"],"sourcesContent":["/// <reference types=\"bun-types\" />\n\nimport { SQL } from 'bun';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { makePgArray, parsePgArray } from '~/pg-core/array.ts';\nimport { PgAsyncDatabase } from '~/pg-core/async/db.ts';\nimport {\n\tarrayCompatNormalize,\n\tarrayCompatNormalizeInput,\n\tcastToText,\n\tcastToTextArr,\n\tparseGeometryTuple,\n\tparseGeometryXY,\n\tparsePgArrayAndNormalize,\n\trefineGenericPgCodecs,\n} from '~/pg-core/codecs.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport type { DrizzlePgConfig } from '~/pg-core/utils.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport type { BunSQLQueryResultHKT } from './session.ts';\nimport { BunSQLSession } from './session.ts';\n\nexport const bunSqlPgCodecs = refineGenericPgCodecs({\n\tdate: { normalizeParamArray: makePgArray },\n\t'date:string': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tuuid: {\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\ttimestamp: { normalizeParamArray: makePgArray },\n\ttimestamptz: { normalizeParamArray: makePgArray },\n\t'timestamp:string': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'timestamptz:string': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tfloat4: {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalize: Number,\n\t\tnormalizeArray: arrayCompatNormalize(Number),\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tbigint: {\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'bigint:number': { normalizeParamArray: makePgArray },\n\t'bigint:string': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tbigserial: { normalizeParamArray: makePgArray },\n\t'bigserial:number': { normalizeParamArray: makePgArray },\n\tint: {\n\t\tnormalizeArray: (\n\t\t\tvalue: any,\n\t\t\tdimensions: number,\n\t\t) => {\n\t\t\tif (dimensions <= 1) {\n\t\t\t\t// eslint-disable-next-line drizzle-internal/no-instanceof\n\t\t\t\tif (value instanceof Int32Array) {\n\t\t\t\t\treturn Array.from(value) as any;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tconst stack: { arr: any; depth: number }[] = [{ arr: value, depth: 1 }];\n\n\t\t\twhile (stack.length > 0) {\n\t\t\t\tconst { arr, depth } = stack.pop()!;\n\n\t\t\t\tif (depth === dimensions - 1) {\n\t\t\t\t\tfor (let i = 0; i < arr.length; i++) {\n\t\t\t\t\t\tconst leaf = arr[i];\n\t\t\t\t\t\t// eslint-disable-next-line drizzle-internal/no-instanceof\n\t\t\t\t\t\tif (leaf instanceof Int32Array) {\n\t\t\t\t\t\t\tarr[i] = Array.from(leaf);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (let i = 0; i < arr.length; i++) {\n\t\t\t\t\t\tstack.push({ arr: arr[i], depth: depth + 1 });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\n\tbit: { normalizeParamArray: makePgArray },\n\tbool: { normalizeParamArray: makePgArray },\n\tbox: { normalizeParamArray: makePgArray },\n\tbox2d: { normalizeParamArray: makePgArray },\n\tbox3d: { normalizeParamArray: makePgArray },\n\tchar: { normalizeParamArray: makePgArray },\n\tcidr: { normalizeParamArray: makePgArray },\n\tcircle: { normalizeParamArray: makePgArray },\n\tdatemultirange: { normalizeParamArray: makePgArray },\n\tdaterange: { normalizeParamArray: makePgArray },\n\tfloat8: { normalizeParamArray: makePgArray },\n\tgeography: { normalizeParamArray: makePgArray },\n\tinet: { normalizeParamArray: makePgArray },\n\tint4multirange: { normalizeParamArray: makePgArray },\n\tint4range: { normalizeParamArray: makePgArray },\n\tint8multirange: { normalizeParamArray: makePgArray },\n\tint8range: { normalizeParamArray: makePgArray },\n\tlseg: { normalizeParamArray: makePgArray },\n\tmacaddr: { normalizeParamArray: makePgArray },\n\tmoney: { normalizeParamArray: makePgArray },\n\tnummultirange: { normalizeParamArray: makePgArray },\n\tnumrange: { normalizeParamArray: makePgArray },\n\toid: { normalizeParamArray: makePgArray },\n\tpath: { normalizeParamArray: makePgArray },\n\tpolygon: { normalizeParamArray: makePgArray },\n\traster: { normalizeParamArray: makePgArray },\n\tregclass: { normalizeParamArray: makePgArray },\n\tregconfig: { normalizeParamArray: makePgArray },\n\tregdictionary: { normalizeParamArray: makePgArray },\n\tregnamespace: { normalizeParamArray: makePgArray },\n\tregoper: { normalizeParamArray: makePgArray },\n\tregoperator: { normalizeParamArray: makePgArray },\n\tregproc: { normalizeParamArray: makePgArray },\n\tregprocedure: { normalizeParamArray: makePgArray },\n\tregrole: { normalizeParamArray: makePgArray },\n\tregtype: { normalizeParamArray: makePgArray },\n\tserial: { normalizeParamArray: makePgArray },\n\tsmallint: { normalizeParamArray: makePgArray },\n\tsmallserial: { normalizeParamArray: makePgArray },\n\ttext: { normalizeParamArray: makePgArray },\n\ttime: { normalizeParamArray: makePgArray },\n\ttimetz: { normalizeParamArray: makePgArray },\n\ttsmultirange: { normalizeParamArray: makePgArray },\n\ttsquery: { normalizeParamArray: makePgArray },\n\ttsrange: { normalizeParamArray: makePgArray },\n\ttstzmultirange: { normalizeParamArray: makePgArray },\n\ttstzrange: { normalizeParamArray: makePgArray },\n\ttsvector: { normalizeParamArray: makePgArray },\n\tvarbit: { normalizeParamArray: makePgArray },\n\tvarchar: { normalizeParamArray: makePgArray },\n\txml: { normalizeParamArray: makePgArray },\n\tbytea: { normalizeParamArray: makePgArray },\n\tenum: { normalizeParamArray: makePgArray },\n\tjson: {\n\t\tnormalizeParamArray: arrayCompatNormalizeInput((v) => JSON.stringify(v), true),\n\t},\n\tjsonb: {\n\t\tnormalizeParamArray: arrayCompatNormalizeInput((v) => JSON.stringify(v), true),\n\t},\n\tgeometry: {\n\t\tnormalizeArray: parsePgArrayAndNormalize(parseGeometryXY),\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'geometry:tuple': {\n\t\tnormalizeArray: parsePgArrayAndNormalize(parseGeometryTuple),\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tinterval: {\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tline: {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'line:tuple': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tmacaddr8: {\n\t\tcastArrayInJson: castToTextArr,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tnumeric: { normalizeParamArray: makePgArray },\n\t'numeric:number': { normalizeParamArray: makePgArray },\n\t'numeric:bigint': { normalizeParamArray: makePgArray },\n\tpoint: {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'point:tuple': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\thalfvec: { normalizeParamArray: makePgArray },\n\tsparsevec: {\n\t\tnormalizeArray: parsePgArray,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tvector: { normalizeParamArray: makePgArray },\n});\n\nexport class BunSQLDatabase<\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgAsyncDatabase<BunSQLQueryResultHKT, TRelations> {\n\tstatic override readonly [entityKind]: string = 'BunSQLDatabase';\n}\n\nfunction construct<\n\tTRelations extends AnyRelations = EmptyRelations,\n>(\n\tclient: SQL,\n\tconfig: DrizzlePgConfig<TRelations> = {},\n): BunSQLDatabase<TRelations> & {\n\t$client: SQL;\n} {\n\tclient.options.bigint = true;\n\tconst dialect = new PgDialect({\n\t\tuseJitMappers: config.useJitMappers,\n\t\tcodecs: config.codecs ?? bunSqlPgCodecs,\n\t});\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\tconst relations = config.relations ?? {} as TRelations;\n\tconst session = new BunSQLSession(client, dialect, relations, {\n\t\tlogger,\n\t\tcache: config.cache,\n\t});\n\tconst db = new BunSQLDatabase(dialect, session, relations) as BunSQLDatabase<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\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends SQL = SQL,\n>(\n\t...params: [\n\t\tstring,\n\t] | [\n\t\tstring,\n\t\tDrizzlePgConfig<TRelations>,\n\t] | [\n\t\t(\n\t\t\t& DrizzlePgConfig<TRelations>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ url?: string } & SQL.Options);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): BunSQLDatabase<TRelations> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = new SQL(params[0]);\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tconst { connection, client, ...DrizzlePgConfig } = params[0] as\n\t\t& {\n\t\t\tconnection?: { url?: string } & SQL.Options;\n\t\t\tclient?: TClient;\n\t\t}\n\t\t& DrizzlePgConfig<TRelations>;\n\n\tif (client) return construct(client, DrizzlePgConfig) as any;\n\n\tif (typeof connection === 'object' && connection.url !== undefined) {\n\t\tconst { url, ...config } = connection;\n\n\t\tconst instance = new SQL({ url, ...config });\n\t\treturn construct(instance, DrizzlePgConfig) as any;\n\t}\n\n\tconst instance = new SQL(connection);\n\treturn construct(instance, DrizzlePgConfig) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<\n\t\tTRelations extends AnyRelations = EmptyRelations,\n\t>(\n\t\tconfig?: DrizzlePgConfig<TRelations>,\n\t): BunSQLDatabase<TRelations> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({\n\t\t\toptions: {\n\t\t\t\tparsers: {},\n\t\t\t\tserializers: {},\n\t\t\t},\n\t\t} as any, config) as any;\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"driver.cjs","names":["makePgArray","castToText","castToTextArr","parseGeometryXY","parseGeometryTuple","parsePgArray","PgAsyncDatabase","entityKind","PgDialect","DefaultLogger","BunSQLSession","SQL"],"sources":["../../../src/bun-sql/postgres/driver.ts"],"sourcesContent":["/// <reference types=\"bun-types\" />\n\nimport { SQL } from 'bun';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { makePgArray, parsePgArray } from '~/pg-core/array.ts';\nimport { PgAsyncDatabase } from '~/pg-core/async/db.ts';\nimport {\n\tarrayCompatNormalize,\n\tarrayCompatNormalizeInput,\n\tcastToText,\n\tcastToTextArr,\n\tparseGeometryTuple,\n\tparseGeometryXY,\n\tparsePgArrayAndNormalize,\n\trefineGenericPgCodecs,\n} from '~/pg-core/codecs.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport type { DrizzlePgConfig } from '~/pg-core/utils.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport type { BunSQLQueryResultHKT } from './session.ts';\nimport { BunSQLSession } from './session.ts';\n\nexport const bunSqlPgCodecs = refineGenericPgCodecs({\n\tdate: { normalizeParamArray: makePgArray },\n\t'date:string': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tuuid: {\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\ttimestamp: { normalizeParamArray: makePgArray },\n\ttimestamptz: { normalizeParamArray: makePgArray },\n\t'timestamp:string': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'timestamptz:string': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tfloat4: {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalize: Number,\n\t\tnormalizeArray: arrayCompatNormalize(Number),\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tbigint: {\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'bigint:number': { normalizeParamArray: makePgArray },\n\t'bigint:string': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tbigserial: { normalizeParamArray: makePgArray },\n\t'bigserial:number': { normalizeParamArray: makePgArray },\n\tint: {\n\t\tnormalizeArray: (\n\t\t\tvalue: any,\n\t\t\tdimensions: number,\n\t\t) => {\n\t\t\tif (dimensions <= 1) {\n\t\t\t\t// eslint-disable-next-line drizzle-internal/no-instanceof\n\t\t\t\tif (value instanceof Int32Array) {\n\t\t\t\t\treturn Array.from(value) as any;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tconst stack: { arr: any; depth: number }[] = [{ arr: value, depth: 1 }];\n\n\t\t\twhile (stack.length > 0) {\n\t\t\t\tconst { arr, depth } = stack.pop()!;\n\n\t\t\t\tif (depth === dimensions - 1) {\n\t\t\t\t\tfor (let i = 0; i < arr.length; i++) {\n\t\t\t\t\t\tconst leaf = arr[i];\n\t\t\t\t\t\t// eslint-disable-next-line drizzle-internal/no-instanceof\n\t\t\t\t\t\tif (leaf instanceof Int32Array) {\n\t\t\t\t\t\t\tarr[i] = Array.from(leaf);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (let i = 0; i < arr.length; i++) {\n\t\t\t\t\t\tstack.push({ arr: arr[i], depth: depth + 1 });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\n\tbit: { normalizeParamArray: makePgArray },\n\tbool: { normalizeParamArray: makePgArray },\n\tbox: { normalizeParamArray: makePgArray },\n\tbox2d: { normalizeParamArray: makePgArray },\n\tbox3d: { normalizeParamArray: makePgArray },\n\tchar: { normalizeParamArray: makePgArray },\n\tcidr: { normalizeParamArray: makePgArray },\n\tcircle: { normalizeParamArray: makePgArray },\n\tdatemultirange: { normalizeParamArray: makePgArray },\n\tdaterange: { normalizeParamArray: makePgArray },\n\tfloat8: { normalizeParamArray: makePgArray },\n\tgeography: { normalizeParamArray: makePgArray },\n\tinet: { normalizeParamArray: makePgArray },\n\tint4multirange: { normalizeParamArray: makePgArray },\n\tint4range: { normalizeParamArray: makePgArray },\n\tint8multirange: { normalizeParamArray: makePgArray },\n\tint8range: { normalizeParamArray: makePgArray },\n\tlseg: { normalizeParamArray: makePgArray },\n\tmacaddr: { normalizeParamArray: makePgArray },\n\tmoney: { normalizeParamArray: makePgArray },\n\tnummultirange: { normalizeParamArray: makePgArray },\n\tnumrange: { normalizeParamArray: makePgArray },\n\toid: { normalizeParamArray: makePgArray },\n\tpath: { normalizeParamArray: makePgArray },\n\tpolygon: { normalizeParamArray: makePgArray },\n\traster: { normalizeParamArray: makePgArray },\n\tregclass: { normalizeParamArray: makePgArray },\n\tregconfig: { normalizeParamArray: makePgArray },\n\tregdictionary: { normalizeParamArray: makePgArray },\n\tregnamespace: { normalizeParamArray: makePgArray },\n\tregoper: { normalizeParamArray: makePgArray },\n\tregoperator: { normalizeParamArray: makePgArray },\n\tregproc: { normalizeParamArray: makePgArray },\n\tregprocedure: { normalizeParamArray: makePgArray },\n\tregrole: { normalizeParamArray: makePgArray },\n\tregtype: { normalizeParamArray: makePgArray },\n\tserial: { normalizeParamArray: makePgArray },\n\tsmallint: { normalizeParamArray: makePgArray },\n\tsmallserial: { normalizeParamArray: makePgArray },\n\ttext: { normalizeParamArray: makePgArray },\n\ttime: { normalizeParamArray: makePgArray },\n\ttimetz: { normalizeParamArray: makePgArray },\n\ttsmultirange: { normalizeParamArray: makePgArray },\n\ttsquery: { normalizeParamArray: makePgArray },\n\ttsrange: { normalizeParamArray: makePgArray },\n\ttstzmultirange: { normalizeParamArray: makePgArray },\n\ttstzrange: { normalizeParamArray: makePgArray },\n\ttsvector: { normalizeParamArray: makePgArray },\n\tvarbit: { normalizeParamArray: makePgArray },\n\tvarchar: { normalizeParamArray: makePgArray },\n\txml: { normalizeParamArray: makePgArray },\n\tbytea: { normalizeParamArray: makePgArray },\n\tenum: { normalizeParamArray: makePgArray },\n\tjson: {\n\t\tnormalizeParamArray: arrayCompatNormalizeInput((v) => JSON.stringify(v), true),\n\t},\n\tjsonb: {\n\t\tnormalizeParamArray: arrayCompatNormalizeInput((v) => JSON.stringify(v), true),\n\t},\n\tgeometry: {\n\t\tnormalizeArray: parsePgArrayAndNormalize(parseGeometryXY),\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'geometry:tuple': {\n\t\tnormalizeArray: parsePgArrayAndNormalize(parseGeometryTuple),\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tinterval: {\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tline: {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'line:tuple': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tmacaddr8: {\n\t\tcastArrayInJson: castToTextArr,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tnumeric: { normalizeParamArray: makePgArray },\n\t'numeric:number': { normalizeParamArray: makePgArray },\n\t'numeric:bigint': { normalizeParamArray: makePgArray },\n\tpoint: {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'point:tuple': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\thalfvec: { normalizeParamArray: makePgArray },\n\tsparsevec: {\n\t\tnormalizeArray: parsePgArray,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tvector: { normalizeParamArray: makePgArray },\n});\n\nexport class BunSQLDatabase<\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgAsyncDatabase<BunSQLQueryResultHKT, TRelations> {\n\tstatic override readonly [entityKind]: string = 'BunSQLDatabase';\n}\n\nfunction construct<\n\tTRelations extends AnyRelations = EmptyRelations,\n>(\n\tclient: SQL,\n\tconfig: DrizzlePgConfig<TRelations> = {},\n): BunSQLDatabase<TRelations> & {\n\t$client: SQL;\n} {\n\tclient.options.bigint = true;\n\tconst dialect = new PgDialect({\n\t\tuseJitMappers: config.useJitMappers,\n\t\tcodecs: config.codecs ?? bunSqlPgCodecs,\n\t});\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\tconst relations = config.relations ?? {} as TRelations;\n\tconst session = new BunSQLSession(client, dialect, relations, {\n\t\tlogger,\n\t\tcache: config.cache,\n\t});\n\tconst db = new BunSQLDatabase(dialect, session, relations, false, true) as BunSQLDatabase<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\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends SQL = SQL,\n>(\n\t...params: [\n\t\tstring,\n\t] | [\n\t\tstring,\n\t\tDrizzlePgConfig<TRelations>,\n\t] | [\n\t\t(\n\t\t\t& DrizzlePgConfig<TRelations>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ url?: string } & SQL.Options);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): BunSQLDatabase<TRelations> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = new SQL(params[0]);\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tconst { connection, client, ...DrizzlePgConfig } = params[0] as\n\t\t& {\n\t\t\tconnection?: { url?: string } & SQL.Options;\n\t\t\tclient?: TClient;\n\t\t}\n\t\t& DrizzlePgConfig<TRelations>;\n\n\tif (client) return construct(client, DrizzlePgConfig) as any;\n\n\tif (typeof connection === 'object' && connection.url !== undefined) {\n\t\tconst { url, ...config } = connection;\n\n\t\tconst instance = new SQL({ url, ...config });\n\t\treturn construct(instance, DrizzlePgConfig) as any;\n\t}\n\n\tconst instance = new SQL(connection);\n\treturn construct(instance, DrizzlePgConfig) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<\n\t\tTRelations extends AnyRelations = EmptyRelations,\n\t>(\n\t\tconfig?: DrizzlePgConfig<TRelations>,\n\t): BunSQLDatabase<TRelations> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({\n\t\t\toptions: {\n\t\t\t\tparsers: {},\n\t\t\t\tserializers: {},\n\t\t\t},\n\t\t} as any, config) as any;\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -190,7 +190,7 @@ function construct(client, config = {}) {
|
|
|
190
190
|
const db = new BunSQLDatabase(dialect, new BunSQLSession(client, dialect, relations, {
|
|
191
191
|
logger,
|
|
192
192
|
cache: config.cache
|
|
193
|
-
}), relations);
|
|
193
|
+
}), relations, false, true);
|
|
194
194
|
db.$client = client;
|
|
195
195
|
db.$cache = config.cache;
|
|
196
196
|
if (db.$cache) db.$cache["invalidate"] = config.cache?.onMutate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.js","names":[],"sources":["../../../src/bun-sql/postgres/driver.ts"],"sourcesContent":["/// <reference types=\"bun-types\" />\n\nimport { SQL } from 'bun';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { makePgArray, parsePgArray } from '~/pg-core/array.ts';\nimport { PgAsyncDatabase } from '~/pg-core/async/db.ts';\nimport {\n\tarrayCompatNormalize,\n\tarrayCompatNormalizeInput,\n\tcastToText,\n\tcastToTextArr,\n\tparseGeometryTuple,\n\tparseGeometryXY,\n\tparsePgArrayAndNormalize,\n\trefineGenericPgCodecs,\n} from '~/pg-core/codecs.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport type { DrizzlePgConfig } from '~/pg-core/utils.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport type { BunSQLQueryResultHKT } from './session.ts';\nimport { BunSQLSession } from './session.ts';\n\nexport const bunSqlPgCodecs = refineGenericPgCodecs({\n\tdate: { normalizeParamArray: makePgArray },\n\t'date:string': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tuuid: {\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\ttimestamp: { normalizeParamArray: makePgArray },\n\ttimestamptz: { normalizeParamArray: makePgArray },\n\t'timestamp:string': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'timestamptz:string': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tfloat4: {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalize: Number,\n\t\tnormalizeArray: arrayCompatNormalize(Number),\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tbigint: {\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'bigint:number': { normalizeParamArray: makePgArray },\n\t'bigint:string': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tbigserial: { normalizeParamArray: makePgArray },\n\t'bigserial:number': { normalizeParamArray: makePgArray },\n\tint: {\n\t\tnormalizeArray: (\n\t\t\tvalue: any,\n\t\t\tdimensions: number,\n\t\t) => {\n\t\t\tif (dimensions <= 1) {\n\t\t\t\t// eslint-disable-next-line drizzle-internal/no-instanceof\n\t\t\t\tif (value instanceof Int32Array) {\n\t\t\t\t\treturn Array.from(value) as any;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tconst stack: { arr: any; depth: number }[] = [{ arr: value, depth: 1 }];\n\n\t\t\twhile (stack.length > 0) {\n\t\t\t\tconst { arr, depth } = stack.pop()!;\n\n\t\t\t\tif (depth === dimensions - 1) {\n\t\t\t\t\tfor (let i = 0; i < arr.length; i++) {\n\t\t\t\t\t\tconst leaf = arr[i];\n\t\t\t\t\t\t// eslint-disable-next-line drizzle-internal/no-instanceof\n\t\t\t\t\t\tif (leaf instanceof Int32Array) {\n\t\t\t\t\t\t\tarr[i] = Array.from(leaf);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (let i = 0; i < arr.length; i++) {\n\t\t\t\t\t\tstack.push({ arr: arr[i], depth: depth + 1 });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\n\tbit: { normalizeParamArray: makePgArray },\n\tbool: { normalizeParamArray: makePgArray },\n\tbox: { normalizeParamArray: makePgArray },\n\tbox2d: { normalizeParamArray: makePgArray },\n\tbox3d: { normalizeParamArray: makePgArray },\n\tchar: { normalizeParamArray: makePgArray },\n\tcidr: { normalizeParamArray: makePgArray },\n\tcircle: { normalizeParamArray: makePgArray },\n\tdatemultirange: { normalizeParamArray: makePgArray },\n\tdaterange: { normalizeParamArray: makePgArray },\n\tfloat8: { normalizeParamArray: makePgArray },\n\tgeography: { normalizeParamArray: makePgArray },\n\tinet: { normalizeParamArray: makePgArray },\n\tint4multirange: { normalizeParamArray: makePgArray },\n\tint4range: { normalizeParamArray: makePgArray },\n\tint8multirange: { normalizeParamArray: makePgArray },\n\tint8range: { normalizeParamArray: makePgArray },\n\tlseg: { normalizeParamArray: makePgArray },\n\tmacaddr: { normalizeParamArray: makePgArray },\n\tmoney: { normalizeParamArray: makePgArray },\n\tnummultirange: { normalizeParamArray: makePgArray },\n\tnumrange: { normalizeParamArray: makePgArray },\n\toid: { normalizeParamArray: makePgArray },\n\tpath: { normalizeParamArray: makePgArray },\n\tpolygon: { normalizeParamArray: makePgArray },\n\traster: { normalizeParamArray: makePgArray },\n\tregclass: { normalizeParamArray: makePgArray },\n\tregconfig: { normalizeParamArray: makePgArray },\n\tregdictionary: { normalizeParamArray: makePgArray },\n\tregnamespace: { normalizeParamArray: makePgArray },\n\tregoper: { normalizeParamArray: makePgArray },\n\tregoperator: { normalizeParamArray: makePgArray },\n\tregproc: { normalizeParamArray: makePgArray },\n\tregprocedure: { normalizeParamArray: makePgArray },\n\tregrole: { normalizeParamArray: makePgArray },\n\tregtype: { normalizeParamArray: makePgArray },\n\tserial: { normalizeParamArray: makePgArray },\n\tsmallint: { normalizeParamArray: makePgArray },\n\tsmallserial: { normalizeParamArray: makePgArray },\n\ttext: { normalizeParamArray: makePgArray },\n\ttime: { normalizeParamArray: makePgArray },\n\ttimetz: { normalizeParamArray: makePgArray },\n\ttsmultirange: { normalizeParamArray: makePgArray },\n\ttsquery: { normalizeParamArray: makePgArray },\n\ttsrange: { normalizeParamArray: makePgArray },\n\ttstzmultirange: { normalizeParamArray: makePgArray },\n\ttstzrange: { normalizeParamArray: makePgArray },\n\ttsvector: { normalizeParamArray: makePgArray },\n\tvarbit: { normalizeParamArray: makePgArray },\n\tvarchar: { normalizeParamArray: makePgArray },\n\txml: { normalizeParamArray: makePgArray },\n\tbytea: { normalizeParamArray: makePgArray },\n\tenum: { normalizeParamArray: makePgArray },\n\tjson: {\n\t\tnormalizeParamArray: arrayCompatNormalizeInput((v) => JSON.stringify(v), true),\n\t},\n\tjsonb: {\n\t\tnormalizeParamArray: arrayCompatNormalizeInput((v) => JSON.stringify(v), true),\n\t},\n\tgeometry: {\n\t\tnormalizeArray: parsePgArrayAndNormalize(parseGeometryXY),\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'geometry:tuple': {\n\t\tnormalizeArray: parsePgArrayAndNormalize(parseGeometryTuple),\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tinterval: {\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tline: {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'line:tuple': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tmacaddr8: {\n\t\tcastArrayInJson: castToTextArr,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tnumeric: { normalizeParamArray: makePgArray },\n\t'numeric:number': { normalizeParamArray: makePgArray },\n\t'numeric:bigint': { normalizeParamArray: makePgArray },\n\tpoint: {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'point:tuple': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\thalfvec: { normalizeParamArray: makePgArray },\n\tsparsevec: {\n\t\tnormalizeArray: parsePgArray,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tvector: { normalizeParamArray: makePgArray },\n});\n\nexport class BunSQLDatabase<\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgAsyncDatabase<BunSQLQueryResultHKT, TRelations> {\n\tstatic override readonly [entityKind]: string = 'BunSQLDatabase';\n}\n\nfunction construct<\n\tTRelations extends AnyRelations = EmptyRelations,\n>(\n\tclient: SQL,\n\tconfig: DrizzlePgConfig<TRelations> = {},\n): BunSQLDatabase<TRelations> & {\n\t$client: SQL;\n} {\n\tclient.options.bigint = true;\n\tconst dialect = new PgDialect({\n\t\tuseJitMappers: config.useJitMappers,\n\t\tcodecs: config.codecs ?? bunSqlPgCodecs,\n\t});\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\tconst relations = config.relations ?? {} as TRelations;\n\tconst session = new BunSQLSession(client, dialect, relations, {\n\t\tlogger,\n\t\tcache: config.cache,\n\t});\n\tconst db = new BunSQLDatabase(dialect, session, relations) as BunSQLDatabase<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\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends SQL = SQL,\n>(\n\t...params: [\n\t\tstring,\n\t] | [\n\t\tstring,\n\t\tDrizzlePgConfig<TRelations>,\n\t] | [\n\t\t(\n\t\t\t& DrizzlePgConfig<TRelations>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ url?: string } & SQL.Options);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): BunSQLDatabase<TRelations> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = new SQL(params[0]);\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tconst { connection, client, ...DrizzlePgConfig } = params[0] as\n\t\t& {\n\t\t\tconnection?: { url?: string } & SQL.Options;\n\t\t\tclient?: TClient;\n\t\t}\n\t\t& DrizzlePgConfig<TRelations>;\n\n\tif (client) return construct(client, DrizzlePgConfig) as any;\n\n\tif (typeof connection === 'object' && connection.url !== undefined) {\n\t\tconst { url, ...config } = connection;\n\n\t\tconst instance = new SQL({ url, ...config });\n\t\treturn construct(instance, DrizzlePgConfig) as any;\n\t}\n\n\tconst instance = new SQL(connection);\n\treturn construct(instance, DrizzlePgConfig) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<\n\t\tTRelations extends AnyRelations = EmptyRelations,\n\t>(\n\t\tconfig?: DrizzlePgConfig<TRelations>,\n\t): BunSQLDatabase<TRelations> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({\n\t\t\toptions: {\n\t\t\t\tparsers: {},\n\t\t\t\tserializers: {},\n\t\t\t},\n\t\t} as any, config) as any;\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"driver.js","names":[],"sources":["../../../src/bun-sql/postgres/driver.ts"],"sourcesContent":["/// <reference types=\"bun-types\" />\n\nimport { SQL } from 'bun';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { makePgArray, parsePgArray } from '~/pg-core/array.ts';\nimport { PgAsyncDatabase } from '~/pg-core/async/db.ts';\nimport {\n\tarrayCompatNormalize,\n\tarrayCompatNormalizeInput,\n\tcastToText,\n\tcastToTextArr,\n\tparseGeometryTuple,\n\tparseGeometryXY,\n\tparsePgArrayAndNormalize,\n\trefineGenericPgCodecs,\n} from '~/pg-core/codecs.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport type { DrizzlePgConfig } from '~/pg-core/utils.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport type { BunSQLQueryResultHKT } from './session.ts';\nimport { BunSQLSession } from './session.ts';\n\nexport const bunSqlPgCodecs = refineGenericPgCodecs({\n\tdate: { normalizeParamArray: makePgArray },\n\t'date:string': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tuuid: {\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\ttimestamp: { normalizeParamArray: makePgArray },\n\ttimestamptz: { normalizeParamArray: makePgArray },\n\t'timestamp:string': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'timestamptz:string': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tfloat4: {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalize: Number,\n\t\tnormalizeArray: arrayCompatNormalize(Number),\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tbigint: {\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'bigint:number': { normalizeParamArray: makePgArray },\n\t'bigint:string': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tbigserial: { normalizeParamArray: makePgArray },\n\t'bigserial:number': { normalizeParamArray: makePgArray },\n\tint: {\n\t\tnormalizeArray: (\n\t\t\tvalue: any,\n\t\t\tdimensions: number,\n\t\t) => {\n\t\t\tif (dimensions <= 1) {\n\t\t\t\t// eslint-disable-next-line drizzle-internal/no-instanceof\n\t\t\t\tif (value instanceof Int32Array) {\n\t\t\t\t\treturn Array.from(value) as any;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tconst stack: { arr: any; depth: number }[] = [{ arr: value, depth: 1 }];\n\n\t\t\twhile (stack.length > 0) {\n\t\t\t\tconst { arr, depth } = stack.pop()!;\n\n\t\t\t\tif (depth === dimensions - 1) {\n\t\t\t\t\tfor (let i = 0; i < arr.length; i++) {\n\t\t\t\t\t\tconst leaf = arr[i];\n\t\t\t\t\t\t// eslint-disable-next-line drizzle-internal/no-instanceof\n\t\t\t\t\t\tif (leaf instanceof Int32Array) {\n\t\t\t\t\t\t\tarr[i] = Array.from(leaf);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (let i = 0; i < arr.length; i++) {\n\t\t\t\t\t\tstack.push({ arr: arr[i], depth: depth + 1 });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\n\tbit: { normalizeParamArray: makePgArray },\n\tbool: { normalizeParamArray: makePgArray },\n\tbox: { normalizeParamArray: makePgArray },\n\tbox2d: { normalizeParamArray: makePgArray },\n\tbox3d: { normalizeParamArray: makePgArray },\n\tchar: { normalizeParamArray: makePgArray },\n\tcidr: { normalizeParamArray: makePgArray },\n\tcircle: { normalizeParamArray: makePgArray },\n\tdatemultirange: { normalizeParamArray: makePgArray },\n\tdaterange: { normalizeParamArray: makePgArray },\n\tfloat8: { normalizeParamArray: makePgArray },\n\tgeography: { normalizeParamArray: makePgArray },\n\tinet: { normalizeParamArray: makePgArray },\n\tint4multirange: { normalizeParamArray: makePgArray },\n\tint4range: { normalizeParamArray: makePgArray },\n\tint8multirange: { normalizeParamArray: makePgArray },\n\tint8range: { normalizeParamArray: makePgArray },\n\tlseg: { normalizeParamArray: makePgArray },\n\tmacaddr: { normalizeParamArray: makePgArray },\n\tmoney: { normalizeParamArray: makePgArray },\n\tnummultirange: { normalizeParamArray: makePgArray },\n\tnumrange: { normalizeParamArray: makePgArray },\n\toid: { normalizeParamArray: makePgArray },\n\tpath: { normalizeParamArray: makePgArray },\n\tpolygon: { normalizeParamArray: makePgArray },\n\traster: { normalizeParamArray: makePgArray },\n\tregclass: { normalizeParamArray: makePgArray },\n\tregconfig: { normalizeParamArray: makePgArray },\n\tregdictionary: { normalizeParamArray: makePgArray },\n\tregnamespace: { normalizeParamArray: makePgArray },\n\tregoper: { normalizeParamArray: makePgArray },\n\tregoperator: { normalizeParamArray: makePgArray },\n\tregproc: { normalizeParamArray: makePgArray },\n\tregprocedure: { normalizeParamArray: makePgArray },\n\tregrole: { normalizeParamArray: makePgArray },\n\tregtype: { normalizeParamArray: makePgArray },\n\tserial: { normalizeParamArray: makePgArray },\n\tsmallint: { normalizeParamArray: makePgArray },\n\tsmallserial: { normalizeParamArray: makePgArray },\n\ttext: { normalizeParamArray: makePgArray },\n\ttime: { normalizeParamArray: makePgArray },\n\ttimetz: { normalizeParamArray: makePgArray },\n\ttsmultirange: { normalizeParamArray: makePgArray },\n\ttsquery: { normalizeParamArray: makePgArray },\n\ttsrange: { normalizeParamArray: makePgArray },\n\ttstzmultirange: { normalizeParamArray: makePgArray },\n\ttstzrange: { normalizeParamArray: makePgArray },\n\ttsvector: { normalizeParamArray: makePgArray },\n\tvarbit: { normalizeParamArray: makePgArray },\n\tvarchar: { normalizeParamArray: makePgArray },\n\txml: { normalizeParamArray: makePgArray },\n\tbytea: { normalizeParamArray: makePgArray },\n\tenum: { normalizeParamArray: makePgArray },\n\tjson: {\n\t\tnormalizeParamArray: arrayCompatNormalizeInput((v) => JSON.stringify(v), true),\n\t},\n\tjsonb: {\n\t\tnormalizeParamArray: arrayCompatNormalizeInput((v) => JSON.stringify(v), true),\n\t},\n\tgeometry: {\n\t\tnormalizeArray: parsePgArrayAndNormalize(parseGeometryXY),\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'geometry:tuple': {\n\t\tnormalizeArray: parsePgArrayAndNormalize(parseGeometryTuple),\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tinterval: {\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tline: {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'line:tuple': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tmacaddr8: {\n\t\tcastArrayInJson: castToTextArr,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tnumeric: { normalizeParamArray: makePgArray },\n\t'numeric:number': { normalizeParamArray: makePgArray },\n\t'numeric:bigint': { normalizeParamArray: makePgArray },\n\tpoint: {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'point:tuple': {\n\t\tcast: castToText,\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\thalfvec: { normalizeParamArray: makePgArray },\n\tsparsevec: {\n\t\tnormalizeArray: parsePgArray,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\tvector: { normalizeParamArray: makePgArray },\n});\n\nexport class BunSQLDatabase<\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgAsyncDatabase<BunSQLQueryResultHKT, TRelations> {\n\tstatic override readonly [entityKind]: string = 'BunSQLDatabase';\n}\n\nfunction construct<\n\tTRelations extends AnyRelations = EmptyRelations,\n>(\n\tclient: SQL,\n\tconfig: DrizzlePgConfig<TRelations> = {},\n): BunSQLDatabase<TRelations> & {\n\t$client: SQL;\n} {\n\tclient.options.bigint = true;\n\tconst dialect = new PgDialect({\n\t\tuseJitMappers: config.useJitMappers,\n\t\tcodecs: config.codecs ?? bunSqlPgCodecs,\n\t});\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\tconst relations = config.relations ?? {} as TRelations;\n\tconst session = new BunSQLSession(client, dialect, relations, {\n\t\tlogger,\n\t\tcache: config.cache,\n\t});\n\tconst db = new BunSQLDatabase(dialect, session, relations, false, true) as BunSQLDatabase<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\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends SQL = SQL,\n>(\n\t...params: [\n\t\tstring,\n\t] | [\n\t\tstring,\n\t\tDrizzlePgConfig<TRelations>,\n\t] | [\n\t\t(\n\t\t\t& DrizzlePgConfig<TRelations>\n\t\t\t& ({\n\t\t\t\tconnection: string | ({ url?: string } & SQL.Options);\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): BunSQLDatabase<TRelations> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = new SQL(params[0]);\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tconst { connection, client, ...DrizzlePgConfig } = params[0] as\n\t\t& {\n\t\t\tconnection?: { url?: string } & SQL.Options;\n\t\t\tclient?: TClient;\n\t\t}\n\t\t& DrizzlePgConfig<TRelations>;\n\n\tif (client) return construct(client, DrizzlePgConfig) as any;\n\n\tif (typeof connection === 'object' && connection.url !== undefined) {\n\t\tconst { url, ...config } = connection;\n\n\t\tconst instance = new SQL({ url, ...config });\n\t\treturn construct(instance, DrizzlePgConfig) as any;\n\t}\n\n\tconst instance = new SQL(connection);\n\treturn construct(instance, DrizzlePgConfig) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<\n\t\tTRelations extends AnyRelations = EmptyRelations,\n\t>(\n\t\tconfig?: DrizzlePgConfig<TRelations>,\n\t): BunSQLDatabase<TRelations> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({\n\t\t\toptions: {\n\t\t\t\tparsers: {},\n\t\t\t\tserializers: {},\n\t\t\t},\n\t\t} as any, config) as any;\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -19,12 +19,17 @@ var BunSQLSession = class BunSQLSession extends __pg_core_async_session_ts.PgAsy
|
|
|
19
19
|
this.cache = options.cache ?? new __cache_core_index_ts.NoopCache();
|
|
20
20
|
}
|
|
21
21
|
prepareQuery(query, mode, _name, mapper, queryMetadata, cacheConfig) {
|
|
22
|
-
const
|
|
22
|
+
const tagged = query._sql ? query._sql : null;
|
|
23
|
+
return new __pg_core_async_session_ts.PgAsyncPreparedQuery(tagged ? async (params) => {
|
|
24
|
+
const ps = params ? params : [];
|
|
25
|
+
if (mode === "arrays") return this.client(tagged, ...ps).values();
|
|
26
|
+
if (mode === "objects") return this.client(tagged, ...ps);
|
|
27
|
+
return this.client(tagged, ...ps);
|
|
28
|
+
} : async (params) => {
|
|
23
29
|
if (mode === "arrays") return this.client.unsafe(query.sql, params).values();
|
|
24
30
|
if (mode === "objects") return this.client.unsafe(query.sql, params);
|
|
25
31
|
return this.client.unsafe(query.sql, params);
|
|
26
|
-
};
|
|
27
|
-
return new __pg_core_async_session_ts.PgAsyncPreparedQuery(executor, query, mapper, mode, this.logger, this.cache, queryMetadata, cacheConfig);
|
|
32
|
+
}, query, mapper, mode, this.logger, this.cache, queryMetadata, cacheConfig);
|
|
28
33
|
}
|
|
29
34
|
transaction(transaction, config) {
|
|
30
35
|
return this.client.begin(async (client) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.cjs","names":["PgAsyncSession","entityKind","NoopLogger","NoopCache","PgAsyncPreparedQuery","PgAsyncTransaction"],"sources":["../../../src/bun-sql/postgres/session.ts"],"sourcesContent":["/// <reference types=\"bun-types\" />\n\nimport type { SavepointSQL, SQL, TransactionSQL } from 'bun';\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 { PgAsyncPreparedQuery, PgAsyncSession, PgAsyncTransaction } from '~/pg-core/async/session.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '~/pg-core/session.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { Query } from '~/sql/sql.ts';\n\nexport interface BunSQLSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class BunSQLSession<\n\tTSQL extends SQL,\n\tTRelations extends AnyRelations,\n> extends PgAsyncSession<BunSQLQueryResultHKT, TRelations> {\n\tstatic override readonly [entityKind]: string = 'BunSQLSession';\n\n\tlogger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\treadonly client: TSQL,\n\t\tdialect: PgDialect,\n\t\tprivate relations: TRelations,\n\t\t/** @internal */\n\t\treadonly options: BunSQLSessionOptions = {},\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 PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tmode: 'arrays' | 'objects' | 'raw',\n\t\t_name: string | boolean,\n\t\tmapper: ((rows: any[]) => any) | undefined,\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): PgAsyncPreparedQuery<T> {\n\t\tconst executor = async (params?: unknown[]) => {\n\t\t\tif (mode === 'arrays') {\n\t\t\t\treturn this.client.unsafe(query.sql, params).values();\n\t\t\t}\n\t\t\tif (mode === 'objects') {\n\t\t\t\treturn this.client.unsafe(query.sql, params);\n\t\t\t}\n\n\t\t\treturn this.client.unsafe(query.sql, params);\n\t\t};\n\n\t\treturn new PgAsyncPreparedQuery<T>(\n\t\t\texecutor,\n\t\t\tquery,\n\t\t\tmapper,\n\t\t\tmode,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: BunSQLTransaction<TRelations>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig,\n\t): Promise<T> {\n\t\treturn this.client.begin(async (client) => {\n\t\t\tconst session = new BunSQLSession<TransactionSQL, TRelations>(\n\t\t\t\tclient,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.relations,\n\t\t\t\tthis.options,\n\t\t\t);\n\t\t\tconst tx = new BunSQLTransaction(this.dialect, session, this.relations);\n\t\t\tif (config) {\n\t\t\t\tawait tx.setTransaction(config);\n\t\t\t}\n\t\t\treturn transaction(tx);\n\t\t}) as Promise<T>;\n\t}\n}\n\nexport class BunSQLTransaction<\n\tTRelations extends AnyRelations,\n> extends PgAsyncTransaction<BunSQLQueryResultHKT, TRelations> {\n\tstatic override readonly [entityKind]: string = 'BunSQLTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\t/** @internal */\n\t\toverride readonly session: BunSQLSession<\n\t\t\tTransactionSQL | SavepointSQL,\n\t\t\tTRelations\n\t\t>,\n\t\trelations: TRelations,\n\t\tnestedIndex = 0,\n\t) {\n\t\tsuper(dialect, session, relations, nestedIndex, false);\n\t}\n\n\toverride transaction = <T>(\n\t\ttransaction: (tx: BunSQLTransaction<TRelations>) => Promise<T>,\n\t): Promise<T> => {\n\t\treturn (this.session.client as TransactionSQL).savepoint((client) => {\n\t\t\tconst session = new BunSQLSession<SavepointSQL, TRelations>(\n\t\t\t\tclient,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis._.relations,\n\t\t\t\tthis.session.options,\n\t\t\t);\n\t\t\tconst tx = new BunSQLTransaction<TRelations>(\n\t\t\t\tthis.dialect,\n\t\t\t\tsession,\n\t\t\t\tthis._.relations,\n\t\t\t);\n\t\t\treturn transaction(tx);\n\t\t}) as Promise<T>;\n\t};\n}\n\nexport interface BunSQLQueryResultHKT extends PgQueryResultHKT {\n\ttype: this['row'][];\n}\n"],"mappings":";;;;;;;;AAmBA,IAAa,gBAAb,MAAa,sBAGHA,0CAAiD;CAC1D,QAA0BC,0BAAsB;CAEhD;CACA,AAAQ;CAER,YACC,AAAS,QACT,SACA,AAAQ,WAER,AAAS,UAAgC,EAAE,EAC1C;AACD,QAAM,QAAQ;EANL;EAED;EAEC;AAGT,OAAK,SAAS,QAAQ,UAAU,IAAIC,wBAAY;AAChD,OAAK,QAAQ,QAAQ,SAAS,IAAIC,iCAAW;;CAG9C,aACC,OACA,MACA,OACA,QACA,eAIA,aAC0B;EAC1B,MAAM,
|
|
1
|
+
{"version":3,"file":"session.cjs","names":["PgAsyncSession","entityKind","NoopLogger","NoopCache","PgAsyncPreparedQuery","PgAsyncTransaction"],"sources":["../../../src/bun-sql/postgres/session.ts"],"sourcesContent":["/// <reference types=\"bun-types\" />\n\nimport type { SavepointSQL, SQL, TransactionSQL } from 'bun';\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 { PgAsyncPreparedQuery, PgAsyncSession, PgAsyncTransaction } from '~/pg-core/async/session.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '~/pg-core/session.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { Query } from '~/sql/sql.ts';\n\nexport interface BunSQLSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class BunSQLSession<\n\tTSQL extends SQL,\n\tTRelations extends AnyRelations,\n> extends PgAsyncSession<BunSQLQueryResultHKT, TRelations> {\n\tstatic override readonly [entityKind]: string = 'BunSQLSession';\n\n\tlogger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\treadonly client: TSQL,\n\t\tdialect: PgDialect,\n\t\tprivate relations: TRelations,\n\t\t/** @internal */\n\t\treadonly options: BunSQLSessionOptions = {},\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 PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tmode: 'arrays' | 'objects' | 'raw',\n\t\t_name: string | boolean,\n\t\tmapper: ((rows: any[]) => any) | undefined,\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): PgAsyncPreparedQuery<T> {\n\t\tconst tagged = query._sql ? query._sql : null;\n\t\tconst executor = tagged\n\t\t\t? async (params?: unknown[]) => {\n\t\t\t\tconst ps = params ? params : [];\n\t\t\t\tif (mode === 'arrays') {\n\t\t\t\t\treturn this.client(tagged, ...ps).values();\n\t\t\t\t}\n\t\t\t\tif (mode === 'objects') {\n\t\t\t\t\treturn this.client(tagged, ...ps);\n\t\t\t\t}\n\t\t\t\treturn this.client(tagged, ...ps);\n\t\t\t}\n\t\t\t: async (params?: unknown[]) => {\n\t\t\t\tif (mode === 'arrays') {\n\t\t\t\t\treturn this.client.unsafe(query.sql, params).values();\n\t\t\t\t}\n\t\t\t\tif (mode === 'objects') {\n\t\t\t\t\treturn this.client.unsafe(query.sql, params);\n\t\t\t\t}\n\n\t\t\t\treturn this.client.unsafe(query.sql, params);\n\t\t\t};\n\n\t\treturn new PgAsyncPreparedQuery<T>(\n\t\t\texecutor,\n\t\t\tquery,\n\t\t\tmapper,\n\t\t\tmode,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: BunSQLTransaction<TRelations>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig,\n\t): Promise<T> {\n\t\treturn this.client.begin(async (client) => {\n\t\t\tconst session = new BunSQLSession<TransactionSQL, TRelations>(\n\t\t\t\tclient,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.relations,\n\t\t\t\tthis.options,\n\t\t\t);\n\t\t\tconst tx = new BunSQLTransaction(this.dialect, session, this.relations);\n\t\t\tif (config) {\n\t\t\t\tawait tx.setTransaction(config);\n\t\t\t}\n\t\t\treturn transaction(tx);\n\t\t}) as Promise<T>;\n\t}\n}\n\nexport class BunSQLTransaction<\n\tTRelations extends AnyRelations,\n> extends PgAsyncTransaction<BunSQLQueryResultHKT, TRelations> {\n\tstatic override readonly [entityKind]: string = 'BunSQLTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\t/** @internal */\n\t\toverride readonly session: BunSQLSession<\n\t\t\tTransactionSQL | SavepointSQL,\n\t\t\tTRelations\n\t\t>,\n\t\trelations: TRelations,\n\t\tnestedIndex = 0,\n\t) {\n\t\tsuper(dialect, session, relations, nestedIndex, false);\n\t}\n\n\toverride transaction = <T>(\n\t\ttransaction: (tx: BunSQLTransaction<TRelations>) => Promise<T>,\n\t): Promise<T> => {\n\t\treturn (this.session.client as TransactionSQL).savepoint((client) => {\n\t\t\tconst session = new BunSQLSession<SavepointSQL, TRelations>(\n\t\t\t\tclient,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis._.relations,\n\t\t\t\tthis.session.options,\n\t\t\t);\n\t\t\tconst tx = new BunSQLTransaction<TRelations>(\n\t\t\t\tthis.dialect,\n\t\t\t\tsession,\n\t\t\t\tthis._.relations,\n\t\t\t);\n\t\t\treturn transaction(tx);\n\t\t}) as Promise<T>;\n\t};\n}\n\nexport interface BunSQLQueryResultHKT extends PgQueryResultHKT {\n\ttype: this['row'][];\n}\n"],"mappings":";;;;;;;;AAmBA,IAAa,gBAAb,MAAa,sBAGHA,0CAAiD;CAC1D,QAA0BC,0BAAsB;CAEhD;CACA,AAAQ;CAER,YACC,AAAS,QACT,SACA,AAAQ,WAER,AAAS,UAAgC,EAAE,EAC1C;AACD,QAAM,QAAQ;EANL;EAED;EAEC;AAGT,OAAK,SAAS,QAAQ,UAAU,IAAIC,wBAAY;AAChD,OAAK,QAAQ,QAAQ,SAAS,IAAIC,iCAAW;;CAG9C,aACC,OACA,MACA,OACA,QACA,eAIA,aAC0B;EAC1B,MAAM,SAAS,MAAM,OAAO,MAAM,OAAO;AAuBzC,SAAO,IAAIC,gDAtBM,SACd,OAAO,WAAuB;GAC/B,MAAM,KAAK,SAAS,SAAS,EAAE;AAC/B,OAAI,SAAS,SACZ,QAAO,KAAK,OAAO,QAAQ,GAAG,GAAG,CAAC,QAAQ;AAE3C,OAAI,SAAS,UACZ,QAAO,KAAK,OAAO,QAAQ,GAAG,GAAG;AAElC,UAAO,KAAK,OAAO,QAAQ,GAAG,GAAG;MAEhC,OAAO,WAAuB;AAC/B,OAAI,SAAS,SACZ,QAAO,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO,CAAC,QAAQ;AAEtD,OAAI,SAAS,UACZ,QAAO,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO;AAG7C,UAAO,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO;KAK7C,OACA,QACA,MACA,KAAK,QACL,KAAK,OACL,eACA,YACA;;CAGF,AAAS,YACR,aACA,QACa;AACb,SAAO,KAAK,OAAO,MAAM,OAAO,WAAW;GAC1C,MAAM,UAAU,IAAI,cACnB,QACA,KAAK,SACL,KAAK,WACL,KAAK,QACL;GACD,MAAM,KAAK,IAAI,kBAAkB,KAAK,SAAS,SAAS,KAAK,UAAU;AACvE,OAAI,OACH,OAAM,GAAG,eAAe,OAAO;AAEhC,UAAO,YAAY,GAAG;IACrB;;;AAIJ,IAAa,oBAAb,MAAa,0BAEHC,8CAAqD;CAC9D,QAA0BJ,0BAAsB;CAEhD,YACC,SAEA,AAAkB,SAIlB,WACA,cAAc,GACb;AACD,QAAM,SAAS,SAAS,WAAW,aAAa,MAAM;EAPpC;;CAUnB,AAAS,eACR,gBACgB;AAChB,SAAQ,KAAK,QAAQ,OAA0B,WAAW,WAAW;GACpE,MAAM,UAAU,IAAI,cACnB,QACA,KAAK,SACL,KAAK,EAAE,WACP,KAAK,QAAQ,QACb;AAMD,UAAO,YALI,IAAI,kBACd,KAAK,SACL,SACA,KAAK,EAAE,UACP,CACqB;IACrB"}
|
|
@@ -17,12 +17,17 @@ var BunSQLSession = class BunSQLSession extends PgAsyncSession {
|
|
|
17
17
|
this.cache = options.cache ?? new NoopCache();
|
|
18
18
|
}
|
|
19
19
|
prepareQuery(query, mode, _name, mapper, queryMetadata, cacheConfig) {
|
|
20
|
-
const
|
|
20
|
+
const tagged = query._sql ? query._sql : null;
|
|
21
|
+
return new PgAsyncPreparedQuery(tagged ? async (params) => {
|
|
22
|
+
const ps = params ? params : [];
|
|
23
|
+
if (mode === "arrays") return this.client(tagged, ...ps).values();
|
|
24
|
+
if (mode === "objects") return this.client(tagged, ...ps);
|
|
25
|
+
return this.client(tagged, ...ps);
|
|
26
|
+
} : async (params) => {
|
|
21
27
|
if (mode === "arrays") return this.client.unsafe(query.sql, params).values();
|
|
22
28
|
if (mode === "objects") return this.client.unsafe(query.sql, params);
|
|
23
29
|
return this.client.unsafe(query.sql, params);
|
|
24
|
-
};
|
|
25
|
-
return new PgAsyncPreparedQuery(executor, query, mapper, mode, this.logger, this.cache, queryMetadata, cacheConfig);
|
|
30
|
+
}, query, mapper, mode, this.logger, this.cache, queryMetadata, cacheConfig);
|
|
26
31
|
}
|
|
27
32
|
transaction(transaction, config) {
|
|
28
33
|
return this.client.begin(async (client) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","names":[],"sources":["../../../src/bun-sql/postgres/session.ts"],"sourcesContent":["/// <reference types=\"bun-types\" />\n\nimport type { SavepointSQL, SQL, TransactionSQL } from 'bun';\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 { PgAsyncPreparedQuery, PgAsyncSession, PgAsyncTransaction } from '~/pg-core/async/session.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '~/pg-core/session.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { Query } from '~/sql/sql.ts';\n\nexport interface BunSQLSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class BunSQLSession<\n\tTSQL extends SQL,\n\tTRelations extends AnyRelations,\n> extends PgAsyncSession<BunSQLQueryResultHKT, TRelations> {\n\tstatic override readonly [entityKind]: string = 'BunSQLSession';\n\n\tlogger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\treadonly client: TSQL,\n\t\tdialect: PgDialect,\n\t\tprivate relations: TRelations,\n\t\t/** @internal */\n\t\treadonly options: BunSQLSessionOptions = {},\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 PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tmode: 'arrays' | 'objects' | 'raw',\n\t\t_name: string | boolean,\n\t\tmapper: ((rows: any[]) => any) | undefined,\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): PgAsyncPreparedQuery<T> {\n\t\tconst executor = async (params?: unknown[]) => {\n\t\t\tif (mode === 'arrays') {\n\t\t\t\treturn this.client.unsafe(query.sql, params).values();\n\t\t\t}\n\t\t\tif (mode === 'objects') {\n\t\t\t\treturn this.client.unsafe(query.sql, params);\n\t\t\t}\n\n\t\t\treturn this.client.unsafe(query.sql, params);\n\t\t};\n\n\t\treturn new PgAsyncPreparedQuery<T>(\n\t\t\texecutor,\n\t\t\tquery,\n\t\t\tmapper,\n\t\t\tmode,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: BunSQLTransaction<TRelations>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig,\n\t): Promise<T> {\n\t\treturn this.client.begin(async (client) => {\n\t\t\tconst session = new BunSQLSession<TransactionSQL, TRelations>(\n\t\t\t\tclient,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.relations,\n\t\t\t\tthis.options,\n\t\t\t);\n\t\t\tconst tx = new BunSQLTransaction(this.dialect, session, this.relations);\n\t\t\tif (config) {\n\t\t\t\tawait tx.setTransaction(config);\n\t\t\t}\n\t\t\treturn transaction(tx);\n\t\t}) as Promise<T>;\n\t}\n}\n\nexport class BunSQLTransaction<\n\tTRelations extends AnyRelations,\n> extends PgAsyncTransaction<BunSQLQueryResultHKT, TRelations> {\n\tstatic override readonly [entityKind]: string = 'BunSQLTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\t/** @internal */\n\t\toverride readonly session: BunSQLSession<\n\t\t\tTransactionSQL | SavepointSQL,\n\t\t\tTRelations\n\t\t>,\n\t\trelations: TRelations,\n\t\tnestedIndex = 0,\n\t) {\n\t\tsuper(dialect, session, relations, nestedIndex, false);\n\t}\n\n\toverride transaction = <T>(\n\t\ttransaction: (tx: BunSQLTransaction<TRelations>) => Promise<T>,\n\t): Promise<T> => {\n\t\treturn (this.session.client as TransactionSQL).savepoint((client) => {\n\t\t\tconst session = new BunSQLSession<SavepointSQL, TRelations>(\n\t\t\t\tclient,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis._.relations,\n\t\t\t\tthis.session.options,\n\t\t\t);\n\t\t\tconst tx = new BunSQLTransaction<TRelations>(\n\t\t\t\tthis.dialect,\n\t\t\t\tsession,\n\t\t\t\tthis._.relations,\n\t\t\t);\n\t\t\treturn transaction(tx);\n\t\t}) as Promise<T>;\n\t};\n}\n\nexport interface BunSQLQueryResultHKT extends PgQueryResultHKT {\n\ttype: this['row'][];\n}\n"],"mappings":";;;;;;AAmBA,IAAa,gBAAb,MAAa,sBAGH,eAAiD;CAC1D,QAA0B,cAAsB;CAEhD;CACA,AAAQ;CAER,YACC,AAAS,QACT,SACA,AAAQ,WAER,AAAS,UAAgC,EAAE,EAC1C;AACD,QAAM,QAAQ;EANL;EAED;EAEC;AAGT,OAAK,SAAS,QAAQ,UAAU,IAAI,YAAY;AAChD,OAAK,QAAQ,QAAQ,SAAS,IAAI,WAAW;;CAG9C,aACC,OACA,MACA,OACA,QACA,eAIA,aAC0B;EAC1B,MAAM,
|
|
1
|
+
{"version":3,"file":"session.js","names":[],"sources":["../../../src/bun-sql/postgres/session.ts"],"sourcesContent":["/// <reference types=\"bun-types\" />\n\nimport type { SavepointSQL, SQL, TransactionSQL } from 'bun';\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 { PgAsyncPreparedQuery, PgAsyncSession, PgAsyncTransaction } from '~/pg-core/async/session.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '~/pg-core/session.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { Query } from '~/sql/sql.ts';\n\nexport interface BunSQLSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class BunSQLSession<\n\tTSQL extends SQL,\n\tTRelations extends AnyRelations,\n> extends PgAsyncSession<BunSQLQueryResultHKT, TRelations> {\n\tstatic override readonly [entityKind]: string = 'BunSQLSession';\n\n\tlogger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\treadonly client: TSQL,\n\t\tdialect: PgDialect,\n\t\tprivate relations: TRelations,\n\t\t/** @internal */\n\t\treadonly options: BunSQLSessionOptions = {},\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 PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tmode: 'arrays' | 'objects' | 'raw',\n\t\t_name: string | boolean,\n\t\tmapper: ((rows: any[]) => any) | undefined,\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): PgAsyncPreparedQuery<T> {\n\t\tconst tagged = query._sql ? query._sql : null;\n\t\tconst executor = tagged\n\t\t\t? async (params?: unknown[]) => {\n\t\t\t\tconst ps = params ? params : [];\n\t\t\t\tif (mode === 'arrays') {\n\t\t\t\t\treturn this.client(tagged, ...ps).values();\n\t\t\t\t}\n\t\t\t\tif (mode === 'objects') {\n\t\t\t\t\treturn this.client(tagged, ...ps);\n\t\t\t\t}\n\t\t\t\treturn this.client(tagged, ...ps);\n\t\t\t}\n\t\t\t: async (params?: unknown[]) => {\n\t\t\t\tif (mode === 'arrays') {\n\t\t\t\t\treturn this.client.unsafe(query.sql, params).values();\n\t\t\t\t}\n\t\t\t\tif (mode === 'objects') {\n\t\t\t\t\treturn this.client.unsafe(query.sql, params);\n\t\t\t\t}\n\n\t\t\t\treturn this.client.unsafe(query.sql, params);\n\t\t\t};\n\n\t\treturn new PgAsyncPreparedQuery<T>(\n\t\t\texecutor,\n\t\t\tquery,\n\t\t\tmapper,\n\t\t\tmode,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: BunSQLTransaction<TRelations>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig,\n\t): Promise<T> {\n\t\treturn this.client.begin(async (client) => {\n\t\t\tconst session = new BunSQLSession<TransactionSQL, TRelations>(\n\t\t\t\tclient,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.relations,\n\t\t\t\tthis.options,\n\t\t\t);\n\t\t\tconst tx = new BunSQLTransaction(this.dialect, session, this.relations);\n\t\t\tif (config) {\n\t\t\t\tawait tx.setTransaction(config);\n\t\t\t}\n\t\t\treturn transaction(tx);\n\t\t}) as Promise<T>;\n\t}\n}\n\nexport class BunSQLTransaction<\n\tTRelations extends AnyRelations,\n> extends PgAsyncTransaction<BunSQLQueryResultHKT, TRelations> {\n\tstatic override readonly [entityKind]: string = 'BunSQLTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\t/** @internal */\n\t\toverride readonly session: BunSQLSession<\n\t\t\tTransactionSQL | SavepointSQL,\n\t\t\tTRelations\n\t\t>,\n\t\trelations: TRelations,\n\t\tnestedIndex = 0,\n\t) {\n\t\tsuper(dialect, session, relations, nestedIndex, false);\n\t}\n\n\toverride transaction = <T>(\n\t\ttransaction: (tx: BunSQLTransaction<TRelations>) => Promise<T>,\n\t): Promise<T> => {\n\t\treturn (this.session.client as TransactionSQL).savepoint((client) => {\n\t\t\tconst session = new BunSQLSession<SavepointSQL, TRelations>(\n\t\t\t\tclient,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis._.relations,\n\t\t\t\tthis.session.options,\n\t\t\t);\n\t\t\tconst tx = new BunSQLTransaction<TRelations>(\n\t\t\t\tthis.dialect,\n\t\t\t\tsession,\n\t\t\t\tthis._.relations,\n\t\t\t);\n\t\t\treturn transaction(tx);\n\t\t}) as Promise<T>;\n\t};\n}\n\nexport interface BunSQLQueryResultHKT extends PgQueryResultHKT {\n\ttype: this['row'][];\n}\n"],"mappings":";;;;;;AAmBA,IAAa,gBAAb,MAAa,sBAGH,eAAiD;CAC1D,QAA0B,cAAsB;CAEhD;CACA,AAAQ;CAER,YACC,AAAS,QACT,SACA,AAAQ,WAER,AAAS,UAAgC,EAAE,EAC1C;AACD,QAAM,QAAQ;EANL;EAED;EAEC;AAGT,OAAK,SAAS,QAAQ,UAAU,IAAI,YAAY;AAChD,OAAK,QAAQ,QAAQ,SAAS,IAAI,WAAW;;CAG9C,aACC,OACA,MACA,OACA,QACA,eAIA,aAC0B;EAC1B,MAAM,SAAS,MAAM,OAAO,MAAM,OAAO;AAuBzC,SAAO,IAAI,qBAtBM,SACd,OAAO,WAAuB;GAC/B,MAAM,KAAK,SAAS,SAAS,EAAE;AAC/B,OAAI,SAAS,SACZ,QAAO,KAAK,OAAO,QAAQ,GAAG,GAAG,CAAC,QAAQ;AAE3C,OAAI,SAAS,UACZ,QAAO,KAAK,OAAO,QAAQ,GAAG,GAAG;AAElC,UAAO,KAAK,OAAO,QAAQ,GAAG,GAAG;MAEhC,OAAO,WAAuB;AAC/B,OAAI,SAAS,SACZ,QAAO,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO,CAAC,QAAQ;AAEtD,OAAI,SAAS,UACZ,QAAO,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO;AAG7C,UAAO,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO;KAK7C,OACA,QACA,MACA,KAAK,QACL,KAAK,OACL,eACA,YACA;;CAGF,AAAS,YACR,aACA,QACa;AACb,SAAO,KAAK,OAAO,MAAM,OAAO,WAAW;GAC1C,MAAM,UAAU,IAAI,cACnB,QACA,KAAK,SACL,KAAK,WACL,KAAK,QACL;GACD,MAAM,KAAK,IAAI,kBAAkB,KAAK,SAAS,SAAS,KAAK,UAAU;AACvE,OAAI,OACH,OAAM,GAAG,eAAe,OAAO;AAEhC,UAAO,YAAY,GAAG;IACrB;;;AAIJ,IAAa,oBAAb,MAAa,0BAEH,mBAAqD;CAC9D,QAA0B,cAAsB;CAEhD,YACC,SAEA,AAAkB,SAIlB,WACA,cAAc,GACb;AACD,QAAM,SAAS,SAAS,WAAW,aAAa,MAAM;EAPpC;;CAUnB,AAAS,eACR,gBACgB;AAChB,SAAQ,KAAK,QAAQ,OAA0B,WAAW,WAAW;GACpE,MAAM,UAAU,IAAI,cACnB,QACA,KAAK,SACL,KAAK,EAAE,WACP,KAAK,QAAQ,QACb;AAMD,UAAO,YALI,IAAI,kBACd,KAAK,SACL,SACA,KAAK,EAAE,UACP,CACqB;IACrB"}
|
|
@@ -8,7 +8,7 @@ import * as Schema$1 from "effect/Schema";
|
|
|
8
8
|
//#region src/cache/core/cache-effect.d.ts
|
|
9
9
|
declare const EffectCache_base: Effect.Service.Class<EffectCache, "drizzle-orm/EffectCache", {
|
|
10
10
|
readonly sync: () => {
|
|
11
|
-
strategy: () => "
|
|
11
|
+
strategy: () => "explicit" | "all";
|
|
12
12
|
get: (key: string, tables: string[], isTag: boolean, isAutoInvalidate?: boolean | undefined) => Effect.Effect<any[] | undefined, EffectCacheError, never>;
|
|
13
13
|
put: (hashedQuery: string, response: any, tables: string[], isTag: boolean, config?: CacheConfig | undefined) => Effect.Effect<void, EffectCacheError, never>;
|
|
14
14
|
onMutate: (params: MutationOption) => Effect.Effect<void, EffectCacheError, never>;
|
|
@@ -8,7 +8,7 @@ import * as Schema$1 from "effect/Schema";
|
|
|
8
8
|
//#region src/cache/core/cache-effect.d.ts
|
|
9
9
|
declare const EffectCache_base: Effect.Service.Class<EffectCache, "drizzle-orm/EffectCache", {
|
|
10
10
|
readonly sync: () => {
|
|
11
|
-
strategy: () => "
|
|
11
|
+
strategy: () => "explicit" | "all";
|
|
12
12
|
get: (key: string, tables: string[], isTag: boolean, isAutoInvalidate?: boolean | undefined) => Effect.Effect<any[] | undefined, EffectCacheError, never>;
|
|
13
13
|
put: (hashedQuery: string, response: any, tables: string[], isTag: boolean, config?: CacheConfig | undefined) => Effect.Effect<void, EffectCacheError, never>;
|
|
14
14
|
onMutate: (params: MutationOption) => Effect.Effect<void, EffectCacheError, never>;
|
|
@@ -44,7 +44,7 @@ declare class UpstashCache extends Cache {
|
|
|
44
44
|
private luaScripts;
|
|
45
45
|
private internalConfig;
|
|
46
46
|
constructor(redis: Redis, config?: CacheConfig, useGlobally?: boolean | undefined);
|
|
47
|
-
strategy(): "
|
|
47
|
+
strategy(): "explicit" | "all";
|
|
48
48
|
private toInternalConfig;
|
|
49
49
|
get(key: string, tables: string[], isTag?: boolean, isAutoInvalidate?: boolean): Promise<any[] | undefined>;
|
|
50
50
|
put(key: string, response: any, tables: string[], isTag?: boolean, config?: CacheConfig): Promise<void>;
|
package/cache/upstash/cache.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ declare class UpstashCache extends Cache {
|
|
|
44
44
|
private luaScripts;
|
|
45
45
|
private internalConfig;
|
|
46
46
|
constructor(redis: Redis, config?: CacheConfig, useGlobally?: boolean | undefined);
|
|
47
|
-
strategy(): "
|
|
47
|
+
strategy(): "explicit" | "all";
|
|
48
48
|
private toInternalConfig;
|
|
49
49
|
get(key: string, tables: string[], isTag?: boolean, isAutoInvalidate?: boolean): Promise<any[] | undefined>;
|
|
50
50
|
put(key: string, response: any, tables: string[], isTag?: boolean, config?: CacheConfig): Promise<void>;
|
package/package.json
CHANGED
package/pg-core/async/db.cjs
CHANGED
|
@@ -19,9 +19,10 @@ let __pg_core_query_builders_index_ts = require("../query-builders/index.cjs");
|
|
|
19
19
|
var PgAsyncDatabase = class {
|
|
20
20
|
static [__entity_ts.entityKind] = "PgAsyncDatabase";
|
|
21
21
|
query;
|
|
22
|
-
constructor(dialect, session, relations, parseRqbJson = false) {
|
|
22
|
+
constructor(dialect, session, relations, parseRqbJson = false, tagged = false) {
|
|
23
23
|
this.dialect = dialect;
|
|
24
24
|
this.session = session;
|
|
25
|
+
this.tagged = tagged;
|
|
25
26
|
this._ = {
|
|
26
27
|
relations,
|
|
27
28
|
session
|
|
@@ -109,7 +110,8 @@ var PgAsyncDatabase = class {
|
|
|
109
110
|
fields: fields ?? void 0,
|
|
110
111
|
session: self.session,
|
|
111
112
|
dialect: self.dialect,
|
|
112
|
-
withList: queries
|
|
113
|
+
withList: queries,
|
|
114
|
+
tagged: self.tagged
|
|
113
115
|
});
|
|
114
116
|
}
|
|
115
117
|
function selectDistinct(fields) {
|
|
@@ -227,7 +229,8 @@ var PgAsyncDatabase = class {
|
|
|
227
229
|
return new require_pg_core_async_select.PgAsyncSelectBase({
|
|
228
230
|
fields: fields ?? void 0,
|
|
229
231
|
session: this.session,
|
|
230
|
-
dialect: this.dialect
|
|
232
|
+
dialect: this.dialect,
|
|
233
|
+
tagged: this.tagged
|
|
231
234
|
});
|
|
232
235
|
}
|
|
233
236
|
selectDistinct(fields) {
|
|
@@ -235,7 +238,8 @@ var PgAsyncDatabase = class {
|
|
|
235
238
|
fields: fields ?? void 0,
|
|
236
239
|
session: this.session,
|
|
237
240
|
dialect: this.dialect,
|
|
238
|
-
distinct: true
|
|
241
|
+
distinct: true,
|
|
242
|
+
tagged: this.tagged
|
|
239
243
|
});
|
|
240
244
|
}
|
|
241
245
|
selectDistinctOn(on, fields) {
|
|
@@ -243,7 +247,8 @@ var PgAsyncDatabase = class {
|
|
|
243
247
|
fields: fields ?? void 0,
|
|
244
248
|
session: this.session,
|
|
245
249
|
dialect: this.dialect,
|
|
246
|
-
distinct: { on }
|
|
250
|
+
distinct: { on },
|
|
251
|
+
tagged: this.tagged
|
|
247
252
|
});
|
|
248
253
|
}
|
|
249
254
|
/**
|
package/pg-core/async/db.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.cjs","names":["entityKind","RelationalQueryBuilder","PgAsyncRelationalQuery","QueryBuilder","WithSubquery","SelectionProxyHandler","PgAsyncCountBuilder","PgAsyncSelectBase","PgUpdateBuilder","PgAsyncUpdateBase","PgInsertBuilder","PgAsyncInsertBase","PgAsyncDeleteBase","PgAsyncRefreshMaterializedView","sql","PgAsyncRaw"],"sources":["../../../src/pg-core/async/db.ts"],"sourcesContent":["import type { Cache } from '~/cache/core/cache.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { PgAsyncSession, PgAsyncTransaction } from '~/pg-core/async/session.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgInsertBuilder, PgUpdateBuilder, QueryBuilder } from '~/pg-core/query-builders/index.ts';\nimport type { PgQueryResultHKT, PgQueryResultKind, PgTransactionConfig } from '~/pg-core/session.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport { type ColumnsSelection, type SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport { WithSubquery } from '~/subquery.ts';\nimport type { PgColumn } from '../columns/index.ts';\nimport { RelationalQueryBuilder } from '../query-builders/query.ts';\nimport type { SelectedFields } from '../query-builders/select.types.ts';\nimport type { PreparedQueryConfig } from '../session.ts';\nimport type { WithBuilder } from '../subquery.ts';\nimport type { PgViewBase } from '../view-base.ts';\nimport type { PgMaterializedView } from '../view.ts';\nimport { PgAsyncCountBuilder } from './count.ts';\nimport { PgAsyncDeleteBase } from './delete.ts';\nimport { PgAsyncInsertBase, type PgAsyncInsertHKT } from './insert.ts';\nimport { PgAsyncRelationalQuery, type PgAsyncRelationalQueryHKT } from './query.ts';\nimport { PgAsyncRaw } from './raw.ts';\nimport { PgAsyncRefreshMaterializedView } from './refresh-materialized-view.ts';\nimport { PgAsyncSelectBase, type PgAsyncSelectBuilder } from './select.ts';\nimport { PgAsyncUpdateBase, type PgAsyncUpdateHKT } from './update.ts';\n\nexport class PgAsyncDatabase<\n\tTQueryResult extends PgQueryResultHKT,\n\tTRelations extends AnyRelations = EmptyRelations,\n> {\n\tstatic readonly [entityKind]: string = 'PgAsyncDatabase';\n\n\tdeclare readonly _: {\n\t\treadonly relations: TRelations;\n\t\treadonly session: PgAsyncSession<TQueryResult, TRelations>;\n\t};\n\n\t// TO-DO: Figure out how to pass DrizzleTypeError without breaking withReplicas\n\tquery: {\n\t\t[K in keyof TRelations]: RelationalQueryBuilder<\n\t\t\tTRelations,\n\t\t\tTRelations[K],\n\t\t\tPgAsyncRelationalQueryHKT\n\t\t>;\n\t};\n\n\tconstructor(\n\t\t/** @internal */\n\t\treadonly dialect: PgDialect,\n\t\t/** @internal */\n\t\treadonly session: PgAsyncSession<any, any>,\n\t\trelations: TRelations,\n\t\tparseRqbJson: boolean = false,\n\t) {\n\t\tthis._ = {\n\t\t\trelations: relations,\n\t\t\tsession,\n\t\t};\n\n\t\tthis.query = {} as typeof this['query'];\n\t\tfor (const [tableName, relation] of Object.entries(relations)) {\n\t\t\t(this.query as PgAsyncDatabase<\n\t\t\t\tTQueryResult,\n\t\t\t\tAnyRelations\n\t\t\t>['query'])[tableName] = new RelationalQueryBuilder(\n\t\t\t\trelations,\n\t\t\t\trelations[relation.name]!.table as PgTable,\n\t\t\t\trelation,\n\t\t\t\tdialect,\n\t\t\t\tsession,\n\t\t\t\tparseRqbJson,\n\t\t\t\tPgAsyncRelationalQuery,\n\t\t\t);\n\t\t}\n\n\t\tthis.$cache = { invalidate: async (_params: any) => {} };\n\t}\n\n\t/**\n\t * Creates a subquery that defines a temporary named result set as a CTE.\n\t *\n\t * It is useful for breaking down complex queries into simpler parts and for reusing the result set in subsequent parts of the query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#with-clause}\n\t *\n\t * @param alias The alias for the subquery.\n\t *\n\t * Failure to provide an alias will result in a DrizzleTypeError, preventing the subquery from being referenced in other queries.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Create a subquery with alias 'sq' and use it in the select query\n\t * const sq = db.$with('sq').as(db.select().from(users).where(eq(users.id, 42)));\n\t *\n\t * const result = await db.with(sq).select().from(sq);\n\t * ```\n\t *\n\t * To select arbitrary SQL values as fields in a CTE and reference them in other CTEs or in the main query, you need to add aliases to them:\n\t *\n\t * ```ts\n\t * // Select an arbitrary SQL value as a field in a CTE and reference it in the main query\n\t * const sq = db.$with('sq').as(db.select({\n\t * name: sql<string>`upper(${users.name})`.as('name'),\n\t * })\n\t * .from(users));\n\t *\n\t * const result = await db.with(sq).select({ name: sq.name }).from(sq);\n\t * ```\n\t */\n\t$with: WithBuilder = (alias: string, selection?: ColumnsSelection) => {\n\t\tconst as = (\n\t\t\tqb:\n\t\t\t\t| TypedQueryBuilder<ColumnsSelection | undefined>\n\t\t\t\t| SQL\n\t\t\t\t| ((qb: QueryBuilder) => TypedQueryBuilder<ColumnsSelection | undefined> | SQL),\n\t\t) => {\n\t\t\tif (typeof qb === 'function') {\n\t\t\t\tqb = qb(new QueryBuilder(this.dialect));\n\t\t\t}\n\n\t\t\tconst sql = ('withoutSelectionCastCodecs' in qb ? qb.withoutSelectionCastCodecs() : qb).getSQL();\n\t\t\treturn new Proxy(\n\t\t\t\tnew WithSubquery(\n\t\t\t\t\tsql,\n\t\t\t\t\tselection ?? ('getSelectedFields' in qb ? qb.getSelectedFields() ?? {} : {}) as SelectedFields,\n\t\t\t\t\talias,\n\t\t\t\t\ttrue,\n\t\t\t\t\tsql.usedTables ?? [],\n\t\t\t\t),\n\t\t\t\tnew SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t\t);\n\t\t};\n\t\treturn { as };\n\t};\n\n\t$count(\n\t\tsource: PgTable | PgViewBase | SQL | SQLWrapper,\n\t\tfilters?: SQL<unknown>,\n\t) {\n\t\treturn new PgAsyncCountBuilder({ source, filters, session: this.session, dialect: this.dialect });\n\t}\n\n\t$cache: { invalidate: Cache['onMutate'] };\n\n\t/**\n\t * Incorporates a previously defined CTE (using `$with`) into the main query.\n\t *\n\t * This method allows the main query to reference a temporary named result set.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#with-clause}\n\t *\n\t * @param queries The CTEs to incorporate into the main query.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Define a subquery 'sq' as a CTE using $with\n\t * const sq = db.$with('sq').as(db.select().from(users).where(eq(users.id, 42)));\n\t *\n\t * // Incorporate the CTE 'sq' into the main query and select from it\n\t * const result = await db.with(sq).select().from(sq);\n\t * ```\n\t */\n\twith(...queries: WithSubquery[]) {\n\t\tconst self = this;\n\n\t\t/**\n\t\t * Creates a select query.\n\t\t *\n\t\t * Calling this method with no arguments will select all columns from the table. Pass a selection object to specify the columns you want to select.\n\t\t *\n\t\t * Use `.from()` method to specify which table to select from.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/select}\n\t\t *\n\t\t * @param fields The selection object.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Select all columns and all rows from the 'cars' table\n\t\t * const allCars: Car[] = await db.select().from(cars);\n\t\t *\n\t\t * // Select specific columns and all rows from the 'cars' table\n\t\t * const carsIdsAndBrands: { id: number; brand: string }[] = await db.select({\n\t\t * id: cars.id,\n\t\t * brand: cars.brand\n\t\t * })\n\t\t * .from(cars);\n\t\t * ```\n\t\t *\n\t\t * Like in SQL, you can use arbitrary expressions as selection fields, not just table columns:\n\t\t *\n\t\t * ```ts\n\t\t * // Select specific columns along with expression and all rows from the 'cars' table\n\t\t * const carsIdsAndLowerNames: { id: number; lowerBrand: string }[] = await db.select({\n\t\t * id: cars.id,\n\t\t * lowerBrand: sql<string>`lower(${cars.brand})`,\n\t\t * })\n\t\t * .from(cars);\n\t\t * ```\n\t\t */\n\t\tfunction select(): PgAsyncSelectBuilder<undefined>;\n\t\tfunction select<TSelection extends SelectedFields>(fields: TSelection): PgAsyncSelectBuilder<TSelection>;\n\t\tfunction select<TSelection extends SelectedFields>(\n\t\t\tfields?: TSelection,\n\t\t): PgAsyncSelectBuilder<TSelection | undefined> {\n\t\t\treturn new PgAsyncSelectBase({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: self.session,\n\t\t\t\tdialect: self.dialect,\n\t\t\t\twithList: queries,\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Adds `distinct` expression to the select query.\n\t\t *\n\t\t * Calling this method will return only unique values. When multiple columns are selected, it returns rows with unique combinations of values in these columns.\n\t\t *\n\t\t * Use `.from()` method to specify which table to select from.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t\t *\n\t\t * @param fields The selection object.\n\t\t *\n\t\t * @example\n\t\t * ```ts\n\t\t * // Select all unique rows from the 'cars' table\n\t\t * await db.selectDistinct()\n\t\t * .from(cars)\n\t\t * .orderBy(cars.id, cars.brand, cars.color);\n\t\t *\n\t\t * // Select all unique brands from the 'cars' table\n\t\t * await db.selectDistinct({ brand: cars.brand })\n\t\t * .from(cars)\n\t\t * .orderBy(cars.brand);\n\t\t * ```\n\t\t */\n\t\tfunction selectDistinct(): PgAsyncSelectBuilder<undefined>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): PgAsyncSelectBuilder<TSelection>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields?: TSelection,\n\t\t): PgAsyncSelectBuilder<TSelection | undefined> {\n\t\t\treturn new PgAsyncSelectBase({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: self.session,\n\t\t\t\tdialect: self.dialect,\n\t\t\t\twithList: queries,\n\t\t\t\tdistinct: true,\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Adds `distinct on` expression to the select query.\n\t\t *\n\t\t * Calling this method will specify how the unique rows are determined.\n\t\t *\n\t\t * Use `.from()` method to specify which table to select from.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t\t *\n\t\t * @param on The expression defining uniqueness.\n\t\t * @param fields The selection object.\n\t\t *\n\t\t * @example\n\t\t * ```ts\n\t\t * // Select the first row for each unique brand from the 'cars' table\n\t\t * await db.selectDistinctOn([cars.brand])\n\t\t * .from(cars)\n\t\t * .orderBy(cars.brand);\n\t\t *\n\t\t * // Selects the first occurrence of each unique car brand along with its color from the 'cars' table\n\t\t * await db.selectDistinctOn([cars.brand], { brand: cars.brand, color: cars.color })\n\t\t * .from(cars)\n\t\t * .orderBy(cars.brand, cars.color);\n\t\t * ```\n\t\t */\n\t\tfunction selectDistinctOn(on: (PgColumn | SQLWrapper)[]): PgAsyncSelectBuilder<undefined>;\n\t\tfunction selectDistinctOn<TSelection extends SelectedFields>(\n\t\t\ton: (PgColumn | SQLWrapper)[],\n\t\t\tfields: TSelection,\n\t\t): PgAsyncSelectBuilder<TSelection>;\n\t\tfunction selectDistinctOn<TSelection extends SelectedFields>(\n\t\t\ton: (PgColumn | SQLWrapper)[],\n\t\t\tfields?: TSelection,\n\t\t): PgAsyncSelectBuilder<TSelection | undefined> {\n\t\t\treturn new PgAsyncSelectBase({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: self.session,\n\t\t\t\tdialect: self.dialect,\n\t\t\t\twithList: queries,\n\t\t\t\tdistinct: { on },\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Creates an update query.\n\t\t *\n\t\t * Calling this method without `.where()` clause will update all rows in a table. The `.where()` clause specifies which rows should be updated.\n\t\t *\n\t\t * Use `.set()` method to specify which values to update.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t\t *\n\t\t * @param table The table to update.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Update all rows in the 'cars' table\n\t\t * await db.update(cars).set({ color: 'red' });\n\t\t *\n\t\t * // Update rows with filters and conditions\n\t\t * await db.update(cars).set({ color: 'red' }).where(eq(cars.brand, 'BMW'));\n\t\t *\n\t\t * // Update with returning clause\n\t\t * const updatedCar: Car[] = await db.update(cars)\n\t\t * .set({ color: 'red' })\n\t\t * .where(eq(cars.id, 1))\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction update<TTable extends PgTable>(table: TTable): PgUpdateBuilder<TTable, TQueryResult, PgAsyncUpdateHKT> {\n\t\t\treturn new PgUpdateBuilder(table, self.session, self.dialect, queries, PgAsyncUpdateBase);\n\t\t}\n\n\t\t/**\n\t\t * Creates an insert query.\n\t\t *\n\t\t * Calling this method will create new rows in a table. Use `.values()` method to specify which values to insert.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/insert}\n\t\t *\n\t\t * @param table The table to insert into.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Insert one row\n\t\t * await db.insert(cars).values({ brand: 'BMW' });\n\t\t *\n\t\t * // Insert multiple rows\n\t\t * await db.insert(cars).values([{ brand: 'BMW' }, { brand: 'Porsche' }]);\n\t\t *\n\t\t * // Insert with returning clause\n\t\t * const insertedCar: Car[] = await db.insert(cars)\n\t\t * .values({ brand: 'BMW' })\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction insert<TTable extends PgTable>(\n\t\t\ttable: TTable,\n\t\t): PgInsertBuilder<TTable, TQueryResult, false, PgAsyncInsertHKT> {\n\t\t\treturn new PgInsertBuilder(table, self.session, self.dialect, queries, undefined, PgAsyncInsertBase);\n\t\t}\n\n\t\t/**\n\t\t * Creates a delete query.\n\t\t *\n\t\t * Calling this method without `.where()` clause will delete all rows in a table. The `.where()` clause specifies which rows should be deleted.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t\t *\n\t\t * @param table The table to delete from.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Delete all rows in the 'cars' table\n\t\t * await db.delete(cars);\n\t\t *\n\t\t * // Delete rows with filters and conditions\n\t\t * await db.delete(cars).where(eq(cars.color, 'green'));\n\t\t *\n\t\t * // Delete with returning clause\n\t\t * const deletedCar: Car[] = await db.delete(cars)\n\t\t * .where(eq(cars.id, 1))\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction delete_<TTable extends PgTable>(table: TTable): PgAsyncDeleteBase<TTable, TQueryResult> {\n\t\t\treturn new PgAsyncDeleteBase(table, self.session, self.dialect, queries);\n\t\t}\n\n\t\treturn { select, selectDistinct, selectDistinctOn, update, insert, delete: delete_ };\n\t}\n\n\t/**\n\t * Creates a select query.\n\t *\n\t * Calling this method with no arguments will select all columns from the table. Pass a selection object to specify the columns you want to select.\n\t *\n\t * Use `.from()` method to specify which table to select from.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select}\n\t *\n\t * @param fields The selection object.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all columns and all rows from the 'cars' table\n\t * const allCars: Car[] = await db.select().from(cars);\n\t *\n\t * // Select specific columns and all rows from the 'cars' table\n\t * const carsIdsAndBrands: { id: number; brand: string }[] = await db.select({\n\t * id: cars.id,\n\t * brand: cars.brand\n\t * })\n\t * .from(cars);\n\t * ```\n\t *\n\t * Like in SQL, you can use arbitrary expressions as selection fields, not just table columns:\n\t *\n\t * ```ts\n\t * // Select specific columns along with expression and all rows from the 'cars' table\n\t * const carsIdsAndLowerNames: { id: number; lowerBrand: string }[] = await db.select({\n\t * id: cars.id,\n\t * lowerBrand: sql<string>`lower(${cars.brand})`,\n\t * })\n\t * .from(cars);\n\t * ```\n\t */\n\tselect(): PgAsyncSelectBuilder<undefined>;\n\tselect<TSelection extends SelectedFields>(fields: TSelection): PgAsyncSelectBuilder<TSelection>;\n\tselect<TSelection extends SelectedFields | undefined>(\n\t\tfields?: TSelection,\n\t): PgAsyncSelectBuilder<TSelection> {\n\t\treturn new PgAsyncSelectBase({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t}) as PgAsyncSelectBuilder<TSelection>;\n\t}\n\n\t/**\n\t * Adds `distinct` expression to the select query.\n\t *\n\t * Calling this method will return only unique values. When multiple columns are selected, it returns rows with unique combinations of values in these columns.\n\t *\n\t * Use `.from()` method to specify which table to select from.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t *\n\t * @param fields The selection object.\n\t *\n\t * @example\n\t * ```ts\n\t * // Select all unique rows from the 'cars' table\n\t * await db.selectDistinct()\n\t * .from(cars)\n\t * .orderBy(cars.id, cars.brand, cars.color);\n\t *\n\t * // Select all unique brands from the 'cars' table\n\t * await db.selectDistinct({ brand: cars.brand })\n\t * .from(cars)\n\t * .orderBy(cars.brand);\n\t * ```\n\t */\n\tselectDistinct(): PgAsyncSelectBuilder<undefined>;\n\tselectDistinct<TSelection extends SelectedFields>(fields: TSelection): PgAsyncSelectBuilder<TSelection>;\n\tselectDistinct<TSelection extends SelectedFields | undefined>(\n\t\tfields?: TSelection,\n\t): PgAsyncSelectBuilder<TSelection | undefined> {\n\t\treturn new PgAsyncSelectBase({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t\tdistinct: true,\n\t\t});\n\t}\n\n\t/**\n\t * Adds `distinct on` expression to the select query.\n\t *\n\t * Calling this method will specify how the unique rows are determined.\n\t *\n\t * Use `.from()` method to specify which table to select from.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t *\n\t * @param on The expression defining uniqueness.\n\t * @param fields The selection object.\n\t *\n\t * @example\n\t * ```ts\n\t * // Select the first row for each unique brand from the 'cars' table\n\t * await db.selectDistinctOn([cars.brand])\n\t * .from(cars)\n\t * .orderBy(cars.brand);\n\t *\n\t * // Selects the first occurrence of each unique car brand along with its color from the 'cars' table\n\t * await db.selectDistinctOn([cars.brand], { brand: cars.brand, color: cars.color })\n\t * .from(cars)\n\t * .orderBy(cars.brand, cars.color);\n\t * ```\n\t */\n\tselectDistinctOn(on: (PgColumn | SQLWrapper)[]): PgAsyncSelectBuilder<undefined>;\n\tselectDistinctOn<TSelection extends SelectedFields>(\n\t\ton: (PgColumn | SQLWrapper)[],\n\t\tfields: TSelection,\n\t): PgAsyncSelectBuilder<TSelection>;\n\tselectDistinctOn<TSelection extends SelectedFields | undefined>(\n\t\ton: (PgColumn | SQLWrapper)[],\n\t\tfields?: TSelection,\n\t): PgAsyncSelectBuilder<TSelection> {\n\t\treturn new PgAsyncSelectBase({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t\tdistinct: { on },\n\t\t});\n\t}\n\n\t/**\n\t * Creates an update query.\n\t *\n\t * Calling this method without `.where()` clause will update all rows in a table. The `.where()` clause specifies which rows should be updated.\n\t *\n\t * Use `.set()` method to specify which values to update.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t *\n\t * @param table The table to update.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Update all rows in the 'cars' table\n\t * await db.update(cars).set({ color: 'red' });\n\t *\n\t * // Update rows with filters and conditions\n\t * await db.update(cars).set({ color: 'red' }).where(eq(cars.brand, 'BMW'));\n\t *\n\t * // Update with returning clause\n\t * const updatedCar: Car[] = await db.update(cars)\n\t * .set({ color: 'red' })\n\t * .where(eq(cars.id, 1))\n\t * .returning();\n\t * ```\n\t */\n\tupdate<TTable extends PgTable>(table: TTable): PgUpdateBuilder<TTable, TQueryResult, PgAsyncUpdateHKT> {\n\t\treturn new PgUpdateBuilder(table, this.session, this.dialect, undefined, PgAsyncUpdateBase);\n\t}\n\n\t/**\n\t * Creates an insert query.\n\t *\n\t * Calling this method will create new rows in a table. Use `.values()` method to specify which values to insert.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert}\n\t *\n\t * @param table The table to insert into.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Insert one row\n\t * await db.insert(cars).values({ brand: 'BMW' });\n\t *\n\t * // Insert multiple rows\n\t * await db.insert(cars).values([{ brand: 'BMW' }, { brand: 'Porsche' }]);\n\t *\n\t * // Insert with returning clause\n\t * const insertedCar: Car[] = await db.insert(cars)\n\t * .values({ brand: 'BMW' })\n\t * .returning();\n\t * ```\n\t */\n\tinsert<TTable extends PgTable>(table: TTable): PgInsertBuilder<TTable, TQueryResult, false, PgAsyncInsertHKT> {\n\t\treturn new PgInsertBuilder(table, this.session, this.dialect, undefined, undefined, PgAsyncInsertBase);\n\t}\n\n\t/**\n\t * Creates a delete query.\n\t *\n\t * Calling this method without `.where()` clause will delete all rows in a table. The `.where()` clause specifies which rows should be deleted.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t *\n\t * @param table The table to delete from.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Delete all rows in the 'cars' table\n\t * await db.delete(cars);\n\t *\n\t * // Delete rows with filters and conditions\n\t * await db.delete(cars).where(eq(cars.color, 'green'));\n\t *\n\t * // Delete with returning clause\n\t * const deletedCar: Car[] = await db.delete(cars)\n\t * .where(eq(cars.id, 1))\n\t * .returning();\n\t * ```\n\t */\n\tdelete<TTable extends PgTable>(table: TTable): PgAsyncDeleteBase<TTable, TQueryResult> {\n\t\treturn new PgAsyncDeleteBase(table, this.session, this.dialect);\n\t}\n\n\trefreshMaterializedView<TView extends PgMaterializedView>(view: TView): PgAsyncRefreshMaterializedView<TQueryResult> {\n\t\treturn new PgAsyncRefreshMaterializedView(view, this.session, this.dialect);\n\t}\n\n\texecute<TRow extends Record<string, unknown> = Record<string, unknown>>(\n\t\tquery: SQLWrapper | string,\n\t): PgAsyncRaw<PgQueryResultKind<TQueryResult, TRow>> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tconst builtQuery = this.dialect.sqlToQuery(sequel);\n\t\tconst prepared = this.session.prepareQuery<\n\t\t\tPreparedQueryConfig & { execute: PgQueryResultKind<TQueryResult, TRow> }\n\t\t>(builtQuery, 'raw', false);\n\t\treturn new PgAsyncRaw(\n\t\t\t() => prepared.execute(),\n\t\t\tsequel,\n\t\t\tbuiltQuery,\n\t\t\t(result) => prepared.mapResult(result, true),\n\t\t);\n\t}\n\n\ttransaction: <T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TRelations>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig,\n\t) => Promise<T> = (tx, cfg) => this.session.transaction(tx, cfg);\n}\n\nexport type PgAsyncWithReplicas<Q> = Q & { $primary: Q; $replicas: Q[] };\n\nexport const withReplicas = <\n\tHKT extends PgQueryResultHKT,\n\tTRelations extends AnyRelations,\n\tQ extends PgAsyncDatabase<HKT, TRelations>,\n>(\n\tprimary: Q,\n\treplicas: [Q, ...Q[]],\n\tgetReplica: (replicas: Q[]) => Q = () => replicas[Math.floor(Math.random() * replicas.length)]!,\n): PgAsyncWithReplicas<Q> => {\n\tconst select: Q['select'] = (...args: []) => getReplica(replicas).select(...args);\n\tconst selectDistinct: Q['selectDistinct'] = (...args: []) => getReplica(replicas).selectDistinct(...args);\n\tconst selectDistinctOn: Q['selectDistinctOn'] = (...args: [any]) => getReplica(replicas).selectDistinctOn(...args);\n\tconst $count: Q['$count'] = (...args: [any]) => getReplica(replicas).$count(...args);\n\tconst _with: Q['with'] = (...args: any) => getReplica(replicas).with(...args);\n\tconst $with: Q['$with'] = (arg: any) => getReplica(replicas).$with(arg) as any;\n\n\tconst update: Q['update'] = (...args: [any]) => primary.update(...args);\n\tconst insert: Q['insert'] = (...args: [any]) => primary.insert(...args);\n\tconst $delete: Q['delete'] = (...args: [any]) => primary.delete(...args);\n\tconst execute: Q['execute'] = (...args: [any]) => primary.execute(...args);\n\tconst transaction: Q['transaction'] = (...args: [any]) => primary.transaction(...args);\n\n\tconst refreshMaterializedView: Q['refreshMaterializedView'] = (...args: [any]) =>\n\t\tprimary.refreshMaterializedView(...args);\n\n\treturn {\n\t\t...primary,\n\t\tupdate,\n\t\tinsert,\n\t\tdelete: $delete,\n\t\texecute,\n\t\ttransaction,\n\t\trefreshMaterializedView,\n\t\t$primary: primary,\n\t\t$replicas: replicas,\n\t\tselect,\n\t\tselectDistinct,\n\t\tselectDistinctOn,\n\t\t$count,\n\t\t$with,\n\t\twith: _with,\n\t\tget query() {\n\t\t\treturn getReplica(replicas).query;\n\t\t},\n\t};\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"db.cjs","names":["entityKind","RelationalQueryBuilder","PgAsyncRelationalQuery","QueryBuilder","WithSubquery","SelectionProxyHandler","PgAsyncCountBuilder","PgAsyncSelectBase","PgUpdateBuilder","PgAsyncUpdateBase","PgInsertBuilder","PgAsyncInsertBase","PgAsyncDeleteBase","PgAsyncRefreshMaterializedView","sql","PgAsyncRaw"],"sources":["../../../src/pg-core/async/db.ts"],"sourcesContent":["import type { Cache } from '~/cache/core/cache.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { PgAsyncSession, PgAsyncTransaction } from '~/pg-core/async/session.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgInsertBuilder, PgUpdateBuilder, QueryBuilder } from '~/pg-core/query-builders/index.ts';\nimport type { PgQueryResultHKT, PgQueryResultKind, PgTransactionConfig } from '~/pg-core/session.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport { type ColumnsSelection, type SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport { WithSubquery } from '~/subquery.ts';\nimport type { PgColumn } from '../columns/index.ts';\nimport { RelationalQueryBuilder } from '../query-builders/query.ts';\nimport type { SelectedFields } from '../query-builders/select.types.ts';\nimport type { PreparedQueryConfig } from '../session.ts';\nimport type { WithBuilder } from '../subquery.ts';\nimport type { PgViewBase } from '../view-base.ts';\nimport type { PgMaterializedView } from '../view.ts';\nimport { PgAsyncCountBuilder } from './count.ts';\nimport { PgAsyncDeleteBase } from './delete.ts';\nimport { PgAsyncInsertBase, type PgAsyncInsertHKT } from './insert.ts';\nimport { PgAsyncRelationalQuery, type PgAsyncRelationalQueryHKT } from './query.ts';\nimport { PgAsyncRaw } from './raw.ts';\nimport { PgAsyncRefreshMaterializedView } from './refresh-materialized-view.ts';\nimport { PgAsyncSelectBase, type PgAsyncSelectBuilder } from './select.ts';\nimport { PgAsyncUpdateBase, type PgAsyncUpdateHKT } from './update.ts';\n\nexport class PgAsyncDatabase<\n\tTQueryResult extends PgQueryResultHKT,\n\tTRelations extends AnyRelations = EmptyRelations,\n> {\n\tstatic readonly [entityKind]: string = 'PgAsyncDatabase';\n\n\tdeclare readonly _: {\n\t\treadonly relations: TRelations;\n\t\treadonly session: PgAsyncSession<TQueryResult, TRelations>;\n\t};\n\n\t// TO-DO: Figure out how to pass DrizzleTypeError without breaking withReplicas\n\tquery: {\n\t\t[K in keyof TRelations]: RelationalQueryBuilder<\n\t\t\tTRelations,\n\t\t\tTRelations[K],\n\t\t\tPgAsyncRelationalQueryHKT\n\t\t>;\n\t};\n\n\tconstructor(\n\t\t/** @internal */\n\t\treadonly dialect: PgDialect,\n\t\t/** @internal */\n\t\treadonly session: PgAsyncSession<any, any>,\n\t\trelations: TRelations,\n\t\tparseRqbJson: boolean = false,\n\t\treadonly tagged: boolean = false,\n\t) {\n\t\tthis._ = {\n\t\t\trelations: relations,\n\t\t\tsession,\n\t\t};\n\n\t\tthis.query = {} as typeof this['query'];\n\t\tfor (const [tableName, relation] of Object.entries(relations)) {\n\t\t\t(this.query as PgAsyncDatabase<\n\t\t\t\tTQueryResult,\n\t\t\t\tAnyRelations\n\t\t\t>['query'])[tableName] = new RelationalQueryBuilder(\n\t\t\t\trelations,\n\t\t\t\trelations[relation.name]!.table as PgTable,\n\t\t\t\trelation,\n\t\t\t\tdialect,\n\t\t\t\tsession,\n\t\t\t\tparseRqbJson,\n\t\t\t\tPgAsyncRelationalQuery,\n\t\t\t);\n\t\t}\n\n\t\tthis.$cache = { invalidate: async (_params: any) => {} };\n\t}\n\n\t/**\n\t * Creates a subquery that defines a temporary named result set as a CTE.\n\t *\n\t * It is useful for breaking down complex queries into simpler parts and for reusing the result set in subsequent parts of the query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#with-clause}\n\t *\n\t * @param alias The alias for the subquery.\n\t *\n\t * Failure to provide an alias will result in a DrizzleTypeError, preventing the subquery from being referenced in other queries.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Create a subquery with alias 'sq' and use it in the select query\n\t * const sq = db.$with('sq').as(db.select().from(users).where(eq(users.id, 42)));\n\t *\n\t * const result = await db.with(sq).select().from(sq);\n\t * ```\n\t *\n\t * To select arbitrary SQL values as fields in a CTE and reference them in other CTEs or in the main query, you need to add aliases to them:\n\t *\n\t * ```ts\n\t * // Select an arbitrary SQL value as a field in a CTE and reference it in the main query\n\t * const sq = db.$with('sq').as(db.select({\n\t * name: sql<string>`upper(${users.name})`.as('name'),\n\t * })\n\t * .from(users));\n\t *\n\t * const result = await db.with(sq).select({ name: sq.name }).from(sq);\n\t * ```\n\t */\n\t$with: WithBuilder = (alias: string, selection?: ColumnsSelection) => {\n\t\tconst as = (\n\t\t\tqb:\n\t\t\t\t| TypedQueryBuilder<ColumnsSelection | undefined>\n\t\t\t\t| SQL\n\t\t\t\t| ((qb: QueryBuilder) => TypedQueryBuilder<ColumnsSelection | undefined> | SQL),\n\t\t) => {\n\t\t\tif (typeof qb === 'function') {\n\t\t\t\tqb = qb(new QueryBuilder(this.dialect));\n\t\t\t}\n\n\t\t\tconst sql = ('withoutSelectionCastCodecs' in qb ? qb.withoutSelectionCastCodecs() : qb).getSQL();\n\t\t\treturn new Proxy(\n\t\t\t\tnew WithSubquery(\n\t\t\t\t\tsql,\n\t\t\t\t\tselection ?? ('getSelectedFields' in qb ? qb.getSelectedFields() ?? {} : {}) as SelectedFields,\n\t\t\t\t\talias,\n\t\t\t\t\ttrue,\n\t\t\t\t\tsql.usedTables ?? [],\n\t\t\t\t),\n\t\t\t\tnew SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t\t);\n\t\t};\n\t\treturn { as };\n\t};\n\n\t$count(\n\t\tsource: PgTable | PgViewBase | SQL | SQLWrapper,\n\t\tfilters?: SQL<unknown>,\n\t) {\n\t\treturn new PgAsyncCountBuilder({ source, filters, session: this.session, dialect: this.dialect });\n\t}\n\n\t$cache: { invalidate: Cache['onMutate'] };\n\n\t/**\n\t * Incorporates a previously defined CTE (using `$with`) into the main query.\n\t *\n\t * This method allows the main query to reference a temporary named result set.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#with-clause}\n\t *\n\t * @param queries The CTEs to incorporate into the main query.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Define a subquery 'sq' as a CTE using $with\n\t * const sq = db.$with('sq').as(db.select().from(users).where(eq(users.id, 42)));\n\t *\n\t * // Incorporate the CTE 'sq' into the main query and select from it\n\t * const result = await db.with(sq).select().from(sq);\n\t * ```\n\t */\n\twith(...queries: WithSubquery[]) {\n\t\tconst self = this;\n\n\t\t/**\n\t\t * Creates a select query.\n\t\t *\n\t\t * Calling this method with no arguments will select all columns from the table. Pass a selection object to specify the columns you want to select.\n\t\t *\n\t\t * Use `.from()` method to specify which table to select from.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/select}\n\t\t *\n\t\t * @param fields The selection object.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Select all columns and all rows from the 'cars' table\n\t\t * const allCars: Car[] = await db.select().from(cars);\n\t\t *\n\t\t * // Select specific columns and all rows from the 'cars' table\n\t\t * const carsIdsAndBrands: { id: number; brand: string }[] = await db.select({\n\t\t * id: cars.id,\n\t\t * brand: cars.brand\n\t\t * })\n\t\t * .from(cars);\n\t\t * ```\n\t\t *\n\t\t * Like in SQL, you can use arbitrary expressions as selection fields, not just table columns:\n\t\t *\n\t\t * ```ts\n\t\t * // Select specific columns along with expression and all rows from the 'cars' table\n\t\t * const carsIdsAndLowerNames: { id: number; lowerBrand: string }[] = await db.select({\n\t\t * id: cars.id,\n\t\t * lowerBrand: sql<string>`lower(${cars.brand})`,\n\t\t * })\n\t\t * .from(cars);\n\t\t * ```\n\t\t */\n\t\tfunction select(): PgAsyncSelectBuilder<undefined>;\n\t\tfunction select<TSelection extends SelectedFields>(fields: TSelection): PgAsyncSelectBuilder<TSelection>;\n\t\tfunction select<TSelection extends SelectedFields>(\n\t\t\tfields?: TSelection,\n\t\t): PgAsyncSelectBuilder<TSelection | undefined> {\n\t\t\treturn new PgAsyncSelectBase({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: self.session,\n\t\t\t\tdialect: self.dialect,\n\t\t\t\twithList: queries,\n\t\t\t\ttagged: self.tagged,\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Adds `distinct` expression to the select query.\n\t\t *\n\t\t * Calling this method will return only unique values. When multiple columns are selected, it returns rows with unique combinations of values in these columns.\n\t\t *\n\t\t * Use `.from()` method to specify which table to select from.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t\t *\n\t\t * @param fields The selection object.\n\t\t *\n\t\t * @example\n\t\t * ```ts\n\t\t * // Select all unique rows from the 'cars' table\n\t\t * await db.selectDistinct()\n\t\t * .from(cars)\n\t\t * .orderBy(cars.id, cars.brand, cars.color);\n\t\t *\n\t\t * // Select all unique brands from the 'cars' table\n\t\t * await db.selectDistinct({ brand: cars.brand })\n\t\t * .from(cars)\n\t\t * .orderBy(cars.brand);\n\t\t * ```\n\t\t */\n\t\tfunction selectDistinct(): PgAsyncSelectBuilder<undefined>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): PgAsyncSelectBuilder<TSelection>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields?: TSelection,\n\t\t): PgAsyncSelectBuilder<TSelection | undefined> {\n\t\t\treturn new PgAsyncSelectBase({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: self.session,\n\t\t\t\tdialect: self.dialect,\n\t\t\t\twithList: queries,\n\t\t\t\tdistinct: true,\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Adds `distinct on` expression to the select query.\n\t\t *\n\t\t * Calling this method will specify how the unique rows are determined.\n\t\t *\n\t\t * Use `.from()` method to specify which table to select from.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t\t *\n\t\t * @param on The expression defining uniqueness.\n\t\t * @param fields The selection object.\n\t\t *\n\t\t * @example\n\t\t * ```ts\n\t\t * // Select the first row for each unique brand from the 'cars' table\n\t\t * await db.selectDistinctOn([cars.brand])\n\t\t * .from(cars)\n\t\t * .orderBy(cars.brand);\n\t\t *\n\t\t * // Selects the first occurrence of each unique car brand along with its color from the 'cars' table\n\t\t * await db.selectDistinctOn([cars.brand], { brand: cars.brand, color: cars.color })\n\t\t * .from(cars)\n\t\t * .orderBy(cars.brand, cars.color);\n\t\t * ```\n\t\t */\n\t\tfunction selectDistinctOn(on: (PgColumn | SQLWrapper)[]): PgAsyncSelectBuilder<undefined>;\n\t\tfunction selectDistinctOn<TSelection extends SelectedFields>(\n\t\t\ton: (PgColumn | SQLWrapper)[],\n\t\t\tfields: TSelection,\n\t\t): PgAsyncSelectBuilder<TSelection>;\n\t\tfunction selectDistinctOn<TSelection extends SelectedFields>(\n\t\t\ton: (PgColumn | SQLWrapper)[],\n\t\t\tfields?: TSelection,\n\t\t): PgAsyncSelectBuilder<TSelection | undefined> {\n\t\t\treturn new PgAsyncSelectBase({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: self.session,\n\t\t\t\tdialect: self.dialect,\n\t\t\t\twithList: queries,\n\t\t\t\tdistinct: { on },\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Creates an update query.\n\t\t *\n\t\t * Calling this method without `.where()` clause will update all rows in a table. The `.where()` clause specifies which rows should be updated.\n\t\t *\n\t\t * Use `.set()` method to specify which values to update.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t\t *\n\t\t * @param table The table to update.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Update all rows in the 'cars' table\n\t\t * await db.update(cars).set({ color: 'red' });\n\t\t *\n\t\t * // Update rows with filters and conditions\n\t\t * await db.update(cars).set({ color: 'red' }).where(eq(cars.brand, 'BMW'));\n\t\t *\n\t\t * // Update with returning clause\n\t\t * const updatedCar: Car[] = await db.update(cars)\n\t\t * .set({ color: 'red' })\n\t\t * .where(eq(cars.id, 1))\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction update<TTable extends PgTable>(table: TTable): PgUpdateBuilder<TTable, TQueryResult, PgAsyncUpdateHKT> {\n\t\t\treturn new PgUpdateBuilder(table, self.session, self.dialect, queries, PgAsyncUpdateBase);\n\t\t}\n\n\t\t/**\n\t\t * Creates an insert query.\n\t\t *\n\t\t * Calling this method will create new rows in a table. Use `.values()` method to specify which values to insert.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/insert}\n\t\t *\n\t\t * @param table The table to insert into.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Insert one row\n\t\t * await db.insert(cars).values({ brand: 'BMW' });\n\t\t *\n\t\t * // Insert multiple rows\n\t\t * await db.insert(cars).values([{ brand: 'BMW' }, { brand: 'Porsche' }]);\n\t\t *\n\t\t * // Insert with returning clause\n\t\t * const insertedCar: Car[] = await db.insert(cars)\n\t\t * .values({ brand: 'BMW' })\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction insert<TTable extends PgTable>(\n\t\t\ttable: TTable,\n\t\t): PgInsertBuilder<TTable, TQueryResult, false, PgAsyncInsertHKT> {\n\t\t\treturn new PgInsertBuilder(table, self.session, self.dialect, queries, undefined, PgAsyncInsertBase);\n\t\t}\n\n\t\t/**\n\t\t * Creates a delete query.\n\t\t *\n\t\t * Calling this method without `.where()` clause will delete all rows in a table. The `.where()` clause specifies which rows should be deleted.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t\t *\n\t\t * @param table The table to delete from.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Delete all rows in the 'cars' table\n\t\t * await db.delete(cars);\n\t\t *\n\t\t * // Delete rows with filters and conditions\n\t\t * await db.delete(cars).where(eq(cars.color, 'green'));\n\t\t *\n\t\t * // Delete with returning clause\n\t\t * const deletedCar: Car[] = await db.delete(cars)\n\t\t * .where(eq(cars.id, 1))\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction delete_<TTable extends PgTable>(table: TTable): PgAsyncDeleteBase<TTable, TQueryResult> {\n\t\t\treturn new PgAsyncDeleteBase(table, self.session, self.dialect, queries);\n\t\t}\n\n\t\treturn { select, selectDistinct, selectDistinctOn, update, insert, delete: delete_ };\n\t}\n\n\t/**\n\t * Creates a select query.\n\t *\n\t * Calling this method with no arguments will select all columns from the table. Pass a selection object to specify the columns you want to select.\n\t *\n\t * Use `.from()` method to specify which table to select from.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select}\n\t *\n\t * @param fields The selection object.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all columns and all rows from the 'cars' table\n\t * const allCars: Car[] = await db.select().from(cars);\n\t *\n\t * // Select specific columns and all rows from the 'cars' table\n\t * const carsIdsAndBrands: { id: number; brand: string }[] = await db.select({\n\t * id: cars.id,\n\t * brand: cars.brand\n\t * })\n\t * .from(cars);\n\t * ```\n\t *\n\t * Like in SQL, you can use arbitrary expressions as selection fields, not just table columns:\n\t *\n\t * ```ts\n\t * // Select specific columns along with expression and all rows from the 'cars' table\n\t * const carsIdsAndLowerNames: { id: number; lowerBrand: string }[] = await db.select({\n\t * id: cars.id,\n\t * lowerBrand: sql<string>`lower(${cars.brand})`,\n\t * })\n\t * .from(cars);\n\t * ```\n\t */\n\tselect(): PgAsyncSelectBuilder<undefined>;\n\tselect<TSelection extends SelectedFields>(fields: TSelection): PgAsyncSelectBuilder<TSelection>;\n\tselect<TSelection extends SelectedFields | undefined>(\n\t\tfields?: TSelection,\n\t): PgAsyncSelectBuilder<TSelection> {\n\t\treturn new PgAsyncSelectBase({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t\ttagged: this.tagged,\n\t\t}) as PgAsyncSelectBuilder<TSelection>;\n\t}\n\n\t/**\n\t * Adds `distinct` expression to the select query.\n\t *\n\t * Calling this method will return only unique values. When multiple columns are selected, it returns rows with unique combinations of values in these columns.\n\t *\n\t * Use `.from()` method to specify which table to select from.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t *\n\t * @param fields The selection object.\n\t *\n\t * @example\n\t * ```ts\n\t * // Select all unique rows from the 'cars' table\n\t * await db.selectDistinct()\n\t * .from(cars)\n\t * .orderBy(cars.id, cars.brand, cars.color);\n\t *\n\t * // Select all unique brands from the 'cars' table\n\t * await db.selectDistinct({ brand: cars.brand })\n\t * .from(cars)\n\t * .orderBy(cars.brand);\n\t * ```\n\t */\n\tselectDistinct(): PgAsyncSelectBuilder<undefined>;\n\tselectDistinct<TSelection extends SelectedFields>(fields: TSelection): PgAsyncSelectBuilder<TSelection>;\n\tselectDistinct<TSelection extends SelectedFields | undefined>(\n\t\tfields?: TSelection,\n\t): PgAsyncSelectBuilder<TSelection | undefined> {\n\t\treturn new PgAsyncSelectBase({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t\tdistinct: true,\n\t\t\ttagged: this.tagged,\n\t\t});\n\t}\n\n\t/**\n\t * Adds `distinct on` expression to the select query.\n\t *\n\t * Calling this method will specify how the unique rows are determined.\n\t *\n\t * Use `.from()` method to specify which table to select from.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t *\n\t * @param on The expression defining uniqueness.\n\t * @param fields The selection object.\n\t *\n\t * @example\n\t * ```ts\n\t * // Select the first row for each unique brand from the 'cars' table\n\t * await db.selectDistinctOn([cars.brand])\n\t * .from(cars)\n\t * .orderBy(cars.brand);\n\t *\n\t * // Selects the first occurrence of each unique car brand along with its color from the 'cars' table\n\t * await db.selectDistinctOn([cars.brand], { brand: cars.brand, color: cars.color })\n\t * .from(cars)\n\t * .orderBy(cars.brand, cars.color);\n\t * ```\n\t */\n\tselectDistinctOn(on: (PgColumn | SQLWrapper)[]): PgAsyncSelectBuilder<undefined>;\n\tselectDistinctOn<TSelection extends SelectedFields>(\n\t\ton: (PgColumn | SQLWrapper)[],\n\t\tfields: TSelection,\n\t): PgAsyncSelectBuilder<TSelection>;\n\tselectDistinctOn<TSelection extends SelectedFields | undefined>(\n\t\ton: (PgColumn | SQLWrapper)[],\n\t\tfields?: TSelection,\n\t): PgAsyncSelectBuilder<TSelection> {\n\t\treturn new PgAsyncSelectBase({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t\tdistinct: { on },\n\t\t\ttagged: this.tagged,\n\t\t});\n\t}\n\n\t/**\n\t * Creates an update query.\n\t *\n\t * Calling this method without `.where()` clause will update all rows in a table. The `.where()` clause specifies which rows should be updated.\n\t *\n\t * Use `.set()` method to specify which values to update.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t *\n\t * @param table The table to update.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Update all rows in the 'cars' table\n\t * await db.update(cars).set({ color: 'red' });\n\t *\n\t * // Update rows with filters and conditions\n\t * await db.update(cars).set({ color: 'red' }).where(eq(cars.brand, 'BMW'));\n\t *\n\t * // Update with returning clause\n\t * const updatedCar: Car[] = await db.update(cars)\n\t * .set({ color: 'red' })\n\t * .where(eq(cars.id, 1))\n\t * .returning();\n\t * ```\n\t */\n\tupdate<TTable extends PgTable>(table: TTable): PgUpdateBuilder<TTable, TQueryResult, PgAsyncUpdateHKT> {\n\t\treturn new PgUpdateBuilder(table, this.session, this.dialect, undefined, PgAsyncUpdateBase);\n\t}\n\n\t/**\n\t * Creates an insert query.\n\t *\n\t * Calling this method will create new rows in a table. Use `.values()` method to specify which values to insert.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert}\n\t *\n\t * @param table The table to insert into.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Insert one row\n\t * await db.insert(cars).values({ brand: 'BMW' });\n\t *\n\t * // Insert multiple rows\n\t * await db.insert(cars).values([{ brand: 'BMW' }, { brand: 'Porsche' }]);\n\t *\n\t * // Insert with returning clause\n\t * const insertedCar: Car[] = await db.insert(cars)\n\t * .values({ brand: 'BMW' })\n\t * .returning();\n\t * ```\n\t */\n\tinsert<TTable extends PgTable>(table: TTable): PgInsertBuilder<TTable, TQueryResult, false, PgAsyncInsertHKT> {\n\t\treturn new PgInsertBuilder(table, this.session, this.dialect, undefined, undefined, PgAsyncInsertBase);\n\t}\n\n\t/**\n\t * Creates a delete query.\n\t *\n\t * Calling this method without `.where()` clause will delete all rows in a table. The `.where()` clause specifies which rows should be deleted.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t *\n\t * @param table The table to delete from.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Delete all rows in the 'cars' table\n\t * await db.delete(cars);\n\t *\n\t * // Delete rows with filters and conditions\n\t * await db.delete(cars).where(eq(cars.color, 'green'));\n\t *\n\t * // Delete with returning clause\n\t * const deletedCar: Car[] = await db.delete(cars)\n\t * .where(eq(cars.id, 1))\n\t * .returning();\n\t * ```\n\t */\n\tdelete<TTable extends PgTable>(table: TTable): PgAsyncDeleteBase<TTable, TQueryResult> {\n\t\treturn new PgAsyncDeleteBase(table, this.session, this.dialect);\n\t}\n\n\trefreshMaterializedView<TView extends PgMaterializedView>(view: TView): PgAsyncRefreshMaterializedView<TQueryResult> {\n\t\treturn new PgAsyncRefreshMaterializedView(view, this.session, this.dialect);\n\t}\n\n\texecute<TRow extends Record<string, unknown> = Record<string, unknown>>(\n\t\tquery: SQLWrapper | string,\n\t): PgAsyncRaw<PgQueryResultKind<TQueryResult, TRow>> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tconst builtQuery = this.dialect.sqlToQuery(sequel);\n\t\tconst prepared = this.session.prepareQuery<\n\t\t\tPreparedQueryConfig & { execute: PgQueryResultKind<TQueryResult, TRow> }\n\t\t>(builtQuery, 'raw', false);\n\t\treturn new PgAsyncRaw(\n\t\t\t() => prepared.execute(),\n\t\t\tsequel,\n\t\t\tbuiltQuery,\n\t\t\t(result) => prepared.mapResult(result, true),\n\t\t);\n\t}\n\n\ttransaction: <T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TRelations>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig,\n\t) => Promise<T> = (tx, cfg) => this.session.transaction(tx, cfg);\n}\n\nexport type PgAsyncWithReplicas<Q> = Q & { $primary: Q; $replicas: Q[] };\n\nexport const withReplicas = <\n\tHKT extends PgQueryResultHKT,\n\tTRelations extends AnyRelations,\n\tQ extends PgAsyncDatabase<HKT, TRelations>,\n>(\n\tprimary: Q,\n\treplicas: [Q, ...Q[]],\n\tgetReplica: (replicas: Q[]) => Q = () => replicas[Math.floor(Math.random() * replicas.length)]!,\n): PgAsyncWithReplicas<Q> => {\n\tconst select: Q['select'] = (...args: []) => getReplica(replicas).select(...args);\n\tconst selectDistinct: Q['selectDistinct'] = (...args: []) => getReplica(replicas).selectDistinct(...args);\n\tconst selectDistinctOn: Q['selectDistinctOn'] = (...args: [any]) => getReplica(replicas).selectDistinctOn(...args);\n\tconst $count: Q['$count'] = (...args: [any]) => getReplica(replicas).$count(...args);\n\tconst _with: Q['with'] = (...args: any) => getReplica(replicas).with(...args);\n\tconst $with: Q['$with'] = (arg: any) => getReplica(replicas).$with(arg) as any;\n\n\tconst update: Q['update'] = (...args: [any]) => primary.update(...args);\n\tconst insert: Q['insert'] = (...args: [any]) => primary.insert(...args);\n\tconst $delete: Q['delete'] = (...args: [any]) => primary.delete(...args);\n\tconst execute: Q['execute'] = (...args: [any]) => primary.execute(...args);\n\tconst transaction: Q['transaction'] = (...args: [any]) => primary.transaction(...args);\n\n\tconst refreshMaterializedView: Q['refreshMaterializedView'] = (...args: [any]) =>\n\t\tprimary.refreshMaterializedView(...args);\n\n\treturn {\n\t\t...primary,\n\t\tupdate,\n\t\tinsert,\n\t\tdelete: $delete,\n\t\texecute,\n\t\ttransaction,\n\t\trefreshMaterializedView,\n\t\t$primary: primary,\n\t\t$replicas: replicas,\n\t\tselect,\n\t\tselectDistinct,\n\t\tselectDistinctOn,\n\t\t$count,\n\t\t$with,\n\t\twith: _with,\n\t\tget query() {\n\t\t\treturn getReplica(replicas).query;\n\t\t},\n\t};\n};\n"],"mappings":"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"}
|
package/pg-core/async/db.d.cts
CHANGED
|
@@ -25,6 +25,7 @@ import { PgAsyncSession, PgAsyncTransaction } from "./session.cjs";
|
|
|
25
25
|
|
|
26
26
|
//#region src/pg-core/async/db.d.ts
|
|
27
27
|
declare class PgAsyncDatabase<TQueryResult extends PgQueryResultHKT, TRelations extends AnyRelations = EmptyRelations> {
|
|
28
|
+
readonly tagged: boolean;
|
|
28
29
|
static readonly [entityKind]: string;
|
|
29
30
|
readonly _: {
|
|
30
31
|
readonly relations: TRelations;
|
|
@@ -35,7 +36,7 @@ declare class PgAsyncDatabase<TQueryResult extends PgQueryResultHKT, TRelations
|
|
|
35
36
|
|
|
36
37
|
dialect: PgDialect, /** @internal */
|
|
37
38
|
|
|
38
|
-
session: PgAsyncSession<any, any>, relations: TRelations, parseRqbJson?: boolean);
|
|
39
|
+
session: PgAsyncSession<any, any>, relations: TRelations, parseRqbJson?: boolean, tagged?: boolean);
|
|
39
40
|
/**
|
|
40
41
|
* Creates a subquery that defines a temporary named result set as a CTE.
|
|
41
42
|
*
|
package/pg-core/async/db.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ import { PgQueryResultHKT, PgQueryResultKind, PgTransactionConfig } from "../ses
|
|
|
25
25
|
|
|
26
26
|
//#region src/pg-core/async/db.d.ts
|
|
27
27
|
declare class PgAsyncDatabase<TQueryResult extends PgQueryResultHKT, TRelations extends AnyRelations = EmptyRelations> {
|
|
28
|
+
readonly tagged: boolean;
|
|
28
29
|
static readonly [entityKind]: string;
|
|
29
30
|
readonly _: {
|
|
30
31
|
readonly relations: TRelations;
|
|
@@ -35,7 +36,7 @@ declare class PgAsyncDatabase<TQueryResult extends PgQueryResultHKT, TRelations
|
|
|
35
36
|
|
|
36
37
|
dialect: PgDialect, /** @internal */
|
|
37
38
|
|
|
38
|
-
session: PgAsyncSession<any, any>, relations: TRelations, parseRqbJson?: boolean);
|
|
39
|
+
session: PgAsyncSession<any, any>, relations: TRelations, parseRqbJson?: boolean, tagged?: boolean);
|
|
39
40
|
/**
|
|
40
41
|
* Creates a subquery that defines a temporary named result set as a CTE.
|
|
41
42
|
*
|
package/pg-core/async/db.js
CHANGED
|
@@ -17,9 +17,10 @@ import { PgInsertBuilder, PgUpdateBuilder, QueryBuilder } from "../query-builder
|
|
|
17
17
|
var PgAsyncDatabase = class {
|
|
18
18
|
static [entityKind] = "PgAsyncDatabase";
|
|
19
19
|
query;
|
|
20
|
-
constructor(dialect, session, relations, parseRqbJson = false) {
|
|
20
|
+
constructor(dialect, session, relations, parseRqbJson = false, tagged = false) {
|
|
21
21
|
this.dialect = dialect;
|
|
22
22
|
this.session = session;
|
|
23
|
+
this.tagged = tagged;
|
|
23
24
|
this._ = {
|
|
24
25
|
relations,
|
|
25
26
|
session
|
|
@@ -107,7 +108,8 @@ var PgAsyncDatabase = class {
|
|
|
107
108
|
fields: fields ?? void 0,
|
|
108
109
|
session: self.session,
|
|
109
110
|
dialect: self.dialect,
|
|
110
|
-
withList: queries
|
|
111
|
+
withList: queries,
|
|
112
|
+
tagged: self.tagged
|
|
111
113
|
});
|
|
112
114
|
}
|
|
113
115
|
function selectDistinct(fields) {
|
|
@@ -225,7 +227,8 @@ var PgAsyncDatabase = class {
|
|
|
225
227
|
return new PgAsyncSelectBase({
|
|
226
228
|
fields: fields ?? void 0,
|
|
227
229
|
session: this.session,
|
|
228
|
-
dialect: this.dialect
|
|
230
|
+
dialect: this.dialect,
|
|
231
|
+
tagged: this.tagged
|
|
229
232
|
});
|
|
230
233
|
}
|
|
231
234
|
selectDistinct(fields) {
|
|
@@ -233,7 +236,8 @@ var PgAsyncDatabase = class {
|
|
|
233
236
|
fields: fields ?? void 0,
|
|
234
237
|
session: this.session,
|
|
235
238
|
dialect: this.dialect,
|
|
236
|
-
distinct: true
|
|
239
|
+
distinct: true,
|
|
240
|
+
tagged: this.tagged
|
|
237
241
|
});
|
|
238
242
|
}
|
|
239
243
|
selectDistinctOn(on, fields) {
|
|
@@ -241,7 +245,8 @@ var PgAsyncDatabase = class {
|
|
|
241
245
|
fields: fields ?? void 0,
|
|
242
246
|
session: this.session,
|
|
243
247
|
dialect: this.dialect,
|
|
244
|
-
distinct: { on }
|
|
248
|
+
distinct: { on },
|
|
249
|
+
tagged: this.tagged
|
|
245
250
|
});
|
|
246
251
|
}
|
|
247
252
|
/**
|