drizzle-orm 1.0.0-beta.8-c55bf0f → 1.0.0-beta.9-8df6992

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.
@@ -23,7 +23,7 @@ __export(migrator_exports, {
23
23
  module.exports = __toCommonJS(migrator_exports);
24
24
  var import_migrator = require("../migrator.cjs");
25
25
  var import_session = require("../pg-core/effect/session.cjs");
26
- async function migrate(db, config) {
26
+ function migrate(db, config) {
27
27
  const migrations = (0, import_migrator.readMigrationFiles)(config);
28
28
  return (0, import_session.migrate)(migrations, db.session, config);
29
29
  }
@@ -1 +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 async 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;AAIvC,eAAsB,QACrB,IACA,QACC;AACD,QAAM,iBAAa,oCAAmB,MAAM;AAC5C,aAAO,eAAAA,SAAY,YAAY,GAAG,SAAS,MAAM;AAClD;","names":["coreMigrate"]}
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"]}
@@ -1,4 +1,4 @@
1
1
  import type { MigrationConfig } from "../migrator.cjs";
2
2
  import type { AnyRelations } from "../relations.cjs";
3
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): Promise<import("effect/Effect").Effect<void | import("../migrator.ts").MigratorInitFailResponse, import("../errors.ts").DrizzleQueryError, never>>;
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>;
@@ -1,4 +1,4 @@
1
1
  import type { MigrationConfig } from "../migrator.js";
2
2
  import type { AnyRelations } from "../relations.js";
3
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): Promise<import("effect/Effect").Effect<void | import("../migrator.js").MigratorInitFailResponse, import("../errors.js").DrizzleQueryError, never>>;
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>;
@@ -1,6 +1,6 @@
1
1
  import { readMigrationFiles } from "../migrator.js";
2
2
  import { migrate as coreMigrate } from "../pg-core/effect/session.js";
3
- async function migrate(db, config) {
3
+ function migrate(db, config) {
4
4
  const migrations = readMigrationFiles(config);
5
5
  return coreMigrate(migrations, db.session, config);
6
6
  }
@@ -1 +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 async 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;AAIvC,eAAsB,QACrB,IACA,QACC;AACD,QAAM,aAAa,mBAAmB,MAAM;AAC5C,SAAO,YAAY,YAAY,GAAG,SAAS,MAAM;AAClD;","names":[]}
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":[]}
@@ -31,7 +31,7 @@ var import_session = require("../pg-core/effect/session.cjs");
31
31
  var import_sql = require("../sql/sql.cjs");
32
32
  var import_utils = require("../utils.cjs");
33
33
  class EffectPgPreparedQuery extends import_session.PgEffectPreparedQuery {
34
- constructor(client, queryString, params, logger, cache, queryMetadata, cacheConfig, fields, name, _isResponseInArrayMode, customResultMapper, isRqbV2Query, wrap = (t) => t) {
34
+ constructor(client, queryString, params, logger, cache, queryMetadata, cacheConfig, fields, name, _isResponseInArrayMode, customResultMapper, isRqbV2Query) {
35
35
  super({ sql: queryString, params }, cache, queryMetadata, cacheConfig);
36
36
  this.client = client;
37
37
  this.queryString = queryString;
@@ -41,7 +41,6 @@ class EffectPgPreparedQuery extends import_session.PgEffectPreparedQuery {
41
41
  this._isResponseInArrayMode = _isResponseInArrayMode;
42
42
  this.customResultMapper = customResultMapper;
43
43
  this.isRqbV2Query = isRqbV2Query;
44
- this.wrap = wrap;
45
44
  }
46
45
  static [import_entity.entityKind] = "EffectPgPreparedQuery";
47
46
  execute(placeholderValues) {
@@ -59,35 +58,31 @@ class EffectPgPreparedQuery extends import_session.PgEffectPreparedQuery {
59
58
  return this.queryWithCache(
60
59
  query.sql,
61
60
  params,
62
- this.wrap(
63
- client.unsafe(query.sql, params).values.pipe(import_effect.Effect.andThen(
64
- (rows) => {
65
- if (customResultMapper) return customResultMapper(rows);
66
- return rows.map(
67
- (row) => (0, import_utils.mapResultRow)(
68
- fields,
69
- row,
70
- joinsNotNullableMap
71
- )
72
- );
73
- }
74
- ))
75
- )
61
+ client.unsafe(query.sql, params).values.pipe(import_effect.Effect.andThen(
62
+ (rows) => {
63
+ if (customResultMapper) return customResultMapper(rows);
64
+ return rows.map(
65
+ (row) => (0, import_utils.mapResultRow)(
66
+ fields,
67
+ row,
68
+ joinsNotNullableMap
69
+ )
70
+ );
71
+ }
72
+ ))
76
73
  );
77
74
  }
78
75
  executeRqbV2(placeholderValues) {
79
76
  const { query, logger, customResultMapper, client } = this;
80
77
  const params = (0, import_sql.fillPlaceholders)(query.params, placeholderValues ?? {});
81
78
  logger.logQuery(query.sql, params);
82
- return this.wrap(
83
- client.unsafe(query.sql, params).withoutTransform.pipe(
84
- import_effect.Effect.andThen(
85
- (v) => customResultMapper(v)
86
- )
87
- ).pipe(import_effect.Effect.catchAll((e) => {
88
- return import_effect.Effect.fail(new import_errors.DrizzleQueryError(query.sql, params, e instanceof Error ? e : void 0));
89
- }))
90
- );
79
+ return client.unsafe(query.sql, params).withoutTransform.pipe(
80
+ import_effect.Effect.andThen(
81
+ (v) => customResultMapper(v)
82
+ )
83
+ ).pipe(import_effect.Effect.catchAll((e) => {
84
+ return import_effect.Effect.fail(new import_errors.DrizzleQueryError(query.sql, params, e instanceof Error ? e : void 0));
85
+ }));
91
86
  }
92
87
  all(placeholderValues) {
93
88
  const { query, logger, client } = this;
@@ -96,7 +91,7 @@ class EffectPgPreparedQuery extends import_session.PgEffectPreparedQuery {
96
91
  return this.queryWithCache(
97
92
  query.sql,
98
93
  params,
99
- this.wrap(client.unsafe(query.sql, params).withoutTransform)
94
+ client.unsafe(query.sql, params).withoutTransform
100
95
  );
101
96
  }
102
97
  /** @internal */
@@ -105,13 +100,11 @@ class EffectPgPreparedQuery extends import_session.PgEffectPreparedQuery {
105
100
  }
106
101
  }
107
102
  class EffectPgSession extends import_session.PgEffectSession {
108
- constructor(client, dialect, relations, schema, options = {}, wrap = (t) => t, nestedIndex = 0) {
103
+ constructor(client, dialect, relations, schema, options = {}) {
109
104
  super(dialect);
110
105
  this.client = client;
111
106
  this.relations = relations;
112
107
  this.schema = schema;
113
- this.wrap = wrap;
114
- this.nestedIndex = nestedIndex;
115
108
  this.logger = options.logger ?? new import_logger.NoopLogger();
116
109
  this.cache = options.cache;
117
110
  }
@@ -131,8 +124,7 @@ class EffectPgSession extends import_session.PgEffectSession {
131
124
  name,
132
125
  isResponseInArrayMode,
133
126
  customResultMapper,
134
- false,
135
- this.wrap
127
+ false
136
128
  );
137
129
  }
138
130
  prepareRelationalQuery(query, fields, name, customResultMapper) {
@@ -148,8 +140,7 @@ class EffectPgSession extends import_session.PgEffectSession {
148
140
  name,
149
141
  false,
150
142
  customResultMapper,
151
- true,
152
- this.wrap
143
+ true
153
144
  );
154
145
  }
155
146
  execute(query) {
@@ -169,34 +160,16 @@ class EffectPgSession extends import_session.PgEffectSession {
169
160
  ).all();
170
161
  }
171
162
  transaction(transaction) {
172
- const { dialect, relations, schema, client, logger, cache, nestedIndex } = this;
173
- const sp = `sp${this.nestedIndex}`;
174
- return this.client.withTransaction(import_effect.Effect.gen(function* (txAdapter) {
175
- const session = new EffectPgSession(
176
- client,
177
- dialect,
178
- relations,
179
- schema,
180
- { logger, cache },
181
- txAdapter,
182
- nestedIndex + 1
183
- );
163
+ const { dialect, relations, schema } = this;
164
+ const session = this;
165
+ return this.client.withTransaction(import_effect.Effect.gen(function* () {
184
166
  const tx = new EffectPgTransaction(
185
167
  dialect,
186
168
  session,
187
169
  relations,
188
- schema,
189
- nestedIndex + 1
170
+ schema
190
171
  );
191
- if (nestedIndex) yield* tx.execute(import_sql.sql.raw(`savepoint ${sp}`));
192
- const res = yield* transaction(tx).pipe(import_effect.Effect.catchAll(
193
- (e) => import_effect.Effect.gen(function* () {
194
- if (nestedIndex) yield* tx.execute(import_sql.sql.raw(`rollback to savepoint ${sp}`));
195
- return yield* import_effect.Effect.fail(e);
196
- })
197
- ));
198
- if (nestedIndex) yield* tx.execute(import_sql.sql.raw(`release savepoint ${sp}`));
199
- return res;
172
+ return yield* transaction(tx);
200
173
  }));
201
174
  }
202
175
  }
@@ -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, 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, sql } from '~/sql/sql.ts';\nimport { mapResultRow } from '~/utils.ts';\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\tprivate wrap: Effect.Adapter = <T>(t: T): T => t,\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\tthis.wrap(\n\t\t\t\tclient.unsafe(query.sql, params as any).values.pipe(Effect.andThen(\n\t\t\t\t\t(rows) => {\n\t\t\t\t\t\tif (customResultMapper) return (customResultMapper as (rows: unknown[][]) => unknown)(rows as unknown[][]);\n\n\t\t\t\t\t\treturn rows.map((row) =>\n\t\t\t\t\t\t\tmapResultRow(\n\t\t\t\t\t\t\t\tfields!,\n\t\t\t\t\t\t\t\trow as unknown[],\n\t\t\t\t\t\t\t\tjoinsNotNullableMap,\n\t\t\t\t\t\t\t)\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 this.wrap(\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\tthis.wrap(client.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\tprivate wrap: Effect.Adapter = <T>(t: T): T => t,\n\t\tprivate nestedIndex = 0,\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\tthis.wrap,\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\tthis.wrap,\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\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, client, logger, cache, nestedIndex } = this;\n\t\tconst sp = `sp${this.nestedIndex}`;\n\n\t\treturn this.client.withTransaction(Effect.gen(function*(txAdapter) {\n\t\t\tconst session = new EffectPgSession(\n\t\t\t\tclient,\n\t\t\t\tdialect,\n\t\t\t\trelations,\n\t\t\t\tschema,\n\t\t\t\t{ logger, cache },\n\t\t\t\ttxAdapter,\n\t\t\t\tnestedIndex + 1,\n\t\t\t);\n\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\tnestedIndex + 1,\n\t\t\t);\n\n\t\t\tif (nestedIndex) yield* tx.execute(sql.raw(`savepoint ${sp}`));\n\n\t\t\tconst res = yield* transaction(tx).pipe(Effect.catchAll((e) =>\n\t\t\t\tEffect.gen(function*() {\n\t\t\t\t\tif (nestedIndex) yield* (tx.execute(sql.raw(`rollback to savepoint ${sp}`)));\n\t\t\t\t\treturn yield* Effect.fail(e);\n\t\t\t\t})\n\t\t\t));\n\t\t\tif (nestedIndex) yield* (tx.execute(sql.raw(`release savepoint ${sp}`)));\n\n\t\t\treturn res;\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":[]}
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":[]}
@@ -12,8 +12,9 @@ import type { SelectedFieldsOrdered } from "../pg-core/query-builders/select.typ
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;
@@ -24,12 +25,11 @@ export declare class EffectPgPreparedQuery<T extends PreparedQueryConfig, TIsRqb
24
25
  private _isResponseInArrayMode;
25
26
  private customResultMapper?;
26
27
  private isRqbV2Query?;
27
- private wrap;
28
28
  static readonly [entityKind]: string;
29
29
  constructor(client: PgClient, queryString: string, params: unknown[], logger: Logger, cache: EffectCache | undefined, queryMetadata: {
30
30
  type: 'select' | 'update' | 'delete' | 'insert';
31
31
  tables: string[];
32
- } | undefined, cacheConfig: WithCacheConfig | undefined, fields: SelectedFieldsOrdered | undefined, name: string | undefined, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][]) => T["execute"]) | undefined, isRqbV2Query?: TIsRqbV2 | undefined, wrap?: Effect.Adapter);
32
+ } | undefined, cacheConfig: WithCacheConfig | undefined, fields: SelectedFieldsOrdered | undefined, name: string | undefined, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][]) => T["execute"]) | undefined, isRqbV2Query?: TIsRqbV2 | undefined);
33
33
  execute(placeholderValues?: Record<string, unknown>): Effect.Effect<T['execute'], DrizzleQueryError>;
34
34
  private executeRqbV2;
35
35
  all(placeholderValues?: Record<string, unknown>): Effect.Effect<T['all'], DrizzleQueryError, never>;
@@ -38,15 +38,13 @@ export declare class EffectPgSession<TQueryResult extends PgQueryResultHKT, TFul
38
38
  private client;
39
39
  protected relations: TRelations;
40
40
  protected schema: V1.RelationalSchemaConfig<TSchema> | undefined;
41
- private wrap;
42
- private nestedIndex;
43
41
  static readonly [entityKind]: string;
44
42
  private logger;
45
43
  private cache;
46
44
  constructor(client: PgClient, dialect: PgDialect, relations: TRelations, schema: V1.RelationalSchemaConfig<TSchema> | undefined, options?: {
47
45
  logger?: Logger;
48
46
  cache?: EffectCache;
49
- }, wrap?: Effect.Adapter, nestedIndex?: number);
47
+ });
50
48
  prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute'], queryMetadata?: {
51
49
  type: 'select' | 'update' | 'delete' | 'insert';
52
50
  tables: string[];
@@ -54,7 +52,12 @@ export declare class EffectPgSession<TQueryResult extends PgQueryResultHKT, TFul
54
52
  prepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper?: (rows: Record<string, unknown>[]) => T['execute']): EffectPgPreparedQuery<T, true>;
55
53
  execute<T>(query: SQL): Effect.Effect<T, DrizzleQueryError>;
56
54
  all<T>(query: SQL): Effect.Effect<T, DrizzleQueryError>;
57
- transaction<T>(transaction: (tx: EffectPgTransaction<TQueryResult, TFullSchema, TRelations, TSchema>) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never>): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never>;
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>;
58
61
  }
59
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> {
60
63
  static readonly [entityKind]: string;
@@ -12,8 +12,9 @@ import type { SelectedFieldsOrdered } from "../pg-core/query-builders/select.typ
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;
@@ -24,12 +25,11 @@ export declare class EffectPgPreparedQuery<T extends PreparedQueryConfig, TIsRqb
24
25
  private _isResponseInArrayMode;
25
26
  private customResultMapper?;
26
27
  private isRqbV2Query?;
27
- private wrap;
28
28
  static readonly [entityKind]: string;
29
29
  constructor(client: PgClient, queryString: string, params: unknown[], logger: Logger, cache: EffectCache | undefined, queryMetadata: {
30
30
  type: 'select' | 'update' | 'delete' | 'insert';
31
31
  tables: string[];
32
- } | undefined, cacheConfig: WithCacheConfig | undefined, fields: SelectedFieldsOrdered | undefined, name: string | undefined, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][]) => T["execute"]) | undefined, isRqbV2Query?: TIsRqbV2 | undefined, wrap?: Effect.Adapter);
32
+ } | undefined, cacheConfig: WithCacheConfig | undefined, fields: SelectedFieldsOrdered | undefined, name: string | undefined, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][]) => T["execute"]) | undefined, isRqbV2Query?: TIsRqbV2 | undefined);
33
33
  execute(placeholderValues?: Record<string, unknown>): Effect.Effect<T['execute'], DrizzleQueryError>;
