drizzle-orm 1.0.0-beta.8-dbc3565 → 1.0.0-beta.8-e601f80

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.
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var migrator_exports = {};
20
+ __export(migrator_exports, {
21
+ migrate: () => migrate
22
+ });
23
+ module.exports = __toCommonJS(migrator_exports);
24
+ var import_migrator = require("../migrator.cjs");
25
+ var import_session = require("../pg-core/effect/session.cjs");
26
+ function migrate(db, config) {
27
+ const migrations = (0, import_migrator.readMigrationFiles)(config);
28
+ return (0, import_session.migrate)(migrations, db.session, config);
29
+ }
30
+ // Annotate the CommonJS export names for ESM import in node:
31
+ 0 && (module.exports = {
32
+ migrate
33
+ });
34
+ //# sourceMappingURL=migrator.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/effect-postgres/migrator.ts"],"sourcesContent":["import type { MigrationConfig } from '~/migrator.ts';\nimport { readMigrationFiles } from '~/migrator.ts';\nimport { migrate as coreMigrate } from '~/pg-core/effect/session.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { EffectPgDatabase } from './driver.ts';\n\nexport function migrate<TSchema extends Record<string, unknown>, TRelations extends AnyRelations>(\n\tdb: EffectPgDatabase<TSchema, TRelations>,\n\tconfig: MigrationConfig,\n) {\n\tconst migrations = readMigrationFiles(config);\n\treturn coreMigrate(migrations, db.session, config);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,sBAAmC;AACnC,qBAAuC;AAIhC,SAAS,QACf,IACA,QACC;AACD,QAAM,iBAAa,oCAAmB,MAAM;AAC5C,aAAO,eAAAA,SAAY,YAAY,GAAG,SAAS,MAAM;AAClD;","names":["coreMigrate"]}
@@ -0,0 +1,4 @@
1
+ import type { MigrationConfig } from "../migrator.cjs";
2
+ import type { AnyRelations } from "../relations.cjs";
3
+ import type { EffectPgDatabase } from "./driver.cjs";
4
+ export declare function migrate<TSchema extends Record<string, unknown>, TRelations extends AnyRelations>(db: EffectPgDatabase<TSchema, TRelations>, config: MigrationConfig): import("effect/Effect").Effect<void | import("../migrator.ts").MigratorInitFailResponse, import("../errors.ts").DrizzleQueryError, never>;
@@ -0,0 +1,4 @@
1
+ import type { MigrationConfig } from "../migrator.js";
2
+ import type { AnyRelations } from "../relations.js";
3
+ import type { EffectPgDatabase } from "./driver.js";
4
+ export declare function migrate<TSchema extends Record<string, unknown>, TRelations extends AnyRelations>(db: EffectPgDatabase<TSchema, TRelations>, config: MigrationConfig): import("effect/Effect").Effect<void | import("../migrator.js").MigratorInitFailResponse, import("../errors.js").DrizzleQueryError, never>;
@@ -0,0 +1,10 @@
1
+ import { readMigrationFiles } from "../migrator.js";
2
+ import { migrate as coreMigrate } from "../pg-core/effect/session.js";
3
+ function migrate(db, config) {
4
+ const migrations = readMigrationFiles(config);
5
+ return coreMigrate(migrations, db.session, config);
6
+ }
7
+ export {
8
+ migrate
9
+ };
10
+ //# sourceMappingURL=migrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/effect-postgres/migrator.ts"],"sourcesContent":["import type { MigrationConfig } from '~/migrator.ts';\nimport { readMigrationFiles } from '~/migrator.ts';\nimport { migrate as coreMigrate } from '~/pg-core/effect/session.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { EffectPgDatabase } from './driver.ts';\n\nexport function migrate<TSchema extends Record<string, unknown>, TRelations extends AnyRelations>(\n\tdb: EffectPgDatabase<TSchema, TRelations>,\n\tconfig: MigrationConfig,\n) {\n\tconst migrations = readMigrationFiles(config);\n\treturn coreMigrate(migrations, db.session, config);\n}\n"],"mappings":"AACA,SAAS,0BAA0B;AACnC,SAAS,WAAW,mBAAmB;AAIhC,SAAS,QACf,IACA,QACC;AACD,QAAM,aAAa,mBAAmB,MAAM;AAC5C,SAAO,YAAY,YAAY,GAAG,SAAS,MAAM;AAClD;","names":[]}
@@ -19,7 +19,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var session_exports = {};
20
20
  __export(session_exports, {
21
21
  EffectPgPreparedQuery: () => EffectPgPreparedQuery,
22
- EffectPgSession: () => EffectPgSession
22
+ EffectPgSession: () => EffectPgSession,
23
+ EffectPgTransaction: () => EffectPgTransaction
23
24
  });
24
25
  module.exports = __toCommonJS(session_exports);
25
26
  var import_effect = require("effect");
@@ -102,6 +103,8 @@ class EffectPgSession extends import_session.PgEffectSession {
102
103
  constructor(client, dialect, relations, schema, options = {}) {
103
104
  super(dialect);
104
105
  this.client = client;
106
+ this.relations = relations;
107
+ this.schema = schema;
105
108
  this.logger = options.logger ?? new import_logger.NoopLogger();
106
109
  this.cache = options.cache;
107
110
  }
@@ -120,7 +123,8 @@ class EffectPgSession extends import_session.PgEffectSession {
120
123
  fields,
121
124
  name,
122
125
  isResponseInArrayMode,
123
- customResultMapper
126
+ customResultMapper,
127
+ false
124
128
  );
125
129
  }
126
130
  prepareRelationalQuery(query, fields, name, customResultMapper) {
@@ -155,10 +159,30 @@ class EffectPgSession extends import_session.PgEffectSession {
155
159
  false
156
160
  ).all();
157
161
  }
162
+ transaction(transaction) {
163
+ const { dialect, relations, schema } = this;
164
+ const session = this;
165
+ return this.client.withTransaction(import_effect.Effect.gen(function* () {
166
+ const tx = new EffectPgTransaction(
167
+ dialect,
168
+ session,
169
+ relations,
170
+ schema
171
+ );
172
+ return yield* transaction(tx);
173
+ }));
174
+ }
175
+ }
176
+ class EffectPgTransaction extends import_session.PgEffectTransaction {
177
+ static [import_entity.entityKind] = "EffectPgTransaction";
178
+ transaction(transaction) {
179
+ return this.session.transaction(transaction);
180
+ }
158
181
  }
159
182
  // Annotate the CommonJS export names for ESM import in node:
160
183
  0 && (module.exports = {
161
184
  EffectPgPreparedQuery,
162
- EffectPgSession
185
+ EffectPgSession,
186
+ EffectPgTransaction
163
187
  });
