pqb 0.1.2 → 0.1.4

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
@@ -1037,10 +1037,13 @@ declare class QueryGet {
1037
1037
  declare type SelectArg<T extends QueryBase> = keyof T['selectable'] | (T['relations'] extends Record<string, Relation> ? keyof T['relations'] : never) | RelationQueryBase | SelectAsArg<T>;
1038
1038
  declare type SelectAsArg<T extends QueryBase> = Record<string, keyof T['selectable'] | Query | RawExpression>;
1039
1039
  declare type SelectResult<T extends Query, Args extends SelectArg<T>[], SelectAsArgs = SimpleSpread<FilterTuple<Args, SelectAsArg<QueryBase>>>> = AddQuerySelect<T, {
1040
- [Arg in Args[number] as Arg extends keyof T['selectable'] ? T['selectable'][Arg]['as'] : Arg extends keyof T['relations'] ? Arg : Arg extends RelationQueryBase ? Arg['tableAlias'] extends string ? Arg['tableAlias'] : never : never]: Arg extends keyof T['selectable'] ? T['selectable'][Arg]['column'] : Arg extends RelationQueryBase ? Arg['returnType'] extends 'all' ? 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']>> : T['relations'] extends Record<string, Relation> ? Arg extends keyof T['relations'] ? T['relations'][Arg]['returns'] extends 'many' ? ArrayOfColumnsObjects<T['relations'][Arg]['model']['result']> : T['relations'][Arg]['options']['required'] extends true ? ColumnsObject<T['relations'][Arg]['model']['result']> : NullableColumn<ColumnsObject<T['relations'][Arg]['model']['result']>> : never : never;
1040
+ [Arg in Args[number] as Arg extends keyof T['selectable'] ? T['selectable'][Arg]['as'] : Arg extends keyof T['relations'] ? Arg : Arg extends RelationQueryBase ? Arg['tableAlias'] extends string ? Arg['tableAlias'] : never : never]: Arg extends keyof T['selectable'] ? T['selectable'][Arg]['column'] : Arg extends RelationQueryBase ? SelectSubQueryResult<Arg> : T['relations'] extends Record<string, Relation> ? Arg extends keyof T['relations'] ? T['relations'][Arg]['returns'] extends 'many' ? ArrayOfColumnsObjects<T['relations'][Arg]['model']['result']> : T['relations'][Arg]['options']['required'] extends true ? ColumnsObject<T['relations'][Arg]['model']['result']> : NullableColumn<ColumnsObject<T['relations'][Arg]['model']['result']>> : never : never;
1041
1041
  } & {
1042
- [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 Query ? SelectAsArgs[K]['returnType'] extends 'all' ? ArrayOfColumnsObjects<SelectAsArgs[K]['result']> : ColumnsObject<SelectAsArgs[K]['result']> : never;
1042
+ [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 Query ? SelectSubQueryResult<SelectAsArgs[K]> : never;
1043
1043
  }>;
1044
+ declare type SelectSubQueryResult<Arg extends Query & {
1045
+ [isRequiredRelationKey]?: boolean;
1046
+ }> = Arg['returnType'] extends 'all' ? 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']>>;
1044
1047
  declare const addParserForRawExpression: (q: Query, key: string | getValueKey, raw: RawExpression) => void;
1045
1048
  declare const addParserForSelectItem: <T extends Query>(q: T, as: string | getValueKey | undefined, key: string, item: Query | RawExpression<ColumnType<unknown, Operators, unknown>> | keyof T["selectable"]) => void;
1046
1049
  declare const addParserToQuery: (query: QueryData, key: string | getValueKey, parser: ColumnParser) => void;
@@ -1456,10 +1459,10 @@ declare class QueryMethods {
1456
1459
  _wrap<T extends Query, Q extends Query, As extends string = 't'>(this: T, query: Q, as?: As): SetQueryTableAlias<Q, As>;
1457
1460
  order<T extends Query>(this: T, ...args: OrderArg<T>[]): T;
1458
1461
  _order<T extends Query>(this: T, ...args: OrderArg<T>[]): T;
1459
- limit<T extends Query>(this: T, arg: number): T;
1460
- _limit<T extends Query>(this: T, arg: number): T;
1461
- offset<T extends Query>(this: T, arg: number): T;
1462
- _offset<T extends Query>(this: T, arg: number): T;
1462
+ limit<T extends Query>(this: T, arg: number | undefined): T;
1463
+ _limit<T extends Query>(this: T, arg: number | undefined): T;
1464
+ offset<T extends Query>(this: T, arg: number | undefined): T;
1465
+ _offset<T extends Query>(this: T, arg: number | undefined): T;
1463
1466
  exists<T extends Query>(this: T): SetQueryReturnsValueOptional<T, NumberColumn>;
1464
1467
  _exists<T extends Query>(this: T): SetQueryReturnsValueOptional<T, NumberColumn>;
1465
1468
  truncate<T extends Query>(this: T, options?: {
package/dist/index.esm.js CHANGED
@@ -2515,43 +2515,10 @@ const selectToSql = (model, query, values, quotedAs) => {
2515
2515
  item === "*" ? ((_a2 = query.join) == null ? void 0 : _a2.length) ? `${quotedAs}.*` : "*" : quoteFullColumn(item, quotedAs)
2516
2516
  );
2517
2517
  } else if ((_b = item.query) == null ? void 0 : _b[relationQueryKey]) {
2518
- let relationQuery = item.clone();
2519
- const as = q(getQueryAs(relationQuery));
2518
+ const relationQuery = item.clone();
2519
+ const as = getQueryAs(relationQuery);
2520
2520
  relationQuery._as(relationQuery.query[relationQueryKey]);
2521
- const { returnType } = relationQuery.query;
2522
- switch (returnType) {
2523
- case "all":
2524
- case "one":
2525
- case "oneOrThrow":
2526
- relationQuery = relationQuery._json();
2527
- break;
2528
- case "pluck": {
2529
- const { select } = relationQuery.query;
2530
- const first = select == null ? void 0 : select[0];
2531
- if (!select || !first) {
2532
- throw new PormInternalError(`Nothing was selected for pluck`);
2533
- }
2534
- select.length = 0;
2535
- select[0] = { selectAs: { c: first } };
2536
- relationQuery = relationQuery._wrap(
2537
- relationQuery.__model.clone()
2538
- );
2539
- relationQuery._getOptional(
2540
- raw(`COALESCE(json_agg("c"), '[]')`)
2541
- );
2542
- delete relationQuery.query.take;
2543
- break;
2544
- }
2545
- case "rows":
2546
- case "value":
2547
- case "valueOrThrow":
2548
- case "rowCount":
2549
- case "void":
2550
- break;
2551
- default:
2552
- throw new UnhandledTypeError(returnType);
2553
- }
2554
- list.push(`(${relationQuery.toSql(values).text}) AS ${as}`);
2521
+ pushSubQuerySql(relationQuery, as, values, list);
2555
2522
  } else {
2556
2523
  if ("selectAs" in item) {
2557
2524
  const obj = item.selectAs;
@@ -2561,8 +2528,7 @@ const selectToSql = (model, query, values, quotedAs) => {
2561
2528
  if (isRaw(value)) {
2562
2529
  list.push(`${getRaw(value, values)} AS ${q(as)}`);
2563
2530
  } else {
2564
- const sql = value.json().toSql(values);
2565
- list.push(`(${sql.text}) AS ${q(as)}`);
2531
+ pushSubQuerySql(value, as, values, list);
2566
2532
  }
2567
2533
  } else {
2568
2534
  list.push(
@@ -2595,6 +2561,38 @@ const selectToSql = (model, query, values, quotedAs) => {
2595
2561
  return ((_a = query.join) == null ? void 0 : _a.length) ? `${quotedAs}.*` : "*";
2596
2562
  }
2597
2563
  };
2564
+ const pushSubQuerySql = (query, as, values, list) => {
2565
+ const { returnType } = query.query;
2566
+ switch (returnType) {
2567
+ case "all":
2568
+ case "one":
2569
+ case "oneOrThrow":
2570
+ query = query._json();
2571
+ break;
2572
+ case "pluck": {
2573
+ const { select } = query.query;
2574
+ const first = select == null ? void 0 : select[0];
2575
+ if (!select || !first) {
2576
+ throw new PormInternalError(`Nothing was selected for pluck`);
2577
+ }
2578
+ select.length = 0;
2579
+ select[0] = { selectAs: { c: first } };
2580
+ query = query._wrap(query.__model.clone());
2581
+ query._getOptional(raw(`COALESCE(json_agg("c"), '[]')`));
2582
+ delete query.query.take;
2583
+ break;
2584
+ }
2585
+ case "rows":
2586
+ case "value":
2587
+ case "valueOrThrow":
2588
+ case "rowCount":
2589
+ case "void":
2590
+ break;
2591
+ default:
2592
+ throw new UnhandledTypeError(returnType);
2593
+ }
2594
+ list.push(`(${query.toSql(values).text}) AS ${q(as)}`);
2595
+ };
2598
2596
 
2599
2597
  const aggregateOptionNames = [
2600
2598
  "distinct",