pqb 0.10.16 → 0.10.18

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,5 +1,5 @@
1
1
  import * as orchid_core from 'orchid-core';
2
- import { EmptyObject, RawExpression, ColumnTypeBase, MaybeArray, QueryResultRow, AdapterBase, QueryInput, ColumnsShapeBase, StringKey, ColumnOutput, SimpleSpread, FilterTuple, NullableColumn, QueryInternal, QueryMetaBase, ColumnTypesBase, DbBase, ThenResult, ColumnShapeOutput, DefaultSelectColumns, SetOptional, Spread, CoalesceString, QueryBaseCommon, QueryCommon, ColumnDataBase, BaseOperators, PrimaryKeyColumn, HiddenColumn, ValidationContext, MessageParam, BaseNumberData, Code, numberTypeMethods, BaseStringData, DateColumnData, dateTypeMethods, JSONTypeAny, record, ArrayMethodsData, arrayMethods, name } from 'orchid-core';
2
+ import { EmptyObject, RawExpression, ColumnTypeBase, MaybeArray, QueryResultRow, AdapterBase, QueryInput, ColumnsShapeBase, StringKey, ColumnOutput, NullableColumn, QueryInternal, QueryMetaBase, ColumnTypesBase, DbBase, ThenResult, ColumnShapeOutput, DefaultSelectColumns, SetOptional, Spread, CoalesceString, QueryBaseCommon, QueryCommon, ColumnDataBase, BaseOperators, PrimaryKeyColumn, HiddenColumn, ValidationContext, MessageParam, BaseNumberData, Code, numberTypeMethods, BaseStringData, DateColumnData, dateTypeMethods, JSONTypeAny, record, ArrayMethodsData, arrayMethods, name } from 'orchid-core';
3
3
  import { PoolConfig, Pool, PoolClient } from 'pg';
4
4
 
5
5
  declare type BaseRelation = {
@@ -462,12 +462,22 @@ declare class QueryGet {
462
462
  }
463
463
 
464
464
  declare type SelectArg<T extends QueryBase> = '*' | StringKey<keyof T['selectable']> | (T['relations'] extends Record<string, Relation> ? StringKey<keyof T['relations']> : never) | SelectAsArg<T>;
465
- declare type SelectAsArg<T extends QueryBase> = Record<string, StringKey<keyof T['selectable']> | RawExpression | ((q: T) => Query | RawExpression)>;
466
- declare type SelectResult<T extends Query, Args extends SelectArg<T>[], SelectAsArgs = SimpleSpread<FilterTuple<Args, SelectAsArg<T>>>> = AddQuerySelect<T, ('*' extends Args[number] ? T['shape'] : EmptyObject) & {
465
+ declare type SelectAsArg<T extends QueryBase> = Record<string, SelectAsValue<T>>;
466
+ declare type SelectAsValue<T extends QueryBase> = StringKey<keyof T['selectable']> | RawExpression | ((q: T) => Query) | ((q: T) => RawExpression);
467
+ declare type SelectResult<T extends Query, Args extends SelectArg<T>[], SelectAllResult extends ColumnsShapeBase = '*' extends Args[number] ? T['shape'] : EmptyObject, SelectStringsResult extends ColumnsShapeBase = SelectStringArgsResult<T, Args>, SelectAsResult extends ColumnsShapeBase = SpreadSelectArgs<T, Args>> = AddQuerySelect<T, SelectAllResult & {
468
+ [K in keyof SelectStringsResult]: K extends keyof SelectAsResult ? unknown : SelectStringsResult[K];
469
+ } & SelectAsResult>;
470
+ declare type SpreadSelectArgs<T extends Query, Args extends [...any]> = Args extends [
471
+ infer L,
472
+ ...infer R
473
+ ] ? L extends SelectAsArg<T> ? SelectAsResult<T, L> & SpreadSelectArgs<T, R> : SpreadSelectArgs<T, R> : EmptyObject;
474
+ declare type SelectStringArgsResult<T extends Query, Args extends SelectArg<T>[]> = {
467
475
  [Arg in Args[number] as Arg extends keyof T['selectable'] ? T['selectable'][Arg]['as'] : Arg extends keyof T['relations'] ? Arg : never]: Arg extends keyof T['selectable'] ? T['selectable'][Arg]['column'] : T['relations'] extends Record<string, Relation> ? Arg extends keyof T['relations'] ? T['relations'][Arg]['returns'] extends 'many' ? ArrayOfColumnsObjects<T['relations'][Arg]['table']['result']> : T['relations'][Arg]['options']['required'] extends true ? ColumnsObject<T['relations'][Arg]['table']['result']> : NullableColumn<ColumnsObject<T['relations'][Arg]['table']['result']>> : never : never;
468
- } & {
469
- [K in keyof SelectAsArgs]: SelectAsArgs[K] extends keyof T['selectable'] ? T['selectable'][SelectAsArgs[K]]['column'] : SelectAsArgs[K] extends RawExpression ? SelectAsArgs[K]['__column'] : SelectAsArgs[K] extends (q: T) => RawExpression ? ReturnType<SelectAsArgs[K]>['__column'] : SelectAsArgs[K] extends (q: T) => Query ? SelectSubQueryResult<ReturnType<SelectAsArgs[K]>> : SelectAsArgs[K] extends ((q: T) => Query) | RawExpression ? SelectSubQueryResult<ReturnType<Exclude<SelectAsArgs[K], RawExpression>>> | Exclude<SelectAsArgs[K], (q: T) => Query>['__column'] : never;
470
- }>;
476
+ };
477
+ declare type SelectAsResult<T extends Query, Arg extends SelectAsArg<T>> = {
478
+ [K in keyof Arg]: SelectAsValueResult<T, Arg[K]>;
479
+ };
480
+ declare type SelectAsValueResult<T extends Query, Arg extends SelectAsValue<T>> = Arg extends keyof T['selectable'] ? T['selectable'][Arg]['column'] : Arg extends RawExpression ? Arg['__column'] : Arg extends (q: T) => infer R ? R extends Query ? SelectSubQueryResult<R> : R extends RawExpression ? R['__column'] : never : never;
471
481
  declare type SelectSubQueryResult<Arg extends Query & {
472
482
  [isRequiredRelationKey]?: boolean;
473
483
  }> = QueryReturnsAll<Arg['returnType']> extends true ? ArrayOfColumnsObjects<Arg['result']> : Arg['returnType'] extends 'valueOrThrow' ? Arg['result']['value'] : Arg['returnType'] extends 'pluck' ? PluckResultColumnType<Arg['result']['pluck']> : Arg[isRequiredRelationKey] extends true ? ColumnsObject<Arg['result']> : NullableColumn<ColumnsObject<Arg['result']>>;
@@ -489,23 +499,22 @@ declare type FromArgs<T extends Query> = [
489
499
  only?: boolean;
490
500
  }
491
501
  ];