164
188
  //# sourceMappingURL=session.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/effect-postgres/session.ts"],"sourcesContent":["import type { PgClient } from '@effect/sql-pg/PgClient';\nimport { Effect } from 'effect';\nimport type * as V1 from '~/_relations.ts';\nimport type { EffectCache } from '~/cache/core/cache-effect.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DrizzleQueryError } from '~/errors.ts';\nimport { type Logger, NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgEffectPreparedQuery, PgEffectSession } from '~/pg-core/effect/session.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgQueryResultHKT, PreparedQueryConfig } from '~/pg-core/session.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { Query, SQL } from '~/sql/sql.ts';\nimport { fillPlaceholders } from '~/sql/sql.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface EffectPgQueryResultHKT extends PgQueryResultHKT {\n\ttype: readonly object[];\n}\n\nexport class EffectPgPreparedQuery<T extends PreparedQueryConfig, TIsRqbV2 extends boolean = false>\n\textends PgEffectPreparedQuery<T>\n{\n\tstatic override readonly [entityKind]: string = 'EffectPgPreparedQuery';\n\n\tconstructor(\n\t\tprivate client: PgClient,\n\t\tprivate queryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\n\t\tcache: EffectCache | undefined,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t) => T['execute'],\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t) {\n\t\tsuper({ sql: queryString, params }, cache, queryMetadata, cacheConfig);\n\t}\n\n\texecute(placeholderValues?: Record<string, unknown>): Effect.Effect<T['execute'], DrizzleQueryError> {\n\t\tif (this.isRqbV2Query) return this.executeRqbV2(placeholderValues);\n\n\t\tconst { query, logger, customResultMapper, fields, joinsNotNullableMap, client } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn this.queryWithCache(\n\t\t\t\tquery.sql,\n\t\t\t\tparams,\n\t\t\t\tthis.client.unsafe(query.sql, params as any).withoutTransform,\n\t\t\t);\n\t\t}\n\n\t\treturn this.queryWithCache(\n\t\t\tquery.sql,\n\t\t\tparams,\n\t\t\tclient.unsafe(query.sql, params as any).values.pipe(Effect.andThen(\n\t\t\t\t(rows) => {\n\t\t\t\t\tif (customResultMapper) return (customResultMapper as (rows: unknown[][]) => unknown)(rows as unknown[][]);\n\n\t\t\t\t\treturn rows.map((row) =>\n\t\t\t\t\t\tmapResultRow(\n\t\t\t\t\t\t\tfields!,\n\t\t\t\t\t\t\trow as unknown[],\n\t\t\t\t\t\t\tjoinsNotNullableMap,\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t)),\n\t\t);\n\t}\n\n\tprivate executeRqbV2(\n\t\tplaceholderValues?: Record<string, unknown>,\n\t): Effect.Effect<T['execute'], DrizzleQueryError> {\n\t\tconst { query, logger, customResultMapper, client } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\n\t\tlogger.logQuery(query.sql, params);\n\t\treturn client.unsafe(query.sql, params as any).withoutTransform.pipe(\n\t\t\tEffect.andThen((v) =>\n\t\t\t\t(customResultMapper as (\n\t\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t\t) => unknown)(v as Record<string, unknown>[])\n\t\t\t),\n\t\t).pipe(Effect.catchAll((e) => {\n\t\t\t// eslint-disable-next-line @drizzle-internal/no-instanceof\n\t\t\treturn Effect.fail(new DrizzleQueryError(query.sql, params, e instanceof Error ? e : undefined));\n\t\t}));\n\t}\n\n\toverride all(placeholderValues?: Record<string, unknown>): Effect.Effect<T['all'], DrizzleQueryError, never> {\n\t\tconst { query, logger, client } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\n\t\tlogger.logQuery(query.sql, params);\n\n\t\treturn this.queryWithCache(\n\t\t\tquery.sql,\n\t\t\tparams,\n\t\t\tclient.unsafe(query.sql, params as any).withoutTransform,\n\t\t);\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nexport class EffectPgSession<\n\t_TFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends PgEffectSession {\n\tstatic override readonly [entityKind]: string = 'EffectPgSession';\n\n\tprivate logger: Logger;\n\tprivate cache: EffectCache | undefined;\n\n\tconstructor(\n\t\tprivate client: PgClient,\n\t\tdialect: PgDialect,\n\t\trelations: TRelations,\n\t\tschema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: { logger?: Logger; cache?: EffectCache } = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache;\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\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) {\n\t\treturn new EffectPgPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\tname,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tprepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tcustomResultMapper?: (rows: Record<string, unknown>[]) => T['execute'],\n\t): EffectPgPreparedQuery<T, true> {\n\t\treturn new EffectPgPreparedQuery<T, true>(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfields,\n\t\t\tname,\n\t\t\tfalse,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\toverride execute<T>(query: SQL): Effect.Effect<T, DrizzleQueryError> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t).execute();\n\t}\n\n\toverride all<T>(query: SQL): Effect.Effect<T, DrizzleQueryError> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { all: T }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t).all();\n\t}\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/effect-postgres/session.ts"],"sourcesContent":["import type { PgClient } from '@effect/sql-pg/PgClient';\nimport { Effect } from 'effect';\nimport type * as V1 from '~/_relations.ts';\nimport type { EffectCache } from '~/cache/core/cache-effect.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DrizzleQueryError, type TransactionRollbackError } from '~/errors.ts';\nimport { type Logger, NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgEffectPreparedQuery, PgEffectSession, PgEffectTransaction } from '~/pg-core/effect/session.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgQueryResultHKT, PreparedQueryConfig } from '~/pg-core/session.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { Query, SQL } from '~/sql/sql.ts';\nimport { fillPlaceholders } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nexport interface EffectPgQueryResultHKT extends PgQueryResultHKT {\n\ttype: readonly Assume<this['row'], object>[];\n}\n\nexport class EffectPgPreparedQuery<T extends PreparedQueryConfig, TIsRqbV2 extends boolean = false>\n\textends PgEffectPreparedQuery<T>\n{\n\tstatic override readonly [entityKind]: string = 'EffectPgPreparedQuery';\n\n\tconstructor(\n\t\tprivate client: PgClient,\n\t\tprivate queryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\n\t\tcache: EffectCache | undefined,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t) => T['execute'],\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t) {\n\t\tsuper({ sql: queryString, params }, cache, queryMetadata, cacheConfig);\n\t}\n\n\texecute(placeholderValues?: Record<string, unknown>): Effect.Effect<T['execute'], DrizzleQueryError> {\n\t\tif (this.isRqbV2Query) return this.executeRqbV2(placeholderValues);\n\n\t\tconst { query, logger, customResultMapper, fields, joinsNotNullableMap, client } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn this.queryWithCache(\n\t\t\t\tquery.sql,\n\t\t\t\tparams,\n\t\t\t\tthis.client.unsafe(query.sql, params as any).withoutTransform,\n\t\t\t);\n\t\t}\n\n\t\treturn this.queryWithCache(\n\t\t\tquery.sql,\n\t\t\tparams,\n\t\t\tclient.unsafe(query.sql, params as any).values.pipe(Effect.andThen(\n\t\t\t\t(rows) => {\n\t\t\t\t\tif (customResultMapper) return (customResultMapper as (rows: unknown[][]) => unknown)(rows as unknown[][]);\n\n\t\t\t\t\treturn rows.map((row) =>\n\t\t\t\t\t\tmapResultRow(\n\t\t\t\t\t\t\tfields!,\n\t\t\t\t\t\t\trow as unknown[],\n\t\t\t\t\t\t\tjoinsNotNullableMap,\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t)),\n\t\t);\n\t}\n\n\tprivate executeRqbV2(\n\t\tplaceholderValues?: Record<string, unknown>,\n\t): Effect.Effect<T['execute'], DrizzleQueryError> {\n\t\tconst { query, logger, customResultMapper, client } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\n\t\tlogger.logQuery(query.sql, params);\n\t\treturn (\n\t\t\tclient.unsafe(query.sql, params as any).withoutTransform.pipe(\n\t\t\t\tEffect.andThen((v) =>\n\t\t\t\t\t(customResultMapper as (\n\t\t\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t\t\t) => unknown)(v as Record<string, unknown>[])\n\t\t\t\t),\n\t\t\t).pipe(Effect.catchAll((e) => {\n\t\t\t\t// eslint-disable-next-line @drizzle-internal/no-instanceof\n\t\t\t\treturn Effect.fail(new DrizzleQueryError(query.sql, params, e instanceof Error ? e : undefined));\n\t\t\t}))\n\t\t);\n\t}\n\n\toverride all(placeholderValues?: Record<string, unknown>): Effect.Effect<T['all'], DrizzleQueryError, never> {\n\t\tconst { query, logger, client } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\n\t\tlogger.logQuery(query.sql, params);\n\n\t\treturn this.queryWithCache(\n\t\t\tquery.sql,\n\t\t\tparams,\n\t\t\tclient.unsafe(query.sql, params as any).withoutTransform,\n\t\t);\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nexport class EffectPgSession<\n\tTQueryResult extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends PgEffectSession<TQueryResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'EffectPgSession';\n\n\tprivate logger: Logger;\n\tprivate cache: EffectCache | undefined;\n\n\tconstructor(\n\t\tprivate client: PgClient,\n\t\tdialect: PgDialect,\n\t\tprotected relations: TRelations,\n\t\tprotected schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: { logger?: Logger; cache?: EffectCache } = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache;\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\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) {\n\t\treturn new EffectPgPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\tname,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t\tfalse,\n\t\t);\n\t}\n\n\tprepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tcustomResultMapper?: (rows: Record<string, unknown>[]) => T['execute'],\n\t): EffectPgPreparedQuery<T, true> {\n\t\treturn new EffectPgPreparedQuery<T, true>(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfields,\n\t\t\tname,\n\t\t\tfalse,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\toverride execute<T>(query: SQL): Effect.Effect<T, DrizzleQueryError> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t).execute();\n\t}\n\n\toverride all<T>(query: SQL): Effect.Effect<T, DrizzleQueryError> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { all: T }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t).all();\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (\n\t\t\t/** Every query within transaction Effect is completed in transaction, regardless of database instance used\n\t\t\t *\n\t\t\t * `tx` argument is only required for `tx.rollback()`\n\t\t\t */\n\t\t\ttx: EffectPgTransaction<\n\t\t\t\tTQueryResult,\n\t\t\t\tTFullSchema,\n\t\t\t\tTRelations,\n\t\t\t\tTSchema\n\t\t\t>,\n\t\t) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never>,\n\t): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never> {\n\t\tconst { dialect, relations, schema } = this;\n\t\tconst session = this;\n\n\t\treturn this.client.withTransaction(Effect.gen(function*() {\n\t\t\tconst tx = new EffectPgTransaction<TQueryResult, TFullSchema, TRelations, TSchema>(\n\t\t\t\tdialect,\n\t\t\t\tsession,\n\t\t\t\trelations,\n\t\t\t\tschema,\n\t\t\t);\n\n\t\t\treturn yield* transaction(tx);\n\t\t}));\n\t}\n}\n\nexport class EffectPgTransaction<\n\tTQueryResult extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'EffectPgTransaction';\n\n\toverride transaction<T>(\n\t\ttransaction: (\n\t\t\ttx: PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema>,\n\t\t) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never>,\n\t): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never> {\n\t\treturn this.session.transaction(transaction);\n\t}\n}\n"],"mappings":"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","names":[]}
