drizzle-orm 1.0.0-beta.22-aaec768 → 1.0.0-beta.22-c07a16e

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.
@@ -4,7 +4,7 @@ import { Field, TypeHint } from "@aws-sdk/client-rds-data";
4
4
 
5
5
  //#region src/aws-data-api/common/index.d.ts
6
6
  declare const typeHint: { [K in TypeHint]: K };
7
- declare function getValueFromDataApi(field: Field): string | number | boolean | string[] | number[] | Uint8Array<ArrayBufferLike> | boolean[] | _aws_sdk_client_rds_data0.ArrayValue[] | null;
7
+ declare function getValueFromDataApi(field: Field): string | number | boolean | string[] | Uint8Array<ArrayBufferLike> | number[] | boolean[] | _aws_sdk_client_rds_data0.ArrayValue[] | null;
8
8
  declare function typingsToAwsTypeHint(typings?: QueryTypingsValue): TypeHint | undefined;
9
9
  declare function toValueParam(value: any, typings?: QueryTypingsValue): {
10
10
  value: Field;
@@ -4,7 +4,7 @@ import { Field, TypeHint } from "@aws-sdk/client-rds-data";
4
4
 
5
5
  //#region src/aws-data-api/common/index.d.ts
6
6
  declare const typeHint: { [K in TypeHint]: K };
7
- declare function getValueFromDataApi(field: Field): string | number | boolean | string[] | number[] | Uint8Array<ArrayBufferLike> | boolean[] | _aws_sdk_client_rds_data0.ArrayValue[] | null;
7
+ declare function getValueFromDataApi(field: Field): string | number | boolean | string[] | Uint8Array<ArrayBufferLike> | number[] | boolean[] | _aws_sdk_client_rds_data0.ArrayValue[] | null;
8
8
  declare function typingsToAwsTypeHint(typings?: QueryTypingsValue): TypeHint | undefined;
9
9
  declare function toValueParam(value: any, typings?: QueryTypingsValue): {
10
10
  value: Field;
@@ -20,16 +20,8 @@ var BunSQLSession = class BunSQLSession extends __pg_core_async_session_ts.PgAsy
20
20
  }
21
21
  prepareQuery(query, mode, _name, mapper, queryMetadata, cacheConfig) {
22
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) => {
29
- if (mode === "arrays") return this.client.unsafe(query.sql, params).values();
30
- if (mode === "objects") return this.client.unsafe(query.sql, params);
31
- return this.client.unsafe(query.sql, params);
32
- }, query, mapper, mode, this.logger, this.cache, queryMetadata, cacheConfig);
23
+ const client = this.client;
24
+ return new __pg_core_async_session_ts.PgAsyncPreparedQuery(tagged ? mode === "arrays" ? (params) => params ? client(tagged, ...params).values() : client(tagged).values() : (params) => params ? client(tagged, ...params) : client(tagged) : mode === "arrays" ? (params) => client.unsafe(query.sql, params).values() : (params) => client.unsafe(query.sql, params), query, mapper, mode, this.logger, this.cache, queryMetadata, cacheConfig);
33
25
  }
34
26
  transaction(transaction, config) {
35
27
  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 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"}
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 client = this.client;\n\t\tconst executor = tagged\n\t\t\t? mode === 'arrays'\n\t\t\t\t? (params?: unknown[]) => params ? client(tagged, ...params).values() : client(tagged).values()\n\t\t\t\t: (params?: unknown[]) => params ? client(tagged, ...params) : client(tagged)\n\t\t\t: mode === 'arrays'\n\t\t\t? (params?: unknown[]) => client.unsafe(query.sql, params).values()\n\t\t\t: (params?: unknown[]) => client.unsafe(query.sql, params);\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;EACzC,MAAM,SAAS,KAAK;AASpB,SAAO,IAAIC,gDARM,SACd,SAAS,YACP,WAAuB,SAAS,OAAO,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,OAAO,CAAC,QAAQ,IAC5F,WAAuB,SAAS,OAAO,QAAQ,GAAG,OAAO,GAAG,OAAO,OAAO,GAC5E,SAAS,YACR,WAAuB,OAAO,OAAO,MAAM,KAAK,OAAO,CAAC,QAAQ,IAChE,WAAuB,OAAO,OAAO,MAAM,KAAK,OAAO,EAI1D,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"}
@@ -18,16 +18,8 @@ var BunSQLSession = class BunSQLSession extends PgAsyncSession {
18
18
  }
19
19
  prepareQuery(query, mode, _name, mapper, queryMetadata, cacheConfig) {
20
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) => {
27
- if (mode === "arrays") return this.client.unsafe(query.sql, params).values();
28
- if (mode === "objects") return this.client.unsafe(query.sql, params);
29
- return this.client.unsafe(query.sql, params);
30
- }, query, mapper, mode, this.logger, this.cache, queryMetadata, cacheConfig);
21
+ const client = this.client;
22
+ return new PgAsyncPreparedQuery(tagged ? mode === "arrays" ? (params) => params ? client(tagged, ...params).values() : client(tagged).values() : (params) => params ? client(tagged, ...params) : client(tagged) : mode === "arrays" ? (params) => client.unsafe(query.sql, params).values() : (params) => client.unsafe(query.sql, params), query, mapper, mode, this.logger, this.cache, queryMetadata, cacheConfig);
31
23
  }
32
24
  transaction(transaction, config) {
33
25
  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 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"}
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 client = this.client;\n\t\tconst executor = tagged\n\t\t\t? mode === 'arrays'\n\t\t\t\t? (params?: unknown[]) => params ? client(tagged, ...params).values() : client(tagged).values()\n\t\t\t\t: (params?: unknown[]) => params ? client(tagged, ...params) : client(tagged)\n\t\t\t: mode === 'arrays'\n\t\t\t? (params?: unknown[]) => client.unsafe(query.sql, params).values()\n\t\t\t: (params?: unknown[]) => client.unsafe(query.sql, params);\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;EACzC,MAAM,SAAS,KAAK;AASpB,SAAO,IAAI,qBARM,SACd,SAAS,YACP,WAAuB,SAAS,OAAO,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,OAAO,CAAC,QAAQ,IAC5F,WAAuB,SAAS,OAAO,QAAQ,GAAG,OAAO,GAAG,OAAO,OAAO,GAC5E,SAAS,YACR,WAAuB,OAAO,OAAO,MAAM,KAAK,OAAO,CAAC,QAAQ,IAChE,WAAuB,OAAO,OAAO,MAAM,KAAK,OAAO,EAI1D,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: () => "explicit" | "all";
11
+ strategy: () => "all" | "explicit";
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: () => "explicit" | "all";
11
+ strategy: () => "all" | "explicit";
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(): "explicit" | "all";
47
+ strategy(): "all" | "explicit";
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>;
@@ -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(): "explicit" | "all";
47
+ strategy(): "all" | "explicit";
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drizzle-orm",
3
- "version": "1.0.0-beta.22-aaec768",
3
+ "version": "1.0.0-beta.22-c07a16e",
4
4
  "description": "Drizzle ORM package for SQL databases",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -32,6 +32,11 @@ var PgAsyncPreparedQuery = class extends require_pg_core_session.PgBasePreparedQ
32
32
  if (!this.cacheConfig?.enabled) this.cacheConfig = void 0;
33
33
  }
