drizzle-orm 0.30.5-bb96a77 → 0.30.6-d5cc3ce
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/column-builder.cjs +18 -1
- package/column-builder.cjs.map +1 -1
- package/column-builder.d.cts +49 -4
- package/column-builder.d.ts +49 -4
- package/column-builder.js +18 -1
- package/column-builder.js.map +1 -1
- package/column.cjs +8 -0
- package/column.cjs.map +1 -1
- package/column.d.cts +4 -1
- package/column.d.ts +4 -1
- package/column.js +8 -0
- package/column.js.map +1 -1
- package/mysql-core/columns/bigint.cjs.map +1 -1
- package/mysql-core/columns/bigint.d.cts +2 -0
- package/mysql-core/columns/bigint.d.ts +2 -0
- package/mysql-core/columns/bigint.js.map +1 -1
- package/mysql-core/columns/binary.cjs.map +1 -1
- package/mysql-core/columns/binary.d.cts +1 -0
- package/mysql-core/columns/binary.d.ts +1 -0
- package/mysql-core/columns/binary.js.map +1 -1
- package/mysql-core/columns/boolean.cjs.map +1 -1
- package/mysql-core/columns/boolean.d.cts +1 -0
- package/mysql-core/columns/boolean.d.ts +1 -0
- package/mysql-core/columns/boolean.js.map +1 -1
- package/mysql-core/columns/char.cjs.map +1 -1
- package/mysql-core/columns/char.d.cts +1 -0
- package/mysql-core/columns/char.d.ts +1 -0
- package/mysql-core/columns/char.js.map +1 -1
- package/mysql-core/columns/common.cjs +8 -0
- package/mysql-core/columns/common.cjs.map +1 -1
- package/mysql-core/columns/common.d.cts +6 -1
- package/mysql-core/columns/common.d.ts +6 -1
- package/mysql-core/columns/common.js +8 -0
- package/mysql-core/columns/common.js.map +1 -1
- package/mysql-core/columns/custom.cjs.map +1 -1
- package/mysql-core/columns/custom.d.cts +1 -0
- package/mysql-core/columns/custom.d.ts +1 -0
- package/mysql-core/columns/custom.js.map +1 -1
- package/mysql-core/columns/date.cjs.map +1 -1
- package/mysql-core/columns/date.d.cts +2 -0
- package/mysql-core/columns/date.d.ts +2 -0
- package/mysql-core/columns/date.js.map +1 -1
- package/mysql-core/columns/datetime.cjs.map +1 -1
- package/mysql-core/columns/datetime.d.cts +2 -0
- package/mysql-core/columns/datetime.d.ts +2 -0
- package/mysql-core/columns/datetime.js.map +1 -1
- package/mysql-core/columns/decimal.cjs.map +1 -1
- package/mysql-core/columns/decimal.d.cts +1 -0
- package/mysql-core/columns/decimal.d.ts +1 -0
- package/mysql-core/columns/decimal.js.map +1 -1
- package/mysql-core/columns/double.cjs.map +1 -1
- package/mysql-core/columns/double.d.cts +1 -0
- package/mysql-core/columns/double.d.ts +1 -0
- package/mysql-core/columns/double.js.map +1 -1
- package/mysql-core/columns/enum.cjs.map +1 -1
- package/mysql-core/columns/enum.d.cts +1 -0
- package/mysql-core/columns/enum.d.ts +1 -0
- package/mysql-core/columns/enum.js.map +1 -1
- package/mysql-core/columns/float.cjs.map +1 -1
- package/mysql-core/columns/float.d.cts +1 -0
- package/mysql-core/columns/float.d.ts +1 -0
- package/mysql-core/columns/float.js.map +1 -1
- package/mysql-core/columns/int.cjs.map +1 -1
- package/mysql-core/columns/int.d.cts +1 -0
- package/mysql-core/columns/int.d.ts +1 -0
- package/mysql-core/columns/int.js.map +1 -1
- package/mysql-core/columns/json.cjs.map +1 -1
- package/mysql-core/columns/json.d.cts +1 -0
- package/mysql-core/columns/json.d.ts +1 -0
- package/mysql-core/columns/json.js.map +1 -1
- package/mysql-core/columns/mediumint.cjs.map +1 -1
- package/mysql-core/columns/mediumint.d.cts +1 -0
- package/mysql-core/columns/mediumint.d.ts +1 -0
- package/mysql-core/columns/mediumint.js.map +1 -1
- package/mysql-core/columns/real.cjs.map +1 -1
- package/mysql-core/columns/real.d.cts +1 -0
- package/mysql-core/columns/real.d.ts +1 -0
- package/mysql-core/columns/real.js.map +1 -1
- package/mysql-core/columns/serial.cjs.map +1 -1
- package/mysql-core/columns/serial.d.cts +1 -0
- package/mysql-core/columns/serial.d.ts +1 -0
- package/mysql-core/columns/serial.js.map +1 -1
- package/mysql-core/columns/smallint.cjs.map +1 -1
- package/mysql-core/columns/smallint.d.cts +1 -0
- package/mysql-core/columns/smallint.d.ts +1 -0
- package/mysql-core/columns/smallint.js.map +1 -1
- package/mysql-core/columns/text.cjs.map +1 -1
- package/mysql-core/columns/text.d.cts +1 -0
- package/mysql-core/columns/text.d.ts +1 -0
- package/mysql-core/columns/text.js.map +1 -1
- package/mysql-core/columns/time.cjs.map +1 -1
- package/mysql-core/columns/time.d.cts +1 -0
- package/mysql-core/columns/time.d.ts +1 -0
- package/mysql-core/columns/time.js.map +1 -1
- package/mysql-core/columns/timestamp.cjs.map +1 -1
- package/mysql-core/columns/timestamp.d.cts +2 -0
- package/mysql-core/columns/timestamp.d.ts +2 -0
- package/mysql-core/columns/timestamp.js.map +1 -1
- package/mysql-core/columns/tinyint.cjs.map +1 -1
- package/mysql-core/columns/tinyint.d.cts +1 -0
- package/mysql-core/columns/tinyint.d.ts +1 -0
- package/mysql-core/columns/tinyint.js.map +1 -1
- package/mysql-core/columns/varbinary.cjs.map +1 -1
- package/mysql-core/columns/varbinary.d.cts +1 -0
- package/mysql-core/columns/varbinary.d.ts +1 -0
- package/mysql-core/columns/varbinary.js.map +1 -1
- package/mysql-core/columns/varchar.cjs.map +1 -1
- package/mysql-core/columns/varchar.d.cts +1 -0
- package/mysql-core/columns/varchar.d.ts +1 -0
- package/mysql-core/columns/varchar.js.map +1 -1
- package/mysql-core/columns/year.cjs.map +1 -1
- package/mysql-core/columns/year.d.cts +1 -0
- package/mysql-core/columns/year.d.ts +1 -0
- package/mysql-core/columns/year.js.map +1 -1
- package/mysql-core/dialect.cjs +22 -14
- package/mysql-core/dialect.cjs.map +1 -1
- package/mysql-core/dialect.js +23 -15
- package/mysql-core/dialect.js.map +1 -1
- package/mysql-core/query-builders/select.cjs +2 -2
- package/mysql-core/query-builders/select.cjs.map +1 -1
- package/mysql-core/query-builders/select.js +3 -3
- package/mysql-core/query-builders/select.js.map +1 -1
- package/mysql-core/query-builders/update.cjs.map +1 -1
- package/mysql-core/query-builders/update.d.cts +2 -2
- package/mysql-core/query-builders/update.d.ts +2 -2
- package/mysql-core/query-builders/update.js.map +1 -1
- package/operations.cjs.map +1 -1
- package/operations.d.cts +4 -1
- package/operations.d.ts +4 -1
- package/package.json +79 -2
- package/pg-core/columns/bigint.cjs +3 -2
- package/pg-core/columns/bigint.cjs.map +1 -1
- package/pg-core/columns/bigint.d.cts +6 -3
- package/pg-core/columns/bigint.d.ts +6 -3
- package/pg-core/columns/bigint.js +4 -3
- package/pg-core/columns/bigint.js.map +1 -1
- package/pg-core/columns/bigserial.cjs.map +1 -1
- package/pg-core/columns/bigserial.d.cts +2 -0
- package/pg-core/columns/bigserial.d.ts +2 -0
- package/pg-core/columns/bigserial.js.map +1 -1
- package/pg-core/columns/boolean.cjs.map +1 -1
- package/pg-core/columns/boolean.d.cts +1 -0
- package/pg-core/columns/boolean.d.ts +1 -0
- package/pg-core/columns/boolean.js.map +1 -1
- package/pg-core/columns/char.cjs.map +1 -1
- package/pg-core/columns/char.d.cts +1 -0
- package/pg-core/columns/char.d.ts +1 -0
- package/pg-core/columns/char.js.map +1 -1
- package/pg-core/columns/cidr.cjs.map +1 -1
- package/pg-core/columns/cidr.d.cts +1 -0
- package/pg-core/columns/cidr.d.ts +1 -0
- package/pg-core/columns/cidr.js.map +1 -1
- package/pg-core/columns/common.cjs +8 -0
- package/pg-core/columns/common.cjs.map +1 -1
- package/pg-core/columns/common.d.cts +4 -1
- package/pg-core/columns/common.d.ts +4 -1
- package/pg-core/columns/common.js +8 -0
- package/pg-core/columns/common.js.map +1 -1
- package/pg-core/columns/custom.cjs.map +1 -1
- package/pg-core/columns/custom.d.cts +1 -0
- package/pg-core/columns/custom.d.ts +1 -0
- package/pg-core/columns/custom.js.map +1 -1
- package/pg-core/columns/date.cjs.map +1 -1
- package/pg-core/columns/date.d.cts +2 -0
- package/pg-core/columns/date.d.ts +2 -0
- package/pg-core/columns/date.js.map +1 -1
- package/pg-core/columns/double-precision.cjs.map +1 -1
- package/pg-core/columns/double-precision.d.cts +1 -0
- package/pg-core/columns/double-precision.d.ts +1 -0
- package/pg-core/columns/double-precision.js.map +1 -1
- package/pg-core/columns/enum.cjs.map +1 -1
- package/pg-core/columns/enum.d.cts +1 -0
- package/pg-core/columns/enum.d.ts +1 -0
- package/pg-core/columns/enum.js.map +1 -1
- package/pg-core/columns/inet.cjs.map +1 -1
- package/pg-core/columns/inet.d.cts +1 -0
- package/pg-core/columns/inet.d.ts +1 -0
- package/pg-core/columns/inet.js.map +1 -1
- package/pg-core/columns/int.common.cjs +72 -0
- package/pg-core/columns/int.common.cjs.map +1 -0
- package/pg-core/columns/int.common.d.cts +19 -0
- package/pg-core/columns/int.common.d.ts +19 -0
- package/pg-core/columns/int.common.js +48 -0
- package/pg-core/columns/int.common.js.map +1 -0
- package/pg-core/columns/integer.cjs +2 -1
- package/pg-core/columns/integer.cjs.map +1 -1
- package/pg-core/columns/integer.d.cts +4 -2
- package/pg-core/columns/integer.d.ts +4 -2
- package/pg-core/columns/integer.js +3 -2
- package/pg-core/columns/integer.js.map +1 -1
- package/pg-core/columns/interval.cjs.map +1 -1
- package/pg-core/columns/interval.d.cts +1 -0
- package/pg-core/columns/interval.d.ts +1 -0
- package/pg-core/columns/interval.js.map +1 -1
- package/pg-core/columns/json.cjs.map +1 -1
- package/pg-core/columns/json.d.cts +1 -0
- package/pg-core/columns/json.d.ts +1 -0
- package/pg-core/columns/json.js.map +1 -1
- package/pg-core/columns/jsonb.cjs.map +1 -1
- package/pg-core/columns/jsonb.d.cts +1 -0
- package/pg-core/columns/jsonb.d.ts +1 -0
- package/pg-core/columns/jsonb.js.map +1 -1
- package/pg-core/columns/macaddr.cjs.map +1 -1
- package/pg-core/columns/macaddr.d.cts +1 -0
- package/pg-core/columns/macaddr.d.ts +1 -0
- package/pg-core/columns/macaddr.js.map +1 -1
- package/pg-core/columns/macaddr8.cjs.map +1 -1
- package/pg-core/columns/macaddr8.d.cts +1 -0
- package/pg-core/columns/macaddr8.d.ts +1 -0
- package/pg-core/columns/macaddr8.js.map +1 -1
- package/pg-core/columns/numeric.cjs.map +1 -1
- package/pg-core/columns/numeric.d.cts +1 -0
- package/pg-core/columns/numeric.d.ts +1 -0
- package/pg-core/columns/numeric.js.map +1 -1
- package/pg-core/columns/real.cjs.map +1 -1
- package/pg-core/columns/real.d.cts +1 -0
- package/pg-core/columns/real.d.ts +1 -0
- package/pg-core/columns/real.js.map +1 -1
- package/pg-core/columns/serial.cjs.map +1 -1
- package/pg-core/columns/serial.d.cts +1 -0
- package/pg-core/columns/serial.d.ts +1 -0
- package/pg-core/columns/serial.js.map +1 -1
- package/pg-core/columns/smallint.cjs +2 -1
- package/pg-core/columns/smallint.cjs.map +1 -1
- package/pg-core/columns/smallint.d.cts +4 -2
- package/pg-core/columns/smallint.d.ts +4 -2
- package/pg-core/columns/smallint.js +3 -2
- package/pg-core/columns/smallint.js.map +1 -1
- package/pg-core/columns/smallserial.cjs.map +1 -1
- package/pg-core/columns/smallserial.d.cts +4 -3
- package/pg-core/columns/smallserial.d.ts +4 -3
- package/pg-core/columns/smallserial.js.map +1 -1
- package/pg-core/columns/text.cjs.map +1 -1
- package/pg-core/columns/text.d.cts +1 -0
- package/pg-core/columns/text.d.ts +1 -0
- package/pg-core/columns/text.js.map +1 -1
- package/pg-core/columns/time.cjs.map +1 -1
- package/pg-core/columns/time.d.cts +1 -0
- package/pg-core/columns/time.d.ts +1 -0
- package/pg-core/columns/time.js.map +1 -1
- package/pg-core/columns/timestamp.cjs.map +1 -1
- package/pg-core/columns/timestamp.d.cts +2 -0
- package/pg-core/columns/timestamp.d.ts +2 -0
- package/pg-core/columns/timestamp.js.map +1 -1
- package/pg-core/columns/uuid.cjs.map +1 -1
- package/pg-core/columns/uuid.d.cts +1 -0
- package/pg-core/columns/uuid.d.ts +1 -0
- package/pg-core/columns/uuid.js.map +1 -1
- package/pg-core/columns/varchar.cjs.map +1 -1
- package/pg-core/columns/varchar.d.cts +1 -0
- package/pg-core/columns/varchar.d.ts +1 -0
- package/pg-core/columns/varchar.js.map +1 -1
- package/pg-core/dialect.cjs +20 -14
- package/pg-core/dialect.cjs.map +1 -1
- package/pg-core/dialect.js +21 -15
- package/pg-core/dialect.js.map +1 -1
- package/pg-core/index.cjs +2 -0
- package/pg-core/index.cjs.map +1 -1
- package/pg-core/index.d.cts +1 -0
- package/pg-core/index.d.ts +1 -0
- package/pg-core/index.js +1 -0
- package/pg-core/index.js.map +1 -1
- package/pg-core/query-builders/insert.d.cts +1 -1
- package/pg-core/query-builders/insert.d.ts +1 -1
- package/pg-core/query-builders/select.cjs +2 -2
- package/pg-core/query-builders/select.cjs.map +1 -1
- package/pg-core/query-builders/select.js +3 -3
- package/pg-core/query-builders/select.js.map +1 -1
- package/pg-core/query-builders/update.cjs.map +1 -1
- package/pg-core/query-builders/update.d.cts +2 -2
- package/pg-core/query-builders/update.d.ts +2 -2
- package/pg-core/query-builders/update.js.map +1 -1
- package/pg-core/schema.cjs +4 -0
- package/pg-core/schema.cjs.map +1 -1
- package/pg-core/schema.d.cts +2 -0
- package/pg-core/schema.d.ts +2 -0
- package/pg-core/schema.js +4 -0
- package/pg-core/schema.js.map +1 -1
- package/pg-core/sequence.cjs +52 -0
- package/pg-core/sequence.cjs.map +1 -0
- package/pg-core/sequence.d.cts +16 -0
- package/pg-core/sequence.d.ts +16 -0
- package/pg-core/sequence.js +26 -0
- package/pg-core/sequence.js.map +1 -0
- package/pglite/driver.cjs +71 -0
- package/pglite/driver.cjs.map +1 -0
- package/pglite/driver.d.cts +21 -0
- package/pglite/driver.d.ts +21 -0
- package/pglite/driver.js +49 -0
- package/pglite/driver.js.map +1 -0
- package/pglite/index.cjs +25 -0
- package/pglite/index.cjs.map +1 -0
- package/pglite/index.d.cts +2 -0
- package/pglite/index.d.ts +2 -0
- package/pglite/index.js +3 -0
- package/pglite/index.js.map +1 -0
- package/pglite/migrator.cjs +33 -0
- package/pglite/migrator.cjs.map +1 -0
- package/pglite/migrator.d.cts +3 -0
- package/pglite/migrator.d.ts +3 -0
- package/pglite/migrator.js +9 -0
- package/pglite/migrator.js.map +1 -0
- package/pglite/session.cjs +145 -0
- package/pglite/session.cjs.map +1 -0
- package/pglite/session.d.cts +47 -0
- package/pglite/session.d.ts +47 -0
- package/pglite/session.js +119 -0
- package/pglite/session.js.map +1 -0
- package/selection-proxy.cjs +5 -5
- package/selection-proxy.cjs.map +1 -1
- package/selection-proxy.js +6 -6
- package/selection-proxy.js.map +1 -1
- package/sql/sql.cjs +4 -4
- package/sql/sql.cjs.map +1 -1
- package/sql/sql.js +5 -5
- package/sql/sql.js.map +1 -1
- package/sqlite-core/columns/blob.cjs.map +1 -1
- package/sqlite-core/columns/blob.d.cts +3 -0
- package/sqlite-core/columns/blob.d.ts +3 -0
- package/sqlite-core/columns/blob.js.map +1 -1
- package/sqlite-core/columns/common.cjs +8 -0
- package/sqlite-core/columns/common.cjs.map +1 -1
- package/sqlite-core/columns/common.d.cts +6 -1
- package/sqlite-core/columns/common.d.ts +6 -1
- package/sqlite-core/columns/common.js +8 -0
- package/sqlite-core/columns/common.js.map +1 -1
- package/sqlite-core/columns/custom.cjs.map +1 -1
- package/sqlite-core/columns/custom.d.cts +1 -0
- package/sqlite-core/columns/custom.d.ts +1 -0
- package/sqlite-core/columns/custom.js.map +1 -1
- package/sqlite-core/columns/integer.cjs.map +1 -1
- package/sqlite-core/columns/integer.d.cts +3 -0
- package/sqlite-core/columns/integer.d.ts +3 -0
- package/sqlite-core/columns/integer.js.map +1 -1
- package/sqlite-core/columns/numeric.cjs.map +1 -1
- package/sqlite-core/columns/numeric.d.cts +1 -0
- package/sqlite-core/columns/numeric.d.ts +1 -0
- package/sqlite-core/columns/numeric.js.map +1 -1
- package/sqlite-core/columns/real.cjs.map +1 -1
- package/sqlite-core/columns/real.d.cts +1 -0
- package/sqlite-core/columns/real.d.ts +1 -0
- package/sqlite-core/columns/real.js.map +1 -1
- package/sqlite-core/columns/text.cjs.map +1 -1
- package/sqlite-core/columns/text.d.cts +2 -0
- package/sqlite-core/columns/text.d.ts +2 -0
- package/sqlite-core/columns/text.js.map +1 -1
- package/sqlite-core/dialect.cjs +21 -14
- package/sqlite-core/dialect.cjs.map +1 -1
- package/sqlite-core/dialect.js +22 -15
- package/sqlite-core/dialect.js.map +1 -1
- package/sqlite-core/query-builders/insert.d.cts +1 -1
- package/sqlite-core/query-builders/insert.d.ts +1 -1
- package/sqlite-core/query-builders/select.cjs +2 -2
- package/sqlite-core/query-builders/select.cjs.map +1 -1
- package/sqlite-core/query-builders/select.js +3 -3
- package/sqlite-core/query-builders/select.js.map +1 -1
- package/sqlite-core/query-builders/update.cjs.map +1 -1
- package/sqlite-core/query-builders/update.d.cts +2 -2
- package/sqlite-core/query-builders/update.d.ts +2 -2
- package/sqlite-core/query-builders/update.js.map +1 -1
- package/subquery.cjs +3 -7
- package/subquery.cjs.map +1 -1
- package/subquery.d.cts +5 -4
- package/subquery.d.ts +5 -4
- package/subquery.js +3 -6
- package/subquery.js.map +1 -1
- package/utils.cjs +1 -1
- package/utils.cjs.map +1 -1
- package/utils.js +2 -2
- package/utils.js.map +1 -1
- package/version.cjs +1 -1
- package/version.d.cts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var session_exports = {};
|
|
20
|
+
__export(session_exports, {
|
|
21
|
+
PglitePreparedQuery: () => PglitePreparedQuery,
|
|
22
|
+
PgliteSession: () => PgliteSession,
|
|
23
|
+
PgliteTransaction: () => PgliteTransaction
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(session_exports);
|
|
26
|
+
var import_entity = require("../entity.cjs");
|
|
27
|
+
var import_logger = require("../logger.cjs");
|
|
28
|
+
var import_pg_core = require("../pg-core/index.cjs");
|
|
29
|
+
var import_session = require("../pg-core/session.cjs");
|
|
30
|
+
var import_sql = require("../sql/sql.cjs");
|
|
31
|
+
var import_utils = require("../utils.cjs");
|
|
32
|
+
var import_pglite = require("@electric-sql/pglite");
|
|
33
|
+
class PglitePreparedQuery extends import_session.PgPreparedQuery {
|
|
34
|
+
constructor(client, queryString, params, logger, fields, name, _isResponseInArrayMode, customResultMapper) {
|
|
35
|
+
super({ sql: queryString, params });
|
|
36
|
+
this.client = client;
|
|
37
|
+
this.queryString = queryString;
|
|
38
|
+
this.params = params;
|
|
39
|
+
this.logger = logger;
|
|
40
|
+
this.fields = fields;
|
|
41
|
+
this._isResponseInArrayMode = _isResponseInArrayMode;
|
|
42
|
+
this.customResultMapper = customResultMapper;
|
|
43
|
+
this.rawQueryConfig = {
|
|
44
|
+
rowMode: "object",
|
|
45
|
+
parsers: {
|
|
46
|
+
[import_pglite.types.TIMESTAMP]: (value) => value,
|
|
47
|
+
[import_pglite.types.TIMESTAMPTZ]: (value) => value,
|
|
48
|
+
[import_pglite.types.INTERVAL]: (value) => value,
|
|
49
|
+
[import_pglite.types.DATE]: (value) => value
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
this.queryConfig = {
|
|
53
|
+
rowMode: "array",
|
|
54
|
+
parsers: {
|
|
55
|
+
[import_pglite.types.TIMESTAMP]: (value) => value,
|
|
56
|
+
[import_pglite.types.TIMESTAMPTZ]: (value) => value,
|
|
57
|
+
[import_pglite.types.INTERVAL]: (value) => value,
|
|
58
|
+
[import_pglite.types.DATE]: (value) => value
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
static [import_entity.entityKind] = "PglitePreparedQuery";
|
|
63
|
+
rawQueryConfig;
|
|
64
|
+
queryConfig;
|
|
65
|
+
async execute(placeholderValues = {}) {
|
|
66
|
+
const params = (0, import_sql.fillPlaceholders)(this.params, placeholderValues);
|
|
67
|
+
this.logger.logQuery(this.queryString, params);
|
|
68
|
+
const { fields, rawQueryConfig, client, queryConfig, joinsNotNullableMap, customResultMapper, queryString } = this;
|
|
69
|
+
if (!fields && !customResultMapper) {
|
|
70
|
+
return client.query(queryString, params, rawQueryConfig);
|
|
71
|
+
}
|
|
72
|
+
const result = await client.query(queryString, params, queryConfig);
|
|
73
|
+
return customResultMapper ? customResultMapper(result.rows) : result.rows.map((row) => (0, import_utils.mapResultRow)(fields, row, joinsNotNullableMap));
|
|
74
|
+
}
|
|
75
|
+
all(placeholderValues = {}) {
|
|
76
|
+
const params = (0, import_sql.fillPlaceholders)(this.params, placeholderValues);
|
|
77
|
+
this.logger.logQuery(this.queryString, params);
|
|
78
|
+
return this.client.query(this.queryString, params, this.rawQueryConfig).then((result) => result.rows);
|
|
79
|
+
}
|
|
80
|
+
/** @internal */
|
|
81
|
+
isResponseInArrayMode() {
|
|
82
|
+
return this._isResponseInArrayMode;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
class PgliteSession extends import_session.PgSession {
|
|
86
|
+
constructor(client, dialect, schema, options = {}) {
|
|
87
|
+
super(dialect);
|
|
88
|
+
this.client = client;
|
|
89
|
+
this.schema = schema;
|
|
90
|
+
this.options = options;
|
|
91
|
+
this.logger = options.logger ?? new import_logger.NoopLogger();
|
|
92
|
+
}
|
|
93
|
+
static [import_entity.entityKind] = "PgliteSession";
|
|
94
|
+
logger;
|
|
95
|
+
prepareQuery(query, fields, name, isResponseInArrayMode, customResultMapper) {
|
|
96
|
+
return new PglitePreparedQuery(
|
|
97
|
+
this.client,
|
|
98
|
+
query.sql,
|
|
99
|
+
query.params,
|
|
100
|
+
this.logger,
|
|
101
|
+
fields,
|
|
102
|
+
name,
|
|
103
|
+
isResponseInArrayMode,
|
|
104
|
+
customResultMapper
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
async transaction(transaction, config) {
|
|
108
|
+
return this.client.transaction(async (client) => {
|
|
109
|
+
const session = new PgliteSession(
|
|
110
|
+
client,
|
|
111
|
+
this.dialect,
|
|
112
|
+
this.schema,
|
|
113
|
+
this.options
|
|
114
|
+
);
|
|
115
|
+
const tx = new PgliteTransaction(this.dialect, session, this.schema);
|
|
116
|
+
if (config) {
|
|
117
|
+
await tx.setTransaction(config);
|
|
118
|
+
}
|
|
119
|
+
return transaction(tx);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
class PgliteTransaction extends import_pg_core.PgTransaction {
|
|
124
|
+
static [import_entity.entityKind] = "PgliteTransaction";
|
|
125
|
+
async transaction(transaction) {
|
|
126
|
+
const savepointName = `sp${this.nestedIndex + 1}`;
|
|
127
|
+
const tx = new PgliteTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);
|
|
128
|
+
await tx.execute(import_sql.sql.raw(`savepoint ${savepointName}`));
|
|
129
|
+
try {
|
|
130
|
+
const result = await transaction(tx);
|
|
131
|
+
await tx.execute(import_sql.sql.raw(`release savepoint ${savepointName}`));
|
|
132
|
+
return result;
|
|
133
|
+
} catch (err) {
|
|
134
|
+
await tx.execute(import_sql.sql.raw(`rollback to savepoint ${savepointName}`));
|
|
135
|
+
throw err;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
140
|
+
0 && (module.exports = {
|
|
141
|
+
PglitePreparedQuery,
|
|
142
|
+
PgliteSession,
|
|
143
|
+
PgliteTransaction
|
|
144
|
+
});
|
|
145
|
+
//# sourceMappingURL=session.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/pglite/session.ts"],"sourcesContent":["import type { PGlite, QueryOptions, Results, Row, Transaction } from '@electric-sql/pglite';\nimport { entityKind } from '~/entity.ts';\nimport { type Logger, NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgTransaction } from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from '~/pg-core/session.ts';\nimport { PgPreparedQuery, PgSession } from '~/pg-core/session.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nimport { types } from '@electric-sql/pglite';\n\nexport type PgliteClient = PGlite;\n\nexport class PglitePreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n\tstatic readonly [entityKind]: string = 'PglitePreparedQuery';\n\n\tprivate rawQueryConfig: QueryOptions;\n\tprivate queryConfig: QueryOptions;\n\n\tconstructor(\n\t\tprivate client: PgliteClient | Transaction,\n\t\tprivate queryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t) {\n\t\tsuper({ sql: queryString, params });\n\t\tthis.rawQueryConfig = {\n\t\t\trowMode: 'object',\n\t\t\tparsers: {\n\t\t\t\t[types.TIMESTAMP]: (value) => value,\n\t\t\t\t[types.TIMESTAMPTZ]: (value) => value,\n\t\t\t\t[types.INTERVAL]: (value) => value,\n\t\t\t\t[types.DATE]: (value) => value,\n\t\t\t},\n\t\t};\n\t\tthis.queryConfig = {\n\t\t\trowMode: 'array',\n\t\t\tparsers: {\n\t\t\t\t[types.TIMESTAMP]: (value) => value,\n\t\t\t\t[types.TIMESTAMPTZ]: (value) => value,\n\t\t\t\t[types.INTERVAL]: (value) => value,\n\t\t\t\t[types.DATE]: (value) => value,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.queryString, params);\n\n\t\tconst { fields, rawQueryConfig, client, queryConfig, joinsNotNullableMap, customResultMapper, queryString } = this;\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn client.query<any[]>(queryString, params, rawQueryConfig);\n\t\t}\n\n\t\tconst result = await client.query<any[][]>(queryString, params, queryConfig);\n\n\t\treturn customResultMapper\n\t\t\t? customResultMapper(result.rows)\n\t\t\t: result.rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tall(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\t\tthis.logger.logQuery(this.queryString, params);\n\t\treturn this.client.query(this.queryString, params, this.rawQueryConfig).then((result) => result.rows);\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nexport interface PgliteSessionOptions {\n\tlogger?: Logger;\n}\n\nexport class PgliteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgSession<PgliteQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'PgliteSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: PgliteClient | Transaction,\n\t\tdialect: PgDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: PgliteSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\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): PgPreparedQuery<T> {\n\t\treturn new PglitePreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tname,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: PgliteTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig | undefined,\n\t): Promise<T> {\n\t\treturn (this.client as PgliteClient).transaction(async (client) => {\n\t\t\tconst session = new PgliteSession<TFullSchema, TSchema>(\n\t\t\t\tclient,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.options,\n\t\t\t);\n\t\t\tconst tx = new PgliteTransaction(this.dialect, session, this.schema);\n\t\t\tif (config) {\n\t\t\t\tawait tx.setTransaction(config);\n\t\t\t}\n\t\t\treturn transaction(tx);\n\t\t}) as Promise<T>;\n\t}\n}\n\nexport class PgliteTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<PgliteQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'PgliteTransaction';\n\n\toverride async transaction<T>(transaction: (tx: PgliteTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new PgliteTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tawait tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport interface PgliteQueryResultHKT extends QueryResultHKT {\n\ttype: Results<Assume<this['row'], Row>>;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { PGlite, Results, Row, Transaction } from '@electric-sql/pglite';
|
|
2
|
+
import { entityKind } from "../entity.cjs";
|
|
3
|
+
import { type Logger } from "../logger.cjs";
|
|
4
|
+
import type { PgDialect } from "../pg-core/dialect.cjs";
|
|
5
|
+
import { PgTransaction } from "../pg-core/index.cjs";
|
|
6
|
+
import type { SelectedFieldsOrdered } from "../pg-core/query-builders/select.types.cjs";
|
|
7
|
+
import type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from "../pg-core/session.cjs";
|
|
8
|
+
import { PgPreparedQuery, PgSession } from "../pg-core/session.cjs";
|
|
9
|
+
import type { RelationalSchemaConfig, TablesRelationalConfig } from "../relations.cjs";
|
|
10
|
+
import { type Query } from "../sql/sql.cjs";
|
|
11
|
+
import { type Assume } from "../utils.cjs";
|
|
12
|
+
export type PgliteClient = PGlite;
|
|
13
|
+
export declare class PglitePreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {
|
|
14
|
+
private client;
|
|
15
|
+
private queryString;
|
|
16
|
+
private params;
|
|
17
|
+
private logger;
|
|
18
|
+
private fields;
|
|
19
|
+
private _isResponseInArrayMode;
|
|
20
|
+
private customResultMapper?;
|
|
21
|
+
static readonly [entityKind]: string;
|
|
22
|
+
private rawQueryConfig;
|
|
23
|
+
private queryConfig;
|
|
24
|
+
constructor(client: PgliteClient | Transaction, queryString: string, params: unknown[], logger: Logger, fields: SelectedFieldsOrdered | undefined, name: string | undefined, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: unknown[][]) => T['execute']) | undefined);
|
|
25
|
+
execute(placeholderValues?: Record<string, unknown> | undefined): Promise<T['execute']>;
|
|
26
|
+
all(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']>;
|
|
27
|
+
}
|
|
28
|
+
export interface PgliteSessionOptions {
|
|
29
|
+
logger?: Logger;
|
|
30
|
+
}
|
|
31
|
+
export declare class PgliteSession<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends PgSession<PgliteQueryResultHKT, TFullSchema, TSchema> {
|
|
32
|
+
private client;
|
|
33
|
+
private schema;
|
|
34
|
+
private options;
|
|
35
|
+
static readonly [entityKind]: string;
|
|
36
|
+
private logger;
|
|
37
|
+
constructor(client: PgliteClient | Transaction, dialect: PgDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options?: PgliteSessionOptions);
|
|
38
|
+
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute']): PgPreparedQuery<T>;
|
|
39
|
+
transaction<T>(transaction: (tx: PgliteTransaction<TFullSchema, TSchema>) => Promise<T>, config?: PgTransactionConfig | undefined): Promise<T>;
|
|
40
|
+
}
|
|
41
|
+
export declare class PgliteTransaction<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends PgTransaction<PgliteQueryResultHKT, TFullSchema, TSchema> {
|
|
42
|
+
static readonly [entityKind]: string;
|
|
43
|
+
transaction<T>(transaction: (tx: PgliteTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T>;
|
|
44
|
+
}
|
|
45
|
+
export interface PgliteQueryResultHKT extends QueryResultHKT {
|
|
46
|
+
type: Results<Assume<this['row'], Row>>;
|
|
47
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { PGlite, Results, Row, Transaction } from '@electric-sql/pglite';
|
|
2
|
+
import { entityKind } from "../entity.js";
|
|
3
|
+
import { type Logger } from "../logger.js";
|
|
4
|
+
import type { PgDialect } from "../pg-core/dialect.js";
|
|
5
|
+
import { PgTransaction } from "../pg-core/index.js";
|
|
6
|
+
import type { SelectedFieldsOrdered } from "../pg-core/query-builders/select.types.js";
|
|
7
|
+
import type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from "../pg-core/session.js";
|
|
8
|
+
import { PgPreparedQuery, PgSession } from "../pg-core/session.js";
|
|
9
|
+
import type { RelationalSchemaConfig, TablesRelationalConfig } from "../relations.js";
|
|
10
|
+
import { type Query } from "../sql/sql.js";
|
|
11
|
+
import { type Assume } from "../utils.js";
|
|
12
|
+
export type PgliteClient = PGlite;
|
|
13
|
+
export declare class PglitePreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {
|
|
14
|
+
private client;
|
|
15
|
+
private queryString;
|
|
16
|
+
private params;
|
|
17
|
+
private logger;
|
|
18
|
+
private fields;
|
|
19
|
+
private _isResponseInArrayMode;
|
|
20
|
+
private customResultMapper?;
|
|
21
|
+
static readonly [entityKind]: string;
|
|
22
|
+
private rawQueryConfig;
|
|
23
|
+
private queryConfig;
|
|
24
|
+
constructor(client: PgliteClient | Transaction, queryString: string, params: unknown[], logger: Logger, fields: SelectedFieldsOrdered | undefined, name: string | undefined, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: unknown[][]) => T['execute']) | undefined);
|
|
25
|
+
execute(placeholderValues?: Record<string, unknown> | undefined): Promise<T['execute']>;
|
|
26
|
+
all(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']>;
|
|
27
|
+
}
|
|
28
|
+
export interface PgliteSessionOptions {
|
|
29
|
+
logger?: Logger;
|
|
30
|
+
}
|
|
31
|
+
export declare class PgliteSession<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends PgSession<PgliteQueryResultHKT, TFullSchema, TSchema> {
|
|
32
|
+
private client;
|
|
33
|
+
private schema;
|
|
34
|
+
private options;
|
|
35
|
+
static readonly [entityKind]: string;
|
|
36
|
+
private logger;
|
|
37
|
+
constructor(client: PgliteClient | Transaction, dialect: PgDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options?: PgliteSessionOptions);
|
|
38
|
+
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute']): PgPreparedQuery<T>;
|
|
39
|
+
transaction<T>(transaction: (tx: PgliteTransaction<TFullSchema, TSchema>) => Promise<T>, config?: PgTransactionConfig | undefined): Promise<T>;
|
|
40
|
+
}
|
|
41
|
+
export declare class PgliteTransaction<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends PgTransaction<PgliteQueryResultHKT, TFullSchema, TSchema> {
|
|
42
|
+
static readonly [entityKind]: string;
|
|
43
|
+
transaction<T>(transaction: (tx: PgliteTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T>;
|
|
44
|
+
}
|
|
45
|
+
export interface PgliteQueryResultHKT extends QueryResultHKT {
|
|
46
|
+
type: Results<Assume<this['row'], Row>>;
|
|
47
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { entityKind } from "../entity.js";
|
|
2
|
+
import { NoopLogger } from "../logger.js";
|
|
3
|
+
import { PgTransaction } from "../pg-core/index.js";
|
|
4
|
+
import { PgPreparedQuery, PgSession } from "../pg-core/session.js";
|
|
5
|
+
import { fillPlaceholders, sql } from "../sql/sql.js";
|
|
6
|
+
import { mapResultRow } from "../utils.js";
|
|
7
|
+
import { types } from "@electric-sql/pglite";
|
|
8
|
+
class PglitePreparedQuery extends PgPreparedQuery {
|
|
9
|
+
constructor(client, queryString, params, logger, fields, name, _isResponseInArrayMode, customResultMapper) {
|
|
10
|
+
super({ sql: queryString, params });
|
|
11
|
+
this.client = client;
|
|
12
|
+
this.queryString = queryString;
|
|
13
|
+
this.params = params;
|
|
14
|
+
this.logger = logger;
|
|
15
|
+
this.fields = fields;
|
|
16
|
+
this._isResponseInArrayMode = _isResponseInArrayMode;
|
|
17
|
+
this.customResultMapper = customResultMapper;
|
|
18
|
+
this.rawQueryConfig = {
|
|
19
|
+
rowMode: "object",
|
|
20
|
+
parsers: {
|
|
21
|
+
[types.TIMESTAMP]: (value) => value,
|
|
22
|
+
[types.TIMESTAMPTZ]: (value) => value,
|
|
23
|
+
[types.INTERVAL]: (value) => value,
|
|
24
|
+
[types.DATE]: (value) => value
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
this.queryConfig = {
|
|
28
|
+
rowMode: "array",
|
|
29
|
+
parsers: {
|
|
30
|
+
[types.TIMESTAMP]: (value) => value,
|
|
31
|
+
[types.TIMESTAMPTZ]: (value) => value,
|
|
32
|
+
[types.INTERVAL]: (value) => value,
|
|
33
|
+
[types.DATE]: (value) => value
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
static [entityKind] = "PglitePreparedQuery";
|
|
38
|
+
rawQueryConfig;
|
|
39
|
+
queryConfig;
|
|
40
|
+
async execute(placeholderValues = {}) {
|
|
41
|
+
const params = fillPlaceholders(this.params, placeholderValues);
|
|
42
|
+
this.logger.logQuery(this.queryString, params);
|
|
43
|
+
const { fields, rawQueryConfig, client, queryConfig, joinsNotNullableMap, customResultMapper, queryString } = this;
|
|
44
|
+
if (!fields && !customResultMapper) {
|
|
45
|
+
return client.query(queryString, params, rawQueryConfig);
|
|
46
|
+
}
|
|
47
|
+
const result = await client.query(queryString, params, queryConfig);
|
|
48
|
+
return customResultMapper ? customResultMapper(result.rows) : result.rows.map((row) => mapResultRow(fields, row, joinsNotNullableMap));
|
|
49
|
+
}
|
|
50
|
+
all(placeholderValues = {}) {
|
|
51
|
+
const params = fillPlaceholders(this.params, placeholderValues);
|
|
52
|
+
this.logger.logQuery(this.queryString, params);
|
|
53
|
+
return this.client.query(this.queryString, params, this.rawQueryConfig).then((result) => result.rows);
|
|
54
|
+
}
|
|
55
|
+
/** @internal */
|
|
56
|
+
isResponseInArrayMode() {
|
|
57
|
+
return this._isResponseInArrayMode;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
class PgliteSession extends PgSession {
|
|
61
|
+
constructor(client, dialect, schema, options = {}) {
|
|
62
|
+
super(dialect);
|
|
63
|
+
this.client = client;
|
|
64
|
+
this.schema = schema;
|
|
65
|
+
this.options = options;
|
|
66
|
+
this.logger = options.logger ?? new NoopLogger();
|
|
67
|
+
}
|
|
68
|
+
static [entityKind] = "PgliteSession";
|
|
69
|
+
logger;
|
|
70
|
+
prepareQuery(query, fields, name, isResponseInArrayMode, customResultMapper) {
|
|
71
|
+
return new PglitePreparedQuery(
|
|
72
|
+
this.client,
|
|
73
|
+
query.sql,
|
|
74
|
+
query.params,
|
|
75
|
+
this.logger,
|
|
76
|
+
fields,
|
|
77
|
+
name,
|
|
78
|
+
isResponseInArrayMode,
|
|
79
|
+
customResultMapper
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
async transaction(transaction, config) {
|
|
83
|
+
return this.client.transaction(async (client) => {
|
|
84
|
+
const session = new PgliteSession(
|
|
85
|
+
client,
|
|
86
|
+
this.dialect,
|
|
87
|
+
this.schema,
|
|
88
|
+
this.options
|
|
89
|
+
);
|
|
90
|
+
const tx = new PgliteTransaction(this.dialect, session, this.schema);
|
|
91
|
+
if (config) {
|
|
92
|
+
await tx.setTransaction(config);
|
|
93
|
+
}
|
|
94
|
+
return transaction(tx);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
class PgliteTransaction extends PgTransaction {
|
|
99
|
+
static [entityKind] = "PgliteTransaction";
|
|
100
|
+
async transaction(transaction) {
|
|
101
|
+
const savepointName = `sp${this.nestedIndex + 1}`;
|
|
102
|
+
const tx = new PgliteTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);
|
|
103
|
+
await tx.execute(sql.raw(`savepoint ${savepointName}`));
|
|
104
|
+
try {
|
|
105
|
+
const result = await transaction(tx);
|
|
106
|
+
await tx.execute(sql.raw(`release savepoint ${savepointName}`));
|
|
107
|
+
return result;
|
|
108
|
+
} catch (err) {
|
|
109
|
+
await tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));
|
|
110
|
+
throw err;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export {
|
|
115
|
+
PglitePreparedQuery,
|
|
116
|
+
PgliteSession,
|
|
117
|
+
PgliteTransaction
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/pglite/session.ts"],"sourcesContent":["import type { PGlite, QueryOptions, Results, Row, Transaction } from '@electric-sql/pglite';\nimport { entityKind } from '~/entity.ts';\nimport { type Logger, NoopLogger } from '~/logger.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport { PgTransaction } from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { PgTransactionConfig, PreparedQueryConfig, QueryResultHKT } from '~/pg-core/session.ts';\nimport { PgPreparedQuery, PgSession } from '~/pg-core/session.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nimport { types } from '@electric-sql/pglite';\n\nexport type PgliteClient = PGlite;\n\nexport class PglitePreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n\tstatic readonly [entityKind]: string = 'PglitePreparedQuery';\n\n\tprivate rawQueryConfig: QueryOptions;\n\tprivate queryConfig: QueryOptions;\n\n\tconstructor(\n\t\tprivate client: PgliteClient | Transaction,\n\t\tprivate queryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t) {\n\t\tsuper({ sql: queryString, params });\n\t\tthis.rawQueryConfig = {\n\t\t\trowMode: 'object',\n\t\t\tparsers: {\n\t\t\t\t[types.TIMESTAMP]: (value) => value,\n\t\t\t\t[types.TIMESTAMPTZ]: (value) => value,\n\t\t\t\t[types.INTERVAL]: (value) => value,\n\t\t\t\t[types.DATE]: (value) => value,\n\t\t\t},\n\t\t};\n\t\tthis.queryConfig = {\n\t\t\trowMode: 'array',\n\t\t\tparsers: {\n\t\t\t\t[types.TIMESTAMP]: (value) => value,\n\t\t\t\t[types.TIMESTAMPTZ]: (value) => value,\n\t\t\t\t[types.INTERVAL]: (value) => value,\n\t\t\t\t[types.DATE]: (value) => value,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.queryString, params);\n\n\t\tconst { fields, rawQueryConfig, client, queryConfig, joinsNotNullableMap, customResultMapper, queryString } = this;\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn client.query<any[]>(queryString, params, rawQueryConfig);\n\t\t}\n\n\t\tconst result = await client.query<any[][]>(queryString, params, queryConfig);\n\n\t\treturn customResultMapper\n\t\t\t? customResultMapper(result.rows)\n\t\t\t: result.rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tall(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\t\tthis.logger.logQuery(this.queryString, params);\n\t\treturn this.client.query(this.queryString, params, this.rawQueryConfig).then((result) => result.rows);\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nexport interface PgliteSessionOptions {\n\tlogger?: Logger;\n}\n\nexport class PgliteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgSession<PgliteQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'PgliteSession';\n\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\tprivate client: PgliteClient | Transaction,\n\t\tdialect: PgDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: PgliteSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\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): PgPreparedQuery<T> {\n\t\treturn new PglitePreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tname,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: PgliteTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig | undefined,\n\t): Promise<T> {\n\t\treturn (this.client as PgliteClient).transaction(async (client) => {\n\t\t\tconst session = new PgliteSession<TFullSchema, TSchema>(\n\t\t\t\tclient,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.options,\n\t\t\t);\n\t\t\tconst tx = new PgliteTransaction(this.dialect, session, this.schema);\n\t\t\tif (config) {\n\t\t\t\tawait tx.setTransaction(config);\n\t\t\t}\n\t\t\treturn transaction(tx);\n\t\t}) as Promise<T>;\n\t}\n}\n\nexport class PgliteTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<PgliteQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'PgliteTransaction';\n\n\toverride async transaction<T>(transaction: (tx: PgliteTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new PgliteTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tawait tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport interface PgliteQueryResultHKT extends QueryResultHKT {\n\ttype: Results<Assume<this['row'], Row>>;\n}\n"],"mappings":"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","names":[]}
|
package/selection-proxy.cjs
CHANGED
|
@@ -34,11 +34,11 @@ class SelectionProxyHandler {
|
|
|
34
34
|
this.config = { ...config };
|
|
35
35
|
}
|
|
36
36
|
get(subquery, prop) {
|
|
37
|
-
if (prop ===
|
|
37
|
+
if (prop === "_") {
|
|
38
38
|
return {
|
|
39
|
-
...subquery[
|
|
40
|
-
|
|
41
|
-
subquery
|
|
39
|
+
...subquery["_"],
|
|
40
|
+
selectedFields: new Proxy(
|
|
41
|
+
subquery._.selectedFields,
|
|
42
42
|
this
|
|
43
43
|
)
|
|
44
44
|
};
|
|
@@ -55,7 +55,7 @@ class SelectionProxyHandler {
|
|
|
55
55
|
if (typeof prop === "symbol") {
|
|
56
56
|
return subquery[prop];
|
|
57
57
|
}
|
|
58
|
-
const columns = (0, import_entity.is)(subquery, import_subquery.Subquery) ? subquery
|
|
58
|
+
const columns = (0, import_entity.is)(subquery, import_subquery.Subquery) ? subquery._.selectedFields : (0, import_entity.is)(subquery, import_sql.View) ? subquery[import_view_common.ViewBaseConfig].selectedFields : subquery;
|
|
59
59
|
const value = columns[prop];
|
|
60
60
|
if ((0, import_entity.is)(value, import_sql.SQL.Aliased)) {
|
|
61
61
|
if (this.config.sqlAliasedBehavior === "sql" && !value.isSelectionField) {
|
package/selection-proxy.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/selection-proxy.ts"],"sourcesContent":["import { ColumnAliasProxyHandler, TableAliasProxyHandler } from './alias.ts';\nimport { Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { SQL, View } from './sql/sql.ts';\nimport { Subquery
|
|
1
|
+
{"version":3,"sources":["../src/selection-proxy.ts"],"sourcesContent":["import { ColumnAliasProxyHandler, TableAliasProxyHandler } from './alias.ts';\nimport { Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { SQL, View } from './sql/sql.ts';\nimport { Subquery } from './subquery.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\nexport class SelectionProxyHandler<T extends Subquery | Record<string, unknown> | View>\n\timplements ProxyHandler<Subquery | Record<string, unknown> | View>\n{\n\tstatic readonly [entityKind]: string = 'SelectionProxyHandler';\n\n\tprivate config: {\n\t\t/**\n\t\t * Table alias for the columns\n\t\t */\n\t\talias?: string;\n\t\t/**\n\t\t * What to do when a field is an instance of `SQL.Aliased` and it's not a selection field (from a subquery)\n\t\t *\n\t\t * `sql` - return the underlying SQL expression\n\t\t *\n\t\t * `alias` - return the field alias\n\t\t */\n\t\tsqlAliasedBehavior: 'sql' | 'alias';\n\t\t/**\n\t\t * What to do when a field is an instance of `SQL` and it doesn't have an alias declared\n\t\t *\n\t\t * `sql` - return the underlying SQL expression\n\t\t *\n\t\t * `error` - return a DrizzleTypeError on type level and throw an error on runtime\n\t\t */\n\t\tsqlBehavior: 'sql' | 'error';\n\n\t\t/**\n\t\t * Whether to replace the original name of the column with the alias\n\t\t * Should be set to `true` for views creation\n\t\t * @default false\n\t\t */\n\t\treplaceOriginalName?: boolean;\n\t};\n\n\tconstructor(config: SelectionProxyHandler<T>['config']) {\n\t\tthis.config = { ...config };\n\t}\n\n\tget(subquery: T, prop: string | symbol): any {\n\t\tif (prop === '_') {\n\t\t\treturn {\n\t\t\t\t...subquery['_' as keyof typeof subquery],\n\t\t\t\tselectedFields: new Proxy(\n\t\t\t\t\t(subquery as Subquery)._.selectedFields,\n\t\t\t\t\tthis as ProxyHandler<Record<string, unknown>>,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\tif (prop === ViewBaseConfig) {\n\t\t\treturn {\n\t\t\t\t...subquery[ViewBaseConfig as keyof typeof subquery],\n\t\t\t\tselectedFields: new Proxy(\n\t\t\t\t\t(subquery as View)[ViewBaseConfig].selectedFields,\n\t\t\t\t\tthis as ProxyHandler<Record<string, unknown>>,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\tif (typeof prop === 'symbol') {\n\t\t\treturn subquery[prop as keyof typeof subquery];\n\t\t}\n\n\t\tconst columns = is(subquery, Subquery)\n\t\t\t? subquery._.selectedFields\n\t\t\t: is(subquery, View)\n\t\t\t? subquery[ViewBaseConfig].selectedFields\n\t\t\t: subquery;\n\t\tconst value: unknown = columns[prop as keyof typeof columns];\n\n\t\tif (is(value, SQL.Aliased)) {\n\t\t\t// Never return the underlying SQL expression for a field previously selected in a subquery\n\t\t\tif (this.config.sqlAliasedBehavior === 'sql' && !value.isSelectionField) {\n\t\t\t\treturn value.sql;\n\t\t\t}\n\n\t\t\tconst newValue = value.clone();\n\t\t\tnewValue.isSelectionField = true;\n\t\t\treturn newValue;\n\t\t}\n\n\t\tif (is(value, SQL)) {\n\t\t\tif (this.config.sqlBehavior === 'sql') {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tthrow new Error(\n\t\t\t\t`You tried to reference \"${prop}\" field from a subquery, which is a raw SQL field, but it doesn't have an alias declared. Please add an alias to the field using \".as('alias')\" method.`,\n\t\t\t);\n\t\t}\n\n\t\tif (is(value, Column)) {\n\t\t\tif (this.config.alias) {\n\t\t\t\treturn new Proxy(\n\t\t\t\t\tvalue,\n\t\t\t\t\tnew ColumnAliasProxyHandler(\n\t\t\t\t\t\tnew Proxy(\n\t\t\t\t\t\t\tvalue.table,\n\t\t\t\t\t\t\tnew TableAliasProxyHandler(this.config.alias, this.config.replaceOriginalName ?? false),\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\treturn value;\n\t\t}\n\n\t\tif (typeof value !== 'object' || value === null) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn new Proxy(value, new SelectionProxyHandler(this.config));\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAgE;AAChE,oBAAuB;AACvB,oBAA+B;AAC/B,iBAA0B;AAC1B,sBAAyB;AACzB,yBAA+B;AAExB,MAAM,sBAEb;AAAA,EACC,QAAiB,wBAAU,IAAY;AAAA,EAE/B;AAAA,EA8BR,YAAY,QAA4C;AACvD,SAAK,SAAS,EAAE,GAAG,OAAO;AAAA,EAC3B;AAAA,EAEA,IAAI,UAAa,MAA4B;AAC5C,QAAI,SAAS,KAAK;AACjB,aAAO;AAAA,QACN,GAAG,SAAS,GAA4B;AAAA,QACxC,gBAAgB,IAAI;AAAA,UAClB,SAAsB,EAAE;AAAA,UACzB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,QAAI,SAAS,mCAAgB;AAC5B,aAAO;AAAA,QACN,GAAG,SAAS,iCAAuC;AAAA,QACnD,gBAAgB,IAAI;AAAA,UAClB,SAAkB,iCAAc,EAAE;AAAA,UACnC;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,QAAI,OAAO,SAAS,UAAU;AAC7B,aAAO,SAAS,IAA6B;AAAA,IAC9C;AAEA,UAAM,cAAU,kBAAG,UAAU,wBAAQ,IAClC,SAAS,EAAE,qBACX,kBAAG,UAAU,eAAI,IACjB,SAAS,iCAAc,EAAE,iBACzB;AACH,UAAM,QAAiB,QAAQ,IAA4B;AAE3D,YAAI,kBAAG,OAAO,eAAI,OAAO,GAAG;AAE3B,UAAI,KAAK,OAAO,uBAAuB,SAAS,CAAC,MAAM,kBAAkB;AACxE,eAAO,MAAM;AAAA,MACd;AAEA,YAAM,WAAW,MAAM,MAAM;AAC7B,eAAS,mBAAmB;AAC5B,aAAO;AAAA,IACR;AAEA,YAAI,kBAAG,OAAO,cAAG,GAAG;AACnB,UAAI,KAAK,OAAO,gBAAgB,OAAO;AACtC,eAAO;AAAA,MACR;AAEA,YAAM,IAAI;AAAA,QACT,2BAA2B,IAAI;AAAA,MAChC;AAAA,IACD;AAEA,YAAI,kBAAG,OAAO,oBAAM,GAAG;AACtB,UAAI,KAAK,OAAO,OAAO;AACtB,eAAO,IAAI;AAAA,UACV;AAAA,UACA,IAAI;AAAA,YACH,IAAI;AAAA,cACH,MAAM;AAAA,cACN,IAAI,oCAAuB,KAAK,OAAO,OAAO,KAAK,OAAO,uBAAuB,KAAK;AAAA,YACvF;AAAA,UACD;AAAA,QACD;AAAA,MACD;AACA,aAAO;AAAA,IACR;AAEA,QAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAChD,aAAO;AAAA,IACR;AAEA,WAAO,IAAI,MAAM,OAAO,IAAI,sBAAsB,KAAK,MAAM,CAAC;AAAA,EAC/D;AACD;","names":[]}
|
package/selection-proxy.js
CHANGED
|
@@ -2,7 +2,7 @@ import { ColumnAliasProxyHandler, TableAliasProxyHandler } from "./alias.js";
|
|
|
2
2
|
import { Column } from "./column.js";
|
|
3
3
|
import { entityKind, is } from "./entity.js";
|
|
4
4
|
import { SQL, View } from "./sql/sql.js";
|
|
5
|
-
import { Subquery
|
|
5
|
+
import { Subquery } from "./subquery.js";
|
|
6
6
|
import { ViewBaseConfig } from "./view-common.js";
|
|
7
7
|
class SelectionProxyHandler {
|
|
8
8
|
static [entityKind] = "SelectionProxyHandler";
|
|
@@ -11,11 +11,11 @@ class SelectionProxyHandler {
|
|
|
11
11
|
this.config = { ...config };
|
|
12
12
|
}
|
|
13
13
|
get(subquery, prop) {
|
|
14
|
-
if (prop ===
|
|
14
|
+
if (prop === "_") {
|
|
15
15
|
return {
|
|
16
|
-
...subquery[
|
|
17
|
-
|
|
18
|
-
subquery
|
|
16
|
+
...subquery["_"],
|
|
17
|
+
selectedFields: new Proxy(
|
|
18
|
+
subquery._.selectedFields,
|
|
19
19
|
this
|
|
20
20
|
)
|
|
21
21
|
};
|
|
@@ -32,7 +32,7 @@ class SelectionProxyHandler {
|
|
|
32
32
|
if (typeof prop === "symbol") {
|
|
33
33
|
return subquery[prop];
|
|
34
34
|
}
|
|
35
|
-
const columns = is(subquery, Subquery) ? subquery
|
|
35
|
+
const columns = is(subquery, Subquery) ? subquery._.selectedFields : is(subquery, View) ? subquery[ViewBaseConfig].selectedFields : subquery;
|
|
36
36
|
const value = columns[prop];
|
|
37
37
|
if (is(value, SQL.Aliased)) {
|
|
38
38
|
if (this.config.sqlAliasedBehavior === "sql" && !value.isSelectionField) {
|
package/selection-proxy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/selection-proxy.ts"],"sourcesContent":["import { ColumnAliasProxyHandler, TableAliasProxyHandler } from './alias.ts';\nimport { Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { SQL, View } from './sql/sql.ts';\nimport { Subquery
|
|
1
|
+
{"version":3,"sources":["../src/selection-proxy.ts"],"sourcesContent":["import { ColumnAliasProxyHandler, TableAliasProxyHandler } from './alias.ts';\nimport { Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { SQL, View } from './sql/sql.ts';\nimport { Subquery } from './subquery.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\nexport class SelectionProxyHandler<T extends Subquery | Record<string, unknown> | View>\n\timplements ProxyHandler<Subquery | Record<string, unknown> | View>\n{\n\tstatic readonly [entityKind]: string = 'SelectionProxyHandler';\n\n\tprivate config: {\n\t\t/**\n\t\t * Table alias for the columns\n\t\t */\n\t\talias?: string;\n\t\t/**\n\t\t * What to do when a field is an instance of `SQL.Aliased` and it's not a selection field (from a subquery)\n\t\t *\n\t\t * `sql` - return the underlying SQL expression\n\t\t *\n\t\t * `alias` - return the field alias\n\t\t */\n\t\tsqlAliasedBehavior: 'sql' | 'alias';\n\t\t/**\n\t\t * What to do when a field is an instance of `SQL` and it doesn't have an alias declared\n\t\t *\n\t\t * `sql` - return the underlying SQL expression\n\t\t *\n\t\t * `error` - return a DrizzleTypeError on type level and throw an error on runtime\n\t\t */\n\t\tsqlBehavior: 'sql' | 'error';\n\n\t\t/**\n\t\t * Whether to replace the original name of the column with the alias\n\t\t * Should be set to `true` for views creation\n\t\t * @default false\n\t\t */\n\t\treplaceOriginalName?: boolean;\n\t};\n\n\tconstructor(config: SelectionProxyHandler<T>['config']) {\n\t\tthis.config = { ...config };\n\t}\n\n\tget(subquery: T, prop: string | symbol): any {\n\t\tif (prop === '_') {\n\t\t\treturn {\n\t\t\t\t...subquery['_' as keyof typeof subquery],\n\t\t\t\tselectedFields: new Proxy(\n\t\t\t\t\t(subquery as Subquery)._.selectedFields,\n\t\t\t\t\tthis as ProxyHandler<Record<string, unknown>>,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\tif (prop === ViewBaseConfig) {\n\t\t\treturn {\n\t\t\t\t...subquery[ViewBaseConfig as keyof typeof subquery],\n\t\t\t\tselectedFields: new Proxy(\n\t\t\t\t\t(subquery as View)[ViewBaseConfig].selectedFields,\n\t\t\t\t\tthis as ProxyHandler<Record<string, unknown>>,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\tif (typeof prop === 'symbol') {\n\t\t\treturn subquery[prop as keyof typeof subquery];\n\t\t}\n\n\t\tconst columns = is(subquery, Subquery)\n\t\t\t? subquery._.selectedFields\n\t\t\t: is(subquery, View)\n\t\t\t? subquery[ViewBaseConfig].selectedFields\n\t\t\t: subquery;\n\t\tconst value: unknown = columns[prop as keyof typeof columns];\n\n\t\tif (is(value, SQL.Aliased)) {\n\t\t\t// Never return the underlying SQL expression for a field previously selected in a subquery\n\t\t\tif (this.config.sqlAliasedBehavior === 'sql' && !value.isSelectionField) {\n\t\t\t\treturn value.sql;\n\t\t\t}\n\n\t\t\tconst newValue = value.clone();\n\t\t\tnewValue.isSelectionField = true;\n\t\t\treturn newValue;\n\t\t}\n\n\t\tif (is(value, SQL)) {\n\t\t\tif (this.config.sqlBehavior === 'sql') {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tthrow new Error(\n\t\t\t\t`You tried to reference \"${prop}\" field from a subquery, which is a raw SQL field, but it doesn't have an alias declared. Please add an alias to the field using \".as('alias')\" method.`,\n\t\t\t);\n\t\t}\n\n\t\tif (is(value, Column)) {\n\t\t\tif (this.config.alias) {\n\t\t\t\treturn new Proxy(\n\t\t\t\t\tvalue,\n\t\t\t\t\tnew ColumnAliasProxyHandler(\n\t\t\t\t\t\tnew Proxy(\n\t\t\t\t\t\t\tvalue.table,\n\t\t\t\t\t\t\tnew TableAliasProxyHandler(this.config.alias, this.config.replaceOriginalName ?? false),\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\treturn value;\n\t\t}\n\n\t\tif (typeof value !== 'object' || value === null) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn new Proxy(value, new SelectionProxyHandler(this.config));\n\t}\n}\n"],"mappings":"AAAA,SAAS,yBAAyB,8BAA8B;AAChE,SAAS,cAAc;AACvB,SAAS,YAAY,UAAU;AAC/B,SAAS,KAAK,YAAY;AAC1B,SAAS,gBAAgB;AACzB,SAAS,sBAAsB;AAExB,MAAM,sBAEb;AAAA,EACC,QAAiB,UAAU,IAAY;AAAA,EAE/B;AAAA,EA8BR,YAAY,QAA4C;AACvD,SAAK,SAAS,EAAE,GAAG,OAAO;AAAA,EAC3B;AAAA,EAEA,IAAI,UAAa,MAA4B;AAC5C,QAAI,SAAS,KAAK;AACjB,aAAO;AAAA,QACN,GAAG,SAAS,GAA4B;AAAA,QACxC,gBAAgB,IAAI;AAAA,UAClB,SAAsB,EAAE;AAAA,UACzB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,QAAI,SAAS,gBAAgB;AAC5B,aAAO;AAAA,QACN,GAAG,SAAS,cAAuC;AAAA,QACnD,gBAAgB,IAAI;AAAA,UAClB,SAAkB,cAAc,EAAE;AAAA,UACnC;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,QAAI,OAAO,SAAS,UAAU;AAC7B,aAAO,SAAS,IAA6B;AAAA,IAC9C;AAEA,UAAM,UAAU,GAAG,UAAU,QAAQ,IAClC,SAAS,EAAE,iBACX,GAAG,UAAU,IAAI,IACjB,SAAS,cAAc,EAAE,iBACzB;AACH,UAAM,QAAiB,QAAQ,IAA4B;AAE3D,QAAI,GAAG,OAAO,IAAI,OAAO,GAAG;AAE3B,UAAI,KAAK,OAAO,uBAAuB,SAAS,CAAC,MAAM,kBAAkB;AACxE,eAAO,MAAM;AAAA,MACd;AAEA,YAAM,WAAW,MAAM,MAAM;AAC7B,eAAS,mBAAmB;AAC5B,aAAO;AAAA,IACR;AAEA,QAAI,GAAG,OAAO,GAAG,GAAG;AACnB,UAAI,KAAK,OAAO,gBAAgB,OAAO;AACtC,eAAO;AAAA,MACR;AAEA,YAAM,IAAI;AAAA,QACT,2BAA2B,IAAI;AAAA,MAChC;AAAA,IACD;AAEA,QAAI,GAAG,OAAO,MAAM,GAAG;AACtB,UAAI,KAAK,OAAO,OAAO;AACtB,eAAO,IAAI;AAAA,UACV;AAAA,UACA,IAAI;AAAA,YACH,IAAI;AAAA,cACH,MAAM;AAAA,cACN,IAAI,uBAAuB,KAAK,OAAO,OAAO,KAAK,OAAO,uBAAuB,KAAK;AAAA,YACvF;AAAA,UACD;AAAA,QACD;AAAA,MACD;AACA,aAAO;AAAA,IACR;AAEA,QAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAChD,aAAO;AAAA,IACR;AAEA,WAAO,IAAI,MAAM,OAAO,IAAI,sBAAsB,KAAK,MAAM,CAAC;AAAA,EAC/D;AACD;","names":[]}
|
package/sql/sql.cjs
CHANGED
|
@@ -175,14 +175,14 @@ class SQL {
|
|
|
175
175
|
return { sql: escapeName(chunk.fieldAlias), params: [] };
|
|
176
176
|
}
|
|
177
177
|
if ((0, import_entity.is)(chunk, import_subquery.Subquery)) {
|
|
178
|
-
if (chunk
|
|
179
|
-
return { sql: escapeName(chunk
|
|
178
|
+
if (chunk._.isWith) {
|
|
179
|
+
return { sql: escapeName(chunk._.alias), params: [] };
|
|
180
180
|
}
|
|
181
181
|
return this.buildQueryFromSourceParams([
|
|
182
182
|
new StringChunk("("),
|
|
183
|
-
chunk
|
|
183
|
+
chunk._.sql,
|
|
184
184
|
new StringChunk(") "),
|
|
185
|
-
new Name(chunk
|
|
185
|
+
new Name(chunk._.alias)
|
|
186
186
|
], config);
|
|
187
187
|
}
|
|
188
188
|
if ((0, import_enum.isPgEnum)(chunk)) {
|