@@ -4,16 +4,17 @@ import type * as V1 from "../_relations.cjs";
4
4
  import type { EffectCache } from "../cache/core/cache-effect.cjs";
5
5
  import type { WithCacheConfig } from "../cache/core/types.cjs";
6
6
  import { entityKind } from "../entity.cjs";
7
- import { DrizzleQueryError } from "../errors.cjs";
7
+ import { DrizzleQueryError, type TransactionRollbackError } from "../errors.cjs";
8
8
  import { type Logger } from "../logger.cjs";
9
9
  import type { PgDialect } from "../pg-core/dialect.cjs";
10
- import { PgEffectPreparedQuery, PgEffectSession } from "../pg-core/effect/session.cjs";
10
+ import { PgEffectPreparedQuery, PgEffectSession, PgEffectTransaction } from "../pg-core/effect/session.cjs";
11
11
  import type { SelectedFieldsOrdered } from "../pg-core/query-builders/select.types.cjs";
12
12
  import type { PgQueryResultHKT, PreparedQueryConfig } from "../pg-core/session.cjs";
13
13
  import type { AnyRelations } from "../relations.cjs";
14
14
  import type { Query, SQL } from "../sql/sql.cjs";
15
+ import { type Assume } from "../utils.cjs";
15
16
  export interface EffectPgQueryResultHKT extends PgQueryResultHKT {
16
- type: readonly object[];
17
+ type: readonly Assume<this['row'], object>[];
17
18
  }
18
19
  export declare class EffectPgPreparedQuery<T extends PreparedQueryConfig, TIsRqbV2 extends boolean = false> extends PgEffectPreparedQuery<T> {
19
20
  private client;
@@ -33,8 +34,10 @@ export declare class EffectPgPreparedQuery<T extends PreparedQueryConfig, TIsRqb
33
34
  private executeRqbV2;
34
35
  all(placeholderValues?: Record<string, unknown>): Effect.Effect<T['all'], DrizzleQueryError, never>;
35
36
  }
36
- export declare class EffectPgSession<_TFullSchema extends Record<string, unknown>, TRelations extends AnyRelations, TSchema extends V1.TablesRelationalConfig> extends PgEffectSession {
37
+ export declare class EffectPgSession<TQueryResult extends PgQueryResultHKT, TFullSchema extends Record<string, unknown>, TRelations extends AnyRelations, TSchema extends V1.TablesRelationalConfig> extends PgEffectSession<TQueryResult, TFullSchema, TRelations, TSchema> {
37
38
  private client;
39
+ protected relations: TRelations;
40
+ protected schema: V1.RelationalSchemaConfig<TSchema> | undefined;
38
41
  static readonly [entityKind]: string;
39
42
  private logger;
40
43
  private cache;
@@ -49,4 +52,14 @@ export declare class EffectPgSession<_TFullSchema extends Record<string, unknown
49
52
  prepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper?: (rows: Record<string, unknown>[]) => T['execute']): EffectPgPreparedQuery<T, true>;
50
53
  execute<T>(query: SQL): Effect.Effect<T, DrizzleQueryError>;
51
54
  all<T>(query: SQL): Effect.Effect<T, DrizzleQueryError>;
55
+ transaction<T>(transaction: (
56
+ /** Every query within transaction Effect is completed in transaction, regardless of database instance used
57
+ *
58
+ * `tx` argument is only required for `tx.rollback()`
59
+ */
60
+ tx: EffectPgTransaction<TQueryResult, TFullSchema, TRelations, TSchema>) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never>): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never>;
61
+ }
62
+ export declare class EffectPgTransaction<TQueryResult extends PgQueryResultHKT, TFullSchema extends Record<string, unknown>, TRelations extends AnyRelations, TSchema extends V1.TablesRelationalConfig> extends PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema> {
63
+ static readonly [entityKind]: string;
64
+ transaction<T>(transaction: (tx: PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema>) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never>): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never>;
52
65
  }
@@ -4,16 +4,17 @@ import type * as V1 from "../_relations.js";
4
4
  import type { EffectCache } from "../cache/core/cache-effect.js";
5
5
  import type { WithCacheConfig } from "../cache/core/types.js";
6
6
  import { entityKind } from "../entity.js";
7
- import { DrizzleQueryError } from "../errors.js";
7
+ import { DrizzleQueryError, type TransactionRollbackError } from "../errors.js";
8
8
  import { type Logger } from "../logger.js";
9
9
  import type { PgDialect } from "../pg-core/dialect.js";
10
- import { PgEffectPreparedQuery, PgEffectSession } from "../pg-core/effect/session.js";
10
+ import { PgEffectPreparedQuery, PgEffectSession, PgEffectTransaction } from "../pg-core/effect/session.js";
11
11
  import type { SelectedFieldsOrdered } from "../pg-core/query-builders/select.types.js";
12
12
  import type { PgQueryResultHKT, PreparedQueryConfig } from "../pg-core/session.js";
13
13
  import type { AnyRelations } from "../relations.js";
14
14
  import type { Query, SQL } from "../sql/sql.js";
15
+ import { type Assume } from "../utils.js";
15
16
  export interface EffectPgQueryResultHKT extends PgQueryResultHKT {
16
- type: readonly object[];
17
+ type: readonly Assume<this['row'], object>[];
17
18
  }
18
19
  export declare class EffectPgPreparedQuery<T extends PreparedQueryConfig, TIsRqbV2 extends boolean = false> extends PgEffectPreparedQuery<T> {
19
20
  private client;
@@ -33,8 +34,10 @@ export declare class EffectPgPreparedQuery<T extends PreparedQueryConfig, TIsRqb
33
34
  private executeRqbV2;
34
35
  all(placeholderValues?: Record<string, unknown>): Effect.Effect<T['all'], DrizzleQueryError, never>;
35
36
  }
