pqb 0.42.8 → 0.43.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.d.ts +33 -27
- package/dist/index.js +35 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +35 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -5465,10 +5465,7 @@ type SelectResult<T extends SelectSelf, Columns extends PropertyKey[]> = {
|
|
|
5465
5465
|
}) & (T['meta']['hasSelect'] extends (T['returnType'] extends 'value' | 'valueOrThrow' ? never : true) ? Omit<T['result'], Columns[number]> : unknown)> : T[K];
|
|
5466
5466
|
} & QueryMetaHasSelect;
|
|
5467
5467
|
type SelectResultObj<T extends SelectSelf, Obj> = Obj extends SelectAsCheckReturnTypes ? {
|
|
5468
|
-
[K in keyof T]: K extends 'meta' ? T['meta'] & {
|
|
5469
|
-
hasSelect: true;
|
|
5470
|
-
selectable: SelectAsSelectable<Obj>;
|
|
5471
|
-
} : K extends 'result' ? {
|
|
5468
|
+
[K in keyof T]: K extends 'meta' ? T['meta'] & SelectAsMeta<Obj> : K extends 'result' ? {
|
|
5472
5469
|
[K in T['meta']['hasSelect'] extends (T['returnType'] extends 'value' | 'valueOrThrow' ? never : true) ? keyof Obj | keyof T['result'] : keyof Obj]: K extends keyof Obj ? SelectAsValueResult<T, Obj[K]> : K extends keyof T['result'] ? T['result'][K] : never;
|
|
5473
5470
|
} : K extends 'returnType' ? SelectReturnType<T> : K extends 'then' ? QueryThenByReturnType<SelectReturnType<T>, {
|
|
5474
5471
|
[K in T['meta']['hasSelect'] extends (T['returnType'] extends 'value' | 'valueOrThrow' ? never : true) ? keyof Obj | keyof T['result'] : keyof Obj]: K extends keyof Obj ? SelectAsValueResult<T, Obj[K]> : K extends keyof T['result'] ? T['result'][K] : never;
|
|
@@ -5477,34 +5474,37 @@ type SelectResultObj<T extends SelectSelf, Obj> = Obj extends SelectAsCheckRetur
|
|
|
5477
5474
|
[K in keyof Obj]: Obj[K] extends (...args: any[]) => any ? ReturnType<Obj[K]> extends SelectAsFnReturnType ? never : K : never;
|
|
5478
5475
|
}[keyof Obj] & string}`;
|
|
5479
5476
|
type SelectResultColumnsAndObj<T extends SelectSelf, Columns extends PropertyKey[], Obj> = {
|
|
5480
|
-
[K in keyof T]: K extends 'meta' ? T['meta'] &
|
|
5481
|
-
hasSelect: true;
|
|
5482
|
-
selectable: SelectAsSelectable<Obj>;
|
|
5483
|
-
} : K extends 'result' ? // Combine previously selected items, all columns if * was provided,
|
|
5477
|
+
[K in keyof T]: K extends 'meta' ? T['meta'] & SelectAsMeta<Obj> : K extends 'result' ? // Combine previously selected items, all columns if * was provided,
|
|
5484
5478
|
{
|
|
5485
5479
|
[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'];
|
|
5486
5480
|
} & (T['meta']['hasSelect'] extends (T['returnType'] extends 'value' | 'valueOrThrow' ? never : true) ? Omit<T['result'], Columns[number]> : unknown) : K extends 'returnType' ? SelectReturnType<T> : K extends 'then' ? QueryThenByReturnType<SelectReturnType<T>, {
|
|
5487
5481
|
[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'];
|
|
5488
5482
|
} & (T['meta']['hasSelect'] extends (T['returnType'] extends 'value' | 'valueOrThrow' ? never : true) ? Omit<T['result'], Columns[number]> : unknown)> : T[K];
|
|
5489
5483
|
};
|
|
5490
|
-
type
|
|
5491
|
-
|
|
5492
|
-
|
|
5493
|
-
|
|
5494
|
-
|
|
5495
|
-
|
|
5496
|
-
|
|
5497
|
-
|
|
5498
|
-
|
|
5499
|
-
|
|
5500
|
-
|
|
5501
|
-
|
|
5502
|
-
|
|
5503
|
-
|
|
5504
|
-
|
|
5505
|
-
|
|
5506
|
-
|
|
5507
|
-
|
|
5484
|
+
type SelectAsMeta<Arg> = {
|
|
5485
|
+
hasSelect: true;
|
|
5486
|
+
selectable: {
|
|
5487
|
+
[K in keyof Arg]: Arg[K] extends (q: never) => {
|
|
5488
|
+
result: QueryColumns;
|
|
5489
|
+
returnType: QueryReturnType;
|
|
5490
|
+
} ? ReturnType<Arg[K]>['returnType'] extends 'value' | 'valueOrThrow' ? {
|
|
5491
|
+
[P in K]: {
|
|
5492
|
+
as: K;
|
|
5493
|
+
column: ReturnType<Arg[K]>['result']['value'];
|
|
5494
|
+
};
|
|
5495
|
+
} : {
|
|
5496
|
+
[C in keyof ReturnType<Arg[K]>['result'] & string as `${K & string}.${C}`]: {
|
|
5497
|
+
as: C;
|
|
5498
|
+
column: ReturnType<Arg[K]>['result'][C];
|
|
5499
|
+
};
|
|
5500
|
+
} : Arg[K] extends Expression ? {
|
|
5501
|
+
[P in K]: {
|
|
5502
|
+
as: K;
|
|
5503
|
+
column: Arg[K]['result']['value'];
|
|
5504
|
+
};
|
|
5505
|
+
} : EmptyObject;
|
|
5506
|
+
}[keyof Arg];
|
|
5507
|
+
};
|
|
5508
5508
|
type SelectAsValueResult<T extends SelectSelf, Arg> = Arg extends keyof T['meta']['selectable'] ? T['meta']['selectable'][Arg]['column'] : Arg extends Expression ? Arg['result']['value'] : Arg extends (q: never) => IsQuery ? SelectSubQueryResult<ReturnType<Arg>> : Arg extends (q: never) => Expression ? ReturnType<Arg>['result']['value'] : Arg extends (q: never) => IsQuery | Expression ? SelectSubQueryResult<Exclude<ReturnType<Arg>, Expression>> | Exclude<ReturnType<Arg>, IsQuery>['result']['value'] : never;
|
|
5509
5509
|
type SelectSubQueryResult<Arg extends SelectSelf> = Arg['returnType'] extends undefined | 'all' ? ColumnsShapeToObjectArray<Arg['result']> : Arg['returnType'] extends 'value' | 'valueOrThrow' ? Arg['result']['value'] : Arg['returnType'] extends 'pluck' ? ColumnsShapeToPluck<Arg['result']> : Arg['returnType'] extends 'one' ? ColumnsShapeToNullableObject<Arg['result']> : ColumnsShapeToObject<Arg['result']>;
|
|
5510
5510
|
declare const addParserForRawExpression: (q: PickQueryQ, key: string | getValueKey, raw: Expression) => void;
|
|
@@ -7313,9 +7313,15 @@ declare class QueryMethods<ColumnTypes> {
|
|
|
7313
7313
|
* .group('month');
|
|
7314
7314
|
* ```
|
|
7315
7315
|
*
|
|
7316
|
+
* Column aliases in `select` take precedence over table columns,
|
|
7317
|
+
* so if in the query above `db.product` had a column `month`,
|
|
7318
|
+
* the query would work in the exact same way, group by would reference the selected `month` expression.
|
|
7319
|
+
*
|
|
7316
7320
|
* @param columns - column names or a raw SQL
|
|
7317
7321
|
*/
|
|
7318
|
-
group<T extends
|
|
7322
|
+
group<T extends PickQueryMetaResult>(this: T, ...columns: T['meta']['hasSelect'] extends true ? GroupArgs<T> : {
|
|
7323
|
+
error: 'select is required for group';
|
|
7324
|
+
}[]): T;
|
|
7319
7325
|
/**
|
|
7320
7326
|
* Add a window with `window` and use it later by its name for aggregate or window functions:
|
|
7321
7327
|
*
|
package/dist/index.js
CHANGED
|
@@ -5650,11 +5650,18 @@ function queryJson(self, coalesce) {
|
|
|
5650
5650
|
return q;
|
|
5651
5651
|
}
|
|
5652
5652
|
|
|
5653
|
-
const pushSelectSql = (ctx, table, query, quotedAs) => {
|
|
5654
|
-
const sql = selectToSql(
|
|
5653
|
+
const pushSelectSql = (ctx, table, query, quotedAs, aliases) => {
|
|
5654
|
+
const sql = selectToSql(
|
|
5655
|
+
ctx,
|
|
5656
|
+
table,
|
|
5657
|
+
query,
|
|
5658
|
+
quotedAs,
|
|
5659
|
+
query.hookSelect,
|
|
5660
|
+
aliases
|
|
5661
|
+
);
|
|
5655
5662
|
if (sql) ctx.sql.push(sql);
|
|
5656
5663
|
};
|
|
5657
|
-
const selectToSql = (ctx, table, query, quotedAs, hookSelect = query.hookSelect) => {
|
|
5664
|
+
const selectToSql = (ctx, table, query, quotedAs, hookSelect = query.hookSelect, aliases) => {
|
|
5658
5665
|
let selected;
|
|
5659
5666
|
const list = [];
|
|
5660
5667
|
if (query.select) {
|
|
@@ -5696,6 +5703,7 @@ const selectToSql = (ctx, table, query, quotedAs, hookSelect = query.hookSelect)
|
|
|
5696
5703
|
}
|
|
5697
5704
|
}
|
|
5698
5705
|
list.push(sql);
|
|
5706
|
+
aliases?.push("");
|
|
5699
5707
|
} else if (item) {
|
|
5700
5708
|
if ("selectAs" in item) {
|
|
5701
5709
|
const obj = item.selectAs;
|
|
@@ -5705,8 +5713,9 @@ const selectToSql = (ctx, table, query, quotedAs, hookSelect = query.hookSelect)
|
|
|
5705
5713
|
if (typeof value === "object") {
|
|
5706
5714
|
if (orchidCore.isExpression(value)) {
|
|
5707
5715
|
list.push(`${value.toSQL(ctx, quotedAs)} "${as}"`);
|
|
5716
|
+
aliases?.push(as);
|
|
5708
5717
|
} else {
|
|
5709
|
-
pushSubQuerySql(ctx, value, as, list, quotedAs);
|
|
5718
|
+
pushSubQuerySql(ctx, value, as, list, quotedAs, aliases);
|
|
5710
5719
|
}
|
|
5711
5720
|
} else if (value) {
|
|
5712
5721
|
list.push(
|
|
@@ -5719,10 +5728,12 @@ const selectToSql = (ctx, table, query, quotedAs, hookSelect = query.hookSelect)
|
|
|
5719
5728
|
true
|
|
5720
5729
|
)
|
|
5721
5730
|
);
|
|
5731
|
+
aliases?.push(as);
|
|
5722
5732
|
}
|
|
5723
5733
|
}
|
|
5724
5734
|
} else {
|
|
5725
5735
|
list.push(selectedObjectToSQL(ctx, quotedAs, item));
|
|
5736
|
+
aliases?.push("");
|
|
5726
5737
|
}
|
|
5727
5738
|
}
|
|
5728
5739
|
}
|
|
@@ -5773,7 +5784,7 @@ function selectedObjectToSQL(ctx, quotedAs, item) {
|
|
|
5773
5784
|
const selectAllSql = (query, quotedAs) => {
|
|
5774
5785
|
return query.join?.length ? query.selectAllColumns?.map((item) => `${quotedAs}.${item}`).join(", ") || `${quotedAs}.*` : query.selectAllColumns?.join(", ") || "*";
|
|
5775
5786
|
};
|
|
5776
|
-
const pushSubQuerySql = (ctx, query, as, list, quotedAs) => {
|
|
5787
|
+
const pushSubQuerySql = (ctx, query, as, list, quotedAs, aliases) => {
|
|
5777
5788
|
const { returnType = "all" } = query.q;
|
|
5778
5789
|
if (isQueryNone(query)) {
|
|
5779
5790
|
let sql;
|
|
@@ -5799,6 +5810,7 @@ const pushSubQuerySql = (ctx, query, as, list, quotedAs) => {
|
|
|
5799
5810
|
throw new UnhandledTypeError(query, returnType);
|
|
5800
5811
|
}
|
|
5801
5812
|
list.push(`${sql} "${as}"`);
|
|
5813
|
+
aliases?.push(as);
|
|
5802
5814
|
return;
|
|
5803
5815
|
}
|
|
5804
5816
|
if (query.q.joinedForSelect) {
|
|
@@ -5823,7 +5835,10 @@ const pushSubQuerySql = (ctx, query, as, list, quotedAs) => {
|
|
|
5823
5835
|
default:
|
|
5824
5836
|
throw new UnhandledTypeError(query, returnType);
|
|
5825
5837
|
}
|
|
5826
|
-
if (sql)
|
|
5838
|
+
if (sql) {
|
|
5839
|
+
list.push(`${coalesce(ctx, query, sql, quotedAs)} "${as}"`);
|
|
5840
|
+
aliases?.push(as);
|
|
5841
|
+
}
|
|
5827
5842
|
return;
|
|
5828
5843
|
}
|
|
5829
5844
|
switch (returnType) {
|
|
@@ -6593,7 +6608,8 @@ const makeSQL = (table, options) => {
|
|
|
6593
6608
|
if (query.distinct) {
|
|
6594
6609
|
pushDistinctSql(ctx, table, query.distinct, quotedAs);
|
|
6595
6610
|
}
|
|
6596
|
-
|
|
6611
|
+
const aliases = query.group ? [] : void 0;
|
|
6612
|
+
pushSelectSql(ctx, table, query, quotedAs, aliases);
|
|
6597
6613
|
if (table.table || query.from) {
|
|
6598
6614
|
pushFromAndAs(ctx, table, query, quotedAs);
|
|
6599
6615
|
}
|
|
@@ -6609,9 +6625,14 @@ const makeSQL = (table, options) => {
|
|
|
6609
6625
|
pushWhereStatementSql(ctx, table, query, quotedAs);
|
|
6610
6626
|
}
|
|
6611
6627
|
if (query.group) {
|
|
6612
|
-
const group = query.group.map(
|
|
6613
|
-
(
|
|
6614
|
-
|
|
6628
|
+
const group = query.group.map((item) => {
|
|
6629
|
+
if (orchidCore.isExpression(item)) {
|
|
6630
|
+
return item.toSQL(ctx, quotedAs);
|
|
6631
|
+
} else {
|
|
6632
|
+
const i = aliases.indexOf(item);
|
|
6633
|
+
return i !== -1 ? i + 1 : columnToSql(ctx, table.q, table.shape, item, quotedAs);
|
|
6634
|
+
}
|
|
6635
|
+
});
|
|
6615
6636
|
sql.push(`GROUP BY ${group.join(", ")}`);
|
|
6616
6637
|
}
|
|
6617
6638
|
if (query.having) pushHavingSql(ctx, query, quotedAs);
|
|
@@ -11722,6 +11743,10 @@ class QueryMethods {
|
|
|
11722
11743
|
* .group('month');
|
|
11723
11744
|
* ```
|
|
11724
11745
|
*
|
|
11746
|
+
* Column aliases in `select` take precedence over table columns,
|
|
11747
|
+
* so if in the query above `db.product` had a column `month`,
|
|
11748
|
+
* the query would work in the exact same way, group by would reference the selected `month` expression.
|
|
11749
|
+
*
|
|
11725
11750
|
* @param columns - column names or a raw SQL
|
|
11726
11751
|
*/
|
|
11727
11752
|
group(...columns) {
|