pqb 0.0.7 → 0.0.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
@@ -431,7 +431,7 @@ declare type BaseRelation = {
431
431
  key: string;
432
432
  model: QueryWithTable;
433
433
  query: QueryWithTable;
434
- joinQuery: Query;
434
+ joinQuery(fromQuery: Query, toQuery: Query): Query;
435
435
  nestedCreateQuery: Query;
436
436
  nestedInsert?: BelongsToNestedInsert | HasOneNestedInsert | HasManyNestedInsert;
437
437
  nestedUpdate?: BelongsToNestedUpdate | HasOneNestedUpdate | HasManyNestedUpdate;
@@ -774,20 +774,16 @@ declare type WhereJsonPathEqualsItem = [
774
774
  rightPath: string
775
775
  ];
776
776
  declare type WhereOnItem = {
777
- joinFrom: {
778
- table?: string;
779
- query: {
780
- as?: string;
781
- };
782
- } | string;
783
- joinTo: {
784
- table?: string;
785
- query: {
786
- as?: string;
787
- };
788
- } | string;
777
+ joinFrom: WhereOnJoinItem;
778
+ joinTo: WhereOnJoinItem;
789
779
  on: [leftFullColumn: string, rightFullColumn: string] | [leftFullColumn: string, op: string, rightFullColumn: string];
790
780
  };
781
+ declare type WhereOnJoinItem = {
782
+ table?: string;
783
+ query: {
784
+ as?: string;
785
+ };
786
+ } | string;
791
787
  declare type AggregateItemOptions = {
792
788
  as?: string;
793
789
  distinct?: boolean;
@@ -1041,7 +1037,7 @@ declare class QueryGet {
1041
1037
  declare type SelectArg<T extends QueryBase> = keyof T['selectable'] | (T['relations'] extends Record<string, Relation> ? keyof T['relations'] : never) | RelationQueryBase | SelectAsArg<T>;
1042
1038
  declare type SelectAsArg<T extends QueryBase> = Record<string, keyof T['selectable'] | Query | RawExpression>;
1043
1039
  declare type SelectResult<T extends Query, Args extends SelectArg<T>[], SelectAsArgs = SimpleSpread<FilterTuple<Args, SelectAsArg<QueryBase>>>> = AddQuerySelect<T, {
1044
- [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[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 ? 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;
1045
1041
  } & {
1046
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;
1047
1043
  }>;
@@ -2172,6 +2168,8 @@ declare class ArrayOfColumnsObjects<Shape extends ColumnsShape> extends ColumnTy
2172
2168
  };
2173
2169
  constructor(shape: Shape);
2174
2170
  }
2171
+ declare abstract class PluckResultColumnType<C extends ColumnType> extends ColumnType<C['type'][], typeof Operators.any> {
2172
+ }
2175
2173
  declare type UnionKeyofToOvlds<S, U> = UnionToIntersection<U extends keyof S ? (f: U) => void : never>;
2176
2174
  declare type PopKeyofColumnShapeUnion<S extends ColumnsShape, U extends keyof S> = UnionKeyofToOvlds<S, U> extends (a: infer A extends keyof S) => void ? A : never;
2177
2175
  declare type IsUnion<T> = [T] extends [UnionToIntersection<T>] ? false : true;
@@ -4278,10 +4276,17 @@ declare const setQueryObjectValue: <T extends {
4278
4276
  query: QueryData;
4279
4277
  }>(q: T, object: string, key: string, value: unknown) => T;
4280
4278
 
4281
- declare class NotFoundError extends Error {
4279
+ declare class PormError extends Error {
4280
+ }
4281
+ declare class NotFoundError extends PormError {
4282
4282
  constructor(message?: string);
4283
4283
  }
4284
- declare class MoreThanOneRowError extends Error {
4284
+ declare class MoreThanOneRowError extends PormError {
4285
+ }
4286
+ declare class PormInternalError extends Error {
4287
+ }
4288
+ declare class UnhandledTypeError extends PormInternalError {
4289
+ constructor(value: never);
4285
4290
  }
4286
4291
 
4287
- export { Adapter, AdapterOptions, AddQueryJoinedTable, AddQuerySelect, AddQueryWith, AfterCallback, Aggregate, Aggregate1ArgumentTypes, AggregateArg, AggregateItem, AggregateItemArg, AggregateItemOptions, AggregateOptions, AliasOrTable, AnyColumnType, AnyColumnTypeCreator, ArrayCardinality, ArrayColumn, ArrayData, ArrayOfColumnsObjects, AssertArray, BaseNumberData, BaseRelation, BaseStringData, BeforeCallback, BelongsToNestedInsert, BelongsToNestedUpdate, BelongsToRelation, BigIntColumn, BigSerialColumn, BitColumn, BitVaryingColumn, BooleanColumn, BooleanExpression, BoxColumn, ByteaColumn, CharColumn, CidrColumn, CircleColumn, Clear, ClearStatement, CoalesceString, ColumnData, ColumnInfo, ColumnInfoMethods, ColumnInfoQueryData, ColumnInput, ColumnNameOfModel, ColumnOperators, ColumnOutput, ColumnParser, ColumnShapeInput, ColumnShapeOutput, ColumnType, ColumnTypes, ColumnTypesBase, ColumnsObject, ColumnsParsers, ColumnsShape, CommonQueryData, DateBaseColumn, DateColumn, DateColumnData, DateTimeBaseClass, DateTimeColumnData, DateTimeWithTimeZoneBaseClass, Db, DbOptions, DbTableOptions, DecimalBaseColumn, DecimalColumn, DecimalColumnData, DeepPartial, DefaultSelectColumns, Delete, DeleteQueryData, DoublePrecisionColumn, DropMode, EMPTY_OBJECT, EmptyObject, EnumColumn, EnumLike, Except, Expression, ExpressionOfType, ExpressionOutput, FilterTuple, For, ForeignKey, ForeignKeyModel, ForeignKeyModelWithColumns, ForeignKeyOptions, From, GetArg, GetTypeOrRaw, GetTypesOrRaw, HasAndBelongsToManyRelation, HasManyNestedInsert, HasManyNestedUpdate, HasManyRelation, HasOneNestedInsert, HasOneNestedUpdate, HasOneRelation, Having, HavingArg, HavingItem, IndexColumnOptions, IndexOptions, InetColumn, Insert, InsertData, InsertQueryData, IntegerBaseColumn, IntegerColumn, IntervalColumn, IsEqual, JSONAny, JSONArray, JSONBigInt, JSONBoolean, JSONColumn, JSONDate, JSONDiscriminatedObject, JSONDiscriminatedUnion, JSONEnum, JSONInstanceOf, JSONIntersection, JSONLazy, JSONLiteral, JSONMap, JSONNaN, JSONNativeEnum, JSONNever, JSONNotNullable, JSONNotNullish, JSONNull, JSONNullable, JSONNullish, JSONNumber, JSONObject, JSONObjectShape, JSONOptional, JSONRecord, JSONRecordKeyType, JSONRequired, JSONSet, JSONString, JSONTextColumn, JSONTuple, JSONTupleItems, JSONType, JSONTypeAny, JSONTypeData, JSONTypes, JSONUndefined, JSONUnion, JSONUnknown, JSONVoid, Join, JoinArgs, JoinCallback, JoinCallbackArg, JoinItem, JoinedTablesBase, Json, JsonItem, LimitedTextBaseColumn, LineColumn, LsegColumn, MacAddr8Column, MacAddrColumn, MaybeArray, Merge, MoneyColumn, MoreThanOneRowError, NestedInsertItem, NestedInsertManyItems, NestedInsertOneItem, NestedUpdateItem, NestedUpdateManyItems, NestedUpdateOneItem, NotFoundError, NullableColumn, NumberAsStringBaseColumn, NumberBaseColumn, NumberColumn, NumberColumnData, NumberExpression, OnConflictItem, OnConflictMergeUpdate, OnConflictQueryBuilder, OnQueryBuilder, Operator, Operators, OptionalKeys, OrderArg, OrderItem, OutputTypeOfTuple, OutputTypeOfTupleWithRest, OwnTypeProps, PathColumn, PointColumn, PolygonColumn, Primitive, PropertyKeyUnionToArray, Query, QueryArraysResult, QueryBase, QueryCallbacks, QueryData, QueryGet, QueryInput, QueryLog, QueryLogObject, QueryLogOptions, QueryLogger, QueryMethods, QueryResult, QueryResultRow, QueryReturnType, QuerySelectAll, QueryUpsert, QueryWithTable, RawExpression, RealColumn, Relation, RelationQuery, RelationQueryBase, RelationsBase, Select, SelectAgg, SelectArg, SelectFunctionItem, SelectItem, SelectQueryData, Selectable, SelectableBase, SerialColumn, SetOptional, SetQueryJoinedTables, SetQueryReturns, SetQueryReturnsAll, SetQueryReturnsColumnInfo, SetQueryReturnsOne, SetQueryReturnsOneOptional, SetQueryReturnsPluck, SetQueryReturnsRowCount, SetQueryReturnsRows, SetQueryReturnsValue, SetQueryReturnsValueOptional, SetQueryReturnsVoid, SetQueryTableAlias, SetQueryWindows, SetQueryWith, SimpleSpread, SingleColumnIndexOptions, SmallIntColumn, SmallSerialColumn, SortDir, Spread, Sql, StringColumn, StringExpression, StringKey, TableData, TableSchema, TextBaseColumn, TextColumn, TextColumnData, Then, ThenResult, TimeColumn, TimeInterval, TimeWithTimeZoneColumn, TimestampColumn, TimestampWithTimeZoneColumn, Transaction, TransactionAdapter, TruncateQueryData, TsQueryColumn, TsVectorColumn, TypeParsers, UUIDColumn, Union, UnionArg, UnionItem, UnionToArray, UnionToIntersection, UnionToOvlds, UnknownKeysParam, Update, UpdateData, UpdateQueryData, UpsertData, UpsertResult, UpsertThis, ValidationContext, VarCharColumn, Where, WhereArg, WhereInArg, WhereInColumn, WhereInItem, WhereInValues, WhereItem, WhereJsonPathEqualsItem, WhereOnItem, WhereQueryBuilder, WhereResult, WindowArg, WindowArgDeclaration, WindowDeclaration, WindowFunctionOptions, WindowItem, With, WithDataBase, WithDataItem, WithItem, WithOptions, XMLColumn, addOr, addOrNot, addParserForRawExpression, addParserForSelectItem, addParserToQuery, addQueryOn, addQueryOrOn, addQuestionMarks, addWhere, addWhereIn, addWhereNot, aggregate1FunctionNames, applyMixins, array, arrayToEnum, baseObjectOutputType, columnTypes, utils as columnUtils, constructType, createDb, createOperator, defaultsKey, discriminatedUnion, emptyObject, enumType, flatten, getClonedQueryData, getColumnTypes, getQueryAs, getQueryParsers, getRaw, getTableData, getValidEnumValues, getValueKey, handleResult, identity, instanceOf, intersection, isRaw, isRequiredRelationKey, joinTruthy, jsonTypes, lazy, literal, logColors, logParamToLogObject, map, nativeEnum, newTableData, noop, notNullable, notNullish, nullable, nullish, object, optional, parseRecord, parseResult, processSelectArg, pushQueryArray, pushQueryOn, pushQueryOrOn, pushQueryValue, queryKeysOfNotSimpleQuery, queryMethodByReturnType, quote, raw, record, relationQueryKey, removeFromQuery, required, resetTableData, scalarTypes, set, setQueryObjectValue, toArray, toSql, tuple, union };
4292
+ export { Adapter, AdapterOptions, AddQueryJoinedTable, AddQuerySelect, AddQueryWith, AfterCallback, Aggregate, Aggregate1ArgumentTypes, AggregateArg, AggregateItem, AggregateItemArg, AggregateItemOptions, AggregateOptions, AliasOrTable, AnyColumnType, AnyColumnTypeCreator, ArrayCardinality, ArrayColumn, ArrayData, ArrayOfColumnsObjects, AssertArray, BaseNumberData, BaseRelation, BaseStringData, BeforeCallback, BelongsToNestedInsert, BelongsToNestedUpdate, BelongsToRelation, BigIntColumn, BigSerialColumn, BitColumn, BitVaryingColumn, BooleanColumn, BooleanExpression, BoxColumn, ByteaColumn, CharColumn, CidrColumn, CircleColumn, Clear, ClearStatement, CoalesceString, ColumnData, ColumnInfo, ColumnInfoMethods, ColumnInfoQueryData, ColumnInput, ColumnNameOfModel, ColumnOperators, ColumnOutput, ColumnParser, ColumnShapeInput, ColumnShapeOutput, ColumnType, ColumnTypes, ColumnTypesBase, ColumnsObject, ColumnsParsers, ColumnsShape, CommonQueryData, DateBaseColumn, DateColumn, DateColumnData, DateTimeBaseClass, DateTimeColumnData, DateTimeWithTimeZoneBaseClass, Db, DbOptions, DbTableOptions, DecimalBaseColumn, DecimalColumn, DecimalColumnData, DeepPartial, DefaultSelectColumns, Delete, DeleteQueryData, DoublePrecisionColumn, DropMode, EMPTY_OBJECT, EmptyObject, EnumColumn, EnumLike, Except, Expression, ExpressionOfType, ExpressionOutput, FilterTuple, For, ForeignKey, ForeignKeyModel, ForeignKeyModelWithColumns, ForeignKeyOptions, From, GetArg, GetTypeOrRaw, GetTypesOrRaw, HasAndBelongsToManyRelation, HasManyNestedInsert, HasManyNestedUpdate, HasManyRelation, HasOneNestedInsert, HasOneNestedUpdate, HasOneRelation, Having, HavingArg, HavingItem, IndexColumnOptions, IndexOptions, InetColumn, Insert, InsertData, InsertQueryData, IntegerBaseColumn, IntegerColumn, IntervalColumn, IsEqual, JSONAny, JSONArray, JSONBigInt, JSONBoolean, JSONColumn, JSONDate, JSONDiscriminatedObject, JSONDiscriminatedUnion, JSONEnum, JSONInstanceOf, JSONIntersection, JSONLazy, JSONLiteral, JSONMap, JSONNaN, JSONNativeEnum, JSONNever, JSONNotNullable, JSONNotNullish, JSONNull, JSONNullable, JSONNullish, JSONNumber, JSONObject, JSONObjectShape, JSONOptional, JSONRecord, JSONRecordKeyType, JSONRequired, JSONSet, JSONString, JSONTextColumn, JSONTuple, JSONTupleItems, JSONType, JSONTypeAny, JSONTypeData, JSONTypes, JSONUndefined, JSONUnion, JSONUnknown, JSONVoid, Join, JoinArgs, JoinCallback, JoinCallbackArg, JoinItem, JoinedTablesBase, Json, JsonItem, LimitedTextBaseColumn, LineColumn, LsegColumn, MacAddr8Column, MacAddrColumn, MaybeArray, Merge, MoneyColumn, MoreThanOneRowError, NestedInsertItem, NestedInsertManyItems, NestedInsertOneItem, NestedUpdateItem, NestedUpdateManyItems, NestedUpdateOneItem, NotFoundError, NullableColumn, NumberAsStringBaseColumn, NumberBaseColumn, NumberColumn, NumberColumnData, NumberExpression, OnConflictItem, OnConflictMergeUpdate, OnConflictQueryBuilder, OnQueryBuilder, Operator, Operators, OptionalKeys, OrderArg, OrderItem, OutputTypeOfTuple, OutputTypeOfTupleWithRest, OwnTypeProps, PathColumn, PluckResultColumnType, PointColumn, PolygonColumn, PormError, PormInternalError, Primitive, PropertyKeyUnionToArray, Query, QueryArraysResult, QueryBase, QueryCallbacks, QueryData, QueryGet, QueryInput, QueryLog, QueryLogObject, QueryLogOptions, QueryLogger, QueryMethods, QueryResult, QueryResultRow, QueryReturnType, QuerySelectAll, QueryUpsert, QueryWithTable, RawExpression, RealColumn, Relation, RelationQuery, RelationQueryBase, RelationsBase, Select, SelectAgg, SelectArg, SelectFunctionItem, SelectItem, SelectQueryData, Selectable, SelectableBase, SerialColumn, SetOptional, SetQueryJoinedTables, SetQueryReturns, SetQueryReturnsAll, SetQueryReturnsColumnInfo, SetQueryReturnsOne, SetQueryReturnsOneOptional, SetQueryReturnsPluck, SetQueryReturnsRowCount, SetQueryReturnsRows, SetQueryReturnsValue, SetQueryReturnsValueOptional, SetQueryReturnsVoid, SetQueryTableAlias, SetQueryWindows, SetQueryWith, SimpleSpread, SingleColumnIndexOptions, SmallIntColumn, SmallSerialColumn, SortDir, Spread, Sql, StringColumn, StringExpression, StringKey, TableData, TableSchema, TextBaseColumn, TextColumn, TextColumnData, Then, ThenResult, TimeColumn, TimeInterval, TimeWithTimeZoneColumn, TimestampColumn, TimestampWithTimeZoneColumn, Transaction, TransactionAdapter, TruncateQueryData, TsQueryColumn, TsVectorColumn, TypeParsers, UUIDColumn, UnhandledTypeError, Union, UnionArg, UnionItem, UnionToArray, UnionToIntersection, UnionToOvlds, UnknownKeysParam, Update, UpdateData, UpdateQueryData, UpsertData, UpsertResult, UpsertThis, ValidationContext, VarCharColumn, Where, WhereArg, WhereInArg, WhereInColumn, WhereInItem, WhereInValues, WhereItem, WhereJsonPathEqualsItem, WhereOnItem, WhereOnJoinItem, WhereQueryBuilder, WhereResult, WindowArg, WindowArgDeclaration, WindowDeclaration, WindowFunctionOptions, WindowItem, With, WithDataBase, WithDataItem, WithItem, WithOptions, XMLColumn, addOr, addOrNot, addParserForRawExpression, addParserForSelectItem, addParserToQuery, addQueryOn, addQueryOrOn, addQuestionMarks, addWhere, addWhereIn, addWhereNot, aggregate1FunctionNames, applyMixins, array, arrayToEnum, baseObjectOutputType, columnTypes, utils as columnUtils, constructType, createDb, createOperator, defaultsKey, discriminatedUnion, emptyObject, enumType, flatten, getClonedQueryData, getColumnTypes, getQueryAs, getQueryParsers, getRaw, getTableData, getValidEnumValues, getValueKey, handleResult, identity, instanceOf, intersection, isRaw, isRequiredRelationKey, joinTruthy, jsonTypes, lazy, literal, logColors, logParamToLogObject, map, nativeEnum, newTableData, noop, notNullable, notNullish, nullable, nullish, object, optional, parseRecord, parseResult, processSelectArg, pushQueryArray, pushQueryOn, pushQueryOrOn, pushQueryValue, queryKeysOfNotSimpleQuery, queryMethodByReturnType, quote, raw, record, relationQueryKey, removeFromQuery, required, resetTableData, scalarTypes, set, setQueryObjectValue, toArray, toSql, tuple, union };
package/dist/index.esm.js CHANGED
@@ -1929,6 +1929,8 @@ class ArrayOfColumnsObjects extends ColumnType {
1929
1929
  this.operators = Operators.any;
1930
1930
  }
1931
1931
  }
1932
+ class PluckResultColumnType extends ColumnType {
1933
+ }
1932
1934
  class TableSchema {
1933
1935
  constructor(shape) {
1934
1936
  this.shape = shape;
@@ -2001,21 +2003,28 @@ const processJoinItem = (model, query, values, args, quotedAs) => {
2001
2003
  const [first] = args;
2002
2004
  if (typeof first === "string") {
2003
2005
  if (first in model.relations) {
2004
- const { key, joinQuery: joinQuery2 } = model.relations[first];
2005
- const table = typeof joinQuery2.query.from === "string" ? joinQuery2.query.from : joinQuery2.table;
2006
- let target3 = quoteSchemaAndTable(joinQuery2.query.schema, table);
2007
- const as = joinQuery2.query.as || key;
2006
+ const {
2007
+ key,
2008
+ query: toQuery,
2009
+ joinQuery: joinQuery2
2010
+ } = model.relations[first];
2011
+ const joinedQuery = joinQuery2(model, toQuery);
2012
+ const joinedQueryData = joinedQuery.query;
2013
+ const table = typeof joinedQueryData.from === "string" ? joinedQueryData.from : joinedQuery.table;
2014
+ let target3 = quoteSchemaAndTable(joinedQueryData.schema, table);
2015
+ const as = joinedQueryData.as || key;
2008
2016
  if (as !== table) {
2009
2017
  target3 += ` AS ${q(as)}`;
2010
2018
  }
2011
2019
  const queryData = {
2020
+ as: joinedQuery.query.as,
2012
2021
  and: [],
2013
2022
  or: []
2014
2023
  };
2015
- if (joinQuery2.query.and)
2016
- queryData.and.push(...joinQuery2.query.and);
2017
- if (joinQuery2.query.or)
2018
- queryData.or.push(...joinQuery2.query.or);
2024
+ if (joinedQueryData.and)
2025
+ queryData.and.push(...joinedQueryData.and);
2026
+ if (joinedQueryData.or)
2027
+ queryData.or.push(...joinedQueryData.or);
2019
2028
  const arg = (_a = args[1]) == null ? void 0 : _a.call(
2020
2029
  args,
2021
2030
  new model.onQueryBuilder({ table: model.table, query }, args[0])
@@ -2028,7 +2037,7 @@ const processJoinItem = (model, query, values, args, quotedAs) => {
2028
2037
  }
2029
2038
  const joinAs2 = q(as);
2030
2039
  const onConditions = whereToSql(
2031
- joinQuery2,
2040
+ joinedQuery,
2032
2041
  queryData,
2033
2042
  values,
2034
2043
  quotedAs,
@@ -2324,9 +2333,9 @@ const whereHandlers = {
2324
2333
  const item = value;
2325
2334
  const leftColumn = quoteFullColumn(
2326
2335
  item.on[0],
2327
- typeof item.joinTo === "string" ? q(item.joinTo) : q(getQueryAs(item.joinTo))
2336
+ getJoinItemSource(item.joinTo)
2328
2337
  );
2329
- const joinTo = typeof item.joinFrom === "string" ? item.joinFrom : q(getQueryAs(item.joinFrom));
2338
+ const joinTo = getJoinItemSource(item.joinFrom);
2330
2339
  const [op, rightColumn] = item.on.length === 2 ? ["=", quoteFullColumn(item.on[1], joinTo)] : [item.on[1], quoteFullColumn(item.on[2], joinTo)];
2331
2340
  ands.push(`${prefix}${leftColumn} ${op} ${rightColumn}`);
2332
2341
  }
@@ -2352,6 +2361,9 @@ const whereHandlers = {
2352
2361
  });
2353
2362
  }
2354
2363
  };
2364
+ const getJoinItemSource = (joinItem) => {
2365
+ return typeof joinItem === "string" ? q(joinItem) : q(getQueryAs(joinItem));
2366
+ };
2355
2367
  const pushIn = (ands, prefix, quotedAs, values, arg) => {
2356
2368
  let value;
2357
2369
  if (Array.isArray(arg.values)) {
@@ -2434,6 +2446,23 @@ const aggregateToSql = (model, values, item, quotedAs) => {
2434
2446
  const relationQueryKey = Symbol("relationQuery");
2435
2447
  const isRequiredRelationKey = Symbol("isRequiredRelation");
2436
2448
 
2449
+ class PormError extends Error {
2450
+ }
2451
+ class NotFoundError extends PormError {
2452
+ constructor(message = "Record is not found") {
2453
+ super(message);
2454
+ }
2455
+ }
2456
+ class MoreThanOneRowError extends PormError {
2457
+ }
2458
+ class PormInternalError extends Error {
2459
+ }
2460
+ class UnhandledTypeError extends PormInternalError {
2461
+ constructor(value) {
2462
+ super(`Unhandled type: ${JSON.stringify(value)} received`);
2463
+ }
2464
+ }
2465
+
2437
2466
  const jsonColumnOrMethodToSql = (column, values, quotedAs) => {
2438
2467
  return typeof column === "string" ? quoteFullColumn(column, quotedAs) : jsonToSql(column, values, quotedAs);
2439
2468
  };
@@ -2478,7 +2507,7 @@ const selectToSql = (model, query, values, quotedAs) => {
2478
2507
  if (query.select) {
2479
2508
  const list = [];
2480
2509
  query.select.forEach((item) => {
2481
- var _a2, _b;
2510
+ var _a2, _b, _c;
2482
2511
  if (typeof item === "string") {
2483
2512
  list.push(
2484
2513
  item === "*" ? ((_a2 = query.join) == null ? void 0 : _a2.length) ? `${quotedAs}.*` : "*" : quoteFullColumn(item, quotedAs)
@@ -2488,8 +2517,35 @@ const selectToSql = (model, query, values, quotedAs) => {
2488
2517
  const as = q(getQueryAs(relationQuery));
2489
2518
  relationQuery._as(relationQuery.query[relationQueryKey]);
2490
2519
  const { returnType } = relationQuery.query;
2491
- if (returnType === "all" || returnType === "one" || returnType === "oneOrThrow") {
2492
- relationQuery = relationQuery._json();
2520
+ switch (returnType) {
2521
+ case "all":
2522
+ case "one":
2523
+ case "oneOrThrow":
2524
+ relationQuery = relationQuery._json();
2525
+ break;
2526
+ case "pluck": {
2527
+ const first = (_c = relationQuery.query.select) == null ? void 0 : _c[0];
2528
+ if (!first)
2529
+ throw new PormInternalError(`Nothing was selected for pluck`);
2530
+ const selection = selectToSql(
2531
+ relationQuery.__model,
2532
+ relationQuery.query,
2533
+ values,
2534
+ q(getQueryAs(relationQuery))
2535
+ );
2536
+ relationQuery.query.select = [
2537
+ raw(`COALESCE(json_agg(${selection}), '[]')`)
2538
+ ];
2539
+ break;
2540
+ }
2541
+ case "rows":
2542
+ case "value":
2543
+ case "valueOrThrow":
2544
+ case "rowCount":
2545
+ case "void":
2546
+ break;
2547
+ default:
2548
+ throw new UnhandledTypeError(returnType);
2493
2549
  }
2494
2550
  list.push(`(${relationQuery.toSql(values).text}) AS ${as}`);
2495
2551
  } else {
@@ -3096,14 +3152,6 @@ const setQueryObjectValue = (q, object, key, value) => {
3096
3152
  return q;
3097
3153
  };
3098
3154
 
3099
- class NotFoundError extends Error {
3100
- constructor(message = "Record is not found") {
3101
- super(message);
3102
- }
3103
- }
3104
- class MoreThanOneRowError extends Error {
3105
- }
3106
-
3107
3155
  const addParserForRawExpression = (q, key, raw) => {
3108
3156
  var _a;
3109
3157
  const parser = (_a = raw.__column) == null ? void 0 : _a.parseFn;
@@ -3932,6 +3980,9 @@ class WhereQueryBuilder extends Where {
3932
3980
  this.relations = {};
3933
3981
  this.withData = {};
3934
3982
  this.__model = this;
3983
+ if (tableAlias) {
3984
+ this.query.as = tableAlias;
3985
+ }
3935
3986
  }
3936
3987
  clone() {
3937
3988
  const cloned = Object.create(this.__model);
@@ -5446,5 +5497,5 @@ const createDb = (_a) => {
5446
5497
 
5447
5498
  const defaultsKey = Symbol("defaults");
5448
5499
 
5449
- export { Adapter, Aggregate, ArrayColumn, ArrayOfColumnsObjects, BigIntColumn, BigSerialColumn, BitColumn, BitVaryingColumn, BooleanColumn, BoxColumn, ByteaColumn, CharColumn, CidrColumn, CircleColumn, Clear, ColumnInfoMethods, ColumnType, ColumnsObject, DateBaseColumn, DateColumn, DateTimeBaseClass, DateTimeWithTimeZoneBaseClass, Db, DecimalBaseColumn, DecimalColumn, Delete, DoublePrecisionColumn, EMPTY_OBJECT, EnumColumn, For, From, Having, InetColumn, Insert, IntegerBaseColumn, IntegerColumn, IntervalColumn, JSONColumn, JSONTextColumn, Join, Json, LimitedTextBaseColumn, LineColumn, LsegColumn, MacAddr8Column, MacAddrColumn, MoneyColumn, MoreThanOneRowError, NotFoundError, NumberAsStringBaseColumn, NumberBaseColumn, OnConflictQueryBuilder, OnQueryBuilder, Operators, PathColumn, PointColumn, PolygonColumn, QueryCallbacks, QueryGet, QueryLog, QueryMethods, QueryUpsert, RealColumn, Select, SerialColumn, SmallIntColumn, SmallSerialColumn, TableSchema, TextBaseColumn, TextColumn, Then, TimeColumn, TimeWithTimeZoneColumn, TimestampColumn, TimestampWithTimeZoneColumn, Transaction, TransactionAdapter, TsQueryColumn, TsVectorColumn, UUIDColumn, Union, Update, VarCharColumn, Where, WhereQueryBuilder, With, XMLColumn, addOr, addOrNot, addParserForRawExpression, addParserForSelectItem, addParserToQuery, addQueryOn, addQueryOrOn, addWhere, addWhereIn, addWhereNot, aggregate1FunctionNames, applyMixins, array, arrayToEnum, columnTypes, utils as columnUtils, constructType, createDb, createOperator, defaultsKey, discriminatedUnion, emptyObject, enumType, getClonedQueryData, getColumnTypes, getQueryAs, getQueryParsers, getRaw, getTableData, getValidEnumValues, getValueKey, handleResult, instanceOf, intersection, isRaw, isRequiredRelationKey, joinTruthy, jsonTypes, lazy, literal, logColors, logParamToLogObject, map, nativeEnum, newTableData, noop, notNullable, notNullish, nullable, nullish, object, optional, parseRecord, parseResult, processSelectArg, pushQueryArray, pushQueryOn, pushQueryOrOn, pushQueryValue, queryKeysOfNotSimpleQuery, queryMethodByReturnType, quote, raw, record, relationQueryKey, removeFromQuery, required, resetTableData, scalarTypes, set, setQueryObjectValue, toArray, toSql, tuple, union };
5500
+ export { Adapter, Aggregate, ArrayColumn, ArrayOfColumnsObjects, BigIntColumn, BigSerialColumn, BitColumn, BitVaryingColumn, BooleanColumn, BoxColumn, ByteaColumn, CharColumn, CidrColumn, CircleColumn, Clear, ColumnInfoMethods, ColumnType, ColumnsObject, DateBaseColumn, DateColumn, DateTimeBaseClass, DateTimeWithTimeZoneBaseClass, Db, DecimalBaseColumn, DecimalColumn, Delete, DoublePrecisionColumn, EMPTY_OBJECT, EnumColumn, For, From, Having, InetColumn, Insert, IntegerBaseColumn, IntegerColumn, IntervalColumn, JSONColumn, JSONTextColumn, Join, Json, LimitedTextBaseColumn, LineColumn, LsegColumn, MacAddr8Column, MacAddrColumn, MoneyColumn, MoreThanOneRowError, NotFoundError, NumberAsStringBaseColumn, NumberBaseColumn, OnConflictQueryBuilder, OnQueryBuilder, Operators, PathColumn, PluckResultColumnType, PointColumn, PolygonColumn, PormError, PormInternalError, QueryCallbacks, QueryGet, QueryLog, QueryMethods, QueryUpsert, RealColumn, Select, SerialColumn, SmallIntColumn, SmallSerialColumn, TableSchema, TextBaseColumn, TextColumn, Then, TimeColumn, TimeWithTimeZoneColumn, TimestampColumn, TimestampWithTimeZoneColumn, Transaction, TransactionAdapter, TsQueryColumn, TsVectorColumn, UUIDColumn, UnhandledTypeError, Union, Update, VarCharColumn, Where, WhereQueryBuilder, With, XMLColumn, addOr, addOrNot, addParserForRawExpression, addParserForSelectItem, addParserToQuery, addQueryOn, addQueryOrOn, addWhere, addWhereIn, addWhereNot, aggregate1FunctionNames, applyMixins, array, arrayToEnum, columnTypes, utils as columnUtils, constructType, createDb, createOperator, defaultsKey, discriminatedUnion, emptyObject, enumType, getClonedQueryData, getColumnTypes, getQueryAs, getQueryParsers, getRaw, getTableData, getValidEnumValues, getValueKey, handleResult, instanceOf, intersection, isRaw, isRequiredRelationKey, joinTruthy, jsonTypes, lazy, literal, logColors, logParamToLogObject, map, nativeEnum, newTableData, noop, notNullable, notNullish, nullable, nullish, object, optional, parseRecord, parseResult, processSelectArg, pushQueryArray, pushQueryOn, pushQueryOrOn, pushQueryValue, queryKeysOfNotSimpleQuery, queryMethodByReturnType, quote, raw, record, relationQueryKey, removeFromQuery, required, resetTableData, scalarTypes, set, setQueryObjectValue, toArray, toSql, tuple, union };
5450
5501
  //# sourceMappingURL=index.esm.js.map