36
- export declare class EffectPgSession<_TFullSchema extends Record<string, unknown>, TRelations extends AnyRelations, TSchema extends V1.TablesRelationalConfig> extends PgEffectSession {
37
+ export declare class EffectPgSession<TQueryResult extends PgQueryResultHKT, TFullSchema extends Record<string, unknown>, TRelations extends AnyRelations, TSchema extends V1.TablesRelationalConfig> extends PgEffectSession<TQueryResult, TFullSchema, TRelations, TSchema> {
37
38
  private client;
39
+ protected relations: TRelations;
40
+ protected schema: V1.RelationalSchemaConfig<TSchema> | undefined;
38
41
  static readonly [entityKind]: string;
39
42
  private logger;
40
43
  private cache;
@@ -49,4 +52,14 @@ export declare class EffectPgSession<_TFullSchema extends Record<string, unknown
49
52
  prepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper?: (rows: Record<string, unknown>[]) => T['execute']): EffectPgPreparedQuery<T, true>;
50
53
  execute<T>(query: SQL): Effect.Effect<T, DrizzleQueryError>;
51
54
  all<T>(query: SQL): Effect.Effect<T, DrizzleQueryError>;
55
+ transaction<T>(transaction: (
56
+ /** Every query within transaction Effect is completed in transaction, regardless of database instance used
57
+ *
58
+ * `tx` argument is only required for `tx.rollback()`
59
+ */
60
+ tx: EffectPgTransaction<TQueryResult, TFullSchema, TRelations, TSchema>) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never>): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never>;
61
+ }
62
+ export declare class EffectPgTransaction<TQueryResult extends PgQueryResultHKT, TFullSchema extends Record<string, unknown>, TRelations extends AnyRelations, TSchema extends V1.TablesRelationalConfig> extends PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema> {
63
+ static readonly [entityKind]: string;
64
+ transaction<T>(transaction: (tx: PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema>) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never>): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never>;
52
65
  }
@@ -2,7 +2,7 @@ import { Effect } from "effect";
2
2
  import { entityKind } from "../entity.js";
3
3
  import { DrizzleQueryError } from "../errors.js";
4
4
  import { NoopLogger } from "../logger.js";
5
- import { PgEffectPreparedQuery, PgEffectSession } from "../pg-core/effect/session.js";
5
+ import { PgEffectPreparedQuery, PgEffectSession, PgEffectTransaction } from "../pg-core/effect/session.js";
6
6
  import { fillPlaceholders } from "../sql/sql.js";
7
7
  import { mapResultRow } from "../utils.js";
8
8
  class EffectPgPreparedQuery extends PgEffectPreparedQuery {
@@ -78,6 +78,8 @@ class EffectPgSession extends PgEffectSession {
78
78
  constructor(client, dialect, relations, schema, options = {}) {
79
79
  super(dialect);
80
80
  this.client = client;
81
+ this.relations = relations;
82
+ this.schema = schema;
81
83
  this.logger = options.logger ?? new NoopLogger();
82
84
  this.cache = options.cache;
83
85
  }
@@ -96,7 +98,8 @@ class EffectPgSession extends PgEffectSession {
96
98
  fields,
97
99
  name,
98
100
  isResponseInArrayMode,
99
- customResultMapper
101
+ customResultMapper,
102
+ false
100
103
  );
101
104
  }
102
105
  prepareRelationalQuery(query, fields, name, customResultMapper) {
@@ -131,9 +134,29 @@ class EffectPgSession extends PgEffectSession {
131
134
  false
132
135
  ).all();
133
136
  }
137
+ transaction(transaction) {
138
+ const { dialect, relations, schema } = this;
139
+ const session = this;
140
+ return this.client.withTransaction(Effect.gen(function* () {
141
+ const tx = new EffectPgTransaction(
142
+ dialect,
143
+ session,
144
+ relations,
145
+ schema
146
+ );
147
+ return yield* transaction(tx);
148
+ }));
149
+ }
150
+ }
151
+ class EffectPgTransaction extends PgEffectTransaction {
152
+ static [entityKind] = "EffectPgTransaction";
153
+ transaction(transaction) {
154
+ return this.session.transaction(transaction);
155
+ }
134
156
  }
135
157
  export {
136
158
  EffectPgPreparedQuery,
137
- EffectPgSession
159
+ EffectPgSession,
160
+ EffectPgTransaction
138
161
  };
