pqb 0.44.0 → 0.45.0

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
@@ -3385,6 +3385,11 @@ const pushQueryValue = (q, key, value) => {
3385
3385
  );
3386
3386
  return q;
3387
3387
  };
3388
+ const pushQueryValueImmutable = (q, key, value) => {
3389
+ const arr = q.q[key];
3390
+ q.q[key] = arr ? [...arr, value] : [value];
3391
+ return q;
3392
+ };
3388
3393
  const setQueryObjectValue = (q, object, key, value) => {
3389
3394
  if (!q.q[object])
3390
3395
  q.q[object] = {
@@ -5263,7 +5268,7 @@ const processSelectArg = (q, as, arg, columnAs) => {
5263
5268
  return { selectAs };
5264
5269
  };
5265
5270
  const setParserForSelectedString = (q, arg, as, columnAs) => {
5266
- var _a, _b;
5271
+ var _a;
5267
5272
  const index = arg.indexOf(".");
5268
5273
  if (index !== -1) {
5269
5274
  const table = getFullColumnTable(q, arg, index, as);
@@ -5292,7 +5297,7 @@ const setParserForSelectedString = (q, arg, as, columnAs) => {
5292
5297
  const computeds = q.q.joinedComputeds?.[table];
5293
5298
  if (computeds?.[column]) {
5294
5299
  const computed = computeds[column];
5295
- const map = (_b = q.q).hookSelect ?? (_b.hookSelect = /* @__PURE__ */ new Map());
5300
+ const map = q.q.hookSelect = new Map(q.q.hookSelect);
5296
5301
  for (const column2 of computed.deps) {
5297
5302
  map.set(column2, { select: `${table}.${column2}` });
5298
5303
  }
@@ -5312,10 +5317,9 @@ const setParserForSelectedString = (q, arg, as, columnAs) => {
5312
5317
  }
5313
5318
  };
5314
5319
  const handleComputed = (q, computeds, column) => {
5315
- var _a;
5316
5320
  if (computeds?.[column]) {
5317
5321
  const computed = computeds[column];
5318
- const map = (_a = q.q).hookSelect ?? (_a.hookSelect = /* @__PURE__ */ new Map());
5322
+ const map = q.q.hookSelect = new Map(q.q.hookSelect);
5319
5323
  for (const column2 of computed.deps) {
5320
5324
  map.set(column2, { select: column2 });
5321
5325
  }
@@ -6658,16 +6662,15 @@ const pushCopySql = (ctx, table, query, quotedAs) => {
6658
6662
  pushWhereStatementSql(ctx, table, query, quotedAs);
6659
6663
  };
6660
6664
 
6661
- const toSQLCacheKey = Symbol("toSQLCache");
6662
6665
  const toSQL = (table, options) => {
6663
- if (table.q[toSQLCacheKey] && !options?.clearCache) {
6664
- const cached = table.q[toSQLCacheKey];
6666
+ if (table.q.sqlCache && !options?.clearCache) {
6667
+ const cached = table.q.sqlCache;
6665
6668
  if (options?.values && "values" in cached && cached.values && options.values !== cached.values) {
6666
6669
  options.values.push(...cached.values);
6667
6670
  }
6668
6671
  return cached;
6669
6672
  }
6670
- return table.q[toSQLCacheKey] = makeSQL(table, options);
6673
+ return table.q.sqlCache = makeSQL(table, options);
6671
6674
  };
6672
6675
  const makeSQL = (table, options) => {
6673
6676
  const query = table.q;
@@ -6802,11 +6805,8 @@ function pushLimitSQL(sql, values, q) {
6802
6805
  const cloneQuery = (q) => {
6803
6806
  if (q.with) q.with = q.with.slice(0);
6804
6807
  if (q.select) q.select = q.select.slice(0);
6805
- if (q.hookSelect) q.hookSelect = new Map(q.hookSelect);
6806
6808
  if (q.and) q.and = q.and.slice(0);
6807
6809
  if (q.or) q.or = q.or.slice(0);
6808
- if (q.before) q.before = q.before.slice(0);
6809
- if (q.after) q.after = q.after.slice(0);
6810
6810
  if (q.joinedShapes) q.joinedShapes = { ...q.joinedShapes };
6811
6811
  if (q.joinedComputeds) q.joinedComputeds = { ...q.joinedComputeds };
6812
6812
  if (q.batchParsers) q.batchParsers = [...q.batchParsers];
@@ -6831,29 +6831,6 @@ const cloneQuery = (q) => {
6831
6831
  q.values = Array.isArray(q.values) ? q.values.slice(0) : q.values;
6832
6832
  if (q.using) q.using = q.using.slice(0);
6833
6833
  if (q.join) q.join = q.join.slice(0);
6834
- if (q.beforeCreate) q.beforeCreate = q.beforeCreate.slice(0);
6835
- if (q.afterCreate) {
6836
- q.afterCreate = q.afterCreate.slice(0);
6837
- if (q.afterCreateSelect) {
6838
- q.afterCreateSelect = new Set(q.afterCreateSelect);
6839
- }
6840
- }
6841
- } else if (q.type === "update") {
6842
- if (q.beforeUpdate) q.beforeUpdate = q.beforeUpdate.slice(0);
6843
- if (q.afterUpdate) {
6844
- q.afterUpdate = q.afterUpdate.slice(0);
6845
- if (q.afterUpdateSelect) {
6846
- q.afterUpdateSelect = new Set(q.afterUpdateSelect);
6847
- }
6848
- }
6849
- } else if (q.type === "delete") {
6850
- if (q.beforeDelete) q.beforeDelete = q.beforeDelete.slice(0);
6851
- if (q.afterDelete) {
6852
- q.afterDelete = q.afterDelete.slice(0);
6853
- if (q.afterDeleteSelect) {
6854
- q.afterDeleteSelect = new Set(q.afterDeleteSelect);
6855
- }
6856
- }
6857
6834
  }
6858
6835
  };
6859
6836
 
@@ -6894,7 +6871,7 @@ const _chain = (fromQuery, toQuery, rel) => {
6894
6871
 
6895
6872
  const getClonedQueryData = (query) => {
6896
6873
  const cloned = { ...query };
6897
- delete cloned[toSQLCacheKey];
6874
+ delete cloned.sqlCache;
6898
6875
  cloneQuery(cloned);
6899
6876
  return cloned;
6900
6877
  };
@@ -9072,21 +9049,22 @@ class Having {
9072
9049
  }
9073
9050
  }
9074
9051
 
9075
- const before = (q, key, cb) => pushQueryValue(q, `before${key}`, cb);
9076
- const after = (q, key, select, cb, commit) => {
9077
- var _a, _b;
9078
- pushQueryValue(q, `after${key}${commit ? "Commit" : ""}`, cb);
9079
- const set = (_a = q.q)[_b = `after${key}Select`] ?? (_a[_b] = /* @__PURE__ */ new Set());
9052
+ const before = (q, key, cb) => pushQueryValueImmutable(q, `before${key}`, cb);
9053
+ const after = (query, key, select, cb, commit) => {
9054
+ const q = query;
9055
+ pushQueryValueImmutable(q, `after${key}${commit ? "Commit" : ""}`, cb);
9056
+ const prop = `after${key}Select`;
9057
+ const set = q.q[prop] = new Set(q.q[prop]);
9080
9058
  for (const column of select) {
9081
9059
  set.add(column);
9082
9060
  }
9083
- return q;
9061
+ return query;
9084
9062
  };
9085
9063
  const _queryHookBeforeQuery = (q, cb) => {
9086
- return pushQueryValue(q, "before", cb);
9064
+ return pushQueryValueImmutable(q, "before", cb);
9087
9065
  };
9088
9066
  const _queryHookAfterQuery = (q, cb) => {
9089
- return pushQueryValue(q, "after", cb);
9067
+ return pushQueryValueImmutable(q, "after", cb);
9090
9068
  };
9091
9069
  const _queryHookBeforeCreate = (q, cb) => {
9092
9070
  return before(q, "Create", cb);
@@ -11002,7 +10980,7 @@ function orCreate(query, data, updateData, mergeData) {
11002
10980
  q.handleResult = (q2, t, r, s) => {
11003
10981
  return created ? result : handleResult(q2, t, r, s);
11004
10982
  };
11005
- q.hookSelect ?? (q.hookSelect = /* @__PURE__ */ new Map());
10983
+ q.hookSelect = new Map(q.hookSelect);
11006
10984
  q.patchResult = async (q2, hookSelect, queryResult) => {
11007
10985
  var _a, _b;
11008
10986
  if (queryResult.rowCount === 0) {
@@ -12167,52 +12145,6 @@ class QueryMethods {
12167
12145
  none() {
12168
12146
  return _queryNone(this);
12169
12147
  }
12170
- /**
12171
- * `modify` allows modifying the query with your function:
12172
- *
12173
- * ```ts
12174
- * const doSomethingWithQuery = (q: typeof db.table) => {
12175
- * // can use all query methods
12176
- * return q.select('name').where({ active: true }).order({ createdAt: 'DESC' });
12177
- * };
12178
- *
12179
- * const record = await db.table.select('id').modify(doSomethingWithQuery).find(1);
12180
- *
12181
- * record.id; // id was selected before `modify`
12182
- * record.name; // name was selected by the function
12183
- * ```
12184
- *
12185
- * It's possible to apply different `select`s inside the function, and then the result type will be a union of all possibilities:
12186
- *
12187
- * Use this sparingly as it complicates dealing with the result.
12188
- *
12189
- * ```ts
12190
- * const doSomethingWithQuery = (q: typeof db.table) => {
12191
- * if (Math.random() > 0.5) {
12192
- * return q.select('one');
12193
- * } else {
12194
- * return q.select('two');
12195
- * }
12196
- * };
12197
- *
12198
- * const record = await db.table.modify(doSomethingWithQuery).find(1);
12199
- *
12200
- * // TS error: we don't know for sure if the `one` was selected.
12201
- * record.one;
12202
- *
12203
- * // use `in` operator to disambiguate the result type
12204
- * if ('one' in record) {
12205
- * record.one;
12206
- * } else {
12207
- * record.two;
12208
- * }
12209
- * ```
12210
- *
12211
- * @param fn - function to modify the query with. The result type will be merged with the main query as if the `merge` method was used.
12212
- */
12213
- modify(fn) {
12214
- return fn(this);
12215
- }
12216
12148
  /**
12217
12149
  * Use `makeHelper` to make a query helper - a function where you can modify the query, and reuse this function across different places.
12218
12150
  *
@@ -12274,6 +12206,65 @@ class QueryMethods {
12274
12206
  return fn(q, ...args);
12275
12207
  };
12276
12208
  }
12209
+ /**
12210
+ * `modify` allows modifying the query with helpers defined with {@link makeHelper}:
12211
+ *
12212
+ * ```ts
12213
+ * const helper = db.table.makeHelper((q) => {
12214
+ * // all query methods are available
12215
+ * return q.select('name').where({ active: true }).order({ createdAt: 'DESC' });
12216
+ * });
12217
+ *
12218
+ * const record = await db.table.select('id').modify(helper).find(1);
12219
+ *
12220
+ * record.id; // id was selected before `modify`
12221
+ * record.name; // name was selected by the function
12222
+ * ```
12223
+ *
12224
+ * When the helper result isn't certain, it will result in a union of all possibilities.
12225
+ * Use this sparingly as it complicates dealing with the result.
12226
+ *
12227
+ * ```ts
12228
+ * const helper = db.table((q) => {
12229
+ * if (Math.random() > 0.5) {
12230
+ * return q.select('one');
12231
+ * } else {
12232
+ * return q.select('two');
12233
+ * }
12234
+ * });
12235
+ *
12236
+ * const record = await db.table.modify(helper).find(1);
12237
+ *
12238
+ * // TS error: we don't know for sure if the `one` was selected.
12239
+ * record.one;
12240
+ *
12241
+ * // use `in` operator to disambiguate the result type
12242
+ * if ('one' in record) {
12243
+ * record.one;
12244
+ * } else {
12245
+ * record.two;
12246
+ * }
12247
+ * ```
12248
+ *
12249
+ * You can define and pass parameters:
12250
+ *
12251
+ * ```ts
12252
+ * const helper = db.table.makeHelper((q, select: 'id' | 'name') => {
12253
+ * return q.select(select);
12254
+ * });
12255
+ *
12256
+ * const record = await db.table.modify(helper, 'id').find(1);
12257
+ * // record has type { id: number } | { name: string }
12258
+ * if ('id' in record) {
12259
+ * record.id;
12260
+ * }
12261
+ * ```
12262
+ *
12263
+ * @param fn - function to modify the query with. The result type will be merged with the main query as if the `merge` method was used.
12264
+ */
12265
+ modify(fn, ...args) {
12266
+ return fn(this, ...args);
12267
+ }
12277
12268
  /**
12278
12269
  * Narrows a part of the query output type.
12279
12270
  * Use with caution, type-safety isn't guaranteed with it.
@@ -12911,5 +12902,5 @@ function copyTableData(query, arg) {
12911
12902
  return q;
12912
12903
  }
12913
12904
 
12914
- 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, 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, _clone, _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, _queryResolveAlias, _queryRows, _querySelect, _queryTake, _queryTakeOptional, _queryUnion, _queryUpdate, _queryUpdateOrThrow, _queryUpdateRaw, _queryWhere, _queryWhereExists, _queryWhereIn, _queryWhereNot, _queryWhereNotOneOf, _queryWhereNotSql, _queryWhereOneOf, _queryWhereSql, addColumnParserToQuery, addParserForRawExpression, addParserForSelectItem, addQueryOn, anyShape, applyComputedColumns, checkIfASimpleQuery, cloneQuery, cloneQueryBaseUnscoped, columnCheckToCode, columnCode, columnExcludesToCode, columnForeignKeysToCode, columnIndexesToCode, columnsShapeToCode, commitSql$1 as commitSql, constraintInnerToCode, constraintToCode, copyTableData, countSelect, createDb, defaultSchemaConfig, escapeForLog, escapeForMigration, escapeString, excludeInnerToCode, excludeToCode, extendQuery, filterResult, foreignKeyArgumentToCode, getClonedQueryData, getColumnInfo, getColumnTypes, getFullColumnTable, 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, resolveSubQueryCallbackV2, rollbackSql$1 as rollbackSql, saveSearchAlias, setColumnDefaultParse, setColumnEncode, setColumnParse, setColumnParseNull, setParserForSelectedString, setQueryObjectValue, setQueryOperators, simplifyColumnDefault, sqlFn, sqlQueryArgsToExpression, tableDataMethods, templateLiteralToSQL, testTransaction, throwIfJoinLateral, throwIfNoWhere, toSQL, toSQLCacheKey };
12905
+ 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, 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, _clone, _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, _queryResolveAlias, _queryRows, _querySelect, _queryTake, _queryTakeOptional, _queryUnion, _queryUpdate, _queryUpdateOrThrow, _queryUpdateRaw, _queryWhere, _queryWhereExists, _queryWhereIn, _queryWhereNot, _queryWhereNotOneOf, _queryWhereNotSql, _queryWhereOneOf, _queryWhereSql, addColumnParserToQuery, addParserForRawExpression, addParserForSelectItem, addQueryOn, anyShape, applyComputedColumns, checkIfASimpleQuery, cloneQuery, cloneQueryBaseUnscoped, columnCheckToCode, columnCode, columnExcludesToCode, columnForeignKeysToCode, columnIndexesToCode, columnsShapeToCode, commitSql$1 as commitSql, constraintInnerToCode, constraintToCode, copyTableData, countSelect, createDb, defaultSchemaConfig, escapeForLog, escapeForMigration, escapeString, excludeInnerToCode, excludeToCode, extendQuery, filterResult, foreignKeyArgumentToCode, getClonedQueryData, getColumnInfo, getColumnTypes, getFullColumnTable, 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, pushQueryValueImmutable, pushTableDataCode, queryFrom, queryFromSql, queryJson, queryMethodByReturnType, queryTypeWithLimitOne, queryWrap, raw, referencesArgsToCode, resolveSubQueryCallbackV2, rollbackSql$1 as rollbackSql, saveSearchAlias, setColumnDefaultParse, setColumnEncode, setColumnParse, setColumnParseNull, setParserForSelectedString, setQueryObjectValue, setQueryOperators, simplifyColumnDefault, sqlFn, sqlQueryArgsToExpression, tableDataMethods, templateLiteralToSQL, testTransaction, throwIfJoinLateral, throwIfNoWhere, toSQL };
12915
12906
  //# sourceMappingURL=index.mjs.map