pqb 0.38.3 → 0.38.5

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.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { PoolConfig, Pool, PoolClient } from 'pg';
2
2
  import * as orchid_core from 'orchid-core';
3
- import { QueryResultRow, AdapterConfigBase, AdapterBase, QueryInput, SingleSqlItem, Sql, RecordUnknown, RecordKeyTrue, EmptyObject, QueryBaseCommon, QueryColumns, QueryMetaBase, QueryReturnType, QueryThen, Expression, MaybeArray, TemplateLiteralArgs, QueryColumn, MaybePromise, FnUnknownToUnknown, RecordString, ColumnsShapeBase, ColumnsParsers, PickQueryTable, BatchParsers, HookSelect, QueryLogObject, QueryLogger, QueryDataTransform, ExpressionChain, getValueKey, PickQueryShape, PickQueryTableMetaResult, EmptyTuple, PickQueryMeta, PickQueryMetaResultReturnType, QueryColumnToNullable, SelectableBase, PickQueryMetaShape, PickQueryTableMetaResultShape, PickQueryMetaResultWindows, PickOutputTypeAndOperators, PickQueryResult, ExpressionData, ValExpression, PickOutputType, SQLQueryArgs, ColumnSchemaConfig, DateColumnData, ColumnToCodeCtx, Code, TimeInterval, ColumnTypeSchemaArg, ColumnDataBase, ArrayMethodsData, RawSQLBase, RawSQLValues, ExpressionTypeMethod, DynamicSQLArg, StaticSQLArgs, ForeignKeyTable, ColumnNameOfTable, BaseNumberData, PickColumnBaseData, ColumnWithDefault, StringTypeData, PrimaryKeyColumn, ParseColumn, EncodeColumn, QueryColumnsInit, QueryLogOptions, DefaultSelectColumns, DbBase, QueryCatch, TransactionState, ColumnTypeBase, PickQueryUniqueProperties, PickQueryMetaResult, IsQuery, PickQueryTableMetaResultInputType, PickQueryResultUniqueColumns, QueryInternalBase, PickQueryReturnType, PickType, ColumnShapeOutput, OperatorsNullable, PickQueryMetaReturnType, UniqueColumn, TimestampHelpers, Codes, ColumnDataCheckBase } from 'orchid-core';
3
+ import { QueryResultRow, AdapterConfigBase, AdapterBase, QueryInput, SingleSqlItem, Sql, RecordUnknown, RecordKeyTrue, EmptyObject, QueryBaseCommon, QueryColumns, QueryMetaBase, QueryReturnType, QueryThen, Expression, MaybeArray, TemplateLiteralArgs, QueryColumn, MaybePromise, FnUnknownToUnknown, RecordString, ColumnsShapeBase, ColumnsParsers, PickQueryTable, BatchParsers, HookSelect, QueryLogObject, QueryLogger, QueryDataTransform, ExpressionChain, PickQueryShape, PickQueryTableMetaResult, EmptyTuple, PickQueryMeta, PickQueryMetaResultReturnType, QueryColumnToNullable, SelectableBase, PickQueryMetaShape, PickQueryTableMetaResultShape, PickQueryMetaResultWindows, PickOutputTypeAndOperators, PickQueryResult, ExpressionData, ValExpression, PickOutputType, SQLQueryArgs, ColumnSchemaConfig, DateColumnData, ColumnToCodeCtx, Code, TimeInterval, ColumnTypeSchemaArg, ColumnDataBase, ArrayMethodsData, RawSQLBase, RawSQLValues, ExpressionTypeMethod, DynamicSQLArg, StaticSQLArgs, ForeignKeyTable, ColumnNameOfTable, BaseNumberData, PickColumnBaseData, ColumnWithDefault, StringTypeData, PrimaryKeyColumn, ParseColumn, EncodeColumn, QueryColumnsInit, QueryLogOptions, DefaultSelectColumns, DbBase, QueryCatch, TransactionState, ColumnTypeBase, PickQueryUniqueProperties, PickQueryMetaResult, IsQuery, PickQueryTableMetaResultInputType, getValueKey, PickQueryResultUniqueColumns, QueryInternalBase, PickQueryReturnType, PickType, ColumnShapeOutput, OperatorsNullable, PickQueryMetaReturnType, UniqueColumn, TimestampHelpers, Codes, ColumnDataCheckBase } from 'orchid-core';
4
4
  import { inspect } from 'node:util';