139
162
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/effect-postgres/session.ts"],"sourcesContent":["import type { PgClient } from '@effect/sql-pg/PgClient';\nimport { Effect } from 'effect';\nimport type * as V1 from '~/_relations.ts';\nimport type { EffectCache } from '~/cache/core/cache-effect.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DrizzleQueryError } from '~/errors.ts';\nimport { type Logger, NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgEffectPreparedQuery, PgEffectSession } from '~/pg-core/effect/session.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgQueryResultHKT, PreparedQueryConfig } from '~/pg-core/session.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { Query, SQL } from '~/sql/sql.ts';\nimport { fillPlaceholders } from '~/sql/sql.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface EffectPgQueryResultHKT extends PgQueryResultHKT {\n\ttype: readonly object[];\n}\n\nexport class EffectPgPreparedQuery<T extends PreparedQueryConfig, TIsRqbV2 extends boolean = false>\n\textends PgEffectPreparedQuery<T>\n{\n\tstatic override readonly [entityKind]: string = 'EffectPgPreparedQuery';\n\n\tconstructor(\n\t\tprivate client: PgClient,\n\t\tprivate queryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\n\t\tcache: EffectCache | undefined,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t) => T['execute'],\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t) {\n\t\tsuper({ sql: queryString, params }, cache, queryMetadata, cacheConfig);\n\t}\n\n\texecute(placeholderValues?: Record<string, unknown>): Effect.Effect<T['execute'], DrizzleQueryError> {\n\t\tif (this.isRqbV2Query) return this.executeRqbV2(placeholderValues);\n\n\t\tconst { query, logger, customResultMapper, fields, joinsNotNullableMap, client } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn this.queryWithCache(\n\t\t\t\tquery.sql,\n\t\t\t\tparams,\n\t\t\t\tthis.client.unsafe(query.sql, params as any).withoutTransform,\n\t\t\t);\n\t\t}\n\n\t\treturn this.queryWithCache(\n\t\t\tquery.sql,\n\t\t\tparams,\n\t\t\tclient.unsafe(query.sql, params as any).values.pipe(Effect.andThen(\n\t\t\t\t(rows) => {\n\t\t\t\t\tif (customResultMapper) return (customResultMapper as (rows: unknown[][]) => unknown)(rows as unknown[][]);\n\n\t\t\t\t\treturn rows.map((row) =>\n\t\t\t\t\t\tmapResultRow(\n\t\t\t\t\t\t\tfields!,\n\t\t\t\t\t\t\trow as unknown[],\n\t\t\t\t\t\t\tjoinsNotNullableMap,\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t)),\n\t\t);\n\t}\n\n\tprivate executeRqbV2(\n\t\tplaceholderValues?: Record<string, unknown>,\n\t): Effect.Effect<T['execute'], DrizzleQueryError> {\n\t\tconst { query, logger, customResultMapper, client } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\n\t\tlogger.logQuery(query.sql, params);\n\t\treturn client.unsafe(query.sql, params as any).withoutTransform.pipe(\n\t\t\tEffect.andThen((v) =>\n\t\t\t\t(customResultMapper as (\n\t\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t\t) => unknown)(v as Record<string, unknown>[])\n\t\t\t),\n\t\t).pipe(Effect.catchAll((e) => {\n\t\t\t// eslint-disable-next-line @drizzle-internal/no-instanceof\n\t\t\treturn Effect.fail(new DrizzleQueryError(query.sql, params, e instanceof Error ? e : undefined));\n\t\t}));\n\t}\n\n\toverride all(placeholderValues?: Record<string, unknown>): Effect.Effect<T['all'], DrizzleQueryError, never> {\n\t\tconst { query, logger, client } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\n\t\tlogger.logQuery(query.sql, params);\n\n\t\treturn this.queryWithCache(\n\t\t\tquery.sql,\n\t\t\tparams,\n\t\t\tclient.unsafe(query.sql, params as any).withoutTransform,\n\t\t);\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nexport class EffectPgSession<\n\t_TFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends PgEffectSession {\n\tstatic override readonly [entityKind]: string = 'EffectPgSession';\n\n\tprivate logger: Logger;\n\tprivate cache: EffectCache | undefined;\n\n\tconstructor(\n\t\tprivate client: PgClient,\n\t\tdialect: PgDialect,\n\t\trelations: TRelations,\n\t\tschema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: { logger?: Logger; cache?: EffectCache } = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache;\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\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) {\n\t\treturn new EffectPgPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\tname,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tprepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tcustomResultMapper?: (rows: Record<string, unknown>[]) => T['execute'],\n\t): EffectPgPreparedQuery<T, true> {\n\t\treturn new EffectPgPreparedQuery<T, true>(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfields,\n\t\t\tname,\n\t\t\tfalse,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\toverride execute<T>(query: SQL): Effect.Effect<T, DrizzleQueryError> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t).execute();\n\t}\n\n\toverride all<T>(query: SQL): Effect.Effect<T, DrizzleQueryError> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { all: T }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t).all();\n\t}\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/effect-postgres/session.ts"],"sourcesContent":["import type { PgClient } from '@effect/sql-pg/PgClient';\nimport { Effect } from 'effect';\nimport type * as V1 from '~/_relations.ts';\nimport type { EffectCache } from '~/cache/core/cache-effect.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DrizzleQueryError, type TransactionRollbackError } from '~/errors.ts';\nimport { type Logger, NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgEffectPreparedQuery, PgEffectSession, PgEffectTransaction } from '~/pg-core/effect/session.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgQueryResultHKT, PreparedQueryConfig } from '~/pg-core/session.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { Query, SQL } from '~/sql/sql.ts';\nimport { fillPlaceholders } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nexport interface EffectPgQueryResultHKT extends PgQueryResultHKT {\n\ttype: readonly Assume<this['row'], object>[];\n}\n\nexport class EffectPgPreparedQuery<T extends PreparedQueryConfig, TIsRqbV2 extends boolean = false>\n\textends PgEffectPreparedQuery<T>\n{\n\tstatic override readonly [entityKind]: string = 'EffectPgPreparedQuery';\n\n\tconstructor(\n\t\tprivate client: PgClient,\n\t\tprivate queryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\n\t\tcache: EffectCache | undefined,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t) => T['execute'],\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t) {\n\t\tsuper({ sql: queryString, params }, cache, queryMetadata, cacheConfig);\n\t}\n\n\texecute(placeholderValues?: Record<string, unknown>): Effect.Effect<T['execute'], DrizzleQueryError> {\n\t\tif (this.isRqbV2Query) return this.executeRqbV2(placeholderValues);\n\n\t\tconst { query, logger, customResultMapper, fields, joinsNotNullableMap, client } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn this.queryWithCache(\n\t\t\t\tquery.sql,\n\t\t\t\tparams,\n\t\t\t\tthis.client.unsafe(query.sql, params as any).withoutTransform,\n\t\t\t);\n\t\t}\n\n\t\treturn this.queryWithCache(\n\t\t\tquery.sql,\n\t\t\tparams,\n\t\t\tclient.unsafe(query.sql, params as any).values.pipe(Effect.andThen(\n\t\t\t\t(rows) => {\n\t\t\t\t\tif (customResultMapper) return (customResultMapper as (rows: unknown[][]) => unknown)(rows as unknown[][]);\n\n\t\t\t\t\treturn rows.map((row) =>\n\t\t\t\t\t\tmapResultRow(\n\t\t\t\t\t\t\tfields!,\n\t\t\t\t\t\t\trow as unknown[],\n\t\t\t\t\t\t\tjoinsNotNullableMap,\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t)),\n\t\t);\n\t}\n\n\tprivate executeRqbV2(\n\t\tplaceholderValues?: Record<string, unknown>,\n\t): Effect.Effect<T['execute'], DrizzleQueryError> {\n\t\tconst { query, logger, customResultMapper, client } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\n\t\tlogger.logQuery(query.sql, params);\n\t\treturn (\n\t\t\tclient.unsafe(query.sql, params as any).withoutTransform.pipe(\n\t\t\t\tEffect.andThen((v) =>\n\t\t\t\t\t(customResultMapper as (\n\t\t\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t\t\t) => unknown)(v as Record<string, unknown>[])\n\t\t\t\t),\n\t\t\t).pipe(Effect.catchAll((e) => {\n\t\t\t\t// eslint-disable-next-line @drizzle-internal/no-instanceof\n\t\t\t\treturn Effect.fail(new DrizzleQueryError(query.sql, params, e instanceof Error ? e : undefined));\n\t\t\t}))\n\t\t);\n\t}\n\n\toverride all(placeholderValues?: Record<string, unknown>): Effect.Effect<T['all'], DrizzleQueryError, never> {\n\t\tconst { query, logger, client } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\n\t\tlogger.logQuery(query.sql, params);\n\n\t\treturn this.queryWithCache(\n\t\t\tquery.sql,\n\t\t\tparams,\n\t\t\tclient.unsafe(query.sql, params as any).withoutTransform,\n\t\t);\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nexport class EffectPgSession<\n\tTQueryResult extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends PgEffectSession<TQueryResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'EffectPgSession';\n\n\tprivate logger: Logger;\n\tprivate cache: EffectCache | undefined;\n\n\tconstructor(\n\t\tprivate client: PgClient,\n\t\tdialect: PgDialect,\n\t\tprotected relations: TRelations,\n\t\tprotected schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: { logger?: Logger; cache?: EffectCache } = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache;\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\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) {\n\t\treturn new EffectPgPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\tname,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t\tfalse,\n\t\t);\n\t}\n\n\tprepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tcustomResultMapper?: (rows: Record<string, unknown>[]) => T['execute'],\n\t): EffectPgPreparedQuery<T, true> {\n\t\treturn new EffectPgPreparedQuery<T, true>(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfields,\n\t\t\tname,\n\t\t\tfalse,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\toverride execute<T>(query: SQL): Effect.Effect<T, DrizzleQueryError> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t).execute();\n\t}\n\n\toverride all<T>(query: SQL): Effect.Effect<T, DrizzleQueryError> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { all: T }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t).all();\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (\n\t\t\t/** Every query within transaction Effect is completed in transaction, regardless of database instance used\n\t\t\t *\n\t\t\t * `tx` argument is only required for `tx.rollback()`\n\t\t\t */\n\t\t\ttx: EffectPgTransaction<\n\t\t\t\tTQueryResult,\n\t\t\t\tTFullSchema,\n\t\t\t\tTRelations,\n\t\t\t\tTSchema\n\t\t\t>,\n\t\t) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never>,\n\t): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never> {\n\t\tconst { dialect, relations, schema } = this;\n\t\tconst session = this;\n\n\t\treturn this.client.withTransaction(Effect.gen(function*() {\n\t\t\tconst tx = new EffectPgTransaction<TQueryResult, TFullSchema, TRelations, TSchema>(\n\t\t\t\tdialect,\n\t\t\t\tsession,\n\t\t\t\trelations,\n\t\t\t\tschema,\n\t\t\t);\n\n\t\t\treturn yield* transaction(tx);\n\t\t}));\n\t}\n}\n\nexport class EffectPgTransaction<\n\tTQueryResult extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'EffectPgTransaction';\n\n\toverride transaction<T>(\n\t\ttransaction: (\n\t\t\ttx: PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema>,\n\t\t) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never>,\n\t): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never> {\n\t\treturn this.session.transaction(transaction);\n\t}\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drizzle-orm",
3
- "version": "1.0.0-beta.8-dbc3565",
3
+ "version": "1.0.0-beta.8-e601f80",
4
4
  "description": "Drizzle ORM package for SQL databases",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -1122,6 +1122,18 @@
1122
1122
  "types": "./effect-postgres/index.d.ts",
1123
1123
  "default": "./effect-postgres/index.js"
1124
1124
  },
1125
+ "./effect-postgres/migrator": {
1126
+ "import": {
1127
+ "types": "./effect-postgres/migrator.d.ts",
1128
+ "default": "./effect-postgres/migrator.js"
1129
+ },
1130
+ "require": {
1131
+ "types": "./effect-postgres/migrator.d.cts",
1132
+ "default": "./effect-postgres/migrator.cjs"
1133
+ },
1134
+ "types": "./effect-postgres/migrator.d.ts",
1135
+ "default": "./effect-postgres/migrator.js"
1136
+ },
1125
1137
  "./effect-postgres/session": {
1126
1138
  "import": {
1127
1139
  "types": "./effect-postgres/session.d.ts",
@@ -134,7 +134,7 @@ class PgAsyncTransaction extends import_db.PgAsyncDatabase {
134
134
  this.schema = schema;
135
135
  this.nestedIndex = nestedIndex;
136
136
  }
137
- static [import_entity.entityKind] = "PgTransaction";
137
+ static [import_entity.entityKind] = "PgAsyncTransaction";
138
138
  rollback() {
139
139
  throw new import_errors.TransactionRollbackError();
140
140
  }
@@ -187,7 +187,7 @@ async function migrate(migrations, session, config) {
187
187
  }
188
188
  const lastDbMigration = dbMigrations[0];
189
189
  await session.transaction(async (tx) => {
190
- for await (const migration of migrations) {
190
+ for (const migration of migrations) {
191
191
  if (!lastDbMigration || Number(lastDbMigration.created_at) < migration.folderMillis) {
192
192
  for (const stmt of migration.sql) {
193
193
  await tx.execute(import_sql.sql.raw(stmt));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/pg-core/async/session.ts"],"sourcesContent":["import type * as V1 from '~/_relations.ts';\nimport { 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 { MigrationConfig, MigrationMeta, MigratorInitFailResponse } from '~/migrator.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { type Query, type SQL, sql } from '~/sql/sql.ts';\nimport { tracer } from '~/tracing.ts';\nimport type { NeonAuthToken } from '~/utils.ts';\nimport { assertUnreachable } from '~/utils.ts';\nimport type { PgDialect } from '../dialect.ts';\nimport type { SelectedFieldsOrdered } from '../query-builders/select.types.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '../session.ts';\nimport { PgBasePreparedQuery, PgSession } from '../session.ts';\nimport { PgAsyncDatabase } from './db.ts';\n\nexport abstract class PgAsyncPreparedQuery<T extends PreparedQueryConfig> extends PgBasePreparedQuery {\n\tstatic override readonly [entityKind]: string = 'PgAsyncPreparedQuery';\n\n\tconstructor(\n\t\tquery: Query,\n\t\t// cache instance\n\t\tprivate cache: Cache | undefined,\n\t\t// per query related metadata\n\t\tprivate 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\tprivate cacheConfig?: WithCacheConfig,\n\t) {\n\t\tsuper(query);\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\t/** @internal */\n\tprotected authToken?: NeonAuthToken;\n\t/** @internal */\n\tsetToken(token?: NeonAuthToken) {\n\t\tthis.authToken = token;\n\t\treturn this;\n\t}\n\n\tabstract override execute(placeholderValues?: Record<string, unknown>): Promise<T['execute']>;\n\n\t/** @internal */\n\tabstract override all(placeholderValues?: Record<string, unknown>): Promise<T['all']>;\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\tTFullSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTSchema extends V1.TablesRelationalConfig = V1.ExtractTablesWithRelations<TFullSchema>,\n> extends PgSession {\n\tstatic override readonly [entityKind]: string = 'PgAsyncSession';\n\n\tconstructor(dialect: PgDialect) {\n\t\tsuper(dialect);\n\t}\n\n\tabstract override prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => T['execute'],\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\tabstract override prepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tcustomResultMapper: (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => T['execute'],\n\t): PgAsyncPreparedQuery<T>;\n\n\toverride execute<T>(query: SQL): Promise<T>;\n\t/** @internal */\n\toverride execute<T>(query: SQL, token?: NeonAuthToken): Promise<T>;\n\t/** @internal */\n\toverride execute<T>(query: SQL, token?: NeonAuthToken): 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\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn prepared.setToken(token).execute();\n\t\t});\n\t}\n\n\toverride all<T = unknown>(query: SQL): Promise<T[]> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { all: T[] }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t).all();\n\t}\n\n\tabstract transaction<T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig,\n\t): Promise<T>;\n}\n\nexport abstract class PgAsyncTransaction<\n\tTQueryResult extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTSchema extends V1.TablesRelationalConfig = V1.ExtractTablesWithRelations<TFullSchema>,\n> extends PgAsyncDatabase<TQueryResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'PgTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\tsession: PgAsyncSession<any, any, any, any>,\n\t\tprotected relations: TRelations,\n\t\tprotected schema: {\n\t\t\tfullSchema: Record<string, unknown>;\n\t\t\tschema: TSchema;\n\t\t\ttableNamesMap: Record<string, string>;\n\t\t} | undefined,\n\t\tprotected readonly nestedIndex = 0,\n\t\tparseRqbJson?: boolean,\n\t) {\n\t\tsuper(dialect, session, relations, schema, 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<void> {\n\t\treturn this.session.execute(sql`set transaction ${this.getTransactionConfigSQL(config)}`);\n\t}\n\n\tabstract override transaction<T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t): Promise<T>;\n}\n\nexport async function migrate(\n\tmigrations: MigrationMeta[],\n\tsession: PgAsyncSession,\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\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)\n\t\t`;\n\tawait session.execute(sql`CREATE SCHEMA IF NOT EXISTS ${sql.identifier(migrationsSchema)}`);\n\tawait session.execute(migrationTableCreate);\n\n\tconst dbMigrations = await session.all<{ id: number; hash: string; created_at: string }>(\n\t\tsql`select id, hash, created_at from ${sql.identifier(migrationsSchema)}.${\n\t\t\tsql.identifier(migrationsTable)\n\t\t} order by created_at desc limit 1`,\n\t);\n\n\tif (typeof config === 'object' && config.init) {\n\t\tif (dbMigrations.length) {\n\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t}\n\n\t\tif (migrations.length > 1) {\n\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t}\n\n\t\tconst [migration] = migrations;\n\n\t\tif (!migration) return;\n\n\t\tawait session.execute(\n\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t} (\"hash\", \"created_at\") values(${migration.hash}, ${migration.folderMillis})`,\n\t\t);\n\n\t\treturn;\n\t}\n\n\tconst lastDbMigration = dbMigrations[0];\n\tawait session.transaction(async (tx) => {\n\t\tfor await (const migration of migrations) {\n\t\t\tif (\n\t\t\t\t!lastDbMigration\n\t\t\t\t|| Number(lastDbMigration.created_at) < migration.folderMillis\n\t\t\t) {\n\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\tawait tx.execute(sql.raw(stmt));\n\t\t\t\t}\n\t\t\t\tawait tx.execute(\n\t\t\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t} (\"hash\", \"created_at\") values(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t});\n}\n"],"mappings":"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","names":["import_entity","import_errors"]}
1
+ {"version":3,"sources":["../../../src/pg-core/async/session.ts"],"sourcesContent":["import type * as V1 from '~/_relations.ts';\nimport { 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 { MigrationConfig, MigrationMeta, MigratorInitFailResponse } from '~/migrator.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { type Query, type SQL, sql } from '~/sql/sql.ts';\nimport { tracer } from '~/tracing.ts';\nimport type { NeonAuthToken } from '~/utils.ts';\nimport { assertUnreachable } from '~/utils.ts';\nimport type { PgDialect } from '../dialect.ts';\nimport type { SelectedFieldsOrdered } from '../query-builders/select.types.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '../session.ts';\nimport { PgBasePreparedQuery, PgSession } from '../session.ts';\nimport { PgAsyncDatabase } from './db.ts';\n\nexport abstract class PgAsyncPreparedQuery<T extends PreparedQueryConfig> extends PgBasePreparedQuery {\n\tstatic override readonly [entityKind]: string = 'PgAsyncPreparedQuery';\n\n\tconstructor(\n\t\tquery: Query,\n\t\t// cache instance\n\t\tprivate cache: Cache | undefined,\n\t\t// per query related metadata\n\t\tprivate 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\tprivate cacheConfig?: WithCacheConfig,\n\t) {\n\t\tsuper(query);\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\t/** @internal */\n\tprotected authToken?: NeonAuthToken;\n\t/** @internal */\n\tsetToken(token?: NeonAuthToken) {\n\t\tthis.authToken = token;\n\t\treturn this;\n\t}\n\n\tabstract override execute(placeholderValues?: Record<string, unknown>): Promise<T['execute']>;\n\n\t/** @internal */\n\tabstract override all(placeholderValues?: Record<string, unknown>): Promise<T['all']>;\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\tTFullSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTSchema extends V1.TablesRelationalConfig = V1.ExtractTablesWithRelations<TFullSchema>,\n> extends PgSession {\n\tstatic override readonly [entityKind]: string = 'PgAsyncSession';\n\n\tconstructor(dialect: PgDialect) {\n\t\tsuper(dialect);\n\t}\n\n\tabstract override prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => T['execute'],\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\tabstract override prepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tcustomResultMapper: (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => T['execute'],\n\t): PgAsyncPreparedQuery<T>;\n\n\toverride execute<T>(query: SQL): Promise<T>;\n\t/** @internal */\n\toverride execute<T>(query: SQL, token?: NeonAuthToken): Promise<T>;\n\t/** @internal */\n\toverride execute<T>(query: SQL, token?: NeonAuthToken): 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\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn prepared.setToken(token).execute();\n\t\t});\n\t}\n\n\toverride all<T = unknown>(query: SQL): Promise<T[]> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { all: T[] }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t).all();\n\t}\n\n\tabstract transaction<T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig,\n\t): Promise<T>;\n}\n\nexport abstract class PgAsyncTransaction<\n\tTQueryResult extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTSchema extends V1.TablesRelationalConfig = V1.ExtractTablesWithRelations<TFullSchema>,\n> extends PgAsyncDatabase<TQueryResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'PgAsyncTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\tsession: PgAsyncSession<any, any, any, any>,\n\t\tprotected relations: TRelations,\n\t\tprotected schema: {\n\t\t\tfullSchema: Record<string, unknown>;\n\t\t\tschema: TSchema;\n\t\t\ttableNamesMap: Record<string, string>;\n\t\t} | undefined,\n\t\tprotected readonly nestedIndex = 0,\n\t\tparseRqbJson?: boolean,\n\t) {\n\t\tsuper(dialect, session, relations, schema, 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<void> {\n\t\treturn this.session.execute(sql`set transaction ${this.getTransactionConfigSQL(config)}`);\n\t}\n\n\tabstract override transaction<T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t): Promise<T>;\n}\n\nexport async function migrate(\n\tmigrations: MigrationMeta[],\n\tsession: PgAsyncSession,\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\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)\n\t\t`;\n\tawait session.execute(sql`CREATE SCHEMA IF NOT EXISTS ${sql.identifier(migrationsSchema)}`);\n\tawait session.execute(migrationTableCreate);\n\n\tconst dbMigrations = await session.all<{ id: number; hash: string; created_at: string }>(\n\t\tsql`select id, hash, created_at from ${sql.identifier(migrationsSchema)}.${\n\t\t\tsql.identifier(migrationsTable)\n\t\t} order by created_at desc limit 1`,\n\t);\n\n\tif (typeof config === 'object' && config.init) {\n\t\tif (dbMigrations.length) {\n\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t}\n\n\t\tif (migrations.length > 1) {\n\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t}\n\n\t\tconst [migration] = migrations;\n\n\t\tif (!migration) return;\n\n\t\tawait session.execute(\n\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t} (\"hash\", \"created_at\") values(${migration.hash}, ${migration.folderMillis})`,\n\t\t);\n\n\t\treturn;\n\t}\n\n\tconst lastDbMigration = dbMigrations[0];\n\tawait session.transaction(async (tx) => {\n\t\tfor (const migration of migrations) {\n\t\t\tif (\n\t\t\t\t!lastDbMigration\n\t\t\t\t|| Number(lastDbMigration.created_at) < migration.folderMillis\n\t\t\t) {\n\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\tawait tx.execute(sql.raw(stmt));\n\t\t\t\t}\n\t\t\t\tawait tx.execute(\n\t\t\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t} (\"hash\", \"created_at\") values(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t});\n}\n"],"mappings":"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","names":["import_entity","import_errors"]}
@@ -108,7 +108,7 @@ class PgAsyncTransaction extends PgAsyncDatabase {
108
108
  this.schema = schema;
109
109
  this.nestedIndex = nestedIndex;
110
110
  }
111
- static [entityKind] = "PgTransaction";
111
+ static [entityKind] = "PgAsyncTransaction";
112
112
  rollback() {
113
113
  throw new TransactionRollbackError();
114
114
  }
@@ -161,7 +161,7 @@ async function migrate(migrations, session, config) {
161
161
  }
162
162
  const lastDbMigration = dbMigrations[0];
163
163
  await session.transaction(async (tx) => {
164
- for await (const migration of migrations) {
164
+ for (const migration of migrations) {
165
165
  if (!lastDbMigration || Number(lastDbMigration.created_at) < migration.folderMillis) {
166
166
  for (const stmt of migration.sql) {
167
167
  await tx.execute(sql.raw(stmt));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/pg-core/async/session.ts"],"sourcesContent":["import type * as V1 from '~/_relations.ts';\nimport { 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 { MigrationConfig, MigrationMeta, MigratorInitFailResponse } from '~/migrator.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { type Query, type SQL, sql } from '~/sql/sql.ts';\nimport { tracer } from '~/tracing.ts';\nimport type { NeonAuthToken } from '~/utils.ts';\nimport { assertUnreachable } from '~/utils.ts';\nimport type { PgDialect } from '../dialect.ts';\nimport type { SelectedFieldsOrdered } from '../query-builders/select.types.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '../session.ts';\nimport { PgBasePreparedQuery, PgSession } from '../session.ts';\nimport { PgAsyncDatabase } from './db.ts';\n\nexport abstract class PgAsyncPreparedQuery<T extends PreparedQueryConfig> extends PgBasePreparedQuery {\n\tstatic override readonly [entityKind]: string = 'PgAsyncPreparedQuery';\n\n\tconstructor(\n\t\tquery: Query,\n\t\t// cache instance\n\t\tprivate cache: Cache | undefined,\n\t\t// per query related metadata\n\t\tprivate 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\tprivate cacheConfig?: WithCacheConfig,\n\t) {\n\t\tsuper(query);\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\t/** @internal */\n\tprotected authToken?: NeonAuthToken;\n\t/** @internal */\n\tsetToken(token?: NeonAuthToken) {\n\t\tthis.authToken = token;\n\t\treturn this;\n\t}\n\n\tabstract override execute(placeholderValues?: Record<string, unknown>): Promise<T['execute']>;\n\n\t/** @internal */\n\tabstract override all(placeholderValues?: Record<string, unknown>): Promise<T['all']>;\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\tTFullSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTSchema extends V1.TablesRelationalConfig = V1.ExtractTablesWithRelations<TFullSchema>,\n> extends PgSession {\n\tstatic override readonly [entityKind]: string = 'PgAsyncSession';\n\n\tconstructor(dialect: PgDialect) {\n\t\tsuper(dialect);\n\t}\n\n\tabstract override prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => T['execute'],\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\tabstract override prepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tcustomResultMapper: (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => T['execute'],\n\t): PgAsyncPreparedQuery<T>;\n\n\toverride execute<T>(query: SQL): Promise<T>;\n\t/** @internal */\n\toverride execute<T>(query: SQL, token?: NeonAuthToken): Promise<T>;\n\t/** @internal */\n\toverride execute<T>(query: SQL, token?: NeonAuthToken): 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\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn prepared.setToken(token).execute();\n\t\t});\n\t}\n\n\toverride all<T = unknown>(query: SQL): Promise<T[]> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { all: T[] }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t).all();\n\t}\n\n\tabstract transaction<T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig,\n\t): Promise<T>;\n}\n\nexport abstract class PgAsyncTransaction<\n\tTQueryResult extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTSchema extends V1.TablesRelationalConfig = V1.ExtractTablesWithRelations<TFullSchema>,\n> extends PgAsyncDatabase<TQueryResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'PgTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\tsession: PgAsyncSession<any, any, any, any>,\n\t\tprotected relations: TRelations,\n\t\tprotected schema: {\n\t\t\tfullSchema: Record<string, unknown>;\n\t\t\tschema: TSchema;\n\t\t\ttableNamesMap: Record<string, string>;\n\t\t} | undefined,\n\t\tprotected readonly nestedIndex = 0,\n\t\tparseRqbJson?: boolean,\n\t) {\n\t\tsuper(dialect, session, relations, schema, 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<void> {\n\t\treturn this.session.execute(sql`set transaction ${this.getTransactionConfigSQL(config)}`);\n\t}\n\n\tabstract override transaction<T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t): Promise<T>;\n}\n\nexport async function migrate(\n\tmigrations: MigrationMeta[],\n\tsession: PgAsyncSession,\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\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)\n\t\t`;\n\tawait session.execute(sql`CREATE SCHEMA IF NOT EXISTS ${sql.identifier(migrationsSchema)}`);\n\tawait session.execute(migrationTableCreate);\n\n\tconst dbMigrations = await session.all<{ id: number; hash: string; created_at: string }>(\n\t\tsql`select id, hash, created_at from ${sql.identifier(migrationsSchema)}.${\n\t\t\tsql.identifier(migrationsTable)\n\t\t} order by created_at desc limit 1`,\n\t);\n\n\tif (typeof config === 'object' && config.init) {\n\t\tif (dbMigrations.length) {\n\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t}\n\n\t\tif (migrations.length > 1) {\n\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t}\n\n\t\tconst [migration] = migrations;\n\n\t\tif (!migration) return;\n\n\t\tawait session.execute(\n\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t} (\"hash\", \"created_at\") values(${migration.hash}, ${migration.folderMillis})`,\n\t\t);\n\n\t\treturn;\n\t}\n\n\tconst lastDbMigration = dbMigrations[0];\n\tawait session.transaction(async (tx) => {\n\t\tfor await (const migration of migrations) {\n\t\t\tif (\n\t\t\t\t!lastDbMigration\n\t\t\t\t|| Number(lastDbMigration.created_at) < migration.folderMillis\n\t\t\t) {\n\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\tawait tx.execute(sql.raw(stmt));\n\t\t\t\t}\n\t\t\t\tawait tx.execute(\n\t\t\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t} (\"hash\", \"created_at\") values(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t});\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/pg-core/async/session.ts"],"sourcesContent":["import type * as V1 from '~/_relations.ts';\nimport { 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 { MigrationConfig, MigrationMeta, MigratorInitFailResponse } from '~/migrator.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { type Query, type SQL, sql } from '~/sql/sql.ts';\nimport { tracer } from '~/tracing.ts';\nimport type { NeonAuthToken } from '~/utils.ts';\nimport { assertUnreachable } from '~/utils.ts';\nimport type { PgDialect } from '../dialect.ts';\nimport type { SelectedFieldsOrdered } from '../query-builders/select.types.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '../session.ts';\nimport { PgBasePreparedQuery, PgSession } from '../session.ts';\nimport { PgAsyncDatabase } from './db.ts';\n\nexport abstract class PgAsyncPreparedQuery<T extends PreparedQueryConfig> extends PgBasePreparedQuery {\n\tstatic override readonly [entityKind]: string = 'PgAsyncPreparedQuery';\n\n\tconstructor(\n\t\tquery: Query,\n\t\t// cache instance\n\t\tprivate cache: Cache | undefined,\n\t\t// per query related metadata\n\t\tprivate 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\tprivate cacheConfig?: WithCacheConfig,\n\t) {\n\t\tsuper(query);\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\t/** @internal */\n\tprotected authToken?: NeonAuthToken;\n\t/** @internal */\n\tsetToken(token?: NeonAuthToken) {\n\t\tthis.authToken = token;\n\t\treturn this;\n\t}\n\n\tabstract override execute(placeholderValues?: Record<string, unknown>): Promise<T['execute']>;\n\n\t/** @internal */\n\tabstract override all(placeholderValues?: Record<string, unknown>): Promise<T['all']>;\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\tTFullSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTSchema extends V1.TablesRelationalConfig = V1.ExtractTablesWithRelations<TFullSchema>,\n> extends PgSession {\n\tstatic override readonly [entityKind]: string = 'PgAsyncSession';\n\n\tconstructor(dialect: PgDialect) {\n\t\tsuper(dialect);\n\t}\n\n\tabstract override prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => T['execute'],\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\tabstract override prepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tcustomResultMapper: (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => T['execute'],\n\t): PgAsyncPreparedQuery<T>;\n\n\toverride execute<T>(query: SQL): Promise<T>;\n\t/** @internal */\n\toverride execute<T>(query: SQL, token?: NeonAuthToken): Promise<T>;\n\t/** @internal */\n\toverride execute<T>(query: SQL, token?: NeonAuthToken): 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\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn prepared.setToken(token).execute();\n\t\t});\n\t}\n\n\toverride all<T = unknown>(query: SQL): Promise<T[]> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { all: T[] }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t).all();\n\t}\n\n\tabstract transaction<T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig,\n\t): Promise<T>;\n}\n\nexport abstract class PgAsyncTransaction<\n\tTQueryResult extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTSchema extends V1.TablesRelationalConfig = V1.ExtractTablesWithRelations<TFullSchema>,\n> extends PgAsyncDatabase<TQueryResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'PgAsyncTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\tsession: PgAsyncSession<any, any, any, any>,\n\t\tprotected relations: TRelations,\n\t\tprotected schema: {\n\t\t\tfullSchema: Record<string, unknown>;\n\t\t\tschema: TSchema;\n\t\t\ttableNamesMap: Record<string, string>;\n\t\t} | undefined,\n\t\tprotected readonly nestedIndex = 0,\n\t\tparseRqbJson?: boolean,\n\t) {\n\t\tsuper(dialect, session, relations, schema, 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<void> {\n\t\treturn this.session.execute(sql`set transaction ${this.getTransactionConfigSQL(config)}`);\n\t}\n\n\tabstract override transaction<T>(\n\t\ttransaction: (tx: PgAsyncTransaction<TQueryResult, TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t): Promise<T>;\n}\n\nexport async function migrate(\n\tmigrations: MigrationMeta[],\n\tsession: PgAsyncSession,\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\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)\n\t\t`;\n\tawait session.execute(sql`CREATE SCHEMA IF NOT EXISTS ${sql.identifier(migrationsSchema)}`);\n\tawait session.execute(migrationTableCreate);\n\n\tconst dbMigrations = await session.all<{ id: number; hash: string; created_at: string }>(\n\t\tsql`select id, hash, created_at from ${sql.identifier(migrationsSchema)}.${\n\t\t\tsql.identifier(migrationsTable)\n\t\t} order by created_at desc limit 1`,\n\t);\n\n\tif (typeof config === 'object' && config.init) {\n\t\tif (dbMigrations.length) {\n\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t}\n\n\t\tif (migrations.length > 1) {\n\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t}\n\n\t\tconst [migration] = migrations;\n\n\t\tif (!migration) return;\n\n\t\tawait session.execute(\n\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t} (\"hash\", \"created_at\") values(${migration.hash}, ${migration.folderMillis})`,\n\t\t);\n\n\t\treturn;\n\t}\n\n\tconst lastDbMigration = dbMigrations[0];\n\tawait session.transaction(async (tx) => {\n\t\tfor (const migration of migrations) {\n\t\t\tif (\n\t\t\t\t!lastDbMigration\n\t\t\t\t|| Number(lastDbMigration.created_at) < migration.folderMillis\n\t\t\t) {\n\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\tawait tx.execute(sql.raw(stmt));\n\t\t\t\t}\n\t\t\t\tawait tx.execute(\n\t\t\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t} (\"hash\", \"created_at\") values(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t});\n}\n"],"mappings":"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","names":[]}