492
- declare type SetFromSelectable<T extends Query, Arg extends Query> = Omit<T, 'selectable'> & {
493
- selectable: {
494
- [K in keyof Arg['result']]: K extends string ? {
495
- as: K;
496
- column: Arg['result'][K];
497
- } : never;
498
- };
499
- };
500
- declare type MergeFromResult<T extends Query, Arg extends Query> = AddQuerySelect<Omit<T, 'result'> & {
501
- result: Pick<T['result'], keyof Arg['result']>;
502
- }, Arg['result']>;
503
502
  declare type FromResult<T extends Query, Args extends FromArgs<T>, Arg = Args[0]> = Arg extends string ? T['withData'] extends Record<string, WithDataItem> ? Arg extends keyof T['withData'] ? Omit<T, 'meta' | 'selectable'> & {
504
503
  meta: Omit<T['meta'], 'as'> & {
505
504
  as?: string;
506
505
  };
507
506
  selectable: SelectableFromShape<T['withData'][Arg]['shape'], Arg>;
508
- } : SetQueryTableAlias<T, Arg> : SetQueryTableAlias<T, Arg> : Arg extends Query ? SetQueryTableAlias<MergeFromResult<SetFromSelectable<T, Arg>, Arg>, AliasOrTable<Arg>> : T;
507
+ } : SetQueryTableAlias<T, Arg> : SetQueryTableAlias<T, Arg> : Arg extends Query ? FromQueryResult<T, Arg> : T;
508
+ declare type FromQueryResult<T extends Query, Q extends Query, Selectable extends SelectableBase = {
509
+ [K in keyof Q['result']]: K extends string ? {
510
+ as: K;
511
+ column: Q['result'][K];
512
+ } : never;
513
+ }> = {
514
+ [K in keyof T]: K extends 'meta' ? Omit<T['meta'], 'hasSelect' | 'as'> & {
515
+ as: AliasOrTable<Q>;
516
+ } : K extends 'selectable' ? Selectable : K extends 'result' | 'shape' ? Q['result'] : K extends 'then' ? QueryThen<T['returnType'], Q['result']> : T[K];
517
+ };
509
518
  declare class From {
510
519
  from<T extends Query, Args extends FromArgs<T>>(this: T, ...args: Args): FromResult<T, Args>;
511
520
  _from<T extends Query, Args extends FromArgs<T>>(this: T, ...args: Args): FromResult<T, Args>;
@@ -605,7 +614,7 @@ declare class WhereQueryBuilder<Q extends QueryBase = QueryBase> extends Where i
605
614
  relations: Q['relations'];
606
615
  baseQuery: Query;
607
616
  withData: {};
608
- internal: {};
617
+ internal: QueryInternal;
609
618
  constructor(q: QueryBase | string, { shape, joinedShapes }: Pick<QueryData, 'shape' | 'joinedShapes'>);
610
619
  clone<T extends this>(this: T): T;
611
620
  }