34
34
  execute(placeholderValues = {}) {
35
+ if (this.cacheConfig === void 0 && (this.cache === void 0 || (0, __entity_ts.is)(this.cache, __cache_core_cache_ts.NoopCache)) && !__tracing_ts.hasTelemetry) {
36
+ const params = this.query.params.length === 0 ? this.query.params : (0, __sql_sql_ts.fillPlaceholders)(this.query.params, placeholderValues);
37
+ const p = this.executor(params);
38
+ return this.mapper ? p.then(this.mapper) : p;
39
+ }
35
40
  return __tracing_ts.tracer.startActiveSpan("drizzle.execute", async (span) => {
36
41
  const params = (0, __sql_sql_ts.fillPlaceholders)(this.query.params, placeholderValues);
37
42
  const { query: { sql }, mapper } = this;
@@ -1 +1 @@
1
- {"version":3,"file":"session.cjs","names":["PgBasePreparedQuery","entityKind","tracer","NoopCache","DrizzleQueryError","PgSession","PgAsyncDatabase","TransactionRollbackError","sql"],"sources":["../../../src/pg-core/async/session.ts"],"sourcesContent":["import { type Cache, NoopCache, strategyFor } from '~/cache/core/cache.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { is } from '~/entity.ts';\nimport { TransactionRollbackError } from '~/errors.ts';\nimport { DrizzleQueryError } from '~/errors.ts';\nimport type { Logger } from '~/logger.ts';\nimport type { MigrationConfig, MigrationMeta, MigratorInitFailResponse } from '~/migrator.ts';\nimport { getMigrationsToRun } from '~/migrator.utils.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { fillPlaceholders, type Query, type SQL, sql } from '~/sql/sql.ts';\nimport { tracer } from '~/tracing.ts';\nimport { upgradeIfNeeded } from '~/up-migrations/pg.ts';\nimport { assertUnreachable } from '~/utils.ts';\nimport type { PgDialect } from '../dialect.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '../session.ts';\nimport { PgBasePreparedQuery, PgSession } from '../session.ts';\nimport { PgAsyncDatabase } from './db.ts';\n\nexport class PgAsyncPreparedQuery<T extends PreparedQueryConfig> extends PgBasePreparedQuery {\n\tstatic override readonly [entityKind]: string = 'PgAsyncPreparedQuery';\n\n\t/** @internal */\n\treadonly mapper: {\n\t\t(rows: any[]): any;\n\t\tbody?: string;\n\t} | undefined;\n\n\tconstructor(\n\t\tprotected executor: (params?: unknown[]) => Promise<any>,\n\t\tquery: Query,\n\t\tmapper: ((rows: any[]) => any) | undefined,\n\t\treadonly mode: 'arrays' | 'objects' | 'raw',\n\t\tprotected logger: Logger,\n\t\t// cache instance\n\t\tprotected cache: Cache | undefined,\n\t\t// per query related metadata\n\t\tprotected queryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\t// config that was passed through $withCache\n\t\tprotected cacheConfig: WithCacheConfig | undefined,\n\t) {\n\t\tsuper(query);\n\t\tthis.mapper = mapper;\n\t\tif (cache && cache.strategy() === 'all' && cacheConfig === undefined) {\n\t\t\tthis.cacheConfig = { enabled: true, autoInvalidate: true };\n\t\t}\n\t\tif (!this.cacheConfig?.enabled) {\n\t\t\tthis.cacheConfig = undefined;\n\t\t}\n\t}\n\n\toverride execute(placeholderValues: Record<string, unknown> = {}): Promise<T['execute']> {\n\t\treturn tracer.startActiveSpan('drizzle.execute', async (span) => {\n\t\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\t\t\tconst { query: { sql }, mapper } = this;\n\n\t\t\tspan?.setAttributes({\n\t\t\t\t'drizzle.query.text': sql,\n\t\t\t\t'drizzle.query.params': JSON.stringify(params),\n\t\t\t});\n\n\t\t\tthis.logger.logQuery(sql, params);\n\n\t\t\tconst query = tracer.startActiveSpan('drizzle.driver.execute', async (span) => {\n\t\t\t\tspan?.setAttributes({\n\t\t\t\t\t'drizzle.query.text': sql,\n\t\t\t\t\t'drizzle.query.params': JSON.stringify(params),\n\t\t\t\t});\n\n\t\t\t\t// return await so tracer captures time accurately\n\t\t\t\treturn await this.queryWithCache(sql, params, () => this.executor(params));\n\t\t\t});\n\n\t\t\tif (!mapper) return query;\n\n\t\t\treturn query.then((rows) => tracer.startActiveSpan('drizzle.mapResponse', () => mapper(rows as unknown[])));\n\t\t});\n\t}\n\n\t/** @internal */\n\tprotected async queryWithCache<T>(\n\t\tqueryString: string,\n\t\tparams: any[],\n\t\tquery: () => Promise<T>,\n\t): Promise<T> {\n\t\tconst cacheStrat = this.cache !== undefined && !is(this.cache, NoopCache)\n\t\t\t? await strategyFor(queryString, params, this.queryMetadata, this.cacheConfig)\n\t\t\t: { type: 'skip' as const };\n\n\t\tif (cacheStrat.type === 'skip') {\n\t\t\treturn query().catch((e) => {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t});\n\t\t}\n\n\t\tconst cache = this.cache!;\n\n\t\t// For mutate queries, we should query the database, wait for a response, and then perform invalidation\n\t\tif (cacheStrat.type === 'invalidate') {\n\t\t\treturn Promise.all([\n\t\t\t\tquery(),\n\t\t\t\tcache.onMutate({ tables: cacheStrat.tables }),\n\t\t\t]).then((res) => res[0]).catch((e) => {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t});\n\t\t}\n\n\t\tif (cacheStrat.type === 'try') {\n\t\t\tconst { tables, key, isTag, autoInvalidate, config } = cacheStrat;\n\t\t\tconst fromCache = await cache.get(\n\t\t\t\tkey,\n\t\t\t\ttables,\n\t\t\t\tisTag,\n\t\t\t\tautoInvalidate,\n\t\t\t);\n\n\t\t\tif (fromCache === undefined) {\n\t\t\t\tconst result = await query().catch((e) => {\n\t\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t\t});\n\t\t\t\t// put actual key\n\t\t\t\tawait cache.put(\n\t\t\t\t\tkey,\n\t\t\t\t\tresult,\n\t\t\t\t\t// make sure we send tables that were used in a query only if user wants to invalidate it on each write\n\t\t\t\t\tautoInvalidate ? tables : [],\n\t\t\t\t\tisTag,\n\t\t\t\t\tconfig,\n\t\t\t\t);\n\t\t\t\t// put flag if we should invalidate or not\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\treturn fromCache as unknown as T;\n\t\t}\n\n\t\tassertUnreachable(cacheStrat);\n\t}\n}\n\nexport abstract class PgAsyncSession<\n\tTQueryResult extends PgQueryResultHKT = PgQueryResultHKT,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgSession {\n\tstatic override readonly [entityKind]: string = 'PgAsyncSession';\n\n\tabstract override prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tmode: 'arrays' | 'objects' | 'raw',\n\t\tname: string | boolean,\n\t\tmapper?: (rows: any[]) => any,\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\n\toverride execute<T>(query: SQL): Promise<T[]> {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\tconst prepared = tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T[] }>(\n\t\t\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\t\t\t'raw',\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn prepared.execute();\n\t\t});\n\t}\n\n\toverride arrays<T>(query: SQL): Promise<T[]> {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\tconst prepared = tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T[] }>(\n\t\t\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\t\t\t'arrays',\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn prepared.execute();\n\t\t});\n\t}\n\n\toverride objects<T>(query: SQL): Promise<T[]> {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\tconst prepared = tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T[] }>(\n\t\t\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\t\t\t'objects',\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn prepared.execute();\n\t\t});\n\t}\n\n\tabstract transaction<T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TRelations>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig,\n\t): Promise<T>;\n}\n\nexport abstract class PgAsyncTransaction<\n\tTQueryResult extends PgQueryResultHKT,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgAsyncDatabase<TQueryResult, TRelations> {\n\tstatic override readonly [entityKind]: string = 'PgAsyncTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\tsession: PgAsyncSession<any, any>,\n\t\trelations: TRelations,\n\t\tprotected readonly nestedIndex = 0,\n\t\tparseRqbJson: boolean | undefined,\n\t) {\n\t\tsuper(dialect, session, relations, parseRqbJson);\n\t}\n\n\trollback(): never {\n\t\tthrow new TransactionRollbackError();\n\t}\n\n\t/** @internal */\n\tgetTransactionConfigSQL(config: PgTransactionConfig): SQL {\n\t\tconst chunks: string[] = [];\n\t\tif (config.isolationLevel) {\n\t\t\tchunks.push(`isolation level ${config.isolationLevel}`);\n\t\t}\n\t\tif (config.accessMode) {\n\t\t\tchunks.push(config.accessMode);\n\t\t}\n\t\tif (typeof config.deferrable === 'boolean') {\n\t\t\tchunks.push(config.deferrable ? 'deferrable' : 'not deferrable');\n\t\t}\n\t\treturn sql.raw(chunks.join(' '));\n\t}\n\n\tsetTransaction(config: PgTransactionConfig): Promise<unknown> {\n\t\treturn this.session.execute<void>(sql`set transaction ${this.getTransactionConfigSQL(config)}`);\n\t}\n\n\tabstract override transaction: <T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TRelations>) => Promise<T>,\n\t) => Promise<T>;\n}\n\nexport async function migrate(\n\tmigrations: MigrationMeta[],\n\tdb: PgAsyncDatabase<PgQueryResultHKT, any>,\n\tconfig: string | MigrationConfig,\n): Promise<void | MigratorInitFailResponse> {\n\tconst migrationsTable = typeof config === 'string'\n\t\t? '__drizzle_migrations'\n\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\tconst migrationsSchema = typeof config === 'string' ? 'drizzle' : config.migrationsSchema ?? 'drizzle';\n\n\tawait db.execute(sql`CREATE SCHEMA IF NOT EXISTS ${sql.identifier(migrationsSchema)}`);\n\n\t// Detect DB version and upgrade table schema if needed\n\tconst { newDb } = await upgradeIfNeeded(migrationsSchema, migrationsTable, db, migrations);\n\n\t// Create table with latest schema (version 1) if this is a new database\n\tif (newDb) {\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at bigint,\n\t\t\t\tname text,\n\t\t\t\tapplied_at timestamp with time zone DEFAULT now()\n\t\t\t)\n\t\t`;\n\t\tawait db.execute(migrationTableCreate);\n\t}\n\n\tconst dbMigrations = await db.session.objects<{ id: number; hash: string; created_at: string; name: string }>(\n\t\tsql`select id, hash, created_at, name from ${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`,\n\t);\n\n\tif (typeof config === 'object' && config.init) {\n\t\tif (dbMigrations.length) {\n\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t}\n\n\t\tif (migrations.length > 1) {\n\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t}\n\n\t\tconst [migration] = migrations;\n\n\t\tif (!migration) return;\n\n\t\tawait db.execute(\n\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t} (\"hash\", \"created_at\", \"name\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name ?? null})`,\n\t\t);\n\n\t\treturn;\n\t}\n\n\tconst migrationsToRun = getMigrationsToRun({ localMigrations: migrations, dbMigrations });\n\tawait db.transaction(async (tx) => {\n\t\tfor (const migration of migrationsToRun) {\n\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\tawait tx.execute(sql.raw(stmt));\n\t\t\t}\n\t\t\tawait tx.execute(\n\t\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t} (\"hash\", \"created_at\", \"name\") values(${migration.hash}, ${migration.folderMillis}, ${\n\t\t\t\t\tmigration.name ?? null\n\t\t\t\t})`,\n\t\t\t);\n\t\t}\n\t});\n}\n"],"mappings":";;;;;;;;;;;;;;AAmBA,IAAa,uBAAb,cAAyEA,4CAAoB;CAC5F,QAA0BC,0BAAsB;;CAGhD,AAAS;CAKT,YACC,AAAU,UACV,OACA,QACA,AAAS,MACT,AAAU,QAEV,AAAU,OAEV,AAAU,eAKV,AAAU,aACT;AACD,QAAM,MAAM;EAfF;EAGD;EACC;EAEA;EAEA;EAKA;AAGV,OAAK,SAAS;AACd,MAAI,SAAS,MAAM,UAAU,KAAK,SAAS,gBAAgB,OAC1D,MAAK,cAAc;GAAE,SAAS;GAAM,gBAAgB;GAAM;AAE3D,MAAI,CAAC,KAAK,aAAa,QACtB,MAAK,cAAc;;CAIrB,AAAS,QAAQ,oBAA6C,EAAE,EAAyB;AACxF,SAAOC,oBAAO,gBAAgB,mBAAmB,OAAO,SAAS;GAChE,MAAM,4CAA0B,KAAK,MAAM,QAAQ,kBAAkB;GACrE,MAAM,EAAE,OAAO,EAAE,OAAO,WAAW;AAEnC,SAAM,cAAc;IACnB,sBAAsB;IACtB,wBAAwB,KAAK,UAAU,OAAO;IAC9C,CAAC;AAEF,QAAK,OAAO,SAAS,KAAK,OAAO;GAEjC,MAAM,QAAQA,oBAAO,gBAAgB,0BAA0B,OAAO,SAAS;AAC9E,UAAM,cAAc;KACnB,sBAAsB;KACtB,wBAAwB,KAAK,UAAU,OAAO;KAC9C,CAAC;AAGF,WAAO,MAAM,KAAK,eAAe,KAAK,cAAc,KAAK,SAAS,OAAO,CAAC;KACzE;AAEF,OAAI,CAAC,OAAQ,QAAO;AAEpB,UAAO,MAAM,MAAM,SAASA,oBAAO,gBAAgB,6BAA6B,OAAO,KAAkB,CAAC,CAAC;IAC1G;;;CAIH,MAAgB,eACf,aACA,QACA,OACa;EACb,MAAM,aAAa,KAAK,UAAU,UAAa,qBAAI,KAAK,OAAOC,gCAAU,GACtE,6CAAkB,aAAa,QAAQ,KAAK,eAAe,KAAK,YAAY,GAC5E,EAAE,MAAM,QAAiB;AAE5B,MAAI,WAAW,SAAS,OACvB,QAAO,OAAO,CAAC,OAAO,MAAM;AAC3B,SAAM,IAAIC,8BAAkB,aAAa,QAAQ,EAAW;IAC3D;EAGH,MAAM,QAAQ,KAAK;AAGnB,MAAI,WAAW,SAAS,aACvB,QAAO,QAAQ,IAAI,CAClB,OAAO,EACP,MAAM,SAAS,EAAE,QAAQ,WAAW,QAAQ,CAAC,CAC7C,CAAC,CAAC,MAAM,QAAQ,IAAI,GAAG,CAAC,OAAO,MAAM;AACrC,SAAM,IAAIA,8BAAkB,aAAa,QAAQ,EAAW;IAC3D;AAGH,MAAI,WAAW,SAAS,OAAO;GAC9B,MAAM,EAAE,QAAQ,KAAK,OAAO,gBAAgB,WAAW;GACvD,MAAM,YAAY,MAAM,MAAM,IAC7B,KACA,QACA,OACA,eACA;AAED,OAAI,cAAc,QAAW;IAC5B,MAAM,SAAS,MAAM,OAAO,CAAC,OAAO,MAAM;AACzC,WAAM,IAAIA,8BAAkB,aAAa,QAAQ,EAAW;MAC3D;AAEF,UAAM,MAAM,IACX,KACA,QAEA,iBAAiB,SAAS,EAAE,EAC5B,OACA,OACA;AAED,WAAO;;AAGR,UAAO;;AAGR,oCAAkB,WAAW;;;AAI/B,IAAsB,iBAAtB,cAGUC,kCAAU;CACnB,QAA0BJ,0BAAsB;CAchD,AAAS,QAAW,OAA0B;AAC7C,SAAOC,oBAAO,gBAAgB,2BAA2B;AASxD,UARiBA,oBAAO,gBAAgB,8BAA8B;AACrE,WAAO,KAAK,aACX,KAAK,QAAQ,WAAW,MAAM,EAC9B,OACA,MACA;KACA,CAEc,SAAS;IACxB;;CAGH,AAAS,OAAU,OAA0B;AAC5C,SAAOA,oBAAO,gBAAgB,2BAA2B;AASxD,UARiBA,oBAAO,gBAAgB,8BAA8B;AACrE,WAAO,KAAK,aACX,KAAK,QAAQ,WAAW,MAAM,EAC9B,UACA,MACA;KACA,CAEc,SAAS;IACxB;;CAGH,AAAS,QAAW,OAA0B;AAC7C,SAAOA,oBAAO,gBAAgB,2BAA2B;AASxD,UARiBA,oBAAO,gBAAgB,8BAA8B;AACrE,WAAO,KAAK,aACX,KAAK,QAAQ,WAAW,MAAM,EAC9B,WACA,MACA;KACA,CAEc,SAAS;IACxB;;;AASJ,IAAsB,qBAAtB,cAGUI,yCAA0C;CACnD,QAA0BL,0BAAsB;CAEhD,YACC,SACA,SACA,WACA,AAAmB,cAAc,GACjC,cACC;AACD,QAAM,SAAS,SAAS,WAAW,aAAa;EAH7B;;CAMpB,WAAkB;AACjB,QAAM,IAAIM,sCAA0B;;;CAIrC,wBAAwB,QAAkC;EACzD,MAAM,SAAmB,EAAE;AAC3B,MAAI,OAAO,eACV,QAAO,KAAK,mBAAmB,OAAO,iBAAiB;AAExD,MAAI,OAAO,WACV,QAAO,KAAK,OAAO,WAAW;AAE/B,MAAI,OAAO,OAAO,eAAe,UAChC,QAAO,KAAK,OAAO,aAAa,eAAe,iBAAiB;AAEjE,SAAOC,iBAAI,IAAI,OAAO,KAAK,IAAI,CAAC;;CAGjC,eAAe,QAA+C;AAC7D,SAAO,KAAK,QAAQ,QAAc,gBAAG,mBAAmB,KAAK,wBAAwB,OAAO,GAAG;;;AAQjG,eAAsB,QACrB,YACA,IACA,QAC2C;CAC3C,MAAM,kBAAkB,OAAO,WAAW,WACvC,yBACA,OAAO,mBAAmB;CAC7B,MAAM,mBAAmB,OAAO,WAAW,WAAW,YAAY,OAAO,oBAAoB;AAE7F,OAAM,GAAG,QAAQ,gBAAG,+BAA+BA,iBAAI,WAAW,iBAAiB,GAAG;CAGtF,MAAM,EAAE,UAAU,iDAAsB,kBAAkB,iBAAiB,IAAI,WAAW;AAG1F,KAAI,OAAO;EACV,MAAM,uBAAuB,gBAAG;gCACFA,iBAAI,WAAW,iBAAiB,CAAC,GAAGA,iBAAI,WAAW,gBAAgB,CAAC;;;;;;;;AAQlG,QAAM,GAAG,QAAQ,qBAAqB;;CAGvC,MAAM,eAAe,MAAM,GAAG,QAAQ,QACrC,gBAAG,0CAA0CA,iBAAI,WAAW,iBAAiB,CAAC,GAAGA,iBAAI,WAAW,gBAAgB,GAChH;AAED,KAAI,OAAO,WAAW,YAAY,OAAO,MAAM;AAC9C,MAAI,aAAa,OAChB,QAAO,EAAE,UAAU,sBAA+B;AAGnD,MAAI,WAAW,SAAS,EACvB,QAAO,EAAE,UAAU,mBAA4B;EAGhD,MAAM,CAAC,aAAa;AAEpB,MAAI,CAAC,UAAW;AAEhB,QAAM,GAAG,QACR,gBAAG,eAAeA,iBAAI,WAAW,iBAAiB,CAAC,GAClDA,iBAAI,WAAW,gBAAgB,CAC/B,yCAAyC,UAAU,KAAK,IAAI,UAAU,aAAa,IAAI,UAAU,QAAQ,KAAK,GAC/G;AAED;;CAGD,MAAM,8DAAqC;EAAE,iBAAiB;EAAY;EAAc,CAAC;AACzF,OAAM,GAAG,YAAY,OAAO,OAAO;AAClC,OAAK,MAAM,aAAa,iBAAiB;AACxC,QAAK,MAAM,QAAQ,UAAU,IAC5B,OAAM,GAAG,QAAQA,iBAAI,IAAI,KAAK,CAAC;AAEhC,SAAM,GAAG,QACR,gBAAG,eAAeA,iBAAI,WAAW,iBAAiB,CAAC,GAClDA,iBAAI,WAAW,gBAAgB,CAC/B,yCAAyC,UAAU,KAAK,IAAI,UAAU,aAAa,IACnF,UAAU,QAAQ,KAClB,GACD;;GAED"}
1
+ {"version":3,"file":"session.cjs","names":["PgBasePreparedQuery","entityKind","NoopCache","hasTelemetry","tracer","DrizzleQueryError","PgSession","PgAsyncDatabase","TransactionRollbackError","sql"],"sources":["../../../src/pg-core/async/session.ts"],"sourcesContent":["import { type Cache, NoopCache, strategyFor } from '~/cache/core/cache.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { is } from '~/entity.ts';\nimport { TransactionRollbackError } from '~/errors.ts';\nimport { DrizzleQueryError } from '~/errors.ts';\nimport type { Logger } from '~/logger.ts';\nimport type { MigrationConfig, MigrationMeta, MigratorInitFailResponse } from '~/migrator.ts';\nimport { getMigrationsToRun } from '~/migrator.utils.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { fillPlaceholders, type Query, type SQL, sql } from '~/sql/sql.ts';\nimport { hasTelemetry, tracer } from '~/tracing.ts';\nimport { upgradeIfNeeded } from '~/up-migrations/pg.ts';\nimport { assertUnreachable } from '~/utils.ts';\nimport type { PgDialect } from '../dialect.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '../session.ts';\nimport { PgBasePreparedQuery, PgSession } from '../session.ts';\nimport { PgAsyncDatabase } from './db.ts';\n\nexport class PgAsyncPreparedQuery<T extends PreparedQueryConfig> extends PgBasePreparedQuery {\n\tstatic override readonly [entityKind]: string = 'PgAsyncPreparedQuery';\n\n\t/** @internal */\n\treadonly mapper: {\n\t\t(rows: any[]): any;\n\t\tbody?: string;\n\t} | undefined;\n\n\tconstructor(\n\t\tprotected executor: (params?: unknown[]) => Promise<any>,\n\t\tquery: Query,\n\t\tmapper: ((rows: any[]) => any) | undefined,\n\t\treadonly mode: 'arrays' | 'objects' | 'raw',\n\t\tprotected logger: Logger,\n\t\t// cache instance\n\t\tprotected cache: Cache | undefined,\n\t\t// per query related metadata\n\t\tprotected queryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\t// config that was passed through $withCache\n\t\tprotected cacheConfig: WithCacheConfig | undefined,\n\t) {\n\t\tsuper(query);\n\t\tthis.mapper = mapper;\n\t\tif (cache && cache.strategy() === 'all' && cacheConfig === undefined) {\n\t\t\tthis.cacheConfig = { enabled: true, autoInvalidate: true };\n\t\t}\n\t\tif (!this.cacheConfig?.enabled) {\n\t\t\tthis.cacheConfig = undefined;\n\t\t}\n\t}\n\n\toverride execute(placeholderValues: Record<string, unknown> = {}): Promise<T['execute']> {\n\t\tconst fast = this.cacheConfig === undefined\n\t\t\t&& (this.cache === undefined || is(this.cache, NoopCache))\n\t\t\t&& !hasTelemetry;\n\n\t\tif (fast) {\n\t\t\tconst params = this.query.params.length === 0\n\t\t\t\t? this.query.params\n\t\t\t\t: fillPlaceholders(this.query.params, placeholderValues);\n\t\t\tconst p = this.executor(params);\n\t\t\treturn this.mapper ? p.then(this.mapper) : p;\n\t\t}\n\n\t\treturn tracer.startActiveSpan('drizzle.execute', async (span) => {\n\t\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\t\t\tconst { query: { sql }, mapper } = this;\n\n\t\t\tspan?.setAttributes({\n\t\t\t\t'drizzle.query.text': sql,\n\t\t\t\t'drizzle.query.params': JSON.stringify(params),\n\t\t\t});\n\n\t\t\tthis.logger.logQuery(sql, params);\n\n\t\t\tconst query = tracer.startActiveSpan('drizzle.driver.execute', async (span) => {\n\t\t\t\tspan?.setAttributes({\n\t\t\t\t\t'drizzle.query.text': sql,\n\t\t\t\t\t'drizzle.query.params': JSON.stringify(params),\n\t\t\t\t});\n\n\t\t\t\t// return await so tracer captures time accurately\n\t\t\t\treturn await this.queryWithCache(sql, params, () => this.executor(params));\n\t\t\t});\n\n\t\t\tif (!mapper) return query;\n\n\t\t\treturn query.then((rows) => tracer.startActiveSpan('drizzle.mapResponse', () => mapper(rows as unknown[])));\n\t\t});\n\t}\n\n\t/** @internal */\n\tprotected async queryWithCache<T>(\n\t\tqueryString: string,\n\t\tparams: any[],\n\t\tquery: () => Promise<T>,\n\t): Promise<T> {\n\t\tconst cacheStrat = this.cache !== undefined && !is(this.cache, NoopCache)\n\t\t\t? await strategyFor(queryString, params, this.queryMetadata, this.cacheConfig)\n\t\t\t: { type: 'skip' as const };\n\n\t\tif (cacheStrat.type === 'skip') {\n\t\t\treturn query().catch((e) => {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t});\n\t\t}\n\n\t\tconst cache = this.cache!;\n\n\t\t// For mutate queries, we should query the database, wait for a response, and then perform invalidation\n\t\tif (cacheStrat.type === 'invalidate') {\n\t\t\treturn Promise.all([\n\t\t\t\tquery(),\n\t\t\t\tcache.onMutate({ tables: cacheStrat.tables }),\n\t\t\t]).then((res) => res[0]).catch((e) => {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t});\n\t\t}\n\n\t\tif (cacheStrat.type === 'try') {\n\t\t\tconst { tables, key, isTag, autoInvalidate, config } = cacheStrat;\n\t\t\tconst fromCache = await cache.get(\n\t\t\t\tkey,\n\t\t\t\ttables,\n\t\t\t\tisTag,\n\t\t\t\tautoInvalidate,\n\t\t\t);\n\n\t\t\tif (fromCache === undefined) {\n\t\t\t\tconst result = await query().catch((e) => {\n\t\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t\t});\n\t\t\t\t// put actual key\n\t\t\t\tawait cache.put(\n\t\t\t\t\tkey,\n\t\t\t\t\tresult,\n\t\t\t\t\t// make sure we send tables that were used in a query only if user wants to invalidate it on each write\n\t\t\t\t\tautoInvalidate ? tables : [],\n\t\t\t\t\tisTag,\n\t\t\t\t\tconfig,\n\t\t\t\t);\n\t\t\t\t// put flag if we should invalidate or not\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\treturn fromCache as unknown as T;\n\t\t}\n\n\t\tassertUnreachable(cacheStrat);\n\t}\n}\n\nexport abstract class PgAsyncSession<\n\tTQueryResult extends PgQueryResultHKT = PgQueryResultHKT,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgSession {\n\tstatic override readonly [entityKind]: string = 'PgAsyncSession';\n\n\tabstract override prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tmode: 'arrays' | 'objects' | 'raw',\n\t\tname: string | boolean,\n\t\tmapper?: (rows: any[]) => any,\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\n\toverride execute<T>(query: SQL): Promise<T[]> {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\tconst prepared = tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T[] }>(\n\t\t\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\t\t\t'raw',\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn prepared.execute();\n\t\t});\n\t}\n\n\toverride arrays<T>(query: SQL): Promise<T[]> {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\tconst prepared = tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T[] }>(\n\t\t\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\t\t\t'arrays',\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn prepared.execute();\n\t\t});\n\t}\n\n\toverride objects<T>(query: SQL): Promise<T[]> {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\tconst prepared = tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T[] }>(\n\t\t\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\t\t\t'objects',\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn prepared.execute();\n\t\t});\n\t}\n\n\tabstract transaction<T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TRelations>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig,\n\t): Promise<T>;\n}\n\nexport abstract class PgAsyncTransaction<\n\tTQueryResult extends PgQueryResultHKT,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgAsyncDatabase<TQueryResult, TRelations> {\n\tstatic override readonly [entityKind]: string = 'PgAsyncTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\tsession: PgAsyncSession<any, any>,\n\t\trelations: TRelations,\n\t\tprotected readonly nestedIndex = 0,\n\t\tparseRqbJson: boolean | undefined,\n\t) {\n\t\tsuper(dialect, session, relations, parseRqbJson);\n\t}\n\n\trollback(): never {\n\t\tthrow new TransactionRollbackError();\n\t}\n\n\t/** @internal */\n\tgetTransactionConfigSQL(config: PgTransactionConfig): SQL {\n\t\tconst chunks: string[] = [];\n\t\tif (config.isolationLevel) {\n\t\t\tchunks.push(`isolation level ${config.isolationLevel}`);\n\t\t}\n\t\tif (config.accessMode) {\n\t\t\tchunks.push(config.accessMode);\n\t\t}\n\t\tif (typeof config.deferrable === 'boolean') {\n\t\t\tchunks.push(config.deferrable ? 'deferrable' : 'not deferrable');\n\t\t}\n\t\treturn sql.raw(chunks.join(' '));\n\t}\n\n\tsetTransaction(config: PgTransactionConfig): Promise<unknown> {\n\t\treturn this.session.execute<void>(sql`set transaction ${this.getTransactionConfigSQL(config)}`);\n\t}\n\n\tabstract override transaction: <T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TRelations>) => Promise<T>,\n\t) => Promise<T>;\n}\n\nexport async function migrate(\n\tmigrations: MigrationMeta[],\n\tdb: PgAsyncDatabase<PgQueryResultHKT, any>,\n\tconfig: string | MigrationConfig,\n): Promise<void | MigratorInitFailResponse> {\n\tconst migrationsTable = typeof config === 'string'\n\t\t? '__drizzle_migrations'\n\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\tconst migrationsSchema = typeof config === 'string' ? 'drizzle' : config.migrationsSchema ?? 'drizzle';\n\n\tawait db.execute(sql`CREATE SCHEMA IF NOT EXISTS ${sql.identifier(migrationsSchema)}`);\n\n\t// Detect DB version and upgrade table schema if needed\n\tconst { newDb } = await upgradeIfNeeded(migrationsSchema, migrationsTable, db, migrations);\n\n\t// Create table with latest schema (version 1) if this is a new database\n\tif (newDb) {\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at bigint,\n\t\t\t\tname text,\n\t\t\t\tapplied_at timestamp with time zone DEFAULT now()\n\t\t\t)\n\t\t`;\n\t\tawait db.execute(migrationTableCreate);\n\t}\n\n\tconst dbMigrations = await db.session.objects<{ id: number; hash: string; created_at: string; name: string }>(\n\t\tsql`select id, hash, created_at, name from ${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`,\n\t);\n\n\tif (typeof config === 'object' && config.init) {\n\t\tif (dbMigrations.length) {\n\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t}\n\n\t\tif (migrations.length > 1) {\n\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t}\n\n\t\tconst [migration] = migrations;\n\n\t\tif (!migration) return;\n\n\t\tawait db.execute(\n\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t} (\"hash\", \"created_at\", \"name\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name ?? null})`,\n\t\t);\n\n\t\treturn;\n\t}\n\n\tconst migrationsToRun = getMigrationsToRun({ localMigrations: migrations, dbMigrations });\n\tawait db.transaction(async (tx) => {\n\t\tfor (const migration of migrationsToRun) {\n\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\tawait tx.execute(sql.raw(stmt));\n\t\t\t}\n\t\t\tawait tx.execute(\n\t\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t} (\"hash\", \"created_at\", \"name\") values(${migration.hash}, ${migration.folderMillis}, ${\n\t\t\t\t\tmigration.name ?? null\n\t\t\t\t})`,\n\t\t\t);\n\t\t}\n\t});\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { PgBasePreparedQuery, PgSession } from "../session.js";
2
2
  import { PgAsyncDatabase } from "./db.js";
3
3
  import { entityKind, is } from "../../entity.js";
4
- import { tracer } from "../../tracing.js";
4
+ import { hasTelemetry, tracer } from "../../tracing.js";
5
5
  import { assertUnreachable } from "../../utils.js";
6
6
  import { fillPlaceholders, sql } from "../../sql/sql.js";
7
7
  import { getMigrationsToRun } from "../../migrator.utils.js";
@@ -30,6 +30,11 @@ var PgAsyncPreparedQuery = class extends PgBasePreparedQuery {
30
30
  if (!this.cacheConfig?.enabled) this.cacheConfig = void 0;
31
31
  }
32
32
  execute(placeholderValues = {}) {
33
+ if (this.cacheConfig === void 0 && (this.cache === void 0 || is(this.cache, NoopCache)) && !hasTelemetry) {
34
+ const params = this.query.params.length === 0 ? this.query.params : fillPlaceholders(this.query.params, placeholderValues);
35
+ const p = this.executor(params);
36
+ return this.mapper ? p.then(this.mapper) : p;
37
+ }
33
38
  return tracer.startActiveSpan("drizzle.execute", async (span) => {
34
39
  const params = fillPlaceholders(this.query.params, placeholderValues);
35
40
  const { query: { sql }, mapper } = this;
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","names":[],"sources":["../../../src/pg-core/async/session.ts"],"sourcesContent":["import { type Cache, NoopCache, strategyFor } from '~/cache/core/cache.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { is } from '~/entity.ts';\nimport { TransactionRollbackError } from '~/errors.ts';\nimport { DrizzleQueryError } from '~/errors.ts';\nimport type { Logger } from '~/logger.ts';\nimport type { MigrationConfig, MigrationMeta, MigratorInitFailResponse } from '~/migrator.ts';\nimport { getMigrationsToRun } from '~/migrator.utils.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { fillPlaceholders, type Query, type SQL, sql } from '~/sql/sql.ts';\nimport { tracer } from '~/tracing.ts';\nimport { upgradeIfNeeded } from '~/up-migrations/pg.ts';\nimport { assertUnreachable } from '~/utils.ts';\nimport type { PgDialect } from '../dialect.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '../session.ts';\nimport { PgBasePreparedQuery, PgSession } from '../session.ts';\nimport { PgAsyncDatabase } from './db.ts';\n\nexport class PgAsyncPreparedQuery<T extends PreparedQueryConfig> extends PgBasePreparedQuery {\n\tstatic override readonly [entityKind]: string = 'PgAsyncPreparedQuery';\n\n\t/** @internal */\n\treadonly mapper: {\n\t\t(rows: any[]): any;\n\t\tbody?: string;\n\t} | undefined;\n\n\tconstructor(\n\t\tprotected executor: (params?: unknown[]) => Promise<any>,\n\t\tquery: Query,\n\t\tmapper: ((rows: any[]) => any) | undefined,\n\t\treadonly mode: 'arrays' | 'objects' | 'raw',\n\t\tprotected logger: Logger,\n\t\t// cache instance\n\t\tprotected cache: Cache | undefined,\n\t\t// per query related metadata\n\t\tprotected queryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\t// config that was passed through $withCache\n\t\tprotected cacheConfig: WithCacheConfig | undefined,\n\t) {\n\t\tsuper(query);\n\t\tthis.mapper = mapper;\n\t\tif (cache && cache.strategy() === 'all' && cacheConfig === undefined) {\n\t\t\tthis.cacheConfig = { enabled: true, autoInvalidate: true };\n\t\t}\n\t\tif (!this.cacheConfig?.enabled) {\n\t\t\tthis.cacheConfig = undefined;\n\t\t}\n\t}\n\n\toverride execute(placeholderValues: Record<string, unknown> = {}): Promise<T['execute']> {\n\t\treturn tracer.startActiveSpan('drizzle.execute', async (span) => {\n\t\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\t\t\tconst { query: { sql }, mapper } = this;\n\n\t\t\tspan?.setAttributes({\n\t\t\t\t'drizzle.query.text': sql,\n\t\t\t\t'drizzle.query.params': JSON.stringify(params),\n\t\t\t});\n\n\t\t\tthis.logger.logQuery(sql, params);\n\n\t\t\tconst query = tracer.startActiveSpan('drizzle.driver.execute', async (span) => {\n\t\t\t\tspan?.setAttributes({\n\t\t\t\t\t'drizzle.query.text': sql,\n\t\t\t\t\t'drizzle.query.params': JSON.stringify(params),\n\t\t\t\t});\n\n\t\t\t\t// return await so tracer captures time accurately\n\t\t\t\treturn await this.queryWithCache(sql, params, () => this.executor(params));\n\t\t\t});\n\n\t\t\tif (!mapper) return query;\n\n\t\t\treturn query.then((rows) => tracer.startActiveSpan('drizzle.mapResponse', () => mapper(rows as unknown[])));\n\t\t});\n\t}\n\n\t/** @internal */\n\tprotected async queryWithCache<T>(\n\t\tqueryString: string,\n\t\tparams: any[],\n\t\tquery: () => Promise<T>,\n\t): Promise<T> {\n\t\tconst cacheStrat = this.cache !== undefined && !is(this.cache, NoopCache)\n\t\t\t? await strategyFor(queryString, params, this.queryMetadata, this.cacheConfig)\n\t\t\t: { type: 'skip' as const };\n\n\t\tif (cacheStrat.type === 'skip') {\n\t\t\treturn query().catch((e) => {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t});\n\t\t}\n\n\t\tconst cache = this.cache!;\n\n\t\t// For mutate queries, we should query the database, wait for a response, and then perform invalidation\n\t\tif (cacheStrat.type === 'invalidate') {\n\t\t\treturn Promise.all([\n\t\t\t\tquery(),\n\t\t\t\tcache.onMutate({ tables: cacheStrat.tables }),\n\t\t\t]).then((res) => res[0]).catch((e) => {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t});\n\t\t}\n\n\t\tif (cacheStrat.type === 'try') {\n\t\t\tconst { tables, key, isTag, autoInvalidate, config } = cacheStrat;\n\t\t\tconst fromCache = await cache.get(\n\t\t\t\tkey,\n\t\t\t\ttables,\n\t\t\t\tisTag,\n\t\t\t\tautoInvalidate,\n\t\t\t);\n\n\t\t\tif (fromCache === undefined) {\n\t\t\t\tconst result = await query().catch((e) => {\n\t\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t\t});\n\t\t\t\t// put actual key\n\t\t\t\tawait cache.put(\n\t\t\t\t\tkey,\n\t\t\t\t\tresult,\n\t\t\t\t\t// make sure we send tables that were used in a query only if user wants to invalidate it on each write\n\t\t\t\t\tautoInvalidate ? tables : [],\n\t\t\t\t\tisTag,\n\t\t\t\t\tconfig,\n\t\t\t\t);\n\t\t\t\t// put flag if we should invalidate or not\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\treturn fromCache as unknown as T;\n\t\t}\n\n\t\tassertUnreachable(cacheStrat);\n\t}\n}\n\nexport abstract class PgAsyncSession<\n\tTQueryResult extends PgQueryResultHKT = PgQueryResultHKT,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgSession {\n\tstatic override readonly [entityKind]: string = 'PgAsyncSession';\n\n\tabstract override prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tmode: 'arrays' | 'objects' | 'raw',\n\t\tname: string | boolean,\n\t\tmapper?: (rows: any[]) => any,\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\n\toverride execute<T>(query: SQL): Promise<T[]> {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\tconst prepared = tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T[] }>(\n\t\t\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\t\t\t'raw',\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn prepared.execute();\n\t\t});\n\t}\n\n\toverride arrays<T>(query: SQL): Promise<T[]> {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\tconst prepared = tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T[] }>(\n\t\t\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\t\t\t'arrays',\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn prepared.execute();\n\t\t});\n\t}\n\n\toverride objects<T>(query: SQL): Promise<T[]> {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\tconst prepared = tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T[] }>(\n\t\t\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\t\t\t'objects',\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn prepared.execute();\n\t\t});\n\t}\n\n\tabstract transaction<T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TRelations>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig,\n\t): Promise<T>;\n}\n\nexport abstract class PgAsyncTransaction<\n\tTQueryResult extends PgQueryResultHKT,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgAsyncDatabase<TQueryResult, TRelations> {\n\tstatic override readonly [entityKind]: string = 'PgAsyncTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\tsession: PgAsyncSession<any, any>,\n\t\trelations: TRelations,\n\t\tprotected readonly nestedIndex = 0,\n\t\tparseRqbJson: boolean | undefined,\n\t) {\n\t\tsuper(dialect, session, relations, parseRqbJson);\n\t}\n\n\trollback(): never {\n\t\tthrow new TransactionRollbackError();\n\t}\n\n\t/** @internal */\n\tgetTransactionConfigSQL(config: PgTransactionConfig): SQL {\n\t\tconst chunks: string[] = [];\n\t\tif (config.isolationLevel) {\n\t\t\tchunks.push(`isolation level ${config.isolationLevel}`);\n\t\t}\n\t\tif (config.accessMode) {\n\t\t\tchunks.push(config.accessMode);\n\t\t}\n\t\tif (typeof config.deferrable === 'boolean') {\n\t\t\tchunks.push(config.deferrable ? 'deferrable' : 'not deferrable');\n\t\t}\n\t\treturn sql.raw(chunks.join(' '));\n\t}\n\n\tsetTransaction(config: PgTransactionConfig): Promise<unknown> {\n\t\treturn this.session.execute<void>(sql`set transaction ${this.getTransactionConfigSQL(config)}`);\n\t}\n\n\tabstract override transaction: <T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TRelations>) => Promise<T>,\n\t) => Promise<T>;\n}\n\nexport async function migrate(\n\tmigrations: MigrationMeta[],\n\tdb: PgAsyncDatabase<PgQueryResultHKT, any>,\n\tconfig: string | MigrationConfig,\n): Promise<void | MigratorInitFailResponse> {\n\tconst migrationsTable = typeof config === 'string'\n\t\t? '__drizzle_migrations'\n\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\tconst migrationsSchema = typeof config === 'string' ? 'drizzle' : config.migrationsSchema ?? 'drizzle';\n\n\tawait db.execute(sql`CREATE SCHEMA IF NOT EXISTS ${sql.identifier(migrationsSchema)}`);\n\n\t// Detect DB version and upgrade table schema if needed\n\tconst { newDb } = await upgradeIfNeeded(migrationsSchema, migrationsTable, db, migrations);\n\n\t// Create table with latest schema (version 1) if this is a new database\n\tif (newDb) {\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at bigint,\n\t\t\t\tname text,\n\t\t\t\tapplied_at timestamp with time zone DEFAULT now()\n\t\t\t)\n\t\t`;\n\t\tawait db.execute(migrationTableCreate);\n\t}\n\n\tconst dbMigrations = await db.session.objects<{ id: number; hash: string; created_at: string; name: string }>(\n\t\tsql`select id, hash, created_at, name from ${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`,\n\t);\n\n\tif (typeof config === 'object' && config.init) {\n\t\tif (dbMigrations.length) {\n\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t}\n\n\t\tif (migrations.length > 1) {\n\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t}\n\n\t\tconst [migration] = migrations;\n\n\t\tif (!migration) return;\n\n\t\tawait db.execute(\n\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t} (\"hash\", \"created_at\", \"name\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name ?? null})`,\n\t\t);\n\n\t\treturn;\n\t}\n\n\tconst migrationsToRun = getMigrationsToRun({ localMigrations: migrations, dbMigrations });\n\tawait db.transaction(async (tx) => {\n\t\tfor (const migration of migrationsToRun) {\n\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\tawait tx.execute(sql.raw(stmt));\n\t\t\t}\n\t\t\tawait tx.execute(\n\t\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t} (\"hash\", \"created_at\", \"name\") values(${migration.hash}, ${migration.folderMillis}, ${\n\t\t\t\t\tmigration.name ?? null\n\t\t\t\t})`,\n\t\t\t);\n\t\t}\n\t});\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"session.js","names":[],"sources":["../../../src/pg-core/async/session.ts"],"sourcesContent":["import { type Cache, NoopCache, strategyFor } from '~/cache/core/cache.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { is } from '~/entity.ts';\nimport { TransactionRollbackError } from '~/errors.ts';\nimport { DrizzleQueryError } from '~/errors.ts';\nimport type { Logger } from '~/logger.ts';\nimport type { MigrationConfig, MigrationMeta, MigratorInitFailResponse } from '~/migrator.ts';\nimport { getMigrationsToRun } from '~/migrator.utils.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { fillPlaceholders, type Query, type SQL, sql } from '~/sql/sql.ts';\nimport { hasTelemetry, tracer } from '~/tracing.ts';\nimport { upgradeIfNeeded } from '~/up-migrations/pg.ts';\nimport { assertUnreachable } from '~/utils.ts';\nimport type { PgDialect } from '../dialect.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '../session.ts';\nimport { PgBasePreparedQuery, PgSession } from '../session.ts';\nimport { PgAsyncDatabase } from './db.ts';\n\nexport class PgAsyncPreparedQuery<T extends PreparedQueryConfig> extends PgBasePreparedQuery {\n\tstatic override readonly [entityKind]: string = 'PgAsyncPreparedQuery';\n\n\t/** @internal */\n\treadonly mapper: {\n\t\t(rows: any[]): any;\n\t\tbody?: string;\n\t} | undefined;\n\n\tconstructor(\n\t\tprotected executor: (params?: unknown[]) => Promise<any>,\n\t\tquery: Query,\n\t\tmapper: ((rows: any[]) => any) | undefined,\n\t\treadonly mode: 'arrays' | 'objects' | 'raw',\n\t\tprotected logger: Logger,\n\t\t// cache instance\n\t\tprotected cache: Cache | undefined,\n\t\t// per query related metadata\n\t\tprotected queryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\t// config that was passed through $withCache\n\t\tprotected cacheConfig: WithCacheConfig | undefined,\n\t) {\n\t\tsuper(query);\n\t\tthis.mapper = mapper;\n\t\tif (cache && cache.strategy() === 'all' && cacheConfig === undefined) {\n\t\t\tthis.cacheConfig = { enabled: true, autoInvalidate: true };\n\t\t}\n\t\tif (!this.cacheConfig?.enabled) {\n\t\t\tthis.cacheConfig = undefined;\n\t\t}\n\t}\n\n\toverride execute(placeholderValues: Record<string, unknown> = {}): Promise<T['execute']> {\n\t\tconst fast = this.cacheConfig === undefined\n\t\t\t&& (this.cache === undefined || is(this.cache, NoopCache))\n\t\t\t&& !hasTelemetry;\n\n\t\tif (fast) {\n\t\t\tconst params = this.query.params.length === 0\n\t\t\t\t? this.query.params\n\t\t\t\t: fillPlaceholders(this.query.params, placeholderValues);\n\t\t\tconst p = this.executor(params);\n\t\t\treturn this.mapper ? p.then(this.mapper) : p;\n\t\t}\n\n\t\treturn tracer.startActiveSpan('drizzle.execute', async (span) => {\n\t\t\tconst params = fillPlaceholders(this.query.params, placeholderValues);\n\t\t\tconst { query: { sql }, mapper } = this;\n\n\t\t\tspan?.setAttributes({\n\t\t\t\t'drizzle.query.text': sql,\n\t\t\t\t'drizzle.query.params': JSON.stringify(params),\n\t\t\t});\n\n\t\t\tthis.logger.logQuery(sql, params);\n\n\t\t\tconst query = tracer.startActiveSpan('drizzle.driver.execute', async (span) => {\n\t\t\t\tspan?.setAttributes({\n\t\t\t\t\t'drizzle.query.text': sql,\n\t\t\t\t\t'drizzle.query.params': JSON.stringify(params),\n\t\t\t\t});\n\n\t\t\t\t// return await so tracer captures time accurately\n\t\t\t\treturn await this.queryWithCache(sql, params, () => this.executor(params));\n\t\t\t});\n\n\t\t\tif (!mapper) return query;\n\n\t\t\treturn query.then((rows) => tracer.startActiveSpan('drizzle.mapResponse', () => mapper(rows as unknown[])));\n\t\t});\n\t}\n\n\t/** @internal */\n\tprotected async queryWithCache<T>(\n\t\tqueryString: string,\n\t\tparams: any[],\n\t\tquery: () => Promise<T>,\n\t): Promise<T> {\n\t\tconst cacheStrat = this.cache !== undefined && !is(this.cache, NoopCache)\n\t\t\t? await strategyFor(queryString, params, this.queryMetadata, this.cacheConfig)\n\t\t\t: { type: 'skip' as const };\n\n\t\tif (cacheStrat.type === 'skip') {\n\t\t\treturn query().catch((e) => {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t});\n\t\t}\n\n\t\tconst cache = this.cache!;\n\n\t\t// For mutate queries, we should query the database, wait for a response, and then perform invalidation\n\t\tif (cacheStrat.type === 'invalidate') {\n\t\t\treturn Promise.all([\n\t\t\t\tquery(),\n\t\t\t\tcache.onMutate({ tables: cacheStrat.tables }),\n\t\t\t]).then((res) => res[0]).catch((e) => {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t});\n\t\t}\n\n\t\tif (cacheStrat.type === 'try') {\n\t\t\tconst { tables, key, isTag, autoInvalidate, config } = cacheStrat;\n\t\t\tconst fromCache = await cache.get(\n\t\t\t\tkey,\n\t\t\t\ttables,\n\t\t\t\tisTag,\n\t\t\t\tautoInvalidate,\n\t\t\t);\n\n\t\t\tif (fromCache === undefined) {\n\t\t\t\tconst result = await query().catch((e) => {\n\t\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t\t});\n\t\t\t\t// put actual key\n\t\t\t\tawait cache.put(\n\t\t\t\t\tkey,\n\t\t\t\t\tresult,\n\t\t\t\t\t// make sure we send tables that were used in a query only if user wants to invalidate it on each write\n\t\t\t\t\tautoInvalidate ? tables : [],\n\t\t\t\t\tisTag,\n\t\t\t\t\tconfig,\n\t\t\t\t);\n\t\t\t\t// put flag if we should invalidate or not\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\treturn fromCache as unknown as T;\n\t\t}\n\n\t\tassertUnreachable(cacheStrat);\n\t}\n}\n\nexport abstract class PgAsyncSession<\n\tTQueryResult extends PgQueryResultHKT = PgQueryResultHKT,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgSession {\n\tstatic override readonly [entityKind]: string = 'PgAsyncSession';\n\n\tabstract override prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tmode: 'arrays' | 'objects' | 'raw',\n\t\tname: string | boolean,\n\t\tmapper?: (rows: any[]) => any,\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\n\toverride execute<T>(query: SQL): Promise<T[]> {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\tconst prepared = tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T[] }>(\n\t\t\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\t\t\t'raw',\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn prepared.execute();\n\t\t});\n\t}\n\n\toverride arrays<T>(query: SQL): Promise<T[]> {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\tconst prepared = tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T[] }>(\n\t\t\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\t\t\t'arrays',\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn prepared.execute();\n\t\t});\n\t}\n\n\toverride objects<T>(query: SQL): Promise<T[]> {\n\t\treturn tracer.startActiveSpan('drizzle.operation', () => {\n\t\t\tconst prepared = tracer.startActiveSpan('drizzle.prepareQuery', () => {\n\t\t\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T[] }>(\n\t\t\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\t\t\t'objects',\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn prepared.execute();\n\t\t});\n\t}\n\n\tabstract transaction<T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TRelations>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig,\n\t): Promise<T>;\n}\n\nexport abstract class PgAsyncTransaction<\n\tTQueryResult extends PgQueryResultHKT,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends PgAsyncDatabase<TQueryResult, TRelations> {\n\tstatic override readonly [entityKind]: string = 'PgAsyncTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\tsession: PgAsyncSession<any, any>,\n\t\trelations: TRelations,\n\t\tprotected readonly nestedIndex = 0,\n\t\tparseRqbJson: boolean | undefined,\n\t) {\n\t\tsuper(dialect, session, relations, parseRqbJson);\n\t}\n\n\trollback(): never {\n\t\tthrow new TransactionRollbackError();\n\t}\n\n\t/** @internal */\n\tgetTransactionConfigSQL(config: PgTransactionConfig): SQL {\n\t\tconst chunks: string[] = [];\n\t\tif (config.isolationLevel) {\n\t\t\tchunks.push(`isolation level ${config.isolationLevel}`);\n\t\t}\n\t\tif (config.accessMode) {\n\t\t\tchunks.push(config.accessMode);\n\t\t}\n\t\tif (typeof config.deferrable === 'boolean') {\n\t\t\tchunks.push(config.deferrable ? 'deferrable' : 'not deferrable');\n\t\t}\n\t\treturn sql.raw(chunks.join(' '));\n\t}\n\n\tsetTransaction(config: PgTransactionConfig): Promise<unknown> {\n\t\treturn this.session.execute<void>(sql`set transaction ${this.getTransactionConfigSQL(config)}`);\n\t}\n\n\tabstract override transaction: <T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TRelations>) => Promise<T>,\n\t) => Promise<T>;\n}\n\nexport async function migrate(\n\tmigrations: MigrationMeta[],\n\tdb: PgAsyncDatabase<PgQueryResultHKT, any>,\n\tconfig: string | MigrationConfig,\n): Promise<void | MigratorInitFailResponse> {\n\tconst migrationsTable = typeof config === 'string'\n\t\t? '__drizzle_migrations'\n\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\tconst migrationsSchema = typeof config === 'string' ? 'drizzle' : config.migrationsSchema ?? 'drizzle';\n\n\tawait db.execute(sql`CREATE SCHEMA IF NOT EXISTS ${sql.identifier(migrationsSchema)}`);\n\n\t// Detect DB version and upgrade table schema if needed\n\tconst { newDb } = await upgradeIfNeeded(migrationsSchema, migrationsTable, db, migrations);\n\n\t// Create table with latest schema (version 1) if this is a new database\n\tif (newDb) {\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at bigint,\n\t\t\t\tname text,\n\t\t\t\tapplied_at timestamp with time zone DEFAULT now()\n\t\t\t)\n\t\t`;\n\t\tawait db.execute(migrationTableCreate);\n\t}\n\n\tconst dbMigrations = await db.session.objects<{ id: number; hash: string; created_at: string; name: string }>(\n\t\tsql`select id, hash, created_at, name from ${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`,\n\t);\n\n\tif (typeof config === 'object' && config.init) {\n\t\tif (dbMigrations.length) {\n\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t}\n\n\t\tif (migrations.length > 1) {\n\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t}\n\n\t\tconst [migration] = migrations;\n\n\t\tif (!migration) return;\n\n\t\tawait db.execute(\n\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t} (\"hash\", \"created_at\", \"name\") values(${migration.hash}, ${migration.folderMillis}, ${migration.name ?? null})`,\n\t\t);\n\n\t\treturn;\n\t}\n\n\tconst migrationsToRun = getMigrationsToRun({ localMigrations: migrations, dbMigrations });\n\tawait db.transaction(async (tx) => {\n\t\tfor (const migration of migrationsToRun) {\n\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\tawait tx.execute(sql.raw(stmt));\n\t\t\t}\n\t\t\tawait tx.execute(\n\t\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t} (\"hash\", \"created_at\", \"name\") values(${migration.hash}, ${migration.folderMillis}, ${\n\t\t\t\t\tmigration.name ?? null\n\t\t\t\t})`,\n\t\t\t);\n\t\t}\n\t});\n}\n"],"mappings":"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"}
package/tracing.cjs CHANGED
@@ -3,11 +3,13 @@ let __tracing_utils_ts = require("./tracing-utils.cjs");
3
3
  let __version_ts = require("./version.cjs");
4
4
 
5
5
  //#region src/tracing.ts
6
+ const hasTelemetry = false;
6
7
  /** @internal */
7
8
  const tracer = { startActiveSpan(name, fn) {
8
9
  return fn();
9
10
  } };
10
11
 
11
12
  //#endregion
13
+ exports.hasTelemetry = hasTelemetry;
12
14
  exports.tracer = tracer;
13
15
  //# sourceMappingURL=tracing.cjs.map
package/tracing.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tracing.cjs","names":[],"sources":["../src/tracing.ts"],"sourcesContent":["import type { Span, Tracer } from '@opentelemetry/api';\nimport { iife } from '~/tracing-utils.ts';\nimport { npmVersion } from '~/version.ts';\n\nlet otel: typeof import('@opentelemetry/api') | undefined; // oxlint-disable-line\nlet rawTracer: Tracer | undefined;\n// try {\n// \totel = await import('@opentelemetry/api');\n// } catch (err: any) {\n// \tif (err.code !== 'MODULE_NOT_FOUND' && err.code !== 'ERR_MODULE_NOT_FOUND') {\n// \t\tthrow err;\n// \t}\n// }\n\ntype SpanName =\n\t| 'drizzle.operation'\n\t| 'drizzle.prepareQuery'\n\t| 'drizzle.buildSQL'\n\t| 'drizzle.execute'\n\t| 'drizzle.driver.execute'\n\t| 'drizzle.mapResponse';\n\n/** @internal */\nexport const tracer = {\n\tstartActiveSpan<F extends (span?: Span) => unknown>(name: SpanName, fn: F): ReturnType<F> {\n\t\tif (!otel) {\n\t\t\treturn fn() as ReturnType<F>;\n\t\t}\n\n\t\tif (!rawTracer) {\n\t\t\trawTracer = otel.trace.getTracer('drizzle-orm', npmVersion);\n\t\t}\n\n\t\treturn iife(\n\t\t\t(otel, rawTracer) =>\n\t\t\t\trawTracer.startActiveSpan(\n\t\t\t\t\tname,\n\t\t\t\t\t((span: Span) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treturn fn(span);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\t\t\tcode: otel.SpanStatusCode.ERROR,\n\t\t\t\t\t\t\t\tmessage: e instanceof Error ? e.message : 'Unknown error', // oxlint-disable-line drizzle-internal/no-instanceof\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tspan.end();\n\t\t\t\t\t\t}\n\t\t\t\t\t}) as F,\n\t\t\t\t),\n\t\t\totel,\n\t\t\trawTracer,\n\t\t);\n\t},\n};\n"],"mappings":";;;;;;AAuBA,MAAa,SAAS,EACrB,gBAAoD,MAAgB,IAAsB;AAExF,QAAO,IAAI;GA6Bb"}
1
+ {"version":3,"file":"tracing.cjs","names":[],"sources":["../src/tracing.ts"],"sourcesContent":["import type { Span, Tracer } from '@opentelemetry/api';\nimport { iife } from '~/tracing-utils.ts';\nimport { npmVersion } from '~/version.ts';\n\nlet otel: typeof import('@opentelemetry/api') | undefined; // oxlint-disable-line\nlet rawTracer: Tracer | undefined;\n// try {\n// \totel = await import('@opentelemetry/api');\n// } catch (err: any) {\n// \tif (err.code !== 'MODULE_NOT_FOUND' && err.code !== 'ERR_MODULE_NOT_FOUND') {\n// \t\tthrow err;\n// \t}\n// }\n\ntype SpanName =\n\t| 'drizzle.operation'\n\t| 'drizzle.prepareQuery'\n\t| 'drizzle.buildSQL'\n\t| 'drizzle.execute'\n\t| 'drizzle.driver.execute'\n\t| 'drizzle.mapResponse';\n\nexport const hasTelemetry = !!otel;\n\n/** @internal */\nexport const tracer = {\n\tstartActiveSpan<F extends (span?: Span) => unknown>(name: SpanName, fn: F): ReturnType<F> {\n\t\tif (!otel) {\n\t\t\treturn fn() as ReturnType<F>;\n\t\t}\n\n\t\tif (!rawTracer) {\n\t\t\trawTracer = otel.trace.getTracer('drizzle-orm', npmVersion);\n\t\t}\n\n\t\treturn iife(\n\t\t\t(otel, rawTracer) =>\n\t\t\t\trawTracer.startActiveSpan(\n\t\t\t\t\tname,\n\t\t\t\t\t((span: Span) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treturn fn(span);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\t\t\tcode: otel.SpanStatusCode.ERROR,\n\t\t\t\t\t\t\t\tmessage: e instanceof Error ? e.message : 'Unknown error', // oxlint-disable-line drizzle-internal/no-instanceof\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tspan.end();\n\t\t\t\t\t\t}\n\t\t\t\t\t}) as F,\n\t\t\t\t),\n\t\t\totel,\n\t\t\trawTracer,\n\t\t);\n\t},\n};\n"],"mappings":";;;;;AAsBA,MAAa,eAAe;;AAG5B,MAAa,SAAS,EACrB,gBAAoD,MAAgB,IAAsB;AAExF,QAAO,IAAI;GA6Bb"}
package/tracing.d.cts CHANGED
@@ -1 +1,5 @@
1
- export { };
1
+ //#region src/tracing.d.ts
2
+ declare const hasTelemetry: boolean;
3
+ //#endregion
4
+ export { hasTelemetry };
5
+ //# sourceMappingURL=tracing.d.cts.map
package/tracing.d.ts CHANGED
@@ -1 +1,5 @@
1
- export { };
1
+ //#region src/tracing.d.ts
2
+ declare const hasTelemetry: boolean;
3
+ //#endregion
4
+ export { hasTelemetry };
5
+ //# sourceMappingURL=tracing.d.ts.map
package/tracing.js CHANGED
@@ -2,11 +2,12 @@ import { iife } from "./tracing-utils.js";
2
2
  import { npmVersion } from "./version.js";
3
3
 
4
4
  //#region src/tracing.ts
5
+ const hasTelemetry = false;
5
6
  /** @internal */
6
7
  const tracer = { startActiveSpan(name, fn) {
7
8
  return fn();
8
9
  } };
9
10
 
10
11
  //#endregion
11
- export { tracer };
12
+ export { hasTelemetry, tracer };
12
13
  //# sourceMappingURL=tracing.js.map
package/tracing.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tracing.js","names":[],"sources":["../src/tracing.ts"],"sourcesContent":["import type { Span, Tracer } from '@opentelemetry/api';\nimport { iife } from '~/tracing-utils.ts';\nimport { npmVersion } from '~/version.ts';\n\nlet otel: typeof import('@opentelemetry/api') | undefined; // oxlint-disable-line\nlet rawTracer: Tracer | undefined;\n// try {\n// \totel = await import('@opentelemetry/api');\n// } catch (err: any) {\n// \tif (err.code !== 'MODULE_NOT_FOUND' && err.code !== 'ERR_MODULE_NOT_FOUND') {\n// \t\tthrow err;\n// \t}\n// }\n\ntype SpanName =\n\t| 'drizzle.operation'\n\t| 'drizzle.prepareQuery'\n\t| 'drizzle.buildSQL'\n\t| 'drizzle.execute'\n\t| 'drizzle.driver.execute'\n\t| 'drizzle.mapResponse';\n\n/** @internal */\nexport const tracer = {\n\tstartActiveSpan<F extends (span?: Span) => unknown>(name: SpanName, fn: F): ReturnType<F> {\n\t\tif (!otel) {\n\t\t\treturn fn() as ReturnType<F>;\n\t\t}\n\n\t\tif (!rawTracer) {\n\t\t\trawTracer = otel.trace.getTracer('drizzle-orm', npmVersion);\n\t\t}\n\n\t\treturn iife(\n\t\t\t(otel, rawTracer) =>\n\t\t\t\trawTracer.startActiveSpan(\n\t\t\t\t\tname,\n\t\t\t\t\t((span: Span) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treturn fn(span);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\t\t\tcode: otel.SpanStatusCode.ERROR,\n\t\t\t\t\t\t\t\tmessage: e instanceof Error ? e.message : 'Unknown error', // oxlint-disable-line drizzle-internal/no-instanceof\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tspan.end();\n\t\t\t\t\t\t}\n\t\t\t\t\t}) as F,\n\t\t\t\t),\n\t\t\totel,\n\t\t\trawTracer,\n\t\t);\n\t},\n};\n"],"mappings":";;;;;AAuBA,MAAa,SAAS,EACrB,gBAAoD,MAAgB,IAAsB;AAExF,QAAO,IAAI;GA6Bb"}
1
+ {"version":3,"file":"tracing.js","names":[],"sources":["../src/tracing.ts"],"sourcesContent":["import type { Span, Tracer } from '@opentelemetry/api';\nimport { iife } from '~/tracing-utils.ts';\nimport { npmVersion } from '~/version.ts';\n\nlet otel: typeof import('@opentelemetry/api') | undefined; // oxlint-disable-line\nlet rawTracer: Tracer | undefined;\n// try {\n// \totel = await import('@opentelemetry/api');\n// } catch (err: any) {\n// \tif (err.code !== 'MODULE_NOT_FOUND' && err.code !== 'ERR_MODULE_NOT_FOUND') {\n// \t\tthrow err;\n// \t}\n// }\n\ntype SpanName =\n\t| 'drizzle.operation'\n\t| 'drizzle.prepareQuery'\n\t| 'drizzle.buildSQL'\n\t| 'drizzle.execute'\n\t| 'drizzle.driver.execute'\n\t| 'drizzle.mapResponse';\n\nexport const hasTelemetry = !!otel;\n\n/** @internal */\nexport const tracer = {\n\tstartActiveSpan<F extends (span?: Span) => unknown>(name: SpanName, fn: F): ReturnType<F> {\n\t\tif (!otel) {\n\t\t\treturn fn() as ReturnType<F>;\n\t\t}\n\n\t\tif (!rawTracer) {\n\t\t\trawTracer = otel.trace.getTracer('drizzle-orm', npmVersion);\n\t\t}\n\n\t\treturn iife(\n\t\t\t(otel, rawTracer) =>\n\t\t\t\trawTracer.startActiveSpan(\n\t\t\t\t\tname,\n\t\t\t\t\t((span: Span) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treturn fn(span);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\t\t\tcode: otel.SpanStatusCode.ERROR,\n\t\t\t\t\t\t\t\tmessage: e instanceof Error ? e.message : 'Unknown error', // oxlint-disable-line drizzle-internal/no-instanceof\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tspan.end();\n\t\t\t\t\t\t}\n\t\t\t\t\t}) as F,\n\t\t\t\t),\n\t\t\totel,\n\t\t\trawTracer,\n\t\t);\n\t},\n};\n"],"mappings":";;;;AAsBA,MAAa,eAAe;;AAG5B,MAAa,SAAS,EACrB,gBAAoD,MAAgB,IAAsB;AAExF,QAAO,IAAI;GA6Bb"}