pqb 0.40.9 → 0.40.11

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
@@ -159,7 +159,7 @@ type QuerySourceItem = {
159
159
  } | {
160
160
  tsQuery: string | Expression;
161
161
  });
162
- type JoinItem = SimpleJoinItem | JoinLateralItem;
162
+ type JoinItem = SimpleJoinItem;
163
163
  type SimpleJoinItemNonSubQueryArgs = [{
164
164
  [K: string]: string | Expression;
165
165
  } | Expression | true] | [leftColumn: string | Expression, rightColumn: string | Expression] | [
@@ -1885,6 +1885,13 @@ interface QueryMetaHasWhere {
1885
1885
  hasWhere: true;
1886
1886
  };
1887
1887
  }
1888
+ interface QueryFnReturningSelect {
1889
+ (q: never): {
1890
+ meta: {
1891
+ hasSelect: true;
1892
+ };
1893
+ };
1894
+ }
1888
1895
  /**
1889
1896
  * Mutative {@link Where.prototype.where}
1890
1897
  */
@@ -2485,6 +2492,10 @@ declare class Where {
2485
2492
  * // find by a relation name if it's defined
2486
2493
  * db.user.whereExists('account');
2487
2494
  *
2495
+ * // find users who have an account with positive balance
2496
+ * // `accounts` is a relation name
2497
+ * db.user.whereExists((q) => q.accounts.where({ balance: { gt: 0 } }));
2498
+ *
2488
2499
  * // find using a table and a join conditions
2489
2500
  * db.user.whereExists(db.account, 'account.id', 'user.id');
2490
2501
  *
@@ -2492,7 +2503,11 @@ declare class Where {
2492
2503
  * db.user.whereExists(db.account, (q) => q.on('account.id', '=', 'user.id'));
2493
2504
  * ```
2494
2505
  */
2495
- whereExists<T extends PickQueryMetaShapeRelationsWithData, Arg extends JoinFirstArg<T>>(this: T, arg: Arg, ...args: JoinArgs<T, Arg>): WhereResult<T>;
2506
+ whereExists<T extends PickQueryMetaShapeRelationsWithData, Arg extends JoinFirstArg<T>, Args extends JoinArgs<T, Arg>>(this: T, arg: Arg, ...args: Args): Arg extends QueryFnReturningSelect ? {
2507
+ error: 'Cannot select in whereExists';
2508
+ } : Args[0] extends QueryFnReturningSelect ? {
2509
+ error: 'Cannot select in whereExists';
2510
+ } : WhereResult<T>;
2496
2511
  /**
2497
2512
  * Acts as `whereExists`, but prepends the condition with `OR`:
2498
2513
  *
@@ -3349,6 +3364,16 @@ type DbTableOptionScopes<Table extends string | undefined, Shape extends QueryCo
3349
3364
  type QueryDefaultReturnData<Shape extends QueryColumnsInit> = {
3350
3365
  [K in DefaultSelectColumns<Shape>]: Shape[K]['outputType'];
3351
3366
  }[];
3367
+ interface TableMeta<Table extends string | undefined, Shape extends QueryColumnsInit, ShapeWithComputed extends QueryColumnsInit, Scopes extends RecordUnknown | undefined> extends QueryMetaBase<{
3368
+ [K in keyof Scopes]: true;
3369
+ }> {
3370
+ kind: 'select';
3371
+ defaults: {
3372
+ [K in keyof Shape as unknown extends Shape[K]['data']['default'] ? never : K]: true;
3373
+ };
3374
+ selectable: SelectableFromShape<ShapeWithComputed, Table>;
3375
+ defaultSelect: DefaultSelectColumns<Shape>;
3376
+ }
3352
3377
  declare const anyShape: QueryColumnsInit;
3353
3378
  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 {
3354
3379
  result: Pick<Shape, DefaultSelectColumns<Shape>>;
@@ -3359,17 +3384,7 @@ interface Db<Table extends string | undefined = undefined, Shape extends QueryCo
3359
3384
  relations: EmptyObject;
3360
3385
  withData: EmptyObject;
3361
3386
  error: new (message: string, length: number, name: QueryErrorName) => QueryError<this>;
3362
- meta: {
3363
- kind: 'select';
3364
- defaults: {
3365
- [K in keyof Shape as unknown extends Shape[K]['data']['default'] ? never : K]: true;
3366
- };
3367
- scopes: {
3368
- [K in keyof Scopes]: true;
3369
- };
3370
- selectable: SelectableFromShape<ShapeWithComputed, Table>;
3371
- defaultSelect: DefaultSelectColumns<Shape>;
3372
- };
3387
+ meta: TableMeta<Table, Shape, ShapeWithComputed, Scopes>;
3373
3388
  internal: QueryInternal<{
3374
3389
  [K in keyof PrimaryKeys]: (keyof PrimaryKeys extends K ? never : keyof PrimaryKeys) extends never ? PrimaryKeys[K] : never;
3375
3390
  }[keyof PrimaryKeys], PrimaryKeys | UniqueColumns, {
@@ -3442,6 +3457,11 @@ declare class Db<Table extends string | undefined = undefined, Shape extends Que
3442
3457
  * @param args - SQL template literal, or an object { raw: string, values?: unknown[] }
3443
3458
  */
3444
3459
  queryArrays<R extends any[] = any[]>(...args: SQLQueryArgs): Promise<QueryArraysResult<R>>;
3460
+ /**
3461
+ * In snake case mode, or when columns have custom names,
3462
+ * use this method to exchange a db column name to its runtime key.
3463
+ */
3464
+ columnNameToKey(name: string): string | undefined;
3445
3465
  }
3446
3466
  interface DbTableConstructor<ColumnTypes> {
3447
3467
  <Table extends string, Shape extends QueryColumnsInit, Data extends MaybeArray<TableDataItem>, Options extends DbTableOptions<ColumnTypes, Table, Shape>>(table: Table, shape?: ((t: ColumnTypes) => Shape) | Shape, tableData?: TableDataFn<Shape, Data>, options?: Options): Db<Table, Shape, keyof ShapeColumnPrimaryKeys<Shape> extends never ? never : ShapeColumnPrimaryKeys<Shape>, ShapeUniqueColumns<Shape> | TableDataItemsUniqueColumns<Shape, Data>, TableDataItemsUniqueColumnTuples<Shape, Data>, UniqueConstraints<Shape> | TableDataItemsUniqueConstraints<Data>, ColumnTypes, Shape & ComputedColumnsFromOptions<Options['computed']>, MapTableScopesOption<Options>>;
@@ -7574,6 +7594,7 @@ interface QueryInternal<SinglePrimaryKey = any, UniqueColumns = any, UniqueColum
7574
7594
  tableData: TableData;
7575
7595
  nowSQL?: string;
7576
7596
  primaryKeys?: string[];
7597
+ columnNameToKeyMap?: Map<string, string>;
7577
7598
  }
7578
7599
  type SelectableFromShape<Shape extends QueryColumns, Table extends string | undefined> = {
7579
7600
  [K in keyof Shape]: {
@@ -7604,6 +7625,7 @@ interface Query extends QueryBase, QueryMethods<unknown> {
7604
7625
  windows: EmptyObject;
7605
7626
  relations: RelationsBase;
7606
7627
  error: new (message: string, length: number, name: QueryErrorName) => QueryError;
7628
+ columnNameToKey(name: string): string | undefined;
7607
7629
  }
7608
7630
  interface PickQueryWithData {
7609
7631
  withData: WithDataItems;
@@ -8350,6 +8372,7 @@ declare const setQueryObjectValue: <T extends {
8350
8372
  * @param method - 'update' or 'delete'
8351
8373
  */
8352
8374
  declare const throwIfNoWhere: (q: PickQueryQ, method: string) => void;
8375
+ declare const throwIfJoinLateral: (q: PickQueryQ, method: string) => void;
8353
8376
  declare const saveSearchAlias: (q: QueryBase, as: string, key: 'joinedShapes' | 'withShapes') => string;
8354
8377
  /**
8355
8378
  * Extend query prototype with new methods.
@@ -8483,4 +8506,4 @@ type CopyResult<T extends PickQueryMeta> = SetQueryKind<T, 'copy'>;
8483
8506
  */
8484
8507
  declare function copyTableData<T extends PickQueryMetaShape>(query: T, arg: CopyArg<T>): CopyResult<T>;
8485
8508
 
8486
- export { Adapter, AdapterConfig, AdapterOptions, AddQueryDefaults, AfterCommitError, AfterCommitErrorFulfilledResult, AfterCommitErrorRejectedResult, AfterCommitErrorResult, AfterHook, AggregateArgTypes, AggregateMethods, AggregateOptions, AliasOrTable, ArrayColumn, ArrayColumnValue, ArrayData, AsMethods, AsQueryArg, BigIntColumn, BigSerialColumn, BitColumn, BitVaryingColumn, BooleanColumn, BooleanQueryColumn, BoxColumn, ByteaColumn, ChangeCountArg, CidrColumn, CircleColumn, CitextColumn, Clear, ClearStatement, ColumnData, ColumnFromDbParams, ColumnInfoQueryData, ColumnRefExpression, ColumnType, ColumnsByType, ColumnsShape, ColumnsShapeToNullableObject, ColumnsShapeToObject, ColumnsShapeToObjectArray, ColumnsShapeToPluck, CommonQueryData, ComputedColumn, ComputedColumns, ComputedColumnsFromOptions, ComputedMethods, ComputedOptionsFactory, CopyOptions, CopyQueryData, Create, CreateBelongsToData, CreateColumn, CreateCtx, CreateData, CreateKind, CreateMethodsNames, CreateRelationsData, CreateRelationsDataOmittingFKeys, CreateResult, CreateSelf, CustomTypeColumn, DateBaseColumn, DateColumn, DateColumnInput, DateTimeBaseClass, DateTimeTzBaseClass, Db, DbDomainArg, DbDomainArgRecord, DbExtension, DbOptions, DbResult, DbSharedOptions, DbTableConstructor, DbTableOptionScopes, DbTableOptions, DecimalColumn, DecimalColumnData, DefaultColumnTypes, DefaultSchemaConfig, Delete, DeleteArgs, DeleteMethodsNames, DeleteQueryData, DeleteResult, DomainColumn, DoublePrecisionColumn, DynamicRawSQL, EnumColumn, ExpressionMethods, ExpressionOutput, FnExpression, FnExpressionArgs, FnExpressionArgsPairs, FnExpressionArgsValue, For, FromArg, FromMethods, FromQuerySelf, FromResult, GeneratorIgnore, GetArg, GetColumnInfo, GetQueryResult, GetResult, GetResultOptional, GetStringArg, GroupArgs, HandleResult, Having, HavingItem, HookAction, HookSelectArg, IdentityColumn, InetColumn, InsertQueryData, IntegerBaseColumn, IntegerColumn, IntervalColumn, IsolationLevel, JSONColumn, JSONTextColumn, Join, JoinArgToQuery, JoinArgs, JoinCallback, JoinFirstArg, JoinItem, JoinItemArgs, JoinLateralItem, JoinLateralResult, JoinOverrides, JoinQueryBuilder, JoinQueryMethod, JoinResult, JoinedParsers, JoinedShapes, JsonMethods, LimitedTextBaseColumn, LineColumn, LsegColumn, MacAddr8Column, MacAddrColumn, MapTableScopesOption, MergeQuery, MergeQueryMethods, MoneyColumn, MoreThanOneRowError, NoPrimaryKeyOption, NonUniqDataItem, NotFoundError, NumberAsStringBaseColumn, NumberBaseColumn, NumberColumnData, NumericColumns, OnConflictMerge, OnConflictQueryBuilder, OnConflictSet, OnConflictTarget, OnMethods, Operator, Operators, OperatorsAny, OperatorsArray, OperatorsBoolean, OperatorsDate, OperatorsJson, OperatorsNumber, OperatorsText, OperatorsTime, OrCreateArg, OrExpression, OrchidOrmError, OrchidOrmInternalError, OrderArg, OrderArgSelf, OrderArgs, OrderItem, OrderTsQueryConfig, Over, PathColumn, PickColumnData, PickQueryBaseQuery, PickQueryColumnTypes, PickQueryDataShapeAndJoinedShapes, PickQueryInternal, PickQueryMetaRelations, PickQueryMetaResultRelations, PickQueryMetaResultRelationsWindows, PickQueryMetaResultRelationsWindowsColumnTypes, PickQueryMetaResultRelationsWithDataReturnType, PickQueryMetaResultRelationsWithDataReturnTypeShape, PickQueryMetaResultReturnTypeWithDataWindows, PickQueryMetaResultReturnTypeWithDataWindowsTable, PickQueryMetaShapeRelationsWithData, PickQueryMetaTable, PickQueryMetaTableShape, PickQueryMetaTableShapeReturnTypeWithData, PickQueryMetaWithData, PickQueryMetaWithDataColumnTypes, PickQueryQ, PickQueryQAndBaseQuery, PickQueryQAndInternal, PickQueryRelations, PickQueryRelationsWithData, PickQueryResultColumnTypes, PickQueryShapeResultSinglePrimaryKey, PickQueryShapeSinglePrimaryKey, PickQuerySinglePrimaryKey, PickQueryWindows, PickQueryWithData, PickQueryWithDataColumnTypes, PointColumn, PolygonColumn, PostgisGeographyPointColumn, PostgisPoint, Query, QueryAfterHook, QueryArraysResult, QueryBase, QueryBaseThen, QueryBatchResult, QueryBeforeHook, QueryComputedArg, QueryData, QueryDataFromItem, QueryDataJoinTo, QueryDefaultReturnData, QueryError, QueryErrorName, QueryGet, QueryGetSelf, QueryHelperResult, QueryHooks, QueryInternal, QueryLog, QueryMetaHasSelect, QueryMetaHasWhere, QueryMethods, QueryOrExpression, QueryOrExpressionBooleanOrNullResult, QueryResult, QueryScopeData, QueryScopes, QuerySourceItem, QueryUpsertOrCreate, QueryWithTable, RawSQL, RealColumn, RecordOfColumnsShapeBase, RefExpression, RelationConfigBase, RelationConfigDataForCreate, RelationJoinQuery, RelationQuery, RelationQueryBase, RelationsBase, RuntimeComputedQueryColumn, SearchArg, SearchMethods, SearchWeight, SearchWeightRecord, Select, SelectArg, SelectArgs, SelectAs, SelectAsValue, SelectItem, SelectQueryData, SelectSubQueryResult, SelectableFromShape, SelectableOfType, SelectableOrExpression, SelectableOrExpressionOfType, SelectableOrExpressions, SerialColumn, SerialColumnData, SetQueryKind, SetQueryKindResult, SetQueryReturnsAll, SetQueryReturnsAllKind, SetQueryReturnsAllKindResult, SetQueryReturnsColumnInfo, SetQueryReturnsColumnKind, SetQueryReturnsColumnKindResult, SetQueryReturnsColumnOptional, SetQueryReturnsColumnOrThrow, SetQueryReturnsOne, SetQueryReturnsOneKind, SetQueryReturnsOneKindResult, SetQueryReturnsOneOptional, SetQueryReturnsPluck, SetQueryReturnsPluckColumn, SetQueryReturnsPluckColumnKind, SetQueryReturnsPluckColumnKindResult, SetQueryReturnsRowCount, SetQueryReturnsRows, SetQueryReturnsValueOptional, SetQueryReturnsValueOrThrow, SetQueryReturnsVoid, SetQueryReturnsVoidKind, SetQueryTableAlias, ShapeColumnPrimaryKeys, ShapeUniqueColumns, SimpleJoinItem, SimpleJoinItemNonSubQueryArgs, SmallIntColumn, SmallSerialColumn, SortDir, SqlFn, SqlMethod, StringColumn$1 as StringColumn, TableData, TableDataFn, TableDataInput, TableDataItem, TableDataItemsUniqueColumnTuples, TableDataItemsUniqueColumns, TableDataItemsUniqueConstraints, TableDataMethods, TextBaseColumn, TextColumn, TextColumnData, Then, TimeColumn, TimestampColumn, TimestampTZColumn, ToSQLCtx, ToSQLOptions, ToSQLQuery, Transaction, TransactionAdapter, TransactionOptions, TransformMethods, TruncateQueryData, TsQueryColumn, TsVectorColumn, TypeParsers, UUIDColumn, UnhandledTypeError, Union, UnionArgs, UnionItem, UnionKind, UnionSet, UniqueConstraints, UniqueQueryTypeOrExpression, UniqueTableDataItem, UnknownColumn, Update, UpdateArg, UpdateCtx, UpdateCtxCollect, UpdateData, UpdateQueryData, UpdateQueryDataItem, UpdateQueryDataObject, UpdateSelf, UpdatedAtDataInjector, UpsertResult, UpsertThis, VarCharColumn, VirtualColumn, Where, WhereArg, WhereArgs, WhereInArg, WhereInColumn, WhereInItem, WhereInValues, WhereItem, WhereJsonPathEqualsItem, WhereNotArgs, WhereOnItem, WhereOnJoinItem, WhereQueryBuilder, WhereResult, WhereSearchItem, WhereSearchResult, WindowArg, WindowArgDeclaration, WindowDeclaration, WindowItem, WithArgsOptions, WithConfigs, WithDataItem, WithDataItems, WithItem, WithMethods, WithOptions, WithQueryBuilder, WithRecursiveOptions, WithResult, WithSqlResult, WrapQueryArg, XMLColumn, _afterCommitError, _getSelectableColumn, _initQueryBuilder, _queryAfterSaveCommit, _queryAll, _queryAs, _queryChangeCounter, _queryCreate, _queryCreateFrom, _queryCreateMany, _queryCreateManyFrom, _queryCreateManyRaw, _queryCreateRaw, _queryDefaults, _queryDelete, _queryExec, _queryFindBy, _queryFindByOptional, _queryGet, _queryGetOptional, _queryHookAfterCreate, _queryHookAfterCreateCommit, _queryHookAfterDelete, _queryHookAfterDeleteCommit, _queryHookAfterQuery, _queryHookAfterSave, _queryHookAfterUpdate, _queryHookAfterUpdateCommit, _queryHookBeforeCreate, _queryHookBeforeDelete, _queryHookBeforeQuery, _queryHookBeforeSave, _queryHookBeforeUpdate, _queryInsert, _queryInsertFrom, _queryInsertMany, _queryInsertManyFrom, _queryInsertManyRaw, _queryInsertRaw, _queryJoinOn, _queryJoinOnJsonPathEquals, _queryJoinOrOn, _queryOr, _queryOrNot, _queryRows, _querySelect, _queryTake, _queryTakeOptional, _queryUnion, _queryUpdate, _queryUpdateOrThrow, _queryUpdateRaw, _queryWhere, _queryWhereExists, _queryWhereIn, _queryWhereNot, _queryWhereNotOneOf, _queryWhereNotSql, _queryWhereOneOf, _queryWhereSql, addParserForRawExpression, addParserForSelectItem, addQueryOn, anyShape, applyComputedColumns, checkIfASimpleQuery, cloneQuery, cloneQueryBaseUnscoped, columnCheckToCode, columnCode, columnForeignKeysToCode, columnIndexesToCode, columnsShapeToCode, commitSql, constraintInnerToCode, constraintToCode, copyTableData, countSelect, createDb, defaultSchemaConfig, escapeForLog, escapeForMigration, escapeString, extendQuery, filterResult, foreignKeyArgumentToCode, getClonedQueryData, getColumnInfo, getColumnTypes, getPrimaryKeys, getQueryAs, getShapeFromSelect, getSqlText, handleResult, identityToCode, indexInnerToCode, indexToCode, instantiateColumn, isDefaultTimeStamp, isQueryReturnsAll, isSelectingCount, joinSubQuery, logParamToLogObject, makeColumnTypes, makeColumnsByType, makeFnExpression, makeRegexToFindInSql, makeSQL, parseRecord, parseTableData, parseTableDataInput, postgisTypmodToSql, primaryKeyInnerToCode, processComputedBatches, processComputedResult, processSelectArg, pushLimitSQL, pushQueryArray, pushQueryOn, pushQueryOnForOuter, pushQueryOrOn, pushQueryValue, pushTableDataCode, queryFrom, queryFromSql, queryJson, queryMethodByReturnType, queryTypeWithLimitOne, queryWrap, raw, referencesArgsToCode, resolveSubQueryCallback, rollbackSql, saveSearchAlias, setParserForSelectedString, setQueryObjectValue, setQueryOperators, simplifyColumnDefault, sqlFn, sqlQueryArgsToExpression, tableDataMethods, templateLiteralToSQL, testTransaction, throwIfNoWhere, toSQL, toSQLCacheKey };
8509
+ export { Adapter, AdapterConfig, AdapterOptions, AddQueryDefaults, AfterCommitError, AfterCommitErrorFulfilledResult, AfterCommitErrorRejectedResult, AfterCommitErrorResult, AfterHook, AggregateArgTypes, AggregateMethods, AggregateOptions, AliasOrTable, ArrayColumn, ArrayColumnValue, ArrayData, AsMethods, AsQueryArg, BigIntColumn, BigSerialColumn, BitColumn, BitVaryingColumn, BooleanColumn, BooleanQueryColumn, BoxColumn, ByteaColumn, ChangeCountArg, CidrColumn, CircleColumn, CitextColumn, Clear, ClearStatement, ColumnData, ColumnFromDbParams, ColumnInfoQueryData, ColumnRefExpression, ColumnType, ColumnsByType, ColumnsShape, ColumnsShapeToNullableObject, ColumnsShapeToObject, ColumnsShapeToObjectArray, ColumnsShapeToPluck, CommonQueryData, ComputedColumn, ComputedColumns, ComputedColumnsFromOptions, ComputedMethods, ComputedOptionsFactory, CopyOptions, CopyQueryData, Create, CreateBelongsToData, CreateColumn, CreateCtx, CreateData, CreateKind, CreateMethodsNames, CreateRelationsData, CreateRelationsDataOmittingFKeys, CreateResult, CreateSelf, CustomTypeColumn, DateBaseColumn, DateColumn, DateColumnInput, DateTimeBaseClass, DateTimeTzBaseClass, Db, DbDomainArg, DbDomainArgRecord, DbExtension, DbOptions, DbResult, DbSharedOptions, DbTableConstructor, DbTableOptionScopes, DbTableOptions, DecimalColumn, DecimalColumnData, DefaultColumnTypes, DefaultSchemaConfig, Delete, DeleteArgs, DeleteMethodsNames, DeleteQueryData, DeleteResult, DomainColumn, DoublePrecisionColumn, DynamicRawSQL, EnumColumn, ExpressionMethods, ExpressionOutput, FnExpression, FnExpressionArgs, FnExpressionArgsPairs, FnExpressionArgsValue, For, FromArg, FromMethods, FromQuerySelf, FromResult, GeneratorIgnore, GetArg, GetColumnInfo, GetQueryResult, GetResult, GetResultOptional, GetStringArg, GroupArgs, HandleResult, Having, HavingItem, HookAction, HookSelectArg, IdentityColumn, InetColumn, InsertQueryData, IntegerBaseColumn, IntegerColumn, IntervalColumn, IsolationLevel, JSONColumn, JSONTextColumn, Join, JoinArgToQuery, JoinArgs, JoinCallback, JoinFirstArg, JoinItem, JoinItemArgs, JoinLateralItem, JoinLateralResult, JoinOverrides, JoinQueryBuilder, JoinQueryMethod, JoinResult, JoinedParsers, JoinedShapes, JsonMethods, LimitedTextBaseColumn, LineColumn, LsegColumn, MacAddr8Column, MacAddrColumn, MapTableScopesOption, MergeQuery, MergeQueryMethods, MoneyColumn, MoreThanOneRowError, NoPrimaryKeyOption, NonUniqDataItem, NotFoundError, NumberAsStringBaseColumn, NumberBaseColumn, NumberColumnData, NumericColumns, OnConflictMerge, OnConflictQueryBuilder, OnConflictSet, OnConflictTarget, OnMethods, Operator, Operators, OperatorsAny, OperatorsArray, OperatorsBoolean, OperatorsDate, OperatorsJson, OperatorsNumber, OperatorsText, OperatorsTime, OrCreateArg, OrExpression, OrchidOrmError, OrchidOrmInternalError, OrderArg, OrderArgSelf, OrderArgs, OrderItem, OrderTsQueryConfig, Over, PathColumn, PickColumnData, PickQueryBaseQuery, PickQueryColumnTypes, PickQueryDataShapeAndJoinedShapes, PickQueryInternal, PickQueryMetaRelations, PickQueryMetaResultRelations, PickQueryMetaResultRelationsWindows, PickQueryMetaResultRelationsWindowsColumnTypes, PickQueryMetaResultRelationsWithDataReturnType, PickQueryMetaResultRelationsWithDataReturnTypeShape, PickQueryMetaResultReturnTypeWithDataWindows, PickQueryMetaResultReturnTypeWithDataWindowsTable, PickQueryMetaShapeRelationsWithData, PickQueryMetaTable, PickQueryMetaTableShape, PickQueryMetaTableShapeReturnTypeWithData, PickQueryMetaWithData, PickQueryMetaWithDataColumnTypes, PickQueryQ, PickQueryQAndBaseQuery, PickQueryQAndInternal, PickQueryRelations, PickQueryRelationsWithData, PickQueryResultColumnTypes, PickQueryShapeResultSinglePrimaryKey, PickQueryShapeSinglePrimaryKey, PickQuerySinglePrimaryKey, PickQueryWindows, PickQueryWithData, PickQueryWithDataColumnTypes, PointColumn, PolygonColumn, PostgisGeographyPointColumn, PostgisPoint, Query, QueryAfterHook, QueryArraysResult, QueryBase, QueryBaseThen, QueryBatchResult, QueryBeforeHook, QueryComputedArg, QueryData, QueryDataFromItem, QueryDataJoinTo, QueryDefaultReturnData, QueryError, QueryErrorName, QueryGet, QueryGetSelf, QueryHelperResult, QueryHooks, QueryInternal, QueryLog, QueryMetaHasSelect, QueryMetaHasWhere, QueryMethods, QueryOrExpression, QueryOrExpressionBooleanOrNullResult, QueryResult, QueryScopeData, QueryScopes, QuerySourceItem, QueryUpsertOrCreate, QueryWithTable, RawSQL, RealColumn, RecordOfColumnsShapeBase, RefExpression, RelationConfigBase, RelationConfigDataForCreate, RelationJoinQuery, RelationQuery, RelationQueryBase, RelationsBase, RuntimeComputedQueryColumn, SearchArg, SearchMethods, SearchWeight, SearchWeightRecord, Select, SelectArg, SelectArgs, SelectAs, SelectAsValue, SelectItem, SelectQueryData, SelectSubQueryResult, SelectableFromShape, SelectableOfType, SelectableOrExpression, SelectableOrExpressionOfType, SelectableOrExpressions, SerialColumn, SerialColumnData, SetQueryKind, SetQueryKindResult, SetQueryReturnsAll, SetQueryReturnsAllKind, SetQueryReturnsAllKindResult, SetQueryReturnsColumnInfo, SetQueryReturnsColumnKind, SetQueryReturnsColumnKindResult, SetQueryReturnsColumnOptional, SetQueryReturnsColumnOrThrow, SetQueryReturnsOne, SetQueryReturnsOneKind, SetQueryReturnsOneKindResult, SetQueryReturnsOneOptional, SetQueryReturnsPluck, SetQueryReturnsPluckColumn, SetQueryReturnsPluckColumnKind, SetQueryReturnsPluckColumnKindResult, SetQueryReturnsRowCount, SetQueryReturnsRows, SetQueryReturnsValueOptional, SetQueryReturnsValueOrThrow, SetQueryReturnsVoid, SetQueryReturnsVoidKind, SetQueryTableAlias, ShapeColumnPrimaryKeys, ShapeUniqueColumns, SimpleJoinItem, SimpleJoinItemNonSubQueryArgs, SmallIntColumn, SmallSerialColumn, SortDir, SqlFn, SqlMethod, StringColumn$1 as StringColumn, TableData, TableDataFn, TableDataInput, TableDataItem, TableDataItemsUniqueColumnTuples, TableDataItemsUniqueColumns, TableDataItemsUniqueConstraints, TableDataMethods, TextBaseColumn, TextColumn, TextColumnData, Then, TimeColumn, TimestampColumn, TimestampTZColumn, ToSQLCtx, ToSQLOptions, ToSQLQuery, Transaction, TransactionAdapter, TransactionOptions, TransformMethods, TruncateQueryData, TsQueryColumn, TsVectorColumn, TypeParsers, UUIDColumn, UnhandledTypeError, Union, UnionArgs, UnionItem, UnionKind, UnionSet, UniqueConstraints, UniqueQueryTypeOrExpression, UniqueTableDataItem, UnknownColumn, Update, UpdateArg, UpdateCtx, UpdateCtxCollect, UpdateData, UpdateQueryData, UpdateQueryDataItem, UpdateQueryDataObject, UpdateSelf, UpdatedAtDataInjector, UpsertResult, UpsertThis, VarCharColumn, VirtualColumn, Where, WhereArg, WhereArgs, WhereInArg, WhereInColumn, WhereInItem, WhereInValues, WhereItem, WhereJsonPathEqualsItem, WhereNotArgs, WhereOnItem, WhereOnJoinItem, WhereQueryBuilder, WhereResult, WhereSearchItem, WhereSearchResult, WindowArg, WindowArgDeclaration, WindowDeclaration, WindowItem, WithArgsOptions, WithConfigs, WithDataItem, WithDataItems, WithItem, WithMethods, WithOptions, WithQueryBuilder, WithRecursiveOptions, WithResult, WithSqlResult, WrapQueryArg, XMLColumn, _afterCommitError, _getSelectableColumn, _initQueryBuilder, _queryAfterSaveCommit, _queryAll, _queryAs, _queryChangeCounter, _queryCreate, _queryCreateFrom, _queryCreateMany, _queryCreateManyFrom, _queryCreateManyRaw, _queryCreateRaw, _queryDefaults, _queryDelete, _queryExec, _queryFindBy, _queryFindByOptional, _queryGet, _queryGetOptional, _queryHookAfterCreate, _queryHookAfterCreateCommit, _queryHookAfterDelete, _queryHookAfterDeleteCommit, _queryHookAfterQuery, _queryHookAfterSave, _queryHookAfterUpdate, _queryHookAfterUpdateCommit, _queryHookBeforeCreate, _queryHookBeforeDelete, _queryHookBeforeQuery, _queryHookBeforeSave, _queryHookBeforeUpdate, _queryInsert, _queryInsertFrom, _queryInsertMany, _queryInsertManyFrom, _queryInsertManyRaw, _queryInsertRaw, _queryJoinOn, _queryJoinOnJsonPathEquals, _queryJoinOrOn, _queryOr, _queryOrNot, _queryRows, _querySelect, _queryTake, _queryTakeOptional, _queryUnion, _queryUpdate, _queryUpdateOrThrow, _queryUpdateRaw, _queryWhere, _queryWhereExists, _queryWhereIn, _queryWhereNot, _queryWhereNotOneOf, _queryWhereNotSql, _queryWhereOneOf, _queryWhereSql, addParserForRawExpression, addParserForSelectItem, addQueryOn, anyShape, applyComputedColumns, checkIfASimpleQuery, cloneQuery, cloneQueryBaseUnscoped, columnCheckToCode, columnCode, columnForeignKeysToCode, columnIndexesToCode, columnsShapeToCode, commitSql, constraintInnerToCode, constraintToCode, copyTableData, countSelect, createDb, defaultSchemaConfig, escapeForLog, escapeForMigration, escapeString, extendQuery, filterResult, foreignKeyArgumentToCode, getClonedQueryData, getColumnInfo, getColumnTypes, getPrimaryKeys, getQueryAs, getShapeFromSelect, getSqlText, handleResult, identityToCode, indexInnerToCode, indexToCode, instantiateColumn, isDefaultTimeStamp, isQueryReturnsAll, isSelectingCount, joinSubQuery, logParamToLogObject, makeColumnTypes, makeColumnsByType, makeFnExpression, makeRegexToFindInSql, makeSQL, parseRecord, parseTableData, parseTableDataInput, postgisTypmodToSql, primaryKeyInnerToCode, processComputedBatches, processComputedResult, processSelectArg, pushLimitSQL, pushQueryArray, pushQueryOn, pushQueryOnForOuter, pushQueryOrOn, pushQueryValue, pushTableDataCode, queryFrom, queryFromSql, queryJson, queryMethodByReturnType, queryTypeWithLimitOne, queryWrap, raw, referencesArgsToCode, resolveSubQueryCallback, rollbackSql, saveSearchAlias, setParserForSelectedString, setQueryObjectValue, setQueryOperators, simplifyColumnDefault, sqlFn, sqlQueryArgsToExpression, tableDataMethods, templateLiteralToSQL, testTransaction, throwIfJoinLateral, throwIfNoWhere, toSQL, toSQLCacheKey };
package/dist/index.js CHANGED
@@ -1777,8 +1777,24 @@ const columnToSqlWithAs = (ctx, data, column, as, quotedAs, select) => {
1777
1777
  const tableColumnToSqlWithAs = (ctx, data, column, table, key, as, quotedAs, select) => {
1778
1778
  var _a, _b, _c;
1779
1779
  if (key === "*") {
1780
- if ((_a = data.joinedShapes) == null ? void 0 : _a[table]) {
1781
- return select ? `row_to_json("${table}".*) "${as}"` : `"${table}".r "${as}"`;
1780
+ const shape = (_a = data.joinedShapes) == null ? void 0 : _a[table];
1781
+ if (shape) {
1782
+ if (select) {
1783
+ let isSimple = true;
1784
+ const list = [];
1785
+ for (const key2 in shape) {
1786
+ const column2 = shape[key2];
1787
+ if (column2.data.explicitSelect || column2 instanceof VirtualColumn) {
1788
+ continue;
1789
+ }
1790
+ if (column2.data.name) {
1791
+ isSimple = false;
1792
+ }
1793
+ list.push(`'${key2}'`, `"${table}"."${column2.data.name || key2}"`);
1794
+ }
1795
+ return (isSimple ? `row_to_json("${table}".*)` : "json_build_object(" + list.join(", ") + ")") + ` "${as}"`;
1796
+ }
1797
+ return `"${table}".r "${as}"`;
1782
1798
  }
1783
1799
  return column;
1784
1800
  }
@@ -1898,8 +1914,10 @@ class QueryError extends OrchidOrmInternalError {
1898
1914
  const list = (_a = this.detail.match(/\((.*)\)=/)) == null ? void 0 : _a[1];
1899
1915
  if (list) {
1900
1916
  list.split(", ").forEach((item) => {
1917
+ var _a2;
1901
1918
  const column = item.startsWith('"') ? item.slice(1, -1) : item;
1902
- columns[column] = true;
1919
+ const key = (_a2 = this.query.columnNameToKey(column)) != null ? _a2 : column;
1920
+ columns[key] = true;
1903
1921
  });
1904
1922
  }
1905
1923
  }
@@ -1949,6 +1967,17 @@ const throwIfNoWhere = (q, method) => {
1949
1967
  );
1950
1968
  }
1951
1969
  };
1970
+ const throwIfJoinLateral = (q, method) => {
1971
+ var _a;
1972
+ if ((_a = q.q.join) == null ? void 0 : _a.some(
1973
+ (x) => Array.isArray(x) || "s" in x.args && x.args.s
1974
+ )) {
1975
+ throw new OrchidOrmInternalError(
1976
+ q,
1977
+ `Cannot join a complex query in ${method}`
1978
+ );
1979
+ }
1980
+ };
1952
1981
  const saveSearchAlias = (q, as, key) => {
1953
1982
  const shapes = q.q[key];
1954
1983
  if (shapes == null ? void 0 : shapes[as]) {
@@ -2578,6 +2607,13 @@ const processJoinArgs = (joinTo, first, args, joinSubQuery, whereExists) => {
2578
2607
  s: joinSubQuery
2579
2608
  };
2580
2609
  };
2610
+ const preprocessJoinArg = (q, arg) => {
2611
+ if (typeof arg !== "function")
2612
+ return arg;
2613
+ arg = arg(q.relations);
2614
+ arg.joinQueryAfterCallback = arg.joinQuery;
2615
+ return arg;
2616
+ };
2581
2617
  const makeJoinQueryBuilder = (joinedQuery, joinedShapes, joinTo) => {
2582
2618
  const q = joinedQuery.baseQuery.clone();
2583
2619
  q.baseQuery = q;
@@ -2640,24 +2676,21 @@ const _join = (query, require2, type, first, args) => {
2640
2676
  let batchParsers;
2641
2677
  let computeds;
2642
2678
  let joinSubQuery = false;
2643
- if (typeof first === "function") {
2644
- first = first(query.relations);
2645
- first.joinQueryAfterCallback = first.joinQuery;
2646
- }
2679
+ first = preprocessJoinArg(query, first);
2647
2680
  if (typeof first === "object") {
2648
2681
  if (require2 && isQueryNone(first)) {
2649
2682
  return _queryNone(query);
2650
2683
  }
2651
- const q = first;
2652
- joinSubQuery = getIsJoinSubQuery(q);
2653
- joinKey = q.q.as || q.table;
2684
+ const q2 = first;
2685
+ joinSubQuery = getIsJoinSubQuery(q2);
2686
+ joinKey = q2.q.as || q2.table;
2654
2687
  if (joinKey) {
2655
- shape = getShapeFromSelect(q, joinSubQuery);
2656
- parsers = q.q.parsers;
2657
- batchParsers = q.q.batchParsers;
2658
- computeds = q.q.computeds;
2688
+ shape = getShapeFromSelect(q2, joinSubQuery && !!q2.q.select);
2689
+ parsers = q2.q.parsers;
2690
+ batchParsers = q2.q.batchParsers;
2691
+ computeds = q2.q.computeds;
2659
2692
  if (joinSubQuery) {
2660
- first = q.clone();
2693
+ first = q2.clone();
2661
2694
  first.shape = shape;
2662
2695
  }
2663
2696
  }
@@ -2740,10 +2773,14 @@ const _join = (query, require2, type, first, args) => {
2740
2773
  computeds
2741
2774
  );
2742
2775
  }
2743
- return pushQueryValue(query, "join", {
2776
+ const q = pushQueryValue(query, "join", {
2744
2777
  type,
2745
2778
  args: joinArgs
2746
2779
  });
2780
+ if (query.q.type === "delete") {
2781
+ throwIfJoinLateral(q, query.q.type);
2782
+ }
2783
+ return q;
2747
2784
  };
2748
2785
  const addAllShapesAndParsers = (query, joinKey, shape, parsers, batchParsers, computeds) => {
2749
2786
  var _a, _b;
@@ -3547,7 +3584,9 @@ const applyComputedColumns = (q, fn) => {
3547
3584
  if (item instanceof ComputedColumn) {
3548
3585
  q.q.computeds = __spreadProps$5(__spreadValues$e({}, q.q.computeds), { [key]: item });
3549
3586
  } else {
3550
- (q.shape[key] = item.result.value || UnknownColumn.instance).data.computed = item;
3587
+ const data = (q.shape[key] = item.result.value || UnknownColumn.instance).data;
3588
+ data.computed = item;
3589
+ data.explicitSelect = true;
3551
3590
  }
3552
3591
  }
3553
3592
  q.computeAtRuntime = q.computeBatchAtRuntime = void 0;
@@ -3962,6 +4001,16 @@ const then = async (q, adapter, trx, beforeHooks, afterHooks, afterCommitHooks,
3962
4001
  error.cause = localError;
3963
4002
  }
3964
4003
  }
4004
+ const stack = localError.stack;
4005
+ if (stack) {
4006
+ const from = stack.indexOf("\n");
4007
+ if (from !== -1) {
4008
+ const to = stack.indexOf("\n", from + 1);
4009
+ if (to !== -1) {
4010
+ localError.stack = stack.slice(0, from) + stack.slice(to);
4011
+ }
4012
+ }
4013
+ }
3965
4014
  if (log && sql) {
3966
4015
  log.onError(error, sql, logData);
3967
4016
  }
@@ -5773,7 +5822,7 @@ const processValue = (ctx, table, QueryClass, key, value, quotedAs) => {
5773
5822
  };
5774
5823
 
5775
5824
  const pushDeleteSql = (ctx, table, query, quotedAs) => {
5776
- var _a, _b, _c, _d;
5825
+ var _a, _b, _c;
5777
5826
  const from = `"${table.table}"`;
5778
5827
  ctx.sql.push(`DELETE FROM ${from}`);
5779
5828
  if (from !== quotedAs) {
@@ -5785,27 +5834,16 @@ const pushDeleteSql = (ctx, table, query, quotedAs) => {
5785
5834
  const ons = [];
5786
5835
  const joinSet = query.join.length > 1 ? /* @__PURE__ */ new Set() : null;
5787
5836
  for (const item of query.join) {
5788
- if (Array.isArray(item)) {
5789
- const q = item[1];
5790
- const { aliasValue } = ctx;
5791
- ctx.aliasValue = true;
5792
- const as = item[2];
5793
- targets.push(
5794
- `LATERAL (${getSqlText(q.toSQL(ctx))}) "${((_b = query.joinOverrides) == null ? void 0 : _b[as]) || as}"`
5795
- );
5796
- ctx.aliasValue = aliasValue;
5797
- } else {
5798
- const join = processJoinItem(ctx, table, query, item.args, quotedAs);
5799
- const key = `${join.target}${join.on}`;
5800
- if (joinSet) {
5801
- if (joinSet.has(key))
5802
- continue;
5803
- joinSet.add(key);
5804
- }
5805
- targets.push(join.target);
5806
- if (join.on)
5807
- ons.push(join.on);
5837
+ const join = processJoinItem(ctx, table, query, item.args, quotedAs);
5838
+ const key = `${join.target}${join.on}`;
5839
+ if (joinSet) {
5840
+ if (joinSet.has(key))
5841
+ continue;
5842
+ joinSet.add(key);
5808
5843
  }
5844
+ targets.push(join.target);
5845
+ if (join.on)
5846
+ ons.push(join.on);
5809
5847
  }
5810
5848
  if (targets.length) {
5811
5849
  ctx.sql.push(`USING ${targets.join(", ")}`);
@@ -5814,7 +5852,7 @@ const pushDeleteSql = (ctx, table, query, quotedAs) => {
5814
5852
  }
5815
5853
  pushWhereStatementSql(ctx, table, query, quotedAs);
5816
5854
  if (conditions) {
5817
- if (((_c = query.and) == null ? void 0 : _c.length) || ((_d = query.or) == null ? void 0 : _d.length) || query.scopes) {
5855
+ if (((_b = query.and) == null ? void 0 : _b.length) || ((_c = query.or) == null ? void 0 : _c.length) || query.scopes) {
5818
5856
  ctx.sql.push("AND", conditions);
5819
5857
  } else {
5820
5858
  ctx.sql.push("WHERE", conditions);
@@ -8194,6 +8232,7 @@ const _queryDelete = (query) => {
8194
8232
  q.returnType = "rowCount";
8195
8233
  }
8196
8234
  throwIfNoWhere(query, "delete");
8235
+ throwIfJoinLateral(query, "delete");
8197
8236
  q.type = "delete";
8198
8237
  return query;
8199
8238
  };
@@ -9814,7 +9853,13 @@ const _queryWhereIn = (q, and, arg, values, not) => {
9814
9853
  return q;
9815
9854
  };
9816
9855
  const existsArgs = (self, q, args) => {
9817
- const joinArgs = processJoinArgs(self, q, args, false, true);
9856
+ const joinArgs = processJoinArgs(
9857
+ self,
9858
+ preprocessJoinArg(self, q),
9859
+ args,
9860
+ false,
9861
+ true
9862
+ );
9818
9863
  return [
9819
9864
  {
9820
9865
  EXISTS: joinArgs
@@ -10457,6 +10502,10 @@ class Where {
10457
10502
  * // find by a relation name if it's defined
10458
10503
  * db.user.whereExists('account');
10459
10504
  *
10505
+ * // find users who have an account with positive balance
10506
+ * // `accounts` is a relation name
10507
+ * db.user.whereExists((q) => q.accounts.where({ balance: { gt: 0 } }));
10508
+ *
10460
10509
  * // find using a table and a join conditions
10461
10510
  * db.user.whereExists(db.account, 'account.id', 'user.id');
10462
10511
  *
@@ -12772,16 +12821,18 @@ class Db {
12772
12821
  applyComputedColumns(this, options.computed);
12773
12822
  if (prepareSelectAll) {
12774
12823
  const list = [];
12824
+ const keys = {};
12775
12825
  for (const key in shape) {
12776
12826
  const column = shape[key];
12777
12827
  if (!column.data.explicitSelect) {
12778
12828
  list.push(
12779
12829
  column.data.name ? `"${column.data.name}" AS "${key}"` : `"${key}"`
12780
12830
  );
12831
+ keys[key] = column;
12781
12832
  }
12782
12833
  }
12783
12834
  this.q.selectAllColumns = list;
12784
- this.q.selectAllKeys = __spreadValues({}, shape);
12835
+ this.q.selectAllKeys = keys;
12785
12836
  }
12786
12837
  if (modifyQuery) {
12787
12838
  for (const cb of modifyQuery) {
@@ -12874,6 +12925,23 @@ class Db {
12874
12925
  queryArrays(...args) {
12875
12926
  return performQuery(this, args, "arrays");
12876
12927
  }
12928
+ /**
12929
+ * In snake case mode, or when columns have custom names,
12930
+ * use this method to exchange a db column name to its runtime key.
12931
+ */
12932
+ columnNameToKey(name) {
12933
+ var _a;
12934
+ let map = this.internal.columnNameToKeyMap;
12935
+ if (!map) {
12936
+ this.internal.columnNameToKeyMap = map = /* @__PURE__ */ new Map();
12937
+ const { shape } = this;
12938
+ for (const key in this.shape) {
12939
+ const column = shape[key];
12940
+ map.set((_a = column.data.name) != null ? _a : key, key);
12941
+ }
12942
+ }
12943
+ return map.get(name);
12944
+ }
12877
12945
  }
12878
12946
  const performQuery = async (q, args, method) => {
12879
12947
  var _a;
@@ -13380,6 +13448,7 @@ exports.sqlQueryArgsToExpression = sqlQueryArgsToExpression;
13380
13448
  exports.tableDataMethods = tableDataMethods;
13381
13449
  exports.templateLiteralToSQL = templateLiteralToSQL;
13382
13450
  exports.testTransaction = testTransaction;
13451
+ exports.throwIfJoinLateral = throwIfJoinLateral;
13383
13452
  exports.throwIfNoWhere = throwIfNoWhere;
13384
13453
  exports.toSQL = toSQL;
13385
13454
  exports.toSQLCacheKey = toSQLCacheKey;