34
34
  private executeRqbV2;
35
35
  all(placeholderValues?: Record<string, unknown>): Effect.Effect<T['all'], DrizzleQueryError, never>;
@@ -38,15 +38,13 @@ export declare class EffectPgSession<TQueryResult extends PgQueryResultHKT, TFul
38
38
  private client;
39
39
  protected relations: TRelations;
40
40
  protected schema: V1.RelationalSchemaConfig<TSchema> | undefined;
41
- private wrap;
42
- private nestedIndex;
43
41
  static readonly [entityKind]: string;
44
42
  private logger;
45
43
  private cache;
46
44
  constructor(client: PgClient, dialect: PgDialect, relations: TRelations, schema: V1.RelationalSchemaConfig<TSchema> | undefined, options?: {
47
45
  logger?: Logger;
48
46
  cache?: EffectCache;
49
- }, wrap?: Effect.Adapter, nestedIndex?: number);
47
+ });
50
48
  prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute'], queryMetadata?: {
51
49
  type: 'select' | 'update' | 'delete' | 'insert';
52
50
  tables: string[];
@@ -54,7 +52,12 @@ export declare class EffectPgSession<TQueryResult extends PgQueryResultHKT, TFul
54
52
  prepareRelationalQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, customResultMapper?: (rows: Record<string, unknown>[]) => T['execute']): EffectPgPreparedQuery<T, true>;
55
53
  execute<T>(query: SQL): Effect.Effect<T, DrizzleQueryError>;
56
54
  all<T>(query: SQL): Effect.Effect<T, DrizzleQueryError>;
57
- transaction<T>(transaction: (tx: EffectPgTransaction<TQueryResult, TFullSchema, TRelations, TSchema>) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never>): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError, never>;
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>;
58
61
  }
