pqb 0.40.9 → 0.40.11

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/dist/index.mjs CHANGED
@@ -1775,8 +1775,24 @@ const columnToSqlWithAs = (ctx, data, column, as, quotedAs, select) => {
1775
1775
  const tableColumnToSqlWithAs = (ctx, data, column, table, key, as, quotedAs, select) => {
1776
1776
  var _a, _b, _c;
1777
1777
  if (key === "*") {
1778
- if ((_a = data.joinedShapes) == null ? void 0 : _a[table]) {
1779
- return select ? `row_to_json("${table}".*) "${as}"` : `"${table}".r "${as}"`;
1778
+ const shape = (_a = data.joinedShapes) == null ? void 0 : _a[table];
1779
+ if (shape) {
1780
+ if (select) {
1781
+ let isSimple = true;
1782
+ const list = [];
1783
+ for (const key2 in shape) {
1784
+ const column2 = shape[key2];
1785
+ if (column2.data.explicitSelect || column2 instanceof VirtualColumn) {
1786
+ continue;
1787
+ }
1788
+ if (column2.data.name) {
1789
+ isSimple = false;
1790
+ }
1791
+ list.push(`'${key2}'`, `"${table}"."${column2.data.name || key2}"`);
1792
+ }
1793
+ return (isSimple ? `row_to_json("${table}".*)` : "json_build_object(" + list.join(", ") + ")") + ` "${as}"`;
1794
+ }
1795
+ return `"${table}".r "${as}"`;
1780
1796
  }
1781
1797
  return column;
1782
1798
  }
@@ -1896,8 +1912,10 @@ class QueryError extends OrchidOrmInternalError {
1896
1912
  const list = (_a = this.detail.match(/\((.*)\)=/)) == null ? void 0 : _a[1];
1897
1913
  if (list) {
1898
1914
  list.split(", ").forEach((item) => {
1915
+ var _a2;
1899
1916
  const column = item.startsWith('"') ? item.slice(1, -1) : item;
1900
- columns[column] = true;
1917
+ const key = (_a2 = this.query.columnNameToKey(column)) != null ? _a2 : column;
1918
+ columns[key] = true;
1901
1919
  });
1902
1920
  }
1903
1921
  }
@@ -1947,6 +1965,17 @@ const throwIfNoWhere = (q, method) => {
1947
1965
  );
1948
1966
  }
1949
1967
  };
1968
+ const throwIfJoinLateral = (q, method) => {
1969
+ var _a;
1970
+ if ((_a = q.q.join) == null ? void 0 : _a.some(
1971
+ (x) => Array.isArray(x) || "s" in x.args && x.args.s
1972
+ )) {
1973
+ throw new OrchidOrmInternalError(
1974
+ q,
1975
+ `Cannot join a complex query in ${method}`
1976
+ );
1977
+ }
1978
+ };
1950
1979
  const saveSearchAlias = (q, as, key) => {
1951
1980
  const shapes = q.q[key];
1952
1981
  if (shapes == null ? void 0 : shapes[as]) {
@@ -2576,6 +2605,13 @@ const processJoinArgs = (joinTo, first, args, joinSubQuery, whereExists) => {
2576
2605
  s: joinSubQuery
2577
2606
  };
2578
2607
  };
2608
+ const preprocessJoinArg = (q, arg) => {
2609
+ if (typeof arg !== "function")
2610
+ return arg;
2611
+ arg = arg(q.relations);
2612
+ arg.joinQueryAfterCallback = arg.joinQuery;
2613
+ return arg;
2614
+ };
2579
2615
  const makeJoinQueryBuilder = (joinedQuery, joinedShapes, joinTo) => {
2580
2616
  const q = joinedQuery.baseQuery.clone();
2581
2617
  q.baseQuery = q;
@@ -2638,24 +2674,21 @@ const _join = (query, require2, type, first, args) => {
2638
2674
  let batchParsers;
2639
2675
  let computeds;
2640
2676
  let joinSubQuery = false;
2641
- if (typeof first === "function") {
2642
- first = first(query.relations);
2643
- first.joinQueryAfterCallback = first.joinQuery;
2644
- }
2677
+ first = preprocessJoinArg(query, first);
2645
2678
  if (typeof first === "object") {
2646
2679
  if (require2 && isQueryNone(first)) {
2647
2680
  return _queryNone(query);
2648
2681
  }
2649
- const q = first;
2650
- joinSubQuery = getIsJoinSubQuery(q);
2651
- joinKey = q.q.as || q.table;
2682
+ const q2 = first;
2683
+ joinSubQuery = getIsJoinSubQuery(q2);
2684
+ joinKey = q2.q.as || q2.table;
2652
2685
  if (joinKey) {
2653
- shape = getShapeFromSelect(q, joinSubQuery);
2654
- parsers = q.q.parsers;
2655
- batchParsers = q.q.batchParsers;
2656
- computeds = q.q.computeds;
2686
+ shape = getShapeFromSelect(q2, joinSubQuery && !!q2.q.select);
2687
+ parsers = q2.q.parsers;
2688
+ batchParsers = q2.q.batchParsers;
2689
+ computeds = q2.q.computeds;
2657
2690
  if (joinSubQuery) {
2658
- first = q.clone();
2691
+ first = q2.clone();
2659
2692
  first.shape = shape;
2660
2693
  }
2661
2694
  }
@@ -2738,10 +2771,14 @@ const _join = (query, require2, type, first, args) => {
2738
2771
  computeds
2739
2772
  );
2740
2773
  }
2741
- return pushQueryValue(query, "join", {
2774
+ const q = pushQueryValue(query, "join", {
2742
2775
  type,
2743
2776
  args: joinArgs
2744
2777
  });
2778
+ if (query.q.type === "delete") {
2779
+ throwIfJoinLateral(q, query.q.type);
2780
+ }
2781
+ return q;
2745
2782
  };
2746
2783
  const addAllShapesAndParsers = (query, joinKey, shape, parsers, batchParsers, computeds) => {
2747
2784
  var _a, _b;
@@ -3545,7 +3582,9 @@ const applyComputedColumns = (q, fn) => {
3545
3582
  if (item instanceof ComputedColumn) {
3546
3583
  q.q.computeds = __spreadProps$5(__spreadValues$e({}, q.q.computeds), { [key]: item });
3547
3584
  } else {
3548
- (q.shape[key] = item.result.value || UnknownColumn.instance).data.computed = item;
3585
+ const data = (q.shape[key] = item.result.value || UnknownColumn.instance).data;
3586
+ data.computed = item;
3587
+ data.explicitSelect = true;
3549
3588
  }
3550
3589
  }
3551
3590
  q.computeAtRuntime = q.computeBatchAtRuntime = void 0;
@@ -3960,6 +3999,16 @@ const then = async (q, adapter, trx, beforeHooks, afterHooks, afterCommitHooks,
3960
3999
  error.cause = localError;
3961
4000
  }
3962
4001
  }
4002
+ const stack = localError.stack;
4003
+ if (stack) {
4004
+ const from = stack.indexOf("\n");
4005
+ if (from !== -1) {
4006
+ const to = stack.indexOf("\n", from + 1);
4007
+ if (to !== -1) {
4008
+ localError.stack = stack.slice(0, from) + stack.slice(to);
4009
+ }
4010
+ }
4011
+ }
3963
4012
  if (log && sql) {
3964
4013
  log.onError(error, sql, logData);
3965
4014
  }
@@ -5771,7 +5820,7 @@ const processValue = (ctx, table, QueryClass, key, value, quotedAs) => {
5771
5820
  };
5772
5821
 
5773
5822
  const pushDeleteSql = (ctx, table, query, quotedAs) => {
5774
- var _a, _b, _c, _d;
5823
+ var _a, _b, _c;
5775
5824
  const from = `"${table.table}"`;
5776
5825
  ctx.sql.push(`DELETE FROM ${from}`);
5777
5826
  if (from !== quotedAs) {
@@ -5783,27 +5832,16 @@ const pushDeleteSql = (ctx, table, query, quotedAs) => {
5783
5832
  const ons = [];
5784
5833
  const joinSet = query.join.length > 1 ? /* @__PURE__ */ new Set() : null;
5785
5834
  for (const item of query.join) {
5786
- if (Array.isArray(item)) {
5787
- const q = item[1];
5788
- const { aliasValue } = ctx;
5789
- ctx.aliasValue = true;
5790
- const as = item[2];
5791
- targets.push(
5792
- `LATERAL (${getSqlText(q.toSQL(ctx))}) "${((_b = query.joinOverrides) == null ? void 0 : _b[as]) || as}"`
5793
- );
5794
- ctx.aliasValue = aliasValue;
5795
- } else {
5796
- const join = processJoinItem(ctx, table, query, item.args, quotedAs);
5797
- const key = `${join.target}${join.on}`;
5798
- if (joinSet) {
5799
- if (joinSet.has(key))
5800
- continue;
5801
- joinSet.add(key);
5802
- }
5803
- targets.push(join.target);
5804
- if (join.on)
5805
- ons.push(join.on);
5835
+ const join = processJoinItem(ctx, table, query, item.args, quotedAs);
5836
+ const key = `${join.target}${join.on}`;
5837
+ if (joinSet) {
5838
+ if (joinSet.has(key))
5839
+ continue;
5840
+ joinSet.add(key);
5806
5841
  }
5842
+ targets.push(join.target);
5843
+ if (join.on)
5844
+ ons.push(join.on);
5807
5845
  }
5808
5846
  if (targets.length) {
5809
5847
  ctx.sql.push(`USING ${targets.join(", ")}`);
@@ -5812,7 +5850,7 @@ const pushDeleteSql = (ctx, table, query, quotedAs) => {
5812
5850
  }
5813
5851
  pushWhereStatementSql(ctx, table, query, quotedAs);
5814
5852
  if (conditions) {
5815
- if (((_c = query.and) == null ? void 0 : _c.length) || ((_d = query.or) == null ? void 0 : _d.length) || query.scopes) {
5853
+ if (((_b = query.and) == null ? void 0 : _b.length) || ((_c = query.or) == null ? void 0 : _c.length) || query.scopes) {
5816
5854
  ctx.sql.push("AND", conditions);
5817
5855
  } else {
5818
5856
  ctx.sql.push("WHERE", conditions);
@@ -8192,6 +8230,7 @@ const _queryDelete = (query) => {
8192
8230
  q.returnType = "rowCount";
8193
8231
  }
8194
8232
  throwIfNoWhere(query, "delete");
8233
+ throwIfJoinLateral(query, "delete");
8195
8234
  q.type = "delete";
8196
8235
  return query;
8197
8236
  };
@@ -9812,7 +9851,13 @@ const _queryWhereIn = (q, and, arg, values, not) => {
9812
9851
  return q;
9813
9852
  };
9814
9853
  const existsArgs = (self, q, args) => {
9815
- const joinArgs = processJoinArgs(self, q, args, false, true);
9854
+ const joinArgs = processJoinArgs(
9855
+ self,
9856
+ preprocessJoinArg(self, q),
9857
+ args,
9858
+ false,
9859
+ true
9860
+ );
9816
9861
  return [
9817
9862
  {
9818
9863
  EXISTS: joinArgs
@@ -10455,6 +10500,10 @@ class Where {
10455
10500
  * // find by a relation name if it's defined
10456
10501
  * db.user.whereExists('account');
10457
10502
  *
10503
+ * // find users who have an account with positive balance
10504
+ * // `accounts` is a relation name
10505
+ * db.user.whereExists((q) => q.accounts.where({ balance: { gt: 0 } }));
10506
+ *
10458
10507
  * // find using a table and a join conditions
10459
10508
  * db.user.whereExists(db.account, 'account.id', 'user.id');
10460
10509
  *
@@ -12770,16 +12819,18 @@ class Db {
12770
12819
  applyComputedColumns(this, options.computed);
12771
12820
  if (prepareSelectAll) {
12772
12821
  const list = [];
12822
+ const keys = {};
12773
12823
  for (const key in shape) {
12774
12824
  const column = shape[key];
12775
12825
  if (!column.data.explicitSelect) {
12776
12826
  list.push(
12777
12827
  column.data.name ? `"${column.data.name}" AS "${key}"` : `"${key}"`
12778
12828
  );
12829
+ keys[key] = column;
12779
12830
  }
12780
12831
  }
12781
12832
  this.q.selectAllColumns = list;
12782
- this.q.selectAllKeys = __spreadValues({}, shape);
12833
+ this.q.selectAllKeys = keys;
12783
12834
  }
12784
12835
  if (modifyQuery) {
12785
12836
  for (const cb of modifyQuery) {
@@ -12872,6 +12923,23 @@ class Db {
12872
12923
  queryArrays(...args) {
12873
12924
  return performQuery(this, args, "arrays");
12874
12925
  }
12926
+ /**
12927
+ * In snake case mode, or when columns have custom names,
12928
+ * use this method to exchange a db column name to its runtime key.
12929
+ */
12930
+ columnNameToKey(name) {
12931
+ var _a;
12932
+ let map = this.internal.columnNameToKeyMap;
12933
+ if (!map) {
12934
+ this.internal.columnNameToKeyMap = map = /* @__PURE__ */ new Map();
12935
+ const { shape } = this;
12936
+ for (const key in this.shape) {
12937
+ const column = shape[key];
12938
+ map.set((_a = column.data.name) != null ? _a : key, key);
12939
+ }
12940
+ }
12941
+ return map.get(name);
12942
+ }
12875
12943
  }
12876
12944
  const performQuery = async (q, args, method) => {
12877
12945
  var _a;
@@ -13131,5 +13199,5 @@ function copyTableData(query, arg) {
13131
13199
  return q;
13132
13200
  }
13133
13201
 
13134
- export { Adapter, AfterCommitError, AggregateMethods, ArrayColumn, AsMethods, BigIntColumn, BigSerialColumn, BitColumn, BitVaryingColumn, BooleanColumn, BoxColumn, ByteaColumn, CidrColumn, CircleColumn, CitextColumn, Clear, ColumnRefExpression, ColumnType, ComputedColumn, Create, CustomTypeColumn, DateBaseColumn, DateColumn, DateTimeBaseClass, DateTimeTzBaseClass, Db, DecimalColumn, Delete, DomainColumn, DoublePrecisionColumn, DynamicRawSQL, EnumColumn, ExpressionMethods, FnExpression, For, FromMethods, Having, InetColumn, IntegerBaseColumn, IntegerColumn, IntervalColumn, JSONColumn, JSONTextColumn, Join, JsonMethods, LimitedTextBaseColumn, LineColumn, LsegColumn, MacAddr8Column, MacAddrColumn, MergeQueryMethods, MoneyColumn, MoreThanOneRowError, NotFoundError, NumberAsStringBaseColumn, NumberBaseColumn, OnConflictQueryBuilder, OnMethods, Operators, OrExpression, OrchidOrmError, OrchidOrmInternalError, PathColumn, PointColumn, PolygonColumn, PostgisGeographyPointColumn, QueryBase, QueryError, QueryGet, QueryHooks, QueryLog, QueryMethods, QueryUpsertOrCreate, RawSQL, RealColumn, RefExpression, SearchMethods, Select, SerialColumn, SmallIntColumn, SmallSerialColumn, SqlMethod, StringColumn, TextBaseColumn, TextColumn, Then, TimeColumn, TimestampColumn, TimestampTZColumn, Transaction, TransactionAdapter, TransformMethods, TsQueryColumn, TsVectorColumn, UUIDColumn, UnhandledTypeError, Union, UnknownColumn, Update, VarCharColumn, VirtualColumn, Where, WithMethods, XMLColumn, _afterCommitError, _getSelectableColumn, _initQueryBuilder, _queryAfterSaveCommit, _queryAll, _queryAs, _queryChangeCounter, _queryCreate, _queryCreateFrom, _queryCreateMany, _queryCreateManyFrom, _queryCreateManyRaw, _queryCreateRaw, _queryDefaults, _queryDelete, _queryExec, _queryFindBy, _queryFindByOptional, _queryGet, _queryGetOptional, _queryHookAfterCreate, _queryHookAfterCreateCommit, _queryHookAfterDelete, _queryHookAfterDeleteCommit, _queryHookAfterQuery, _queryHookAfterSave, _queryHookAfterUpdate, _queryHookAfterUpdateCommit, _queryHookBeforeCreate, _queryHookBeforeDelete, _queryHookBeforeQuery, _queryHookBeforeSave, _queryHookBeforeUpdate, _queryInsert, _queryInsertFrom, _queryInsertMany, _queryInsertManyFrom, _queryInsertManyRaw, _queryInsertRaw, _queryJoinOn, _queryJoinOnJsonPathEquals, _queryJoinOrOn, _queryOr, _queryOrNot, _queryRows, _querySelect, _queryTake, _queryTakeOptional, _queryUnion, _queryUpdate, _queryUpdateOrThrow, _queryUpdateRaw, _queryWhere, _queryWhereExists, _queryWhereIn, _queryWhereNot, _queryWhereNotOneOf, _queryWhereNotSql, _queryWhereOneOf, _queryWhereSql, addParserForRawExpression, addParserForSelectItem, addQueryOn, anyShape, applyComputedColumns, checkIfASimpleQuery, cloneQuery, cloneQueryBaseUnscoped, columnCheckToCode, columnCode, columnForeignKeysToCode, columnIndexesToCode, columnsShapeToCode, commitSql$1 as commitSql, constraintInnerToCode, constraintToCode, copyTableData, countSelect, createDb, defaultSchemaConfig, escapeForLog, escapeForMigration, escapeString, extendQuery, filterResult, foreignKeyArgumentToCode, getClonedQueryData, getColumnInfo, getColumnTypes, getPrimaryKeys, getQueryAs, getShapeFromSelect, getSqlText, handleResult, identityToCode, indexInnerToCode, indexToCode, instantiateColumn, isDefaultTimeStamp, isQueryReturnsAll, isSelectingCount, joinSubQuery, logParamToLogObject, makeColumnTypes, makeColumnsByType, makeFnExpression, makeRegexToFindInSql, makeSQL, parseRecord, parseTableData, parseTableDataInput, postgisTypmodToSql, primaryKeyInnerToCode, processComputedBatches, processComputedResult, processSelectArg, pushLimitSQL, pushQueryArray, pushQueryOn, pushQueryOnForOuter, pushQueryOrOn, pushQueryValue, pushTableDataCode, queryFrom, queryFromSql, queryJson, queryMethodByReturnType, queryTypeWithLimitOne, queryWrap, raw, referencesArgsToCode, resolveSubQueryCallback, rollbackSql$1 as rollbackSql, saveSearchAlias, setParserForSelectedString, setQueryObjectValue, setQueryOperators, simplifyColumnDefault, sqlFn, sqlQueryArgsToExpression, tableDataMethods, templateLiteralToSQL, testTransaction, throwIfNoWhere, toSQL, toSQLCacheKey };
13202
+ export { Adapter, AfterCommitError, AggregateMethods, ArrayColumn, AsMethods, BigIntColumn, BigSerialColumn, BitColumn, BitVaryingColumn, BooleanColumn, BoxColumn, ByteaColumn, CidrColumn, CircleColumn, CitextColumn, Clear, ColumnRefExpression, ColumnType, ComputedColumn, Create, CustomTypeColumn, DateBaseColumn, DateColumn, DateTimeBaseClass, DateTimeTzBaseClass, Db, DecimalColumn, Delete, DomainColumn, DoublePrecisionColumn, DynamicRawSQL, EnumColumn, ExpressionMethods, FnExpression, For, FromMethods, Having, InetColumn, IntegerBaseColumn, IntegerColumn, IntervalColumn, JSONColumn, JSONTextColumn, Join, JsonMethods, LimitedTextBaseColumn, LineColumn, LsegColumn, MacAddr8Column, MacAddrColumn, MergeQueryMethods, MoneyColumn, MoreThanOneRowError, NotFoundError, NumberAsStringBaseColumn, NumberBaseColumn, OnConflictQueryBuilder, OnMethods, Operators, OrExpression, OrchidOrmError, OrchidOrmInternalError, PathColumn, PointColumn, PolygonColumn, PostgisGeographyPointColumn, QueryBase, QueryError, QueryGet, QueryHooks, QueryLog, QueryMethods, QueryUpsertOrCreate, RawSQL, RealColumn, RefExpression, SearchMethods, Select, SerialColumn, SmallIntColumn, SmallSerialColumn, SqlMethod, StringColumn, TextBaseColumn, TextColumn, Then, TimeColumn, TimestampColumn, TimestampTZColumn, Transaction, TransactionAdapter, TransformMethods, TsQueryColumn, TsVectorColumn, UUIDColumn, UnhandledTypeError, Union, UnknownColumn, Update, VarCharColumn, VirtualColumn, Where, WithMethods, XMLColumn, _afterCommitError, _getSelectableColumn, _initQueryBuilder, _queryAfterSaveCommit, _queryAll, _queryAs, _queryChangeCounter, _queryCreate, _queryCreateFrom, _queryCreateMany, _queryCreateManyFrom, _queryCreateManyRaw, _queryCreateRaw, _queryDefaults, _queryDelete, _queryExec, _queryFindBy, _queryFindByOptional, _queryGet, _queryGetOptional, _queryHookAfterCreate, _queryHookAfterCreateCommit, _queryHookAfterDelete, _queryHookAfterDeleteCommit, _queryHookAfterQuery, _queryHookAfterSave, _queryHookAfterUpdate, _queryHookAfterUpdateCommit, _queryHookBeforeCreate, _queryHookBeforeDelete, _queryHookBeforeQuery, _queryHookBeforeSave, _queryHookBeforeUpdate, _queryInsert, _queryInsertFrom, _queryInsertMany, _queryInsertManyFrom, _queryInsertManyRaw, _queryInsertRaw, _queryJoinOn, _queryJoinOnJsonPathEquals, _queryJoinOrOn, _queryOr, _queryOrNot, _queryRows, _querySelect, _queryTake, _queryTakeOptional, _queryUnion, _queryUpdate, _queryUpdateOrThrow, _queryUpdateRaw, _queryWhere, _queryWhereExists, _queryWhereIn, _queryWhereNot, _queryWhereNotOneOf, _queryWhereNotSql, _queryWhereOneOf, _queryWhereSql, addParserForRawExpression, addParserForSelectItem, addQueryOn, anyShape, applyComputedColumns, checkIfASimpleQuery, cloneQuery, cloneQueryBaseUnscoped, columnCheckToCode, columnCode, columnForeignKeysToCode, columnIndexesToCode, columnsShapeToCode, commitSql$1 as commitSql, constraintInnerToCode, constraintToCode, copyTableData, countSelect, createDb, defaultSchemaConfig, escapeForLog, escapeForMigration, escapeString, extendQuery, filterResult, foreignKeyArgumentToCode, getClonedQueryData, getColumnInfo, getColumnTypes, getPrimaryKeys, getQueryAs, getShapeFromSelect, getSqlText, handleResult, identityToCode, indexInnerToCode, indexToCode, instantiateColumn, isDefaultTimeStamp, isQueryReturnsAll, isSelectingCount, joinSubQuery, logParamToLogObject, makeColumnTypes, makeColumnsByType, makeFnExpression, makeRegexToFindInSql, makeSQL, parseRecord, parseTableData, parseTableDataInput, postgisTypmodToSql, primaryKeyInnerToCode, processComputedBatches, processComputedResult, processSelectArg, pushLimitSQL, pushQueryArray, pushQueryOn, pushQueryOnForOuter, pushQueryOrOn, pushQueryValue, pushTableDataCode, queryFrom, queryFromSql, queryJson, queryMethodByReturnType, queryTypeWithLimitOne, queryWrap, raw, referencesArgsToCode, resolveSubQueryCallback, rollbackSql$1 as rollbackSql, saveSearchAlias, setParserForSelectedString, setQueryObjectValue, setQueryOperators, simplifyColumnDefault, sqlFn, sqlQueryArgsToExpression, tableDataMethods, templateLiteralToSQL, testTransaction, throwIfJoinLateral, throwIfNoWhere, toSQL, toSQLCacheKey };
13135
13203
  //# sourceMappingURL=index.mjs.map