5
5
  import { AsyncLocalStorage } from 'node:async_hooks';
6
6
 
@@ -384,6 +384,11 @@ interface CommonQueryData {
384
384
  outerJoinOverrides?: JoinOverrides;
385
385
  schema?: string;
386
386
  select?: SelectItem[];
387
+ /**
388
+ * column type for query with 'value' or 'valueOrThrow' return type
389
+ * Is needed in {@link getShapeFromSelect} to get shape of sub-select that returns a single value.
390
+ */
391
+ getColumn?: QueryColumn;
387
392
  expr?: Expression;
388
393
  as?: string;
389
394
  from?: MaybeArray<QueryDataFromItem>;
@@ -454,7 +459,6 @@ interface SelectQueryData extends CommonQueryData {
454
459
  tableNames?: string[] | Expression;
455
460
  mode?: 'NO WAIT' | 'SKIP LOCKED';
456
461
  };
457
- [getValueKey]?: QueryColumn;
458
462
  }
459
463
  type CreateKind = 'object' | 'raw' | 'from';
460
464
  interface InsertQueryData extends CommonQueryData {
package/dist/index.js CHANGED
@@ -3278,18 +3278,7 @@ class Transaction {
3278
3278
  const result = await this.q.adapter.transaction(sql, callback);
3279
3279
  if (log)
3280
3280
  log.afterQuery(commitSql$1, logData);
3281
- const { afterCommit } = trx;
3282
- if (afterCommit) {
3283
- const promises = [];
3284
- for (let i = 0, len = afterCommit.length; i < len; i += 2) {
3285
- const q = afterCommit[i];
3286
- const result2 = afterCommit[i + 1];
3287
- for (const fn2 of afterCommit[i + 2]) {
3288
- promises.push(fn2(result2, q));
3289
- }
3290
- }
3291
- await Promise.all(promises);
3292
- }
3281
+ await runAfterCommit(trx.afterCommit);
3293
3282
  return result;
3294
3283
  } catch (err) {
3295
3284
  if (log)
@@ -3321,6 +3310,11 @@ class Transaction {
3321
3310
  await adapter.query(sql);
3322
3311
  if (log)
3323
3312
  log.afterQuery(sql, logData);
3313
+ if (transactionId === trx.testTransactionCount) {
3314
+ await runAfterCommit(
3315
+ trx.afterCommit
3316
+ );
3317
+ }
3324
3318
  return result;
3325
3319
  } finally {
3326
3320
  trx.transactionId = transactionId - 1;
@@ -3328,6 +3322,19 @@ class Transaction {
3328
3322
  }
3329
3323
  }
3330
3324
  }
3325
+ const runAfterCommit = async (afterCommit) => {
3326
+ if (afterCommit) {
3327
+ const promises = [];
3328
+ for (let i = 0, len = afterCommit.length; i < len; i += 3) {
3329
+ const result = afterCommit[i];
3330
+ const q = afterCommit[i + 1];
3331
+ for (const fn of afterCommit[i + 2]) {
3332
+ promises.push(fn(result, q));
3333
+ }
3334
+ }
3335
+ await Promise.all(promises);
3336
+ }
3337
+ };
3331
3338
 
3332
3339
  const applyBatchTransforms = (query, batches) => {
3333
3340
  if (query.transform) {
@@ -4002,19 +4009,19 @@ const filterResult = (q, returnType, queryResult, result, tempColumns, hasAfterH
4002
4009
  }
4003
4010
  }
4004
4011
  if (returnType === "value") {
4005
- return (_a = result[0]) == null ? void 0 : _a[queryResult.fields[0].name];
4012
+ return (_a = result[0]) == null ? void 0 : _a[getFirstResultKey(q, queryResult)];
4006
4013
  }
4007
4014
  if (returnType === "valueOrThrow") {
4008
4015
  const row = result[0];
4009
4016
  if (!row)
4010
4017
  throw new NotFoundError(q);
4011
- return row[queryResult.fields[0].name];
4018
+ return row[getFirstResultKey(q, queryResult)];
4012
4019
  }
4013
4020
  if (returnType === "rowCount") {
4014
4021
  return queryResult.rowCount;
4015
4022
  }
4016
4023
  if (returnType === "pluck") {
4017
- const key = queryResult.fields[0].name;
4024
+ const key = getFirstResultKey(q, queryResult);
4018
4025
  return result.map((row) => row[key]);
4019
4026
  }
4020
4027
  if (returnType === "rows") {
@@ -4023,6 +4030,16 @@ const filterResult = (q, returnType, queryResult, result, tempColumns, hasAfterH
4023
4030
  }
4024
4031
  return;
4025
4032
  };
4033
+ const getFirstResultKey = (q, queryResult) => {
4034
+ if (q.q.select) {
4035
+ return queryResult.fields[0].name;
4036
+ } else {
4037
+ for (const key in q.q.selectedComputeds) {
4038
+ return key;
4039
+ }
4040
+ }
4041
+ return;
4042
+ };
4026
4043
  const filterAllResult = (result, tempColumns, hasAfterHook) => {
4027
4044
  if (tempColumns == null ? void 0 : tempColumns.size) {
4028
4045
  if (hasAfterHook) {
@@ -4457,7 +4474,7 @@ const getShapeFromSelect = (q, isSubQuery) => {
4457
4474
  } else if (it) {
4458
4475
  const { returnType } = it.q;
4459
4476
  if (returnType === "value" || returnType === "valueOrThrow") {
4460
- const type = it.q[orchidCore.getValueKey];
4477
+ const type = it.q.getColumn;
4461
4478
  if (type)
4462
4479
  result[key] = type;
4463
4480
  } else {
@@ -4573,7 +4590,7 @@ const _get = (query, returnType, arg) => {
4573
4590
  }
4574
4591
  }
4575
4592
  }
4576
- q[orchidCore.getValueKey] = type;
4593
+ q.getColumn = type;
4577
4594
  const selected = setParserForSelectedString(
4578
4595
  query,
4579
4596
  arg,
@@ -4589,7 +4606,7 @@ const _get = (query, returnType, arg) => {
4589
4606
  ] : void 0;
4590
4607
  } else {
4591
4608
  type = arg.result.value;
4592
- q[orchidCore.getValueKey] = type;
4609
+ q.getColumn = type;
4593
4610
  addParserForRawExpression(query, orchidCore.getValueKey, arg);
4594
4611
  q.select = [q.expr = arg];
4595
4612
  }
@@ -6434,7 +6451,7 @@ class FnExpression extends orchidCore.Expression {
6434
6451
  Object.assign(query, value.operators);
6435
6452
  query.q.returnType = "valueOrThrow";
6436
6453
  query.q.returnsOne = true;
6437
- query.q[orchidCore.getValueKey] = value;
6454
+ query.q.getColumn = value;
6438
6455
  query.q.select = [this];
6439
6456
  const { parseFn } = value;
6440
6457
  if (parseFn) {
@@ -9153,7 +9170,6 @@ class MergeQueryMethods {
9153
9170
  break;
9154
9171
  }
9155
9172
  }
9156
- a[orchidCore.getValueKey] = b[orchidCore.getValueKey];
9157
9173
  if (b.returnType)
9158
9174
  a.returnType = b.returnType;
9159
9175
  return query;
@@ -12695,6 +12711,7 @@ const testTransaction = {
12695
12711
  adapter.query = t.query.bind(t);
12696
12712
  adapter.arrays = t.arrays.bind(t);
12697
12713
  adapter.transaction = t.transaction.bind(t);
12714
+ trx.testTransactionCount = trx.testTransactionCount ? trx.testTransactionCount + 1 : 1;
12698
12715
  }
12699
12716
  data.reject = rej;
12700
12717
  });
@@ -12703,6 +12720,10 @@ const testTransaction = {
12703
12720
  throw err;
12704
12721
  }
12705
12722
  }).finally(() => {
12723
+ const trx = db.internal.transactionStorage.getStore();
12724
+ if (trx == null ? void 0 : trx.testTransactionCount) {
12725
+ trx.testTransactionCount--;
12726
+ }
12706
12727
  db.internal.transactionStorage.getStore = getStore;
12707
12728
  });
12708
12729
  });