59
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> {
60
63
  static readonly [entityKind]: string;
@@ -3,10 +3,10 @@ import { entityKind } from "../entity.js";
3
3
  import { DrizzleQueryError } from "../errors.js";
4
4
  import { NoopLogger } from "../logger.js";
5
5
  import { PgEffectPreparedQuery, PgEffectSession, PgEffectTransaction } from "../pg-core/effect/session.js";
6
- import { fillPlaceholders, sql } from "../sql/sql.js";
6
+ import { fillPlaceholders } from "../sql/sql.js";
7
7
  import { mapResultRow } from "../utils.js";
8
8
  class EffectPgPreparedQuery extends PgEffectPreparedQuery {
9
- constructor(client, queryString, params, logger, cache, queryMetadata, cacheConfig, fields, name, _isResponseInArrayMode, customResultMapper, isRqbV2Query, wrap = (t) => t) {
9
+ constructor(client, queryString, params, logger, cache, queryMetadata, cacheConfig, fields, name, _isResponseInArrayMode, customResultMapper, isRqbV2Query) {
10
10
  super({ sql: queryString, params }, cache, queryMetadata, cacheConfig);
11
11
  this.client = client;
12
12
  this.queryString = queryString;
@@ -16,7 +16,6 @@ class EffectPgPreparedQuery extends PgEffectPreparedQuery {
16
16
  this._isResponseInArrayMode = _isResponseInArrayMode;
17
17
  this.customResultMapper = customResultMapper;
18
18
  this.isRqbV2Query = isRqbV2Query;
19
- this.wrap = wrap;
20
19
  }
21
20
  static [entityKind] = "EffectPgPreparedQuery";
22
21
  execute(placeholderValues) {
@@ -34,35 +33,31 @@ class EffectPgPreparedQuery extends PgEffectPreparedQuery {
34
33
  return this.queryWithCache(
35
34
  query.sql,
36
35
  params,
37
- this.wrap(
38
- client.unsafe(query.sql, params).values.pipe(Effect.andThen(
39
- (rows) => {
40
- if (customResultMapper) return customResultMapper(rows);
41
- return rows.map(
42
- (row) => mapResultRow(
43
- fields,
44
- row,
45
- joinsNotNullableMap
46
- )
47
- );
48
- }
49
- ))
50
- )
36
+ client.unsafe(query.sql, params).values.pipe(Effect.andThen(
37
+ (rows) => {
38
+ if (customResultMapper) return customResultMapper(rows);
39
+ return rows.map(
40
+ (row) => mapResultRow(
41
+ fields,
42
+ row,
43
+ joinsNotNullableMap
44
+ )
45
+ );
46
+ }
47
+ ))
51
48
  );
52
49
  }
53
50
  executeRqbV2(placeholderValues) {
54
51
  const { query, logger, customResultMapper, client } = this;
55
52
  const params = fillPlaceholders(query.params, placeholderValues ?? {});
56
53
  logger.logQuery(query.sql, params);
57
- return this.wrap(
58
- client.unsafe(query.sql, params).withoutTransform.pipe(
59
- Effect.andThen(
60
- (v) => customResultMapper(v)
61
- )
62
- ).pipe(Effect.catchAll((e) => {
63
- return Effect.fail(new DrizzleQueryError(query.sql, params, e instanceof Error ? e : void 0));
64
- }))
65
- );
54
+ return client.unsafe(query.sql, params).withoutTransform.pipe(
55
+ Effect.andThen(
56
+ (v) => customResultMapper(v)
57
+ )
58
+ ).pipe(Effect.catchAll((e) => {
59
+ return Effect.fail(new DrizzleQueryError(query.sql, params, e instanceof Error ? e : void 0));
60
+ }));
66
61
  }
67
62
  all(placeholderValues) {
68
63
  const { query, logger, client } = this;
@@ -71,7 +66,7 @@ class EffectPgPreparedQuery extends PgEffectPreparedQuery {
71
66
  return this.queryWithCache(
72
67
  query.sql,
73
68
  params,
74
- this.wrap(client.unsafe(query.sql, params).withoutTransform)
69
+ client.unsafe(query.sql, params).withoutTransform
75
70
  );
76
71
  }
77
72
  /** @internal */
@@ -80,13 +75,11 @@ class EffectPgPreparedQuery extends PgEffectPreparedQuery {
80
75
  }
81
76
  }
82
77
  class EffectPgSession extends PgEffectSession {
83
- constructor(client, dialect, relations, schema, options = {}, wrap = (t) => t, nestedIndex = 0) {
78
+ constructor(client, dialect, relations, schema, options = {}) {
84
79
  super(dialect);
85
80
  this.client = client;
86
81
  this.relations = relations;
87
82
  this.schema = schema;
88
- this.wrap = wrap;
89
- this.nestedIndex = nestedIndex;
90
83
  this.logger = options.logger ?? new NoopLogger();
91
84
  this.cache = options.cache;
92
85
  }
@@ -106,8 +99,7 @@ class EffectPgSession extends PgEffectSession {
106
99
  name,
107
100
  isResponseInArrayMode,
108
101
  customResultMapper,
109
- false,
110
- this.wrap
102
+ false
111
103
  );
112
104
  }
113
105
  prepareRelationalQuery(query, fields, name, customResultMapper) {
@@ -123,8 +115,7 @@ class EffectPgSession extends PgEffectSession {
123
115
  name,
124
116
  false,
125
117
  customResultMapper,
126
- true,
127
- this.wrap
118
+ true
128
119
  );
129
120
  }
130
121
  execute(query) {
@@ -144,34 +135,16 @@ class EffectPgSession extends PgEffectSession {
144
135
  ).all();
145
136
  }
146
137
  transaction(transaction) {
147
- const { dialect, relations, schema, client, logger, cache, nestedIndex } = this;
148
- const sp = `sp${this.nestedIndex}`;
149
- return this.client.withTransaction(Effect.gen(function* (txAdapter) {
150
- const session = new EffectPgSession(
151
- client,
152
- dialect,
153
- relations,
154
- schema,
155
- { logger, cache },
156
- txAdapter,
157
- nestedIndex + 1
158
- );
138
+ const { dialect, relations, schema } = this;
139
+ const session = this;
140
+ return this.client.withTransaction(Effect.gen(function* () {
159
141
  const tx = new EffectPgTransaction(
160
142
  dialect,
161
143
  session,
162
144
  relations,
163
- schema,
164
- nestedIndex + 1
145
+ schema
165
146
  );
166
- if (nestedIndex) yield* tx.execute(sql.raw(`savepoint ${sp}`));
167
- const res = yield* transaction(tx).pipe(Effect.catchAll(
168
- (e) => Effect.gen(function* () {
169
- if (nestedIndex) yield* tx.execute(sql.raw(`rollback to savepoint ${sp}`));
170
- return yield* Effect.fail(e);
171
- })
172
- ));
173
- if (nestedIndex) yield* tx.execute(sql.raw(`release savepoint ${sp}`));
174
- return res;
147
+ return yield* transaction(tx);
175
148
  }));
176
149
  }
177
150
  }
@@ -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, 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, sql } from '~/sql/sql.ts';\nimport { mapResultRow } from '~/utils.ts';\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\tprivate wrap: Effect.Adapter = <T>(t: T): T => t,\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\tthis.wrap(\n\t\t\t\tclient.unsafe(query.sql, params as any).values.pipe(Effect.andThen(\n\t\t\t\t\t(rows) => {\n\t\t\t\t\t\tif (customResultMapper) return (customResultMapper as (rows: unknown[][]) => unknown)(rows as unknown[][]);\n\n\t\t\t\t\t\treturn rows.map((row) =>\n\t\t\t\t\t\t\tmapResultRow(\n\t\t\t\t\t\t\t\tfields!,\n\t\t\t\t\t\t\t\trow as unknown[],\n\t\t\t\t\t\t\t\tjoinsNotNullableMap,\n\t\t\t\t\t\t\t)\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 this.wrap(\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\tthis.wrap(client.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\tprivate wrap: Effect.Adapter = <T>(t: T): T => t,\n\t\tprivate nestedIndex = 0,\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\tthis.wrap,\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\tthis.wrap,\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\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, client, logger, cache, nestedIndex } = this;\n\t\tconst sp = `sp${this.nestedIndex}`;\n\n\t\treturn this.client.withTransaction(Effect.gen(function*(txAdapter) {\n\t\t\tconst session = new EffectPgSession(\n\t\t\t\tclient,\n\t\t\t\tdialect,\n\t\t\t\trelations,\n\t\t\t\tschema,\n\t\t\t\t{ logger, cache },\n\t\t\t\ttxAdapter,\n\t\t\t\tnestedIndex + 1,\n\t\t\t);\n\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\tnestedIndex + 1,\n\t\t\t);\n\n\t\t\tif (nestedIndex) yield* tx.execute(sql.raw(`savepoint ${sp}`));\n\n\t\t\tconst res = yield* transaction(tx).pipe(Effect.catchAll((e) =>\n\t\t\t\tEffect.gen(function*() {\n\t\t\t\t\tif (nestedIndex) yield* (tx.execute(sql.raw(`rollback to savepoint ${sp}`)));\n\t\t\t\t\treturn yield* Effect.fail(e);\n\t\t\t\t})\n\t\t\t));\n\t\t\tif (nestedIndex) yield* (tx.execute(sql.raw(`release savepoint ${sp}`)));\n\n\t\t\treturn res;\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":[]}
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/mysql2/driver.cjs CHANGED
@@ -34,7 +34,7 @@ __export(driver_exports, {
34
34
  drizzle: () => drizzle
35
35
  });
36
36
  module.exports = __toCommonJS(driver_exports);
37
- var import_mysql2 = require("mysql2");
37
+ var import_promise = require("mysql2/promise");
38
38
  var V1 = __toESM(require("../_relations.cjs"), 1);
39
39
  var import_entity = require("../entity.cjs");
40
40
  var import_logger = require("../logger.cjs");
@@ -111,17 +111,17 @@ function isCallbackClient(client) {
111
111
  function drizzle(...params) {
112
112
  if (typeof params[0] === "string") {
113
113
  const connectionString = params[0];
114
- const instance2 = (0, import_mysql2.createPool)({
114
+ const instance2 = (0, import_promise.createPool)({
115
115
  uri: connectionString
116
116
  });
117
117
  return construct(instance2, params[1]);
118
118
  }
119
119
  const { connection, client, ...drizzleConfig } = params[0];
120
120
  if (client) return construct(client, drizzleConfig);
121
- const instance = typeof connection === "string" ? (0, import_mysql2.createPool)({
121
+ const instance = typeof connection === "string" ? (0, import_promise.createPool)({
122
122
  uri: connection,
123
123
  supportBigNumbers: true
124
- }) : (0, import_mysql2.createPool)(connection);
124
+ }) : (0, import_promise.createPool)(connection);
125
125
  const db = construct(instance, drizzleConfig);
126
126
  return db;
127
127
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/mysql2/driver.ts"],"sourcesContent":["import { type Connection as CallbackConnection, createPool, type Pool as CallbackPool, type PoolOptions } from 'mysql2';\nimport type { Connection, Pool } from 'mysql2/promise';\nimport * as V1 from '~/_relations.ts';\nimport type { Cache } from '~/cache/core/index.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { MySqlDatabase } from '~/mysql-core/db.ts';\nimport { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { Mode } from '~/mysql-core/session.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport { DrizzleError } from '../errors.ts';\nimport type { MySql2Client, MySql2PreparedQueryHKT, MySql2QueryResultHKT } from './session.ts';\nimport { MySql2Session } from './session.ts';\n\nexport interface MySqlDriverOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class MySql2Driver {\n\tstatic readonly [entityKind]: string = 'MySql2Driver';\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tprivate dialect: MySqlDialect,\n\t\tprivate options: MySqlDriverOptions = {},\n\t) {\n\t}\n\n\tcreateSession(\n\t\trelations: AnyRelations,\n\t\tschema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined,\n\t\tmode: Mode,\n\t): MySql2Session<Record<string, unknown>, AnyRelations, V1.TablesRelationalConfig> {\n\t\treturn new MySql2Session(this.client, this.dialect, relations, schema, {\n\t\t\tlogger: this.options.logger,\n\t\t\tmode,\n\t\t\tcache: this.options.cache,\n\t\t});\n\t}\n}\n\nexport { MySqlDatabase } from '~/mysql-core/db.ts';\n\nexport class MySql2Database<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends MySqlDatabase<MySql2QueryResultHKT, MySql2PreparedQueryHKT, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'MySql2Database';\n}\n\nexport type MySql2DrizzleConfig<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> =\n\t& Omit<DrizzleConfig<TSchema, TRelations>, 'schema'>\n\t& ({ schema: TSchema; mode: Mode } | { schema?: undefined; mode?: Mode });\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends Pool | Connection | CallbackPool | CallbackConnection = CallbackPool,\n>(\n\tclient: TClient,\n\tconfig: MySql2DrizzleConfig<TSchema, TRelations> = {},\n): MySql2Database<TSchema, TRelations> & {\n\t$client: AnyMySql2Connection extends TClient ? CallbackPool : TClient;\n} {\n\tconst dialect = new MySqlDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tconst clientForInstance = isCallbackClient(client) ? client.promise() : client;\n\n\tlet schema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tif (config.mode === undefined) {\n\t\t\tthrow new DrizzleError({\n\t\t\t\tmessage:\n\t\t\t\t\t'You need to specify \"mode\": \"planetscale\" or \"default\" when providing a schema. Read more: https://orm.drizzle.team/docs/rqb#modes',\n\t\t\t});\n\t\t}\n\n\t\tconst tablesConfig = V1.extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tV1.createTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst mode = config.mode ?? 'default';\n\n\tconst relations = config.relations ?? {} as TRelations;\n\tconst driver = new MySql2Driver(clientForInstance as MySql2Client, dialect, { logger, cache: config.cache });\n\tconst session = driver.createSession(relations, schema, mode);\n\tconst db = new MySql2Database(\n\t\tdialect,\n\t\tsession,\n\t\trelations,\n\t\tschema as V1.RelationalSchemaConfig<any>,\n\t\tmode,\n\t) as MySql2Database<TSchema, TRelations>;\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\n\treturn db as any;\n}\n\ninterface CallbackClient {\n\tpromise(): MySql2Client;\n}\n\nfunction isCallbackClient(client: any): client is CallbackClient {\n\treturn typeof client.promise === 'function';\n}\n\nexport type AnyMySql2Connection = Pool | Connection | CallbackPool | CallbackConnection;\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends AnyMySql2Connection = CallbackPool,\n>(\n\t...params: [\n\t\tstring,\n\t] | [\n\t\tstring,\n\t\tMySql2DrizzleConfig<TSchema, TRelations>,\n\t] | [\n\t\t(\n\t\t\t& MySql2DrizzleConfig<TSchema, TRelations>\n\t\t\t& ({\n\t\t\t\tconnection: string | PoolOptions;\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): MySql2Database<TSchema, TRelations> & {\n\t$client: AnyMySql2Connection extends TClient ? CallbackPool : TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst connectionString = params[0]!;\n\t\tconst instance = createPool({\n\t\t\turi: connectionString,\n\t\t});\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t& { connection?: PoolOptions | string; client?: TClient }\n\t\t& MySql2DrizzleConfig<TSchema, TRelations>;\n\n\tif (client) return construct(client, drizzleConfig) as any;\n\n\tconst instance = typeof connection === 'string'\n\t\t? createPool({\n\t\t\turi: connection,\n\t\t\tsupportBigNumbers: true,\n\t\t})\n\t\t: createPool(connection!);\n\tconst db = construct(instance, drizzleConfig);\n\n\treturn db as any;\n}\n\nexport namespace drizzle {\n\texport function mock<\n\t\tTSchema extends Record<string, unknown> = Record<string, never>,\n\t\tTRelations extends AnyRelations = EmptyRelations,\n\t>(\n\t\tconfig?: MySql2DrizzleConfig<TSchema, TRelations>,\n\t): MySql2Database<TSchema, TRelations> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"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","names":["import_db","instance","drizzle"]}
1
+ {"version":3,"sources":["../../src/mysql2/driver.ts"],"sourcesContent":["import type { Connection as CallbackConnection, Pool as CallbackPool } from 'mysql2';\nimport { type Connection, createPool, type Pool, type PoolOptions } from 'mysql2/promise';\nimport * as V1 from '~/_relations.ts';\nimport type { Cache } from '~/cache/core/index.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { MySqlDatabase } from '~/mysql-core/db.ts';\nimport { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { Mode } from '~/mysql-core/session.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport { DrizzleError } from '../errors.ts';\nimport type { MySql2Client, MySql2PreparedQueryHKT, MySql2QueryResultHKT } from './session.ts';\nimport { MySql2Session } from './session.ts';\n\nexport interface MySqlDriverOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class MySql2Driver {\n\tstatic readonly [entityKind]: string = 'MySql2Driver';\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tprivate dialect: MySqlDialect,\n\t\tprivate options: MySqlDriverOptions = {},\n\t) {\n\t}\n\n\tcreateSession(\n\t\trelations: AnyRelations,\n\t\tschema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined,\n\t\tmode: Mode,\n\t): MySql2Session<Record<string, unknown>, AnyRelations, V1.TablesRelationalConfig> {\n\t\treturn new MySql2Session(this.client, this.dialect, relations, schema, {\n\t\t\tlogger: this.options.logger,\n\t\t\tmode,\n\t\t\tcache: this.options.cache,\n\t\t});\n\t}\n}\n\nexport { MySqlDatabase } from '~/mysql-core/db.ts';\n\nexport class MySql2Database<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends MySqlDatabase<MySql2QueryResultHKT, MySql2PreparedQueryHKT, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'MySql2Database';\n}\n\nexport type MySql2DrizzleConfig<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> =\n\t& Omit<DrizzleConfig<TSchema, TRelations>, 'schema'>\n\t& ({ schema: TSchema; mode: Mode } | { schema?: undefined; mode?: Mode });\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends Pool | Connection | CallbackPool | CallbackConnection = Pool,\n>(\n\tclient: TClient,\n\tconfig: MySql2DrizzleConfig<TSchema, TRelations> = {},\n): MySql2Database<TSchema, TRelations> & {\n\t$client: AnyMySql2Connection extends TClient ? Pool : TClient;\n} {\n\tconst dialect = new MySqlDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tconst clientForInstance = isCallbackClient(client) ? client.promise() : client;\n\n\tlet schema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tif (config.mode === undefined) {\n\t\t\tthrow new DrizzleError({\n\t\t\t\tmessage:\n\t\t\t\t\t'You need to specify \"mode\": \"planetscale\" or \"default\" when providing a schema. Read more: https://orm.drizzle.team/docs/rqb#modes',\n\t\t\t});\n\t\t}\n\n\t\tconst tablesConfig = V1.extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tV1.createTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst mode = config.mode ?? 'default';\n\n\tconst relations = config.relations ?? {} as TRelations;\n\tconst driver = new MySql2Driver(clientForInstance as MySql2Client, dialect, { logger, cache: config.cache });\n\tconst session = driver.createSession(relations, schema, mode);\n\tconst db = new MySql2Database(\n\t\tdialect,\n\t\tsession,\n\t\trelations,\n\t\tschema as V1.RelationalSchemaConfig<any>,\n\t\tmode,\n\t) as MySql2Database<TSchema, TRelations>;\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\n\treturn db as any;\n}\n\ninterface CallbackClient {\n\tpromise(): MySql2Client;\n}\n\nfunction isCallbackClient(client: any): client is CallbackClient {\n\treturn typeof client.promise === 'function';\n}\n\nexport type AnyMySql2Connection = Pool | Connection | CallbackPool | CallbackConnection;\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends AnyMySql2Connection = Pool,\n>(\n\t...params: [\n\t\tstring,\n\t] | [\n\t\tstring,\n\t\tMySql2DrizzleConfig<TSchema, TRelations>,\n\t] | [\n\t\t(\n\t\t\t& MySql2DrizzleConfig<TSchema, TRelations>\n\t\t\t& ({\n\t\t\t\tconnection: string | PoolOptions;\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): MySql2Database<TSchema, TRelations> & {\n\t$client: AnyMySql2Connection extends TClient ? Pool : TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst connectionString = params[0]!;\n\t\tconst instance = createPool({\n\t\t\turi: connectionString,\n\t\t});\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t& { connection?: PoolOptions | string; client?: TClient }\n\t\t& MySql2DrizzleConfig<TSchema, TRelations>;\n\n\tif (client) return construct(client, drizzleConfig) as any;\n\n\tconst instance = typeof connection === 'string'\n\t\t? createPool({\n\t\t\turi: connection,\n\t\t\tsupportBigNumbers: true,\n\t\t})\n\t\t: createPool(connection!);\n\tconst db = construct(instance, drizzleConfig);\n\n\treturn db as any;\n}\n\nexport namespace drizzle {\n\texport function mock<\n\t\tTSchema extends Record<string, unknown> = Record<string, never>,\n\t\tTRelations extends AnyRelations = EmptyRelations,\n\t>(\n\t\tconfig?: MySql2DrizzleConfig<TSchema, TRelations>,\n\t): MySql2Database<TSchema, TRelations> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"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","names":["import_db","instance","drizzle"]}
@@ -1,5 +1,5 @@
1
- import { type Connection as CallbackConnection, type Pool as CallbackPool, type PoolOptions } from 'mysql2';
2
- import type { Connection, Pool } from 'mysql2/promise';
1
+ import type { Connection as CallbackConnection, Pool as CallbackPool } from 'mysql2';
2
+ import { type Connection, type Pool, type PoolOptions } from 'mysql2/promise';
3
3
  import * as V1 from "../_relations.cjs";
4
4
  import type { Cache } from "../cache/core/index.cjs";
5
5
  import { entityKind } from "../entity.cjs";
@@ -35,7 +35,7 @@ export type MySql2DrizzleConfig<TSchema extends Record<string, unknown> = Record
35
35
  mode?: Mode;
36
36
  });
37
37
  export type AnyMySql2Connection = Pool | Connection | CallbackPool | CallbackConnection;
38
- export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>, TRelations extends AnyRelations = EmptyRelations, TClient extends AnyMySql2Connection = CallbackPool>(...params: [
38
+ export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>, TRelations extends AnyRelations = EmptyRelations, TClient extends AnyMySql2Connection = Pool>(...params: [
39
39
  string
40
40
  ] | [
41
41
  string,
@@ -47,7 +47,7 @@ export declare function drizzle<TSchema extends Record<string, unknown> = Record
47
47
  client: TClient;
48
48
  }))
49
49
  ]): MySql2Database<TSchema, TRelations> & {
50
- $client: AnyMySql2Connection extends TClient ? CallbackPool : TClient;
50
+ $client: AnyMySql2Connection extends TClient ? Pool : TClient;
51
51
  };
52
52
  export declare namespace drizzle {
53
53
  function mock<TSchema extends Record<string, unknown> = Record<string, never>, TRelations extends AnyRelations = EmptyRelations>(config?: MySql2DrizzleConfig<TSchema, TRelations>): MySql2Database<TSchema, TRelations> & {
@@ -1,5 +1,5 @@
1
- import { type Connection as CallbackConnection, type Pool as CallbackPool, type PoolOptions } from 'mysql2';
2
- import type { Connection, Pool } from 'mysql2/promise';
1
+ import type { Connection as CallbackConnection, Pool as CallbackPool } from 'mysql2';
2
+ import { type Connection, type Pool, type PoolOptions } from 'mysql2/promise';
3
3
  import * as V1 from "../_relations.js";
4
4
  import type { Cache } from "../cache/core/index.js";
5
5
  import { entityKind } from "../entity.js";
@@ -35,7 +35,7 @@ export type MySql2DrizzleConfig<TSchema extends Record<string, unknown> = Record
35
35
  mode?: Mode;
36
36
  });
37
37
  export type AnyMySql2Connection = Pool | Connection | CallbackPool | CallbackConnection;
38
- export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>, TRelations extends AnyRelations = EmptyRelations, TClient extends AnyMySql2Connection = CallbackPool>(...params: [
38
+ export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>, TRelations extends AnyRelations = EmptyRelations, TClient extends AnyMySql2Connection = Pool>(...params: [
39
39
  string
40
40
  ] | [
41
41
  string,
@@ -47,7 +47,7 @@ export declare function drizzle<TSchema extends Record<string, unknown> = Record
47
47
  client: TClient;
48
48
  }))
49
49
  ]): MySql2Database<TSchema, TRelations> & {
50
- $client: AnyMySql2Connection extends TClient ? CallbackPool : TClient;
50
+ $client: AnyMySql2Connection extends TClient ? Pool : TClient;
51
51
  };
52
52
  export declare namespace drizzle {
53
53
  function mock<TSchema extends Record<string, unknown> = Record<string, never>, TRelations extends AnyRelations = EmptyRelations>(config?: MySql2DrizzleConfig<TSchema, TRelations>): MySql2Database<TSchema, TRelations> & {
package/mysql2/driver.js CHANGED
@@ -1,4 +1,4 @@
1
- import { createPool } from "mysql2";
1
+ import { createPool } from "mysql2/promise";
2
2
  import * as V1 from "../_relations.js";
3
3
  import { entityKind } from "../entity.js";
4
4
  import { DefaultLogger } from "../logger.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/mysql2/driver.ts"],"sourcesContent":["import { type Connection as CallbackConnection, createPool, type Pool as CallbackPool, type PoolOptions } from 'mysql2';\nimport type { Connection, Pool } from 'mysql2/promise';\nimport * as V1 from '~/_relations.ts';\nimport type { Cache } from '~/cache/core/index.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { MySqlDatabase } from '~/mysql-core/db.ts';\nimport { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { Mode } from '~/mysql-core/session.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport { DrizzleError } from '../errors.ts';\nimport type { MySql2Client, MySql2PreparedQueryHKT, MySql2QueryResultHKT } from './session.ts';\nimport { MySql2Session } from './session.ts';\n\nexport interface MySqlDriverOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class MySql2Driver {\n\tstatic readonly [entityKind]: string = 'MySql2Driver';\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tprivate dialect: MySqlDialect,\n\t\tprivate options: MySqlDriverOptions = {},\n\t) {\n\t}\n\n\tcreateSession(\n\t\trelations: AnyRelations,\n\t\tschema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined,\n\t\tmode: Mode,\n\t): MySql2Session<Record<string, unknown>, AnyRelations, V1.TablesRelationalConfig> {\n\t\treturn new MySql2Session(this.client, this.dialect, relations, schema, {\n\t\t\tlogger: this.options.logger,\n\t\t\tmode,\n\t\t\tcache: this.options.cache,\n\t\t});\n\t}\n}\n\nexport { MySqlDatabase } from '~/mysql-core/db.ts';\n\nexport class MySql2Database<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends MySqlDatabase<MySql2QueryResultHKT, MySql2PreparedQueryHKT, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'MySql2Database';\n}\n\nexport type MySql2DrizzleConfig<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> =\n\t& Omit<DrizzleConfig<TSchema, TRelations>, 'schema'>\n\t& ({ schema: TSchema; mode: Mode } | { schema?: undefined; mode?: Mode });\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends Pool | Connection | CallbackPool | CallbackConnection = CallbackPool,\n>(\n\tclient: TClient,\n\tconfig: MySql2DrizzleConfig<TSchema, TRelations> = {},\n): MySql2Database<TSchema, TRelations> & {\n\t$client: AnyMySql2Connection extends TClient ? CallbackPool : TClient;\n} {\n\tconst dialect = new MySqlDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tconst clientForInstance = isCallbackClient(client) ? client.promise() : client;\n\n\tlet schema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tif (config.mode === undefined) {\n\t\t\tthrow new DrizzleError({\n\t\t\t\tmessage:\n\t\t\t\t\t'You need to specify \"mode\": \"planetscale\" or \"default\" when providing a schema. Read more: https://orm.drizzle.team/docs/rqb#modes',\n\t\t\t});\n\t\t}\n\n\t\tconst tablesConfig = V1.extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tV1.createTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst mode = config.mode ?? 'default';\n\n\tconst relations = config.relations ?? {} as TRelations;\n\tconst driver = new MySql2Driver(clientForInstance as MySql2Client, dialect, { logger, cache: config.cache });\n\tconst session = driver.createSession(relations, schema, mode);\n\tconst db = new MySql2Database(\n\t\tdialect,\n\t\tsession,\n\t\trelations,\n\t\tschema as V1.RelationalSchemaConfig<any>,\n\t\tmode,\n\t) as MySql2Database<TSchema, TRelations>;\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\n\treturn db as any;\n}\n\ninterface CallbackClient {\n\tpromise(): MySql2Client;\n}\n\nfunction isCallbackClient(client: any): client is CallbackClient {\n\treturn typeof client.promise === 'function';\n}\n\nexport type AnyMySql2Connection = Pool | Connection | CallbackPool | CallbackConnection;\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends AnyMySql2Connection = CallbackPool,\n>(\n\t...params: [\n\t\tstring,\n\t] | [\n\t\tstring,\n\t\tMySql2DrizzleConfig<TSchema, TRelations>,\n\t] | [\n\t\t(\n\t\t\t& MySql2DrizzleConfig<TSchema, TRelations>\n\t\t\t& ({\n\t\t\t\tconnection: string | PoolOptions;\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): MySql2Database<TSchema, TRelations> & {\n\t$client: AnyMySql2Connection extends TClient ? CallbackPool : TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst connectionString = params[0]!;\n\t\tconst instance = createPool({\n\t\t\turi: connectionString,\n\t\t});\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t& { connection?: PoolOptions | string; client?: TClient }\n\t\t& MySql2DrizzleConfig<TSchema, TRelations>;\n\n\tif (client) return construct(client, drizzleConfig) as any;\n\n\tconst instance = typeof connection === 'string'\n\t\t? createPool({\n\t\t\turi: connection,\n\t\t\tsupportBigNumbers: true,\n\t\t})\n\t\t: createPool(connection!);\n\tconst db = construct(instance, drizzleConfig);\n\n\treturn db as any;\n}\n\nexport namespace drizzle {\n\texport function mock<\n\t\tTSchema extends Record<string, unknown> = Record<string, never>,\n\t\tTRelations extends AnyRelations = EmptyRelations,\n\t>(\n\t\tconfig?: MySql2DrizzleConfig<TSchema, TRelations>,\n\t): MySql2Database<TSchema, TRelations> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"AAAA,SAAgD,kBAA+D;AAE/G,YAAY,QAAQ;AAEpB,SAAS,kBAAkB;AAE3B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,oBAAoB;AAI7B,SAAS,oBAAoB;AAE7B,SAAS,qBAAqB;AAOvB,MAAM,aAAa;AAAA,EAGzB,YACS,QACA,SACA,UAA8B,CAAC,GACtC;AAHO;AACA;AACA;AAAA,EAET;AAAA,EAPA,QAAiB,UAAU,IAAY;AAAA,EASvC,cACC,WACA,QACA,MACkF;AAClF,WAAO,IAAI,cAAc,KAAK,QAAQ,KAAK,SAAS,WAAW,QAAQ;AAAA,MACtE,QAAQ,KAAK,QAAQ;AAAA,MACrB;AAAA,MACA,OAAO,KAAK,QAAQ;AAAA,IACrB,CAAC;AAAA,EACF;AACD;AAEA,SAAS,iBAAAA,sBAAqB;AAEvB,MAAM,uBAGH,cAAiF;AAAA,EAC1F,QAA0B,UAAU,IAAY;AACjD;AASA,SAAS,UAKR,QACA,SAAmD,CAAC,GAGnD;AACD,QAAM,UAAU,IAAI,aAAa,EAAE,QAAQ,OAAO,OAAO,CAAC;AAC1D,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,cAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,QAAM,oBAAoB,iBAAiB,MAAM,IAAI,OAAO,QAAQ,IAAI;AAExE,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,QAAI,OAAO,SAAS,QAAW;AAC9B,YAAM,IAAI,aAAa;AAAA,QACtB,SACC;AAAA,MACF,CAAC;AAAA,IACF;AAEA,UAAM,eAAe,GAAG;AAAA,MACvB,OAAO;AAAA,MACP,GAAG;AAAA,IACJ;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,OAAO,OAAO,QAAQ;AAE5B,QAAM,YAAY,OAAO,aAAa,CAAC;AACvC,QAAM,SAAS,IAAI,aAAa,mBAAmC,SAAS,EAAE,QAAQ,OAAO,OAAO,MAAM,CAAC;AAC3G,QAAM,UAAU,OAAO,cAAc,WAAW,QAAQ,IAAI;AAC5D,QAAM,KAAK,IAAI;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACA,EAAO,GAAI,UAAU;AACrB,EAAO,GAAI,SAAS,OAAO;AAC3B,MAAW,GAAI,QAAQ;AACtB,IAAO,GAAI,OAAO,YAAY,IAAI,OAAO,OAAO;AAAA,EACjD;AAEA,SAAO;AACR;AAMA,SAAS,iBAAiB,QAAuC;AAChE,SAAO,OAAO,OAAO,YAAY;AAClC;AAIO,SAAS,WAKZ,QAiBF;AACD,MAAI,OAAO,OAAO,CAAC,MAAM,UAAU;AAClC,UAAM,mBAAmB,OAAO,CAAC;AACjC,UAAMC,YAAW,WAAW;AAAA,MAC3B,KAAK;AAAA,IACN,CAAC;AAED,WAAO,UAAUA,WAAU,OAAO,CAAC,CAAC;AAAA,EACrC;AAEA,QAAM,EAAE,YAAY,QAAQ,GAAG,cAAc,IAAI,OAAO,CAAC;AAIzD,MAAI,OAAQ,QAAO,UAAU,QAAQ,aAAa;AAElD,QAAM,WAAW,OAAO,eAAe,WACpC,WAAW;AAAA,IACZ,KAAK;AAAA,IACL,mBAAmB;AAAA,EACpB,CAAC,IACC,WAAW,UAAW;AACzB,QAAM,KAAK,UAAU,UAAU,aAAa;AAE5C,SAAO;AACR;AAAA,CAEO,CAAUC,aAAV;AACC,WAAS,KAIf,QAGC;AACD,WAAO,UAAU,CAAC,GAAU,MAAM;AAAA,EACnC;AATO,EAAAA,SAAS;AAAA,GADA;","names":["MySqlDatabase","instance","drizzle"]}
1
+ {"version":3,"sources":["../../src/mysql2/driver.ts"],"sourcesContent":["import type { Connection as CallbackConnection, Pool as CallbackPool } from 'mysql2';\nimport { type Connection, createPool, type Pool, type PoolOptions } from 'mysql2/promise';\nimport * as V1 from '~/_relations.ts';\nimport type { Cache } from '~/cache/core/index.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { MySqlDatabase } from '~/mysql-core/db.ts';\nimport { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { Mode } from '~/mysql-core/session.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport { DrizzleError } from '../errors.ts';\nimport type { MySql2Client, MySql2PreparedQueryHKT, MySql2QueryResultHKT } from './session.ts';\nimport { MySql2Session } from './session.ts';\n\nexport interface MySqlDriverOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class MySql2Driver {\n\tstatic readonly [entityKind]: string = 'MySql2Driver';\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tprivate dialect: MySqlDialect,\n\t\tprivate options: MySqlDriverOptions = {},\n\t) {\n\t}\n\n\tcreateSession(\n\t\trelations: AnyRelations,\n\t\tschema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined,\n\t\tmode: Mode,\n\t): MySql2Session<Record<string, unknown>, AnyRelations, V1.TablesRelationalConfig> {\n\t\treturn new MySql2Session(this.client, this.dialect, relations, schema, {\n\t\t\tlogger: this.options.logger,\n\t\t\tmode,\n\t\t\tcache: this.options.cache,\n\t\t});\n\t}\n}\n\nexport { MySqlDatabase } from '~/mysql-core/db.ts';\n\nexport class MySql2Database<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends MySqlDatabase<MySql2QueryResultHKT, MySql2PreparedQueryHKT, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'MySql2Database';\n}\n\nexport type MySql2DrizzleConfig<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> =\n\t& Omit<DrizzleConfig<TSchema, TRelations>, 'schema'>\n\t& ({ schema: TSchema; mode: Mode } | { schema?: undefined; mode?: Mode });\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends Pool | Connection | CallbackPool | CallbackConnection = Pool,\n>(\n\tclient: TClient,\n\tconfig: MySql2DrizzleConfig<TSchema, TRelations> = {},\n): MySql2Database<TSchema, TRelations> & {\n\t$client: AnyMySql2Connection extends TClient ? Pool : TClient;\n} {\n\tconst dialect = new MySqlDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tconst clientForInstance = isCallbackClient(client) ? client.promise() : client;\n\n\tlet schema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tif (config.mode === undefined) {\n\t\t\tthrow new DrizzleError({\n\t\t\t\tmessage:\n\t\t\t\t\t'You need to specify \"mode\": \"planetscale\" or \"default\" when providing a schema. Read more: https://orm.drizzle.team/docs/rqb#modes',\n\t\t\t});\n\t\t}\n\n\t\tconst tablesConfig = V1.extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tV1.createTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst mode = config.mode ?? 'default';\n\n\tconst relations = config.relations ?? {} as TRelations;\n\tconst driver = new MySql2Driver(clientForInstance as MySql2Client, dialect, { logger, cache: config.cache });\n\tconst session = driver.createSession(relations, schema, mode);\n\tconst db = new MySql2Database(\n\t\tdialect,\n\t\tsession,\n\t\trelations,\n\t\tschema as V1.RelationalSchemaConfig<any>,\n\t\tmode,\n\t) as MySql2Database<TSchema, TRelations>;\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\n\treturn db as any;\n}\n\ninterface CallbackClient {\n\tpromise(): MySql2Client;\n}\n\nfunction isCallbackClient(client: any): client is CallbackClient {\n\treturn typeof client.promise === 'function';\n}\n\nexport type AnyMySql2Connection = Pool | Connection | CallbackPool | CallbackConnection;\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends AnyMySql2Connection = Pool,\n>(\n\t...params: [\n\t\tstring,\n\t] | [\n\t\tstring,\n\t\tMySql2DrizzleConfig<TSchema, TRelations>,\n\t] | [\n\t\t(\n\t\t\t& MySql2DrizzleConfig<TSchema, TRelations>\n\t\t\t& ({\n\t\t\t\tconnection: string | PoolOptions;\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): MySql2Database<TSchema, TRelations> & {\n\t$client: AnyMySql2Connection extends TClient ? Pool : TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst connectionString = params[0]!;\n\t\tconst instance = createPool({\n\t\t\turi: connectionString,\n\t\t});\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t& { connection?: PoolOptions | string; client?: TClient }\n\t\t& MySql2DrizzleConfig<TSchema, TRelations>;\n\n\tif (client) return construct(client, drizzleConfig) as any;\n\n\tconst instance = typeof connection === 'string'\n\t\t? createPool({\n\t\t\turi: connection,\n\t\t\tsupportBigNumbers: true,\n\t\t})\n\t\t: createPool(connection!);\n\tconst db = construct(instance, drizzleConfig);\n\n\treturn db as any;\n}\n\nexport namespace drizzle {\n\texport function mock<\n\t\tTSchema extends Record<string, unknown> = Record<string, never>,\n\t\tTRelations extends AnyRelations = EmptyRelations,\n\t>(\n\t\tconfig?: MySql2DrizzleConfig<TSchema, TRelations>,\n\t): MySql2Database<TSchema, TRelations> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"AACA,SAA0B,kBAA+C;AACzE,YAAY,QAAQ;AAEpB,SAAS,kBAAkB;AAE3B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,oBAAoB;AAI7B,SAAS,oBAAoB;AAE7B,SAAS,qBAAqB;AAOvB,MAAM,aAAa;AAAA,EAGzB,YACS,QACA,SACA,UAA8B,CAAC,GACtC;AAHO;AACA;AACA;AAAA,EAET;AAAA,EAPA,QAAiB,UAAU,IAAY;AAAA,EASvC,cACC,WACA,QACA,MACkF;AAClF,WAAO,IAAI,cAAc,KAAK,QAAQ,KAAK,SAAS,WAAW,QAAQ;AAAA,MACtE,QAAQ,KAAK,QAAQ;AAAA,MACrB;AAAA,MACA,OAAO,KAAK,QAAQ;AAAA,IACrB,CAAC;AAAA,EACF;AACD;AAEA,SAAS,iBAAAA,sBAAqB;AAEvB,MAAM,uBAGH,cAAiF;AAAA,EAC1F,QAA0B,UAAU,IAAY;AACjD;AASA,SAAS,UAKR,QACA,SAAmD,CAAC,GAGnD;AACD,QAAM,UAAU,IAAI,aAAa,EAAE,QAAQ,OAAO,OAAO,CAAC;AAC1D,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,cAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,QAAM,oBAAoB,iBAAiB,MAAM,IAAI,OAAO,QAAQ,IAAI;AAExE,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,QAAI,OAAO,SAAS,QAAW;AAC9B,YAAM,IAAI,aAAa;AAAA,QACtB,SACC;AAAA,MACF,CAAC;AAAA,IACF;AAEA,UAAM,eAAe,GAAG;AAAA,MACvB,OAAO;AAAA,MACP,GAAG;AAAA,IACJ;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,OAAO,OAAO,QAAQ;AAE5B,QAAM,YAAY,OAAO,aAAa,CAAC;AACvC,QAAM,SAAS,IAAI,aAAa,mBAAmC,SAAS,EAAE,QAAQ,OAAO,OAAO,MAAM,CAAC;AAC3G,QAAM,UAAU,OAAO,cAAc,WAAW,QAAQ,IAAI;AAC5D,QAAM,KAAK,IAAI;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACA,EAAO,GAAI,UAAU;AACrB,EAAO,GAAI,SAAS,OAAO;AAC3B,MAAW,GAAI,QAAQ;AACtB,IAAO,GAAI,OAAO,YAAY,IAAI,OAAO,OAAO;AAAA,EACjD;AAEA,SAAO;AACR;AAMA,SAAS,iBAAiB,QAAuC;AAChE,SAAO,OAAO,OAAO,YAAY;AAClC;AAIO,SAAS,WAKZ,QAiBF;AACD,MAAI,OAAO,OAAO,CAAC,MAAM,UAAU;AAClC,UAAM,mBAAmB,OAAO,CAAC;AACjC,UAAMC,YAAW,WAAW;AAAA,MAC3B,KAAK;AAAA,IACN,CAAC;AAED,WAAO,UAAUA,WAAU,OAAO,CAAC,CAAC;AAAA,EACrC;AAEA,QAAM,EAAE,YAAY,QAAQ,GAAG,cAAc,IAAI,OAAO,CAAC;AAIzD,MAAI,OAAQ,QAAO,UAAU,QAAQ,aAAa;AAElD,QAAM,WAAW,OAAO,eAAe,WACpC,WAAW;AAAA,IACZ,KAAK;AAAA,IACL,mBAAmB;AAAA,EACpB,CAAC,IACC,WAAW,UAAW;AACzB,QAAM,KAAK,UAAU,UAAU,aAAa;AAE5C,SAAO;AACR;AAAA,CAEO,CAAUC,aAAV;AACC,WAAS,KAIf,QAGC;AACD,WAAO,UAAU,CAAC,GAAU,MAAM;AAAA,EACnC;AATO,EAAAA,SAAS;AAAA,GADA;","names":["MySqlDatabase","instance","drizzle"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drizzle-orm",
3
- "version": "1.0.0-beta.8-c55bf0f",
3
+ "version": "1.0.0-beta.9-8df6992",
4
4
  "description": "Drizzle ORM package for SQL databases",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -107,9 +107,9 @@ class PgEffectTransaction extends import_db.PgEffectDatabase {
107
107
  this.nestedIndex = nestedIndex;
108
108
  }
109
109
  static [import_entity.entityKind] = "PgEffectTransaction";
110
- rollback() {
111
- throw new import_errors.TransactionRollbackError();
112
- }
110
+ rollback = function* () {
111
+ yield* import_effect.Effect.fail(new import_errors.TransactionRollbackError());
112
+ };
113
113
  /** @internal */
114
114
  getTransactionConfigSQL(config) {
115
115
  const chunks = [];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/pg-core/effect/session.ts"],"sourcesContent":["import type { SqlError } from '@effect/sql/SqlError';\nimport { Effect } from 'effect';\nimport type * as V1 from '~/_relations.ts';\nimport type { EffectCache } from '~/cache/core/cache-effect.ts';\nimport { strategyFor } from '~/cache/core/cache.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DrizzleQueryError, TransactionRollbackError } 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 { assertUnreachable } from '~/utils.ts';\nimport type { PgDialect } from '../dialect.ts';\nimport type { SelectedFieldsOrdered } from '../query-builders/select.types.ts';\nimport {\n\tPgBasePreparedQuery,\n\ttype PgQueryResultHKT,\n\tPgSession,\n\ttype PgTransactionConfig,\n\ttype PreparedQueryConfig,\n} from '../session.ts';\nimport { PgEffectDatabase } from './db.ts';\n\nexport abstract class PgEffectPreparedQuery<T extends PreparedQueryConfig> extends PgBasePreparedQuery {\n\tstatic override readonly [entityKind]: string = 'PgEffectPreparedQuery';\n\n\tconstructor(\n\t\tquery: Query,\n\t\tprivate cache: EffectCache | undefined,\n\t\tprivate queryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tprivate cacheConfig?: WithCacheConfig,\n\t) {\n\t\tsuper(query);\n\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\tprotected override queryWithCache<T>(\n\t\tqueryString: string,\n\t\tparams: any[],\n\t\tquery: Effect.Effect<T, SqlError>,\n\t): Effect.Effect<T, DrizzleQueryError> {\n\t\tconst { cache, cacheConfig, queryMetadata } = this;\n\t\treturn Effect.gen(function*() {\n\t\t\tconst cacheStrat: Awaited<ReturnType<typeof strategyFor>> = cache\n\t\t\t\t? yield* Effect.tryPromise(\n\t\t\t\t\t() => strategyFor(queryString, params, queryMetadata, cacheConfig),\n\t\t\t\t)\n\t\t\t\t: { type: 'skip' as const };\n\n\t\t\tif (cacheStrat.type === 'skip') {\n\t\t\t\treturn yield* query;\n\t\t\t}\n\n\t\t\t// For mutate queries, we should query the database, wait for a response, and then perform invalidation\n\t\t\tif (cacheStrat.type === 'invalidate') {\n\t\t\t\tconst result = yield* query;\n\t\t\t\tyield* cache!.onMutate({ tables: cacheStrat.tables });\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tif (cacheStrat.type === 'try') {\n\t\t\t\tconst { tables, key, isTag, autoInvalidate, config } = cacheStrat;\n\t\t\t\tconst fromCache: any[] | undefined = yield* cache!.get(\n\t\t\t\t\tkey,\n\t\t\t\t\ttables,\n\t\t\t\t\tisTag,\n\t\t\t\t\tautoInvalidate,\n\t\t\t\t);\n\n\t\t\t\tif (typeof fromCache !== 'undefined') return fromCache as unknown as T;\n\n\t\t\t\tconst result = yield* query;\n\n\t\t\t\tyield* cache!.put(\n\t\t\t\t\tkey,\n\t\t\t\t\tresult,\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\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tassertUnreachable(cacheStrat);\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(queryString, params, e instanceof Error ? e : undefined));\n\t\t}));\n\t}\n\n\tabstract override execute(\n\t\tplaceholderValues?: Record<string, unknown>,\n\t): Effect.Effect<T['execute'], DrizzleQueryError>;\n\n\t/** @internal */\n\tabstract override all(placeholderValues?: Record<string, unknown>): Effect.Effect<T['all'], DrizzleQueryError>;\n}\n\nexport abstract class PgEffectSession<\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 = 'PgEffectSession';\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): PgEffectPreparedQuery<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): PgEffectPreparedQuery<T>;\n\n\toverride execute<T>(query: SQL): Effect.Effect<T, DrizzleQueryError> {\n\t\tconst { sql, params } = this.dialect.sqlToQuery(query);\n\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T }>({ sql, params }, undefined, undefined, false)\n\t\t\t.execute();\n\t}\n\n\toverride all<T>(query: SQL): Effect.Effect<T[], DrizzleQueryError> {\n\t\tconst { sql, params } = this.dialect.sqlToQuery(query);\n\t\treturn this.prepareQuery<PreparedQueryConfig & { all: T[] }>({ sql, params }, undefined, undefined, false)\n\t\t\t.all();\n\t}\n\n\tabstract transaction<T>(\n\t\ttransaction: (\n\t\t\ttx: PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema>,\n\t\t) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>,\n\t): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>;\n}\n\nexport abstract class PgEffectTransaction<\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 PgEffectDatabase<TQueryResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'PgEffectTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\tsession: PgEffectSession<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): Effect.Effect<void, DrizzleQueryError> {\n\t\treturn this.session.execute(sql`set transaction ${this.getTransactionConfigSQL(config)}`);\n\t}\n\n\tabstract override transaction<T>(\n\t\ttransaction: (\n\t\t\ttx: PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema>,\n\t\t) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>,\n\t): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>;\n}\n\nexport function migrate(\n\tmigrations: MigrationMeta[],\n\tsession: PgEffectSession,\n\tconfig: string | MigrationConfig,\n): Effect.Effect<void | MigratorInitFailResponse, DrizzleQueryError, never> {\n\treturn Effect.gen(function*() {\n\t\tconst migrationsTable = typeof config === 'string'\n\t\t\t? '__drizzle_migrations'\n\t\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\t\tconst migrationsSchema = typeof config === 'string' ? 'drizzle' : config.migrationsSchema ?? 'drizzle';\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at bigint\n\t\t\t)\n\t\t`;\n\t\tyield* session.execute(sql`CREATE SCHEMA IF NOT EXISTS ${sql.identifier(migrationsSchema)}`);\n\t\tyield* session.execute(migrationTableCreate);\n\n\t\tconst dbMigrations = yield* session.all<{ id: number; hash: string; created_at: string }>(\n\t\t\tsql`select id, hash, created_at from ${sql.identifier(migrationsSchema)}.${\n\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t} order by created_at desc limit 1`,\n\t\t);\n\n\t\tif (typeof config === 'object' && config.init) {\n\t\t\tif (dbMigrations.length) {\n\t\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t\t}\n\n\t\t\tif (migrations.length > 1) {\n\t\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t\t}\n\n\t\t\tconst [migration] = migrations;\n\n\t\t\tif (!migration) return;\n\n\t\t\tyield* session.execute(\n\t\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t} (\"hash\", \"created_at\") values(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst lastDbMigration = dbMigrations[0];\n\t\tyield* session.transaction((tx) =>\n\t\t\tEffect.gen(function*() {\n\t\t\t\tfor (const migration of migrations) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!lastDbMigration\n\t\t\t\t\t\t|| Number(lastDbMigration.created_at) < migration.folderMillis\n\t\t\t\t\t) {\n\t\t\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\t\t\tyield* tx.execute(sql.raw(stmt));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tyield* tx.execute(\n\t\t\t\t\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t\t\t} (\"hash\", \"created_at\") values(${migration.hash}, ${migration.folderMillis})`,\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\n\t\treturn;\n\t}) as Effect.Effect<void | MigratorInitFailResponse, DrizzleQueryError, never>;\n}\n"],"mappings":"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","names":["sql"]}
1
+ {"version":3,"sources":["../../../src/pg-core/effect/session.ts"],"sourcesContent":["import type { SqlError } from '@effect/sql/SqlError';\nimport { Effect } from 'effect';\nimport type * as V1 from '~/_relations.ts';\nimport type { EffectCache } from '~/cache/core/cache-effect.ts';\nimport { strategyFor } from '~/cache/core/cache.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DrizzleQueryError, TransactionRollbackError } 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 { assertUnreachable } from '~/utils.ts';\nimport type { PgDialect } from '../dialect.ts';\nimport type { SelectedFieldsOrdered } from '../query-builders/select.types.ts';\nimport {\n\tPgBasePreparedQuery,\n\ttype PgQueryResultHKT,\n\tPgSession,\n\ttype PgTransactionConfig,\n\ttype PreparedQueryConfig,\n} from '../session.ts';\nimport { PgEffectDatabase } from './db.ts';\n\nexport abstract class PgEffectPreparedQuery<T extends PreparedQueryConfig> extends PgBasePreparedQuery {\n\tstatic override readonly [entityKind]: string = 'PgEffectPreparedQuery';\n\n\tconstructor(\n\t\tquery: Query,\n\t\tprivate cache: EffectCache | undefined,\n\t\tprivate queryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tprivate cacheConfig?: WithCacheConfig,\n\t) {\n\t\tsuper(query);\n\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\tprotected override queryWithCache<T>(\n\t\tqueryString: string,\n\t\tparams: any[],\n\t\tquery: Effect.Effect<T, SqlError>,\n\t): Effect.Effect<T, DrizzleQueryError> {\n\t\tconst { cache, cacheConfig, queryMetadata } = this;\n\t\treturn Effect.gen(function*() {\n\t\t\tconst cacheStrat: Awaited<ReturnType<typeof strategyFor>> = cache\n\t\t\t\t? yield* Effect.tryPromise(\n\t\t\t\t\t() => strategyFor(queryString, params, queryMetadata, cacheConfig),\n\t\t\t\t)\n\t\t\t\t: { type: 'skip' as const };\n\n\t\t\tif (cacheStrat.type === 'skip') {\n\t\t\t\treturn yield* query;\n\t\t\t}\n\n\t\t\t// For mutate queries, we should query the database, wait for a response, and then perform invalidation\n\t\t\tif (cacheStrat.type === 'invalidate') {\n\t\t\t\tconst result = yield* query;\n\t\t\t\tyield* cache!.onMutate({ tables: cacheStrat.tables });\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tif (cacheStrat.type === 'try') {\n\t\t\t\tconst { tables, key, isTag, autoInvalidate, config } = cacheStrat;\n\t\t\t\tconst fromCache: any[] | undefined = yield* cache!.get(\n\t\t\t\t\tkey,\n\t\t\t\t\ttables,\n\t\t\t\t\tisTag,\n\t\t\t\t\tautoInvalidate,\n\t\t\t\t);\n\n\t\t\t\tif (typeof fromCache !== 'undefined') return fromCache as unknown as T;\n\n\t\t\t\tconst result = yield* query;\n\n\t\t\t\tyield* cache!.put(\n\t\t\t\t\tkey,\n\t\t\t\t\tresult,\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\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tassertUnreachable(cacheStrat);\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(queryString, params, e instanceof Error ? e : undefined));\n\t\t}));\n\t}\n\n\tabstract override execute(\n\t\tplaceholderValues?: Record<string, unknown>,\n\t): Effect.Effect<T['execute'], DrizzleQueryError>;\n\n\t/** @internal */\n\tabstract override all(placeholderValues?: Record<string, unknown>): Effect.Effect<T['all'], DrizzleQueryError>;\n}\n\nexport abstract class PgEffectSession<\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 = 'PgEffectSession';\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): PgEffectPreparedQuery<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): PgEffectPreparedQuery<T>;\n\n\toverride execute<T>(query: SQL): Effect.Effect<T, DrizzleQueryError> {\n\t\tconst { sql, params } = this.dialect.sqlToQuery(query);\n\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T }>({ sql, params }, undefined, undefined, false)\n\t\t\t.execute();\n\t}\n\n\toverride all<T>(query: SQL): Effect.Effect<T[], DrizzleQueryError> {\n\t\tconst { sql, params } = this.dialect.sqlToQuery(query);\n\t\treturn this.prepareQuery<PreparedQueryConfig & { all: T[] }>({ sql, params }, undefined, undefined, false)\n\t\t\t.all();\n\t}\n\n\tabstract transaction<T>(\n\t\ttransaction: (\n\t\t\ttx: PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema>,\n\t\t) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>,\n\t): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>;\n}\n\nexport abstract class PgEffectTransaction<\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 PgEffectDatabase<TQueryResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'PgEffectTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\tsession: PgEffectSession<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 = function*() {\n\t\tyield* Effect.fail(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): Effect.Effect<void, DrizzleQueryError> {\n\t\treturn this.session.execute(sql`set transaction ${this.getTransactionConfigSQL(config)}`);\n\t}\n\n\tabstract override transaction<T>(\n\t\ttransaction: (\n\t\t\ttx: PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema>,\n\t\t) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>,\n\t): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>;\n}\n\nexport function migrate(\n\tmigrations: MigrationMeta[],\n\tsession: PgEffectSession,\n\tconfig: string | MigrationConfig,\n): Effect.Effect<void | MigratorInitFailResponse, DrizzleQueryError, never> {\n\treturn Effect.gen(function*() {\n\t\tconst migrationsTable = typeof config === 'string'\n\t\t\t? '__drizzle_migrations'\n\t\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\t\tconst migrationsSchema = typeof config === 'string' ? 'drizzle' : config.migrationsSchema ?? 'drizzle';\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at bigint\n\t\t\t)\n\t\t`;\n\t\tyield* session.execute(sql`CREATE SCHEMA IF NOT EXISTS ${sql.identifier(migrationsSchema)}`);\n\t\tyield* session.execute(migrationTableCreate);\n\n\t\tconst dbMigrations = yield* session.all<{ id: number; hash: string; created_at: string }>(\n\t\t\tsql`select id, hash, created_at from ${sql.identifier(migrationsSchema)}.${\n\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t} order by created_at desc limit 1`,\n\t\t);\n\n\t\tif (typeof config === 'object' && config.init) {\n\t\t\tif (dbMigrations.length) {\n\t\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t\t}\n\n\t\t\tif (migrations.length > 1) {\n\t\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t\t}\n\n\t\t\tconst [migration] = migrations;\n\n\t\t\tif (!migration) return;\n\n\t\t\tyield* session.execute(\n\t\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t} (\"hash\", \"created_at\") values(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst lastDbMigration = dbMigrations[0];\n\t\tyield* session.transaction((tx) =>\n\t\t\tEffect.gen(function*() {\n\t\t\t\tfor (const migration of migrations) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!lastDbMigration\n\t\t\t\t\t\t|| Number(lastDbMigration.created_at) < migration.folderMillis\n\t\t\t\t\t) {\n\t\t\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\t\t\tyield* tx.execute(sql.raw(stmt));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tyield* tx.execute(\n\t\t\t\t\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t\t\t} (\"hash\", \"created_at\") values(${migration.hash}, ${migration.folderMillis})`,\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\n\t\treturn;\n\t}) as Effect.Effect<void | MigratorInitFailResponse, DrizzleQueryError, never>;\n}\n"],"mappings":"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","names":["sql"]}
@@ -50,7 +50,7 @@ export declare abstract class PgEffectTransaction<TQueryResult extends PgQueryRe
50
50
  schema: TSchema;
51
51
  tableNamesMap: Record<string, string>;
52
52
  } | undefined, nestedIndex?: number, parseRqbJson?: boolean);
53
- rollback(): never;
53
+ rollback: () => Generator<import("effect/Utils").YieldWrap<Effect.Effect<never, TransactionRollbackError, never>>, void, any>;
54
54
  setTransaction(config: PgTransactionConfig): Effect.Effect<void, DrizzleQueryError>;
55
55
  abstract transaction<T>(transaction: (tx: PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema>) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>;
56
56
  }
@@ -50,7 +50,7 @@ export declare abstract class PgEffectTransaction<TQueryResult extends PgQueryRe
50
50
  schema: TSchema;
51
51
  tableNamesMap: Record<string, string>;
52
52
  } | undefined, nestedIndex?: number, parseRqbJson?: boolean);
53
- rollback(): never;
53
+ rollback: () => Generator<import("effect/Utils").YieldWrap<Effect.Effect<never, TransactionRollbackError, never>>, void, any>;
54
54
  setTransaction(config: PgTransactionConfig): Effect.Effect<void, DrizzleQueryError>;
55
55
  abstract transaction<T>(transaction: (tx: PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema>) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>;
56
56
  }
@@ -84,9 +84,9 @@ class PgEffectTransaction extends PgEffectDatabase {
84
84
  this.nestedIndex = nestedIndex;
85
85
  }
86
86
  static [entityKind] = "PgEffectTransaction";
87
- rollback() {
88
- throw new TransactionRollbackError();
89
- }
87
+ rollback = function* () {
88
+ yield* Effect.fail(new TransactionRollbackError());
89
+ };
90
90
  /** @internal */
91
91
  getTransactionConfigSQL(config) {
92
92
  const chunks = [];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/pg-core/effect/session.ts"],"sourcesContent":["import type { SqlError } from '@effect/sql/SqlError';\nimport { Effect } from 'effect';\nimport type * as V1 from '~/_relations.ts';\nimport type { EffectCache } from '~/cache/core/cache-effect.ts';\nimport { strategyFor } from '~/cache/core/cache.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DrizzleQueryError, TransactionRollbackError } 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 { assertUnreachable } from '~/utils.ts';\nimport type { PgDialect } from '../dialect.ts';\nimport type { SelectedFieldsOrdered } from '../query-builders/select.types.ts';\nimport {\n\tPgBasePreparedQuery,\n\ttype PgQueryResultHKT,\n\tPgSession,\n\ttype PgTransactionConfig,\n\ttype PreparedQueryConfig,\n} from '../session.ts';\nimport { PgEffectDatabase } from './db.ts';\n\nexport abstract class PgEffectPreparedQuery<T extends PreparedQueryConfig> extends PgBasePreparedQuery {\n\tstatic override readonly [entityKind]: string = 'PgEffectPreparedQuery';\n\n\tconstructor(\n\t\tquery: Query,\n\t\tprivate cache: EffectCache | undefined,\n\t\tprivate queryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tprivate cacheConfig?: WithCacheConfig,\n\t) {\n\t\tsuper(query);\n\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\tprotected override queryWithCache<T>(\n\t\tqueryString: string,\n\t\tparams: any[],\n\t\tquery: Effect.Effect<T, SqlError>,\n\t): Effect.Effect<T, DrizzleQueryError> {\n\t\tconst { cache, cacheConfig, queryMetadata } = this;\n\t\treturn Effect.gen(function*() {\n\t\t\tconst cacheStrat: Awaited<ReturnType<typeof strategyFor>> = cache\n\t\t\t\t? yield* Effect.tryPromise(\n\t\t\t\t\t() => strategyFor(queryString, params, queryMetadata, cacheConfig),\n\t\t\t\t)\n\t\t\t\t: { type: 'skip' as const };\n\n\t\t\tif (cacheStrat.type === 'skip') {\n\t\t\t\treturn yield* query;\n\t\t\t}\n\n\t\t\t// For mutate queries, we should query the database, wait for a response, and then perform invalidation\n\t\t\tif (cacheStrat.type === 'invalidate') {\n\t\t\t\tconst result = yield* query;\n\t\t\t\tyield* cache!.onMutate({ tables: cacheStrat.tables });\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tif (cacheStrat.type === 'try') {\n\t\t\t\tconst { tables, key, isTag, autoInvalidate, config } = cacheStrat;\n\t\t\t\tconst fromCache: any[] | undefined = yield* cache!.get(\n\t\t\t\t\tkey,\n\t\t\t\t\ttables,\n\t\t\t\t\tisTag,\n\t\t\t\t\tautoInvalidate,\n\t\t\t\t);\n\n\t\t\t\tif (typeof fromCache !== 'undefined') return fromCache as unknown as T;\n\n\t\t\t\tconst result = yield* query;\n\n\t\t\t\tyield* cache!.put(\n\t\t\t\t\tkey,\n\t\t\t\t\tresult,\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\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tassertUnreachable(cacheStrat);\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(queryString, params, e instanceof Error ? e : undefined));\n\t\t}));\n\t}\n\n\tabstract override execute(\n\t\tplaceholderValues?: Record<string, unknown>,\n\t): Effect.Effect<T['execute'], DrizzleQueryError>;\n\n\t/** @internal */\n\tabstract override all(placeholderValues?: Record<string, unknown>): Effect.Effect<T['all'], DrizzleQueryError>;\n}\n\nexport abstract class PgEffectSession<\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 = 'PgEffectSession';\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): PgEffectPreparedQuery<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): PgEffectPreparedQuery<T>;\n\n\toverride execute<T>(query: SQL): Effect.Effect<T, DrizzleQueryError> {\n\t\tconst { sql, params } = this.dialect.sqlToQuery(query);\n\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T }>({ sql, params }, undefined, undefined, false)\n\t\t\t.execute();\n\t}\n\n\toverride all<T>(query: SQL): Effect.Effect<T[], DrizzleQueryError> {\n\t\tconst { sql, params } = this.dialect.sqlToQuery(query);\n\t\treturn this.prepareQuery<PreparedQueryConfig & { all: T[] }>({ sql, params }, undefined, undefined, false)\n\t\t\t.all();\n\t}\n\n\tabstract transaction<T>(\n\t\ttransaction: (\n\t\t\ttx: PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema>,\n\t\t) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>,\n\t): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>;\n}\n\nexport abstract class PgEffectTransaction<\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 PgEffectDatabase<TQueryResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'PgEffectTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\tsession: PgEffectSession<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): Effect.Effect<void, DrizzleQueryError> {\n\t\treturn this.session.execute(sql`set transaction ${this.getTransactionConfigSQL(config)}`);\n\t}\n\n\tabstract override transaction<T>(\n\t\ttransaction: (\n\t\t\ttx: PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema>,\n\t\t) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>,\n\t): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>;\n}\n\nexport function migrate(\n\tmigrations: MigrationMeta[],\n\tsession: PgEffectSession,\n\tconfig: string | MigrationConfig,\n): Effect.Effect<void | MigratorInitFailResponse, DrizzleQueryError, never> {\n\treturn Effect.gen(function*() {\n\t\tconst migrationsTable = typeof config === 'string'\n\t\t\t? '__drizzle_migrations'\n\t\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\t\tconst migrationsSchema = typeof config === 'string' ? 'drizzle' : config.migrationsSchema ?? 'drizzle';\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at bigint\n\t\t\t)\n\t\t`;\n\t\tyield* session.execute(sql`CREATE SCHEMA IF NOT EXISTS ${sql.identifier(migrationsSchema)}`);\n\t\tyield* session.execute(migrationTableCreate);\n\n\t\tconst dbMigrations = yield* session.all<{ id: number; hash: string; created_at: string }>(\n\t\t\tsql`select id, hash, created_at from ${sql.identifier(migrationsSchema)}.${\n\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t} order by created_at desc limit 1`,\n\t\t);\n\n\t\tif (typeof config === 'object' && config.init) {\n\t\t\tif (dbMigrations.length) {\n\t\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t\t}\n\n\t\t\tif (migrations.length > 1) {\n\t\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t\t}\n\n\t\t\tconst [migration] = migrations;\n\n\t\t\tif (!migration) return;\n\n\t\t\tyield* session.execute(\n\t\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t} (\"hash\", \"created_at\") values(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst lastDbMigration = dbMigrations[0];\n\t\tyield* session.transaction((tx) =>\n\t\t\tEffect.gen(function*() {\n\t\t\t\tfor (const migration of migrations) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!lastDbMigration\n\t\t\t\t\t\t|| Number(lastDbMigration.created_at) < migration.folderMillis\n\t\t\t\t\t) {\n\t\t\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\t\t\tyield* tx.execute(sql.raw(stmt));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tyield* tx.execute(\n\t\t\t\t\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t\t\t} (\"hash\", \"created_at\") values(${migration.hash}, ${migration.folderMillis})`,\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\n\t\treturn;\n\t}) as Effect.Effect<void | MigratorInitFailResponse, DrizzleQueryError, never>;\n}\n"],"mappings":"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","names":["sql"]}
1
+ {"version":3,"sources":["../../../src/pg-core/effect/session.ts"],"sourcesContent":["import type { SqlError } from '@effect/sql/SqlError';\nimport { Effect } from 'effect';\nimport type * as V1 from '~/_relations.ts';\nimport type { EffectCache } from '~/cache/core/cache-effect.ts';\nimport { strategyFor } from '~/cache/core/cache.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DrizzleQueryError, TransactionRollbackError } 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 { assertUnreachable } from '~/utils.ts';\nimport type { PgDialect } from '../dialect.ts';\nimport type { SelectedFieldsOrdered } from '../query-builders/select.types.ts';\nimport {\n\tPgBasePreparedQuery,\n\ttype PgQueryResultHKT,\n\tPgSession,\n\ttype PgTransactionConfig,\n\ttype PreparedQueryConfig,\n} from '../session.ts';\nimport { PgEffectDatabase } from './db.ts';\n\nexport abstract class PgEffectPreparedQuery<T extends PreparedQueryConfig> extends PgBasePreparedQuery {\n\tstatic override readonly [entityKind]: string = 'PgEffectPreparedQuery';\n\n\tconstructor(\n\t\tquery: Query,\n\t\tprivate cache: EffectCache | undefined,\n\t\tprivate queryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tprivate cacheConfig?: WithCacheConfig,\n\t) {\n\t\tsuper(query);\n\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\tprotected override queryWithCache<T>(\n\t\tqueryString: string,\n\t\tparams: any[],\n\t\tquery: Effect.Effect<T, SqlError>,\n\t): Effect.Effect<T, DrizzleQueryError> {\n\t\tconst { cache, cacheConfig, queryMetadata } = this;\n\t\treturn Effect.gen(function*() {\n\t\t\tconst cacheStrat: Awaited<ReturnType<typeof strategyFor>> = cache\n\t\t\t\t? yield* Effect.tryPromise(\n\t\t\t\t\t() => strategyFor(queryString, params, queryMetadata, cacheConfig),\n\t\t\t\t)\n\t\t\t\t: { type: 'skip' as const };\n\n\t\t\tif (cacheStrat.type === 'skip') {\n\t\t\t\treturn yield* query;\n\t\t\t}\n\n\t\t\t// For mutate queries, we should query the database, wait for a response, and then perform invalidation\n\t\t\tif (cacheStrat.type === 'invalidate') {\n\t\t\t\tconst result = yield* query;\n\t\t\t\tyield* cache!.onMutate({ tables: cacheStrat.tables });\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tif (cacheStrat.type === 'try') {\n\t\t\t\tconst { tables, key, isTag, autoInvalidate, config } = cacheStrat;\n\t\t\t\tconst fromCache: any[] | undefined = yield* cache!.get(\n\t\t\t\t\tkey,\n\t\t\t\t\ttables,\n\t\t\t\t\tisTag,\n\t\t\t\t\tautoInvalidate,\n\t\t\t\t);\n\n\t\t\t\tif (typeof fromCache !== 'undefined') return fromCache as unknown as T;\n\n\t\t\t\tconst result = yield* query;\n\n\t\t\t\tyield* cache!.put(\n\t\t\t\t\tkey,\n\t\t\t\t\tresult,\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\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tassertUnreachable(cacheStrat);\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(queryString, params, e instanceof Error ? e : undefined));\n\t\t}));\n\t}\n\n\tabstract override execute(\n\t\tplaceholderValues?: Record<string, unknown>,\n\t): Effect.Effect<T['execute'], DrizzleQueryError>;\n\n\t/** @internal */\n\tabstract override all(placeholderValues?: Record<string, unknown>): Effect.Effect<T['all'], DrizzleQueryError>;\n}\n\nexport abstract class PgEffectSession<\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 = 'PgEffectSession';\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): PgEffectPreparedQuery<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): PgEffectPreparedQuery<T>;\n\n\toverride execute<T>(query: SQL): Effect.Effect<T, DrizzleQueryError> {\n\t\tconst { sql, params } = this.dialect.sqlToQuery(query);\n\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T }>({ sql, params }, undefined, undefined, false)\n\t\t\t.execute();\n\t}\n\n\toverride all<T>(query: SQL): Effect.Effect<T[], DrizzleQueryError> {\n\t\tconst { sql, params } = this.dialect.sqlToQuery(query);\n\t\treturn this.prepareQuery<PreparedQueryConfig & { all: T[] }>({ sql, params }, undefined, undefined, false)\n\t\t\t.all();\n\t}\n\n\tabstract transaction<T>(\n\t\ttransaction: (\n\t\t\ttx: PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema>,\n\t\t) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>,\n\t): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>;\n}\n\nexport abstract class PgEffectTransaction<\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 PgEffectDatabase<TQueryResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'PgEffectTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\tsession: PgEffectSession<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 = function*() {\n\t\tyield* Effect.fail(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): Effect.Effect<void, DrizzleQueryError> {\n\t\treturn this.session.execute(sql`set transaction ${this.getTransactionConfigSQL(config)}`);\n\t}\n\n\tabstract override transaction<T>(\n\t\ttransaction: (\n\t\t\ttx: PgEffectTransaction<TQueryResult, TFullSchema, TRelations, TSchema>,\n\t\t) => Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>,\n\t): Effect.Effect<T, DrizzleQueryError | TransactionRollbackError>;\n}\n\nexport function migrate(\n\tmigrations: MigrationMeta[],\n\tsession: PgEffectSession,\n\tconfig: string | MigrationConfig,\n): Effect.Effect<void | MigratorInitFailResponse, DrizzleQueryError, never> {\n\treturn Effect.gen(function*() {\n\t\tconst migrationsTable = typeof config === 'string'\n\t\t\t? '__drizzle_migrations'\n\t\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\t\tconst migrationsSchema = typeof config === 'string' ? 'drizzle' : config.migrationsSchema ?? 'drizzle';\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at bigint\n\t\t\t)\n\t\t`;\n\t\tyield* session.execute(sql`CREATE SCHEMA IF NOT EXISTS ${sql.identifier(migrationsSchema)}`);\n\t\tyield* session.execute(migrationTableCreate);\n\n\t\tconst dbMigrations = yield* session.all<{ id: number; hash: string; created_at: string }>(\n\t\t\tsql`select id, hash, created_at from ${sql.identifier(migrationsSchema)}.${\n\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t} order by created_at desc limit 1`,\n\t\t);\n\n\t\tif (typeof config === 'object' && config.init) {\n\t\t\tif (dbMigrations.length) {\n\t\t\t\treturn { exitCode: 'databaseMigrations' as const };\n\t\t\t}\n\n\t\t\tif (migrations.length > 1) {\n\t\t\t\treturn { exitCode: 'localMigrations' as const };\n\t\t\t}\n\n\t\t\tconst [migration] = migrations;\n\n\t\t\tif (!migration) return;\n\n\t\t\tyield* session.execute(\n\t\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t} (\"hash\", \"created_at\") values(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst lastDbMigration = dbMigrations[0];\n\t\tyield* session.transaction((tx) =>\n\t\t\tEffect.gen(function*() {\n\t\t\t\tfor (const migration of migrations) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!lastDbMigration\n\t\t\t\t\t\t|| Number(lastDbMigration.created_at) < migration.folderMillis\n\t\t\t\t\t) {\n\t\t\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\t\t\tyield* tx.execute(sql.raw(stmt));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tyield* tx.execute(\n\t\t\t\t\t\t\tsql`insert into ${sql.identifier(migrationsSchema)}.${\n\t\t\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t\t\t} (\"hash\", \"created_at\") values(${migration.hash}, ${migration.folderMillis})`,\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\n\t\treturn;\n\t}) as Effect.Effect<void | MigratorInitFailResponse, DrizzleQueryError, never>;\n}\n"],"mappings":"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","names":["sql"]}
package/version.cjs CHANGED
@@ -26,7 +26,7 @@ __export(version_exports, {
26
26
  module.exports = __toCommonJS(version_exports);
27
27
 
28
28
  // package.json
29
- var version = "1.0.0-beta.8";
29
+ var version = "1.0.0-beta.9";
30
30
 
31
31
  // src/version.ts
32
32
  var compatibilityVersion = 12;
package/version.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- var version = "1.0.0-beta.8";
1
+ var version = "1.0.0-beta.9";
2
2
 
3
3
  declare const compatibilityVersion = 12;
4
4
 
package/version.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- var version = "1.0.0-beta.8";
1
+ var version = "1.0.0-beta.9";
2
2
 
3
3
  declare const compatibilityVersion = 12;
4
4
 
package/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // package.json
2
- var version = "1.0.0-beta.8";
2
+ var version = "1.0.0-beta.9";
3
3
 
4
4
  // src/version.ts
5
5
  var compatibilityVersion = 12;