@@ -1565,15 +1574,15 @@ declare type QueryThen<ReturnType extends QueryReturnType, Result extends Column
1565
1574
  } ? ThenResult<Result['value']['type']> : never : ReturnType extends 'rows' ? ThenResult<ColumnShapeOutput<Result>[keyof Result][][]> : ReturnType extends 'pluck' ? Result extends {
1566
1575
  pluck: ColumnType;
1567
1576
  } ? ThenResult<Result['pluck']['type'][]> : never : ReturnType extends 'rowCount' ? ThenResult<number> : ReturnType extends 'void' ? ThenResult<void> : never;
1568
- declare type AddQuerySelect<T extends Pick<Query, 'result' | 'then' | 'returnType' | 'meta'>, Result extends ColumnsShapeBase> = T['meta']['hasSelect'] extends true ? Omit<T, 'result' | 'then'> & {
1569
- result: Spread<[T['result'], Result]>;
1570
- then: QueryThen<T['returnType'], Spread<[T['result'], Result]>>;
1571
- } : Omit<T, 'result' | 'then'> & {
1572
- meta: {
1577
+ declare type AddQuerySelect<T extends Pick<Query, 'result' | 'then' | 'returnType' | 'meta'>, Result extends ColumnsShapeBase> = T['meta']['hasSelect'] extends true ? MergeSelect<T, Result> : {
1578
+ [K in keyof T]: K extends 'meta' ? T['meta'] & {
1573
1579
  hasSelect: true;
1574
- };
1575
- result: Result;
1576
- then: QueryThen<T['returnType'], Result>;
1580
+ } : K extends 'result' ? Result : K extends 'then' ? QueryThen<T['returnType'], Result> : T[K];
1581
+ };
1582
+ declare type MergeSelect<T extends Pick<Query, 'result' | 'then' | 'returnType' | 'meta'>, Result extends ColumnsShapeBase, Merged extends ColumnsShapeBase = {
1583
+ [K in keyof T['result']]: K extends keyof Result ? unknown : T['result'][K];
1584
+ } & Result> = {
1585
+ [K in keyof T]: K extends 'result' ? Merged : K extends 'then' ? QueryThen<T['returnType'], Merged> : T[K];
1577
1586
  };
1578
1587
  declare type SetQueryReturns<T extends Query, R extends QueryReturnType> = Omit<T, 'returnType' | 'then'> & {
1579
1588
  returnType: R;
package/dist/index.js CHANGED
@@ -2529,8 +2529,22 @@ const pushInsertSql = (ctx, table, query, quotedAs) => {
2529
2529
  } else {
2530
2530
  ctx.sql.push(getRaw(expr, ctx.values));
2531
2531
  }
2532
- } else {
2533
- ctx.sql.push(`(${quotedColumns.join(", ")})`);
2532
+ } else if (type === "merge") {
2533
+ const { indexes } = table.internal;
2534
+ const quotedUniques = query.columns.reduce((arr, key, i) => {
2535
+ var _a2, _b2;
2536
+ const unique = ((_b2 = ((_a2 = shape[key]) == null ? void 0 : _a2.data).indexes) == null ? void 0 : _b2.some(
2537
+ (index) => index.unique
2538
+ )) || indexes.some(
2539
+ (index) => index.columns.some(
2540
+ (item) => "column" in item && item.column === key
2541
+ )
2542
+ );
2543
+ if (unique)
2544
+ arr.push(quotedColumns[i]);
2545
+ return arr;
2546
+ }, []);
2547
+ ctx.sql.push(`(${quotedUniques.join(", ")})`);
2534
2548
  }
2535
2549
  if (type === "ignore") {
2536
2550
  ctx.sql.push("DO NOTHING");
@@ -4961,11 +4975,14 @@ class Where {
4961
4975
  return this._orNot({ EXISTS: args });
4962
4976
  }
4963
4977
  }
4978
+ const emptyInternal = {
4979
+ indexes: []
4980
+ };
4964
4981
  class WhereQueryBuilder extends Where {
4965
4982
  constructor(q, { shape, joinedShapes }) {
4966
4983
  super();
4967
4984
  this.withData = orchidCore.emptyObject;
4968
- this.internal = orchidCore.emptyObject;
4985
+ this.internal = emptyInternal;
4969
4986
  this.table = typeof q === "object" ? q.table : q;
4970
4987
  this.shape = shape;
4971
4988
  this.query = {
@@ -5985,7 +6002,10 @@ class Db {
5985
6002
  this.whereQueryBuilder = WhereQueryBuilder;
5986
6003
  this.onQueryBuilder = OnQueryBuilder;
5987
6004
  var _a, _b;
5988
- this.internal = {};
6005
+ const tableData = getTableData();
6006
+ this.internal = {
6007
+ indexes: tableData.indexes
6008
+ };
5989
6009
  this.baseQuery = this;
5990
6010
  const logger = options.logger || console;
5991
6011
  const parsers = {};