pqb 0.40.8 → 0.40.9

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
@@ -384,6 +384,8 @@ interface CommonQueryData {
384
384
  outerJoinOverrides?: JoinOverrides;
385
385
  schema?: string;
386
386
  select?: SelectItem[];
387
+ selectAllColumns?: string[];
388
+ selectAllKeys?: RecordUnknown;
387
389
  /**
388
390
  * column type for query with 'value' or 'valueOrThrow' return type
389
391
  * Is needed in {@link getShapeFromSelect} to get shape of sub-select that returns a single value.
@@ -3345,16 +3347,15 @@ type DbTableOptionScopes<Table extends string | undefined, Shape extends QueryCo
3345
3347
  [K in Keys]: (q: ScopeArgumentQuery<Table, Shape>) => QueryBase;
3346
3348
  };
3347
3349
  type QueryDefaultReturnData<Shape extends QueryColumnsInit> = {
3348
- [K in DefaultSelectColumns<Shape>[number]]: Shape[K]['outputType'];
3350
+ [K in DefaultSelectColumns<Shape>]: Shape[K]['outputType'];
3349
3351
  }[];
3350
3352
  declare const anyShape: QueryColumnsInit;
3351
3353
  interface Db<Table extends string | undefined = undefined, Shape extends QueryColumnsInit = QueryColumnsInit, PrimaryKeys = never, UniqueColumns = never, UniqueColumnTuples = never, UniqueConstraints = never, ColumnTypes = DefaultColumnTypes<ColumnSchemaConfig>, ShapeWithComputed extends QueryColumnsInit = Shape, Scopes extends RecordUnknown | undefined = EmptyObject> extends DbBase<Adapter, Table, Shape, ColumnTypes, ShapeWithComputed>, QueryMethods<ColumnTypes>, QueryBase {
3352
- result: Pick<Shape, DefaultSelectColumns<Shape>[number]>;
3354
+ result: Pick<Shape, DefaultSelectColumns<Shape>>;
3353
3355
  queryBuilder: Db;
3354
3356
  returnType: undefined;
3355
3357
  then: QueryThen<QueryDefaultReturnData<Shape>>;
3356
3358
  windows: Query['windows'];
3357
- defaultSelectColumns: DefaultSelectColumns<Shape>;
3358
3359
  relations: EmptyObject;
3359
3360
  withData: EmptyObject;
3360
3361
  error: new (message: string, length: number, name: QueryErrorName) => QueryError<this>;
@@ -3367,6 +3368,7 @@ interface Db<Table extends string | undefined = undefined, Shape extends QueryCo
3367
3368
  [K in keyof Scopes]: true;
3368
3369
  };
3369
3370
  selectable: SelectableFromShape<ShapeWithComputed, Table>;
3371
+ defaultSelect: DefaultSelectColumns<Shape>;
3370
3372
  };
3371
3373
  internal: QueryInternal<{
3372
3374
  [K in keyof PrimaryKeys]: (keyof PrimaryKeys extends K ? never : keyof PrimaryKeys) extends never ? PrimaryKeys[K] : never;
@@ -4764,7 +4766,7 @@ type FromResult<T extends FromQuerySelf, Arg extends MaybeArray<FromArg<T>>> = A
4764
4766
  } : K extends 'result' ? T['withData'][Arg]['shape'] : K extends 'then' ? QueryThen<GetQueryResult<T, T['withData'][Arg]['shape']>> : T[K];
4765
4767
  } : SetQueryTableAlias<T, Arg> : Arg extends PickQueryTableMetaResultInputType ? {
4766
4768
  [K in keyof T]: K extends 'meta' ? {
4767
- [K in keyof T['meta']]: K extends 'as' ? AliasOrTable<Arg> : K extends 'selectable' ? SelectableFromShape<Arg['result'], AliasOrTable<Arg>> : K extends 'kind' ? 'select' : T['meta'][K];
4769
+ [K in keyof T['meta']]: K extends 'as' ? AliasOrTable<Arg> : K extends 'selectable' ? SelectableFromShape<Arg['result'], AliasOrTable<Arg>> : K extends 'kind' ? 'select' : K extends 'defaultSelect' ? keyof Arg['result'] : T['meta'][K];
4768
4770
  } : K extends 'result' ? Arg['result'] : K extends 'shape' ? Arg['result'] : K extends 'inputType' ? Arg['inputType'] : K extends 'then' ? QueryThen<GetQueryResult<T, Arg['result']>> : T[K];
4769
4771
  } : Arg extends (infer A)[] ? {
4770
4772
  [K in keyof T]: K extends 'meta' ? {
@@ -5364,11 +5366,11 @@ interface SelectAsCheckReturnTypes {
5364
5366
  }
5365
5367
  type SelectResult<T extends SelectSelf, Columns extends PropertyKey[]> = {
5366
5368
  [K in keyof T]: K extends 'result' ? ('*' extends Columns[number] ? {
5367
- [K in Columns[number] | keyof T['shape'] as K extends '*' ? never : T['meta']['selectable'][K]['as']]: T['meta']['selectable'][K]['column'];
5369
+ [K in Columns[number] | T['meta']['defaultSelect'] as K extends '*' ? never : T['meta']['selectable'][K]['as']]: T['meta']['selectable'][K]['column'];
5368
5370
  } : {
5369
5371
  [K in Columns[number] as T['meta']['selectable'][K]['as']]: T['meta']['selectable'][K]['column'];
5370
5372
  }) & (T['meta']['hasSelect'] extends true ? Omit<T['result'], Columns[number]> : unknown) : K extends 'then' ? QueryThen<GetQueryResult<T, ('*' extends Columns[number] ? {
5371
- [K in Exclude<Columns[number], '*'> | keyof T['shape'] as T['meta']['selectable'][K]['as']]: T['meta']['selectable'][K]['column'];
5373
+ [K in Exclude<Columns[number], '*'> | T['meta']['defaultSelect'] as T['meta']['selectable'][K]['as']]: T['meta']['selectable'][K]['column'];
5372
5374
  } : {
5373
5375
  [K in Columns[number] as T['meta']['selectable'][K]['as']]: T['meta']['selectable'][K]['column'];
5374
5376
  }) & (T['meta']['hasSelect'] extends true ? Omit<T['result'], Columns[number]> : unknown)>> : T[K];
@@ -5391,9 +5393,9 @@ type SelectResultColumnsAndObj<T extends SelectSelf, Columns extends PropertyKey
5391
5393
  selectable: SelectAsSelectable<Obj>;
5392
5394
  } : K extends 'result' ? // Combine previously selected items, all columns if * was provided,
5393
5395
  {
5394
- [K in ('*' extends Columns[number] ? Exclude<Columns[number], '*'> | keyof T['shape'] : Columns[number]) | keyof Obj as K extends Columns[number] ? T['meta']['selectable'][K]['as'] : K]: K extends keyof Obj ? SelectAsValueResult<T, Obj[K]> : T['meta']['selectable'][K]['column'];
5396
+ [K in ('*' extends Columns[number] ? Exclude<Columns[number], '*'> | T['meta']['defaultSelect'] : Columns[number]) | keyof Obj as K extends Columns[number] ? T['meta']['selectable'][K]['as'] : K]: K extends keyof Obj ? SelectAsValueResult<T, Obj[K]> : T['meta']['selectable'][K]['column'];
5395
5397
  } & (T['meta']['hasSelect'] extends true ? Omit<T['result'], Columns[number]> : unknown) : K extends 'then' ? QueryThen<GetQueryResult<T, {
5396
- [K in ('*' extends Columns[number] ? Exclude<Columns[number], '*'> | keyof T['shape'] : Columns[number]) | keyof Obj as K extends Columns[number] ? T['meta']['selectable'][K]['as'] : K]: K extends keyof Obj ? SelectAsValueResult<T, Obj[K]> : T['meta']['selectable'][K]['column'];
5398
+ [K in ('*' extends Columns[number] ? Exclude<Columns[number], '*'> | T['meta']['defaultSelect'] : Columns[number]) | keyof Obj as K extends Columns[number] ? T['meta']['selectable'][K]['as'] : K]: K extends keyof Obj ? SelectAsValueResult<T, Obj[K]> : T['meta']['selectable'][K]['column'];
5397
5399
  } & (T['meta']['hasSelect'] extends true ? Omit<T['result'], Columns[number]> : unknown)>> : T[K];
5398
5400
  };
5399
5401
  type SelectAsSelectable<Arg> = {
@@ -7600,7 +7602,6 @@ interface Query extends QueryBase, QueryMethods<unknown> {
7600
7602
  then: QueryThen<unknown>;
7601
7603
  catch: QueryCatch;
7602
7604
  windows: EmptyObject;
7603
- defaultSelectColumns: string[];
7604
7605
  relations: RelationsBase;
7605
7606
  error: new (message: string, length: number, name: QueryErrorName) => QueryError;
7606
7607
  }
package/dist/index.js CHANGED
@@ -805,8 +805,8 @@ const columnCode = (type, ctx, key, code, data = type.data, skip) => {
805
805
  orchidCore.addCode(code, part);
806
806
  }
807
807
  }
808
- if (data.isHidden)
809
- orchidCore.addCode(code, ".hidden()");
808
+ if (data.explicitSelect)
809
+ orchidCore.addCode(code, ".select(false)");
810
810
  if (data.isNullable)
811
811
  orchidCore.addCode(code, ".nullable()");
812
812
  if (type.encodeFn && type.encodeFn !== (skip == null ? void 0 : skip.encodeFn))
@@ -2358,7 +2358,7 @@ const getArgQueryTarget = (ctx, first, joinSubQuery, cloned) => {
2358
2358
  }
2359
2359
  };
2360
2360
  const subJoinToSql = (ctx, jq, innerAs, outerAs, cloned) => {
2361
- if (!jq.q.select && jq.internal.columnsForSelectAll) {
2361
+ if (!jq.q.select && jq.q.selectAllColumns) {
2362
2362
  if (!cloned)
2363
2363
  jq = jq.clone();
2364
2364
  jq.q.select = [new RawSQL(`${innerAs}.*`)];
@@ -2695,7 +2695,7 @@ const _join = (query, require2, type, first, args) => {
2695
2695
  );
2696
2696
  if (joinKey && "s" in joinArgs && joinArgs.s) {
2697
2697
  const j = "j" in joinArgs ? (_b = joinArgs.r) != null ? _b : joinArgs.j : "r" in joinArgs ? joinArgs.r : joinArgs.q;
2698
- if (j.q.select || !j.internal.columnsForSelectAll) {
2698
+ if (j.q.select || !j.q.selectAllColumns) {
2699
2699
  const shape2 = getShapeFromSelect(j, true);
2700
2700
  setQueryObjectValue(
2701
2701
  query,
@@ -4715,7 +4715,7 @@ class SelectItemExpression extends orchidCore.Expression {
4715
4715
  }
4716
4716
  // `makeSQL` acts similarly to how select args are handled
4717
4717
  makeSQL(ctx, quotedAs) {
4718
- return typeof this.item === "string" ? this.item === "*" ? selectAllSql(this.query, this.q, quotedAs) : columnToSql(ctx, this.q, this.q.shape, this.item, quotedAs, true) : this.item.toSQL(ctx, quotedAs);
4718
+ return typeof this.item === "string" ? this.item === "*" ? selectAllSql(this.q, quotedAs) : columnToSql(ctx, this.q, this.q.shape, this.item, quotedAs, true) : this.item.toSQL(ctx, quotedAs);
4719
4719
  }
4720
4720
  }
4721
4721
 
@@ -4849,12 +4849,14 @@ function queryFrom(self, arg) {
4849
4849
  data.batchParsers = q.q.batchParsers;
4850
4850
  }
4851
4851
  data.from = arg;
4852
+ data.selectAllColumns = data.selectAllKeys = void 0;
4852
4853
  return self;
4853
4854
  }
4854
4855
  function queryFromSql(self, args) {
4855
4856
  const data = self.q;
4856
4857
  data.as || (data.as = "t");
4857
4858
  data.from = sqlQueryArgsToExpression(args);
4859
+ data.selectAllColumns = data.selectAllKeys = void 0;
4858
4860
  return self;
4859
4861
  }
4860
4862
  class FromMethods {
@@ -4969,11 +4971,11 @@ const selectToSql = (ctx, table, query, quotedAs, hookSelect = query.hookSelect)
4969
4971
  if (item === "*") {
4970
4972
  if (hookSelect) {
4971
4973
  selected != null ? selected : selected = {};
4972
- for (const key in table.internal.columnsKeysForSelectAll || query.shape) {
4974
+ for (const key in query.selectAllKeys || query.shape) {
4973
4975
  selected[key] = quotedAs;
4974
4976
  }
4975
4977
  }
4976
- sql = selectAllSql(table, query, quotedAs);
4978
+ sql = selectAllSql(query, quotedAs);
4977
4979
  } else {
4978
4980
  const index = item.indexOf(".");
4979
4981
  if (index !== -1) {
@@ -5075,15 +5077,15 @@ const selectToSql = (ctx, table, query, quotedAs, hookSelect = query.hookSelect)
5075
5077
  list.push(sql);
5076
5078
  }
5077
5079
  }
5078
- return list.length ? list.join(", ") : query.select ? "" : selectAllSql(table, query, quotedAs);
5080
+ return list.length ? list.join(", ") : query.select ? "" : selectAllSql(query, quotedAs);
5079
5081
  };
5080
5082
  function selectedObjectToSQL(ctx, quotedAs, item) {
5081
5083
  const sql = item.toSQL(ctx, quotedAs);
5082
5084
  return ctx.aliasValue ? `${sql} r` : sql;
5083
5085
  }
5084
- const selectAllSql = (table, query, quotedAs) => {
5086
+ const selectAllSql = (query, quotedAs) => {
5085
5087
  var _a, _b, _c;
5086
- return ((_a = query.join) == null ? void 0 : _a.length) ? ((_b = table.internal.columnsForSelectAll) == null ? void 0 : _b.map((item) => `${quotedAs}.${item}`).join(", ")) || `${quotedAs}.*` : ((_c = table.internal.columnsForSelectAll) == null ? void 0 : _c.join(", ")) || "*";
5088
+ return ((_a = query.join) == null ? void 0 : _a.length) ? ((_b = query.selectAllColumns) == null ? void 0 : _b.map((item) => `${quotedAs}.${item}`).join(", ")) || `${quotedAs}.*` : ((_c = query.selectAllColumns) == null ? void 0 : _c.join(", ")) || "*";
5087
5089
  };
5088
5090
  const pushSubQuerySql = (ctx, query, as, list, quotedAs) => {
5089
5091
  var _a, _b, _c;
@@ -5277,7 +5279,7 @@ const pushWithSql = (ctx, items) => {
5277
5279
 
5278
5280
  const checkIfASimpleQuery = (q) => {
5279
5281
  var _a, _b;
5280
- if (q.q.returnType && q.q.returnType !== "all" || q.internal.columnsForSelectAll || ((_a = q.q.and) == null ? void 0 : _a.length) || ((_b = q.q.or) == null ? void 0 : _b.length) || q.q.scopes)
5282
+ if (q.q.returnType && q.q.returnType !== "all" || q.q.selectAllColumns || ((_a = q.q.and) == null ? void 0 : _a.length) || ((_b = q.q.or) == null ? void 0 : _b.length) || q.q.scopes)
5281
5283
  return false;
5282
5284
  const keys = Object.keys(q.q);
5283
5285
  return !keys.some((key) => queryKeysOfNotSimpleQuery.includes(key));
@@ -5305,7 +5307,7 @@ const pushFromAndAs = (ctx, table, data, quotedAs) => {
5305
5307
  const from = getFrom(ctx, table, data, quotedAs);
5306
5308
  sql += from;
5307
5309
  if (data.as && quotedAs && quotedAs !== from) {
5308
- sql += ` AS ${quotedAs}`;
5310
+ sql += ` ${quotedAs}`;
5309
5311
  }
5310
5312
  for (const as in data.sources) {
5311
5313
  const source = data.sources[as];
@@ -9439,16 +9441,17 @@ var __spreadValues$5 = (a, b) => {
9439
9441
  }
9440
9442
  return a;
9441
9443
  };
9442
- const mergableObjects = {
9443
- shape: true,
9444
- withShapes: true,
9445
- parsers: true,
9446
- defaults: true,
9447
- joinedShapes: true,
9448
- joinedParsers: true,
9449
- joinedBatchParsers: true,
9450
- selectedComputeds: true
9451
- };
9444
+ const mergableObjects = /* @__PURE__ */ new Set([
9445
+ "shape",
9446
+ "withShapes",
9447
+ "parsers",
9448
+ "defaults",
9449
+ "joinedShapes",
9450
+ "joinedParsers",
9451
+ "joinedBatchParsers",
9452
+ "selectedComputeds"
9453
+ ]);
9454
+ const dontMergeArrays = /* @__PURE__ */ new Set(["selectAllColumns", "selectAllKeys"]);
9452
9455
  class MergeQueryMethods {
9453
9456
  merge(q) {
9454
9457
  const query = this.clone();
@@ -9464,8 +9467,10 @@ class MergeQueryMethods {
9464
9467
  break;
9465
9468
  case "object":
9466
9469
  if (Array.isArray(value)) {
9467
- a[key] = a[key] ? [...a[key], ...value] : value;
9468
- } else if (mergableObjects[key]) {
9470
+ if (!dontMergeArrays.has(key)) {
9471
+ a[key] = a[key] ? [...a[key], ...value] : value;
9472
+ }
9473
+ } else if (mergableObjects.has(key)) {
9469
9474
  a[key] = a[key] ? __spreadValues$5(__spreadValues$5({}, a[key]), value) : value;
9470
9475
  } else if (key === "union") {
9471
9476
  a[key] = a[key] ? {
@@ -11385,7 +11390,11 @@ class QueryUpsertOrCreate {
11385
11390
  if (!orchidCore.isObjectEmpty(updateData)) {
11386
11391
  _queryUpdate(q, updateData);
11387
11392
  }
11388
- return orCreate(q, data.create, updateData, mergeData);
11393
+ const c = orCreate(q, data.create, updateData, mergeData);
11394
+ if (!c.q.select) {
11395
+ c.q.returnType = "void";
11396
+ }
11397
+ return c;
11389
11398
  }
11390
11399
  /**
11391
11400
  * `orCreate` creates a record only if it was not found by conditions.
@@ -12686,7 +12695,7 @@ class Db {
12686
12695
  const parsers = {};
12687
12696
  let hasParsers = false;
12688
12697
  let modifyQuery = void 0;
12689
- let hasCustomName = false;
12698
+ let prepareSelectAll = false;
12690
12699
  const { snakeCase } = options;
12691
12700
  for (const key in shape) {
12692
12701
  const column = shape[key];
@@ -12696,14 +12705,17 @@ class Db {
12696
12705
  parsers[key] = column.parseFn;
12697
12706
  }
12698
12707
  if (column.data.name) {
12699
- hasCustomName = true;
12708
+ prepareSelectAll = true;
12700
12709
  } else if (snakeCase) {
12701
12710
  const snakeName = orchidCore.toSnakeCase(key);
12702
12711
  if (snakeName !== key) {
12703
- hasCustomName = true;
12712
+ prepareSelectAll = true;
12704
12713
  column.data.name = snakeName;
12705
12714
  }
12706
12715
  }
12716
+ if (column.data.explicitSelect) {
12717
+ prepareSelectAll = true;
12718
+ }
12707
12719
  const { modifyQuery: mq } = column.data;
12708
12720
  if (mq) {
12709
12721
  modifyQuery = orchidCore.pushOrNewArray(modifyQuery, (q) => mq(q, column));
@@ -12723,17 +12735,6 @@ class Db {
12723
12735
  }
12724
12736
  }
12725
12737
  }
12726
- if (hasCustomName) {
12727
- const list = [];
12728
- for (const key in shape) {
12729
- const column = shape[key];
12730
- list.push(
12731
- column.data.name ? `"${column.data.name}" AS "${key}"` : `"${key}"`
12732
- );
12733
- }
12734
- this.internal.columnsForSelectAll = list;
12735
- this.internal.columnsKeysForSelectAll = __spreadValues({}, shape);
12736
- }
12737
12738
  this.q = {
12738
12739
  adapter,
12739
12740
  shape,
@@ -12766,21 +12767,22 @@ class Db {
12766
12767
  const columns = Object.keys(
12767
12768
  shape
12768
12769
  );
12769
- const { toSQL } = this;
12770
12770
  this.columns = columns;
12771
- this.defaultSelectColumns = columns.filter(
12772
- (column) => !shape[column].data.isHidden
12773
- );
12774
12771
  if (options.computed)
12775
12772
  applyComputedColumns(this, options.computed);
12776
- const defaultSelect = this.defaultSelectColumns.length === columns.length ? void 0 : this.defaultSelectColumns;
12777
- this.toSQL = defaultSelect ? function(options2) {
12778
- const q = this.clone();
12779
- if (!q.q.select) {
12780
- q.q.select = defaultSelect;
12781
- }
12782
- return toSQL.call(q, options2);
12783
- } : toSQL;
12773
+ if (prepareSelectAll) {
12774
+ const list = [];
12775
+ for (const key in shape) {
12776
+ const column = shape[key];
12777
+ if (!column.data.explicitSelect) {
12778
+ list.push(
12779
+ column.data.name ? `"${column.data.name}" AS "${key}"` : `"${key}"`
12780
+ );
12781
+ }
12782
+ }
12783
+ this.q.selectAllColumns = list;
12784
+ this.q.selectAllKeys = __spreadValues({}, shape);
12785
+ }
12784
12786
  if (modifyQuery) {
12785
12787
  for (const cb of modifyQuery) {
12786
12788
  cb(this);