pqb 0.30.3 → 0.30.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
@@ -1,5 +1,5 @@
1
1
  import * as orchid_core from 'orchid-core';
2
- import { QueryResultRow, AdapterConfigBase, AdapterBase, QueryInput, Sql, RecordUnknown, RecordKeyTrue, EmptyObject, QueryBaseCommon, QueryColumns, QueryMetaBase, QueryReturnType, QueryThen, Expression, QueryColumn, MaybeArray, SelectableBase, TemplateLiteralArgs, PickOutputTypeAndOperators, PickQueryResult, OperatorToSQL, ColumnsShapeBase, ColumnsParsers, RecordString, PickQueryTable, FnUnknownToUnknown, ExpressionChain, getValueKey, PickQueryShape, PickQueryTableMetaResult, EmptyTuple, PickQueryMeta, PickQueryMetaResultReturnType, QueryColumnToNullable, PickQueryMetaShape, PickQueryTableMetaResultShape, QueryColumnBooleanOrNull, SQLQueryArgs, ColumnSchemaConfig, DateColumnData, Code, TimeInterval, ColumnTypeSchemaArg, ColumnDataBase, ArrayMethodsData, RawSQLBase, RawSQLValues, ExpressionTypeMethod, DynamicSQLArg, StaticSQLArgs, ForeignKeyTable, ColumnNameOfTable, BaseNumberData, PickColumnBaseData, ColumnWithDefault, StringTypeData, PrimaryKeyColumn, ParseColumn, EncodeColumn, PickQueryMetaResult, QueryColumnsInit, DefaultSelectColumns, CoreQueryScopes, DbBase, QueryCatch, TransactionState, ColumnTypeBase, PickQueryMetaResultWindows, CoreBaseOperators, PickQueryUniqueProperties, IsQuery, PickQueryMetaShapeResultReturnType, MergeObjects, ExpressionData, ValExpression, PickOutputType, PickQueryResultUniqueColumns, QueryInternalBase, PickQueryReturnType, PickType, ColumnShapeOutput, PickQueryMetaReturnType, UniqueColumn, TimestampHelpers, Codes, ColumnDataCheckBase, PickQueryTableMetaShape } from 'orchid-core';
2
+ import { QueryResultRow, AdapterConfigBase, AdapterBase, QueryInput, Sql, RecordUnknown, RecordKeyTrue, EmptyObject, QueryBaseCommon, QueryColumns, QueryMetaBase, QueryReturnType, QueryThen, Expression, QueryColumn, MaybeArray, SelectableBase, TemplateLiteralArgs, PickOutputTypeAndOperators, PickQueryResult, OperatorToSQL, ColumnsShapeBase, ColumnsParsers, RecordString, PickQueryTable, FnUnknownToUnknown, ExpressionChain, getValueKey, PickQueryShape, PickQueryTableMetaResult, EmptyTuple, PickQueryMeta, PickQueryMetaResultReturnType, QueryColumnToNullable, PickQueryMetaShape, PickQueryTableMetaResultShape, PickQueryMetaResultWindows, QueryColumnBooleanOrNull, ExpressionData, ValExpression, PickOutputType, SQLQueryArgs, ColumnSchemaConfig, DateColumnData, Code, TimeInterval, ColumnTypeSchemaArg, ColumnDataBase, ArrayMethodsData, RawSQLBase, RawSQLValues, ExpressionTypeMethod, DynamicSQLArg, StaticSQLArgs, ForeignKeyTable, ColumnNameOfTable, BaseNumberData, PickColumnBaseData, ColumnWithDefault, StringTypeData, PrimaryKeyColumn, ParseColumn, EncodeColumn, PickQueryMetaResult, QueryColumnsInit, DefaultSelectColumns, CoreQueryScopes, DbBase, QueryCatch, TransactionState, ColumnTypeBase, CoreBaseOperators, PickQueryUniqueProperties, IsQuery, PickQueryMetaShapeResultReturnType, MergeObjects, PickQueryResultUniqueColumns, QueryInternalBase, PickQueryReturnType, PickType, ColumnShapeOutput, PickQueryMetaReturnType, UniqueColumn, TimestampHelpers, Codes, ColumnDataCheckBase, PickQueryTableMetaShape } from 'orchid-core';
3
3
  import { PoolConfig, Pool, PoolClient } from 'pg';
4
4
  import { inspect } from 'node:util';
5
5
  import { AsyncLocalStorage } from 'node:async_hooks';
@@ -1427,12 +1427,184 @@ declare class OnMethods {
1427
1427
  onJsonPathEquals<T extends PickQueryMeta>(this: T, ...args: OnJsonPathEqualsArgs<T['meta']['selectable']>): T;
1428
1428
  }
1429
1429
 
1430
+ interface AggregateOptions<T extends PickQueryMetaResultRelationsWindows> {
1431
+ distinct?: boolean;
1432
+ order?: OrderArg<T> | OrderArg<T>[];
1433
+ filter?: WhereArg<T>;
1434
+ filterOr?: WhereArg<T>[];
1435
+ withinGroup?: boolean;
1436
+ over?: Over<T>;
1437
+ }
1438
+ type Over<T extends PickQueryMetaResultWindows> = keyof T['windows'] | WindowArgDeclaration<T>;
1439
+ type FnExpressionArgs<Q extends PickQueryMeta> = (SelectableOrExpression<Q> | FnExpressionArgsPairs<Q> | FnExpressionArgsValue)[];
1440
+ interface FnExpressionArgsPairs<Q extends PickQueryMeta> {
1441
+ pairs: {
1442
+ [K: string]: SelectableOrExpression<Q>;
1443
+ };
1444
+ }
1445
+ interface FnExpressionArgsValue {
1446
+ value: unknown;
1447
+ }
1448
+ declare class FnExpression<Q extends Query = Query, T extends QueryColumn = QueryColumn> extends Expression<T> {
1449
+ query: Q;
1450
+ fn: string;
1451
+ args: FnExpressionArgs<Q>;
1452
+ options: AggregateOptions<Q>;
1453
+ result: {
1454
+ value: T;
1455
+ };
1456
+ q: QueryData;
1457
+ /**
1458
+ * @param query - query object.
1459
+ * @param fn - SQL function name.
1460
+ * @param args - arguments of the function.
1461
+ * @param options - aggregate options.
1462
+ * @param value - column type of the function result.
1463
+ */
1464
+ constructor(query: Q, fn: string, args: FnExpressionArgs<Q>, options: AggregateOptions<Q>, value: T);
1465
+ makeSQL(ctx: ToSQLCtx, quotedAs?: string): string;
1466
+ }
1467
+ type ColumnExpression<C extends QueryColumn, Ops extends BaseOperators = C['operators']> = Expression<C> & {
1468
+ [K in keyof Ops]: (arg: Ops[K]['_opType']) => ColumnExpression<QueryColumnBooleanOrNull>;
1469
+ };
1470
+ declare function makeFnExpression<T extends PickQueryMetaResultRelationsWindows, C extends QueryColumn>(self: T, type: C, fn: string, args: FnExpressionArgs<Query>, options?: AggregateOptions<T>): SetQueryReturnsColumnOrThrow<T, C> & C['operators'];
1471
+
1472
+ declare class ColumnRefExpression<T extends QueryColumn> extends Expression<T> {
1473
+ name: string;
1474
+ result: {
1475
+ value: T;
1476
+ };
1477
+ q: ExpressionData;
1478
+ constructor(value: T, name: string);
1479
+ makeSQL(ctx: ToSQLCtx, quotedAs?: string): string;
1480
+ }
1481
+ declare class RefExpression<T extends QueryColumn> extends Expression<T> {
1482
+ q: QueryData;
1483
+ ref: string;
1484
+ result: {
1485
+ value: T;
1486
+ };
1487
+ constructor(value: T, q: QueryData, ref: string);
1488
+ makeSQL(ctx: ToSQLCtx, quotedAs?: string): string;
1489
+ }
1490
+ type OrExpressionArg = QueryOrExpressionBooleanOrNullResult | undefined;
1491
+ interface OrExpression extends Expression<BooleanQueryColumn>, OperatorsBoolean {
1492
+ }
1493
+ declare class OrExpression extends Expression<BooleanQueryColumn> {
1494
+ args: [OrExpressionArg, ...OrExpressionArg[]];
1495
+ result: {
1496
+ value: BooleanQueryColumn;
1497
+ };
1498
+ q: ExpressionData;
1499
+ constructor(args: [OrExpressionArg, ...OrExpressionArg[]]);
1500
+ makeSQL(ctx: {
1501
+ values: unknown[];
1502
+ }, quotedAs?: string): string;
1503
+ }
1504
+ interface QueryReturnsFnAdd<T extends PickQueryColumnTypes> extends QueryMetaHasSelect {
1505
+ type<C extends QueryColumn>(fn: (types: T['columnTypes']) => C): {
1506
+ [K in keyof T]: K extends 'result' ? {
1507
+ value: C;
1508
+ } : K extends 'returnType' ? 'valueOrThrow' : K extends 'then' ? QueryThen<C['outputType']> : T[K];
1509
+ } & C['operators'];
1510
+ }
1511
+ type SetQueryReturnsFn<T extends PickQueryColumnTypes, C extends PickOutputType> = {
1512
+ [K in keyof T]: K extends 'result' ? {
1513
+ value: C;
1514
+ } : K extends 'returnType' ? 'valueOrThrow' : K extends 'then' ? QueryThen<C['outputType']> : T[K];
1515
+ } & QueryReturnsFnAdd<T>;
1516
+ declare class ExpressionMethods {
1517
+ /**
1518
+ * `column` references a table column, this can be used in raw SQL or when building a column expression.
1519
+ * Only for referencing a column in the query's table. For referencing joined table's columns, see [ref](#ref).
1520
+ *
1521
+ * ```ts
1522
+ * await db.table.select({
1523
+ * // select `("table"."id" = 1 OR "table"."name" = 'name') AS "one"`,
1524
+ * // returns a boolean
1525
+ * one: (q) =>
1526
+ * q.sql<boolean>`${q.column('id')} = ${1} OR ${q.column('name')} = ${'name'}`,
1527
+ *
1528
+ * // selects the same as above, but by building a query
1529
+ * two: (q) => q.column('id').equals(1).or(q.column('name').equals('name')),
1530
+ * });
1531
+ * ```
1532
+ *
1533
+ * @param name - column name
1534
+ */
1535
+ column<T extends PickQueryShape, K extends keyof T['shape']>(this: T, name: K): ColumnRefExpression<T['shape'][K]> & T['shape'][K]['operators'];
1536
+ /**
1537
+ * `ref` is similar to [column](#column), but it also allows to reference a column of joined table,
1538
+ * and other dynamically defined columns.
1539
+ *
1540
+ * ```ts
1541
+ * await db.table.join('otherTable').select({
1542
+ * // select `("otherTable"."id" = 1 OR "otherTable"."name" = 'name') AS "one"`,
1543
+ * // returns a boolean
1544
+ * one: (q) =>
1545
+ * q.sql<boolean>`${q.ref('otherTable.id')} = ${1} OR ${q.ref(
1546
+ * 'otherTable.name',
1547
+ * )} = ${'name'}`,
1548
+ *
1549
+ * // selects the same as above, but by building a query
1550
+ * two: (q) =>
1551
+ * q
1552
+ * .ref('otherTable.id')
1553
+ * .equals(1)
1554
+ * .or(q.ref('otherTable.name').equals('name')),
1555
+ * });
1556
+ * ```
1557
+ *
1558
+ * @param arg - any available column name, such as of a joined table
1559
+ */
1560
+ ref<T extends PickQueryMeta, K extends keyof T['meta']['selectable'] & string>(this: T, arg: K): RefExpression<T['meta']['selectable'][K]['column']> & T['meta']['selectable'][K]['column']['operators'];
1561
+ val(value: unknown): ValExpression;
1562
+ /**
1563
+ * `fn` allows to call an arbitrary SQL function.
1564
+ *
1565
+ * For example, calling `sqrt` function to get a square root from some numeric column:
1566
+ *
1567
+ * ```ts
1568
+ * const q = await User.select({
1569
+ * sqrt: (q) => q.fn<number>('sqrt', ['numericColumn']),
1570
+ * }).take();
1571
+ *
1572
+ * q.sqrt; // has type `number` just as provided
1573
+ * ```
1574
+ *
1575
+ * If this is an aggregate function, you can specify aggregation options (see [Aggregate](/guide/aggregate.html)) via third parameter.
1576
+ *
1577
+ * Use `type` method to specify a column type so that its operators such as `lt` and `gt` become available:
1578
+ *
1579
+ * ```ts
1580
+ * const q = await User.select({
1581
+ * // Produces `sqrt("numericColumn") > 5`
1582
+ * sqrtIsGreaterThan5: (q) =>
1583
+ * q
1584
+ * .fn('sqrt', ['numericColumn'])
1585
+ * .type((t) => t.float())
1586
+ * .gt(5),
1587
+ * }).take();
1588
+ *
1589
+ * // Return type is boolean | null
1590
+ * // todo: it should be just boolean if the column is not nullable, but for now it's always nullable
1591
+ * q.sqrtIsGreaterThan5;
1592
+ * ```
1593
+ *
1594
+ * @param fn
1595
+ * @param args
1596
+ * @param options
1597
+ */
1598
+ fn<T extends PickQueryMetaResultRelationsWindowsColumnTypes, Type = unknown, C extends QueryColumn = QueryColumn<Type>>(this: T, fn: string, args: SelectableOrExpression<T>[], options?: AggregateOptions<T>): SetQueryReturnsFn<T, C>;
1599
+ or(...args: [OrExpressionArg, ...OrExpressionArg[]]): OrExpression;
1600
+ }
1601
+
1430
1602
  type WhereArg<T extends PickQueryMetaRelations> = {
1431
1603
  [K in keyof T['meta']['selectable'] | 'NOT' | 'OR' | 'IN']?: K extends 'NOT' ? MaybeArray<WhereArg<T>> : K extends 'OR' ? MaybeArray<WhereArg<T>>[] : K extends 'IN' ? MaybeArray<{
1432
1604
  columns: (keyof T['meta']['selectable'])[];
1433
1605
  values: unknown[][] | QueryBase | Expression;
1434
- }> : T['meta']['selectable'][K]['column']['queryType'] | null | ColumnOperators<T['meta']['selectable'], K> | Expression | QueryBase;
1435
- } | QueryBase | Expression<QueryColumnBooleanOrNull> | ((q: WhereQueryBuilder<T>) => QueryColumnBooleanOrNull | QueryBaseThen<boolean | null> | WhereQueryBuilder<T>);
1606
+ }> : T['meta']['selectable'][K]['column']['queryType'] | null | ColumnOperators<T['meta']['selectable'], K> | QueryOrExpression<T['meta']['selectable'][K]['column']['queryType'] | null> | ((q: T) => QueryOrExpression<T['meta']['selectable'][K]['column']['queryType'] | null>);
1607
+ } | QueryOrExpressionBooleanOrNullResult | ((q: WhereQueryBuilder<T>) => QueryOrExpressionBooleanOrNullResult | WhereQueryBuilder<T>);
1436
1608
  /**
1437
1609
  * Callback argument of `where`.
1438
1610
  * It has `where` methods (`where`, `whereNot`, `whereExists`, etc.),
@@ -1442,9 +1614,9 @@ type WhereArg<T extends PickQueryMetaRelations> = {
1442
1614
  * ```
1443
1615
  */
1444
1616
  type WhereQueryBuilder<T extends PickQueryRelations> = RelationsBase extends T['relations'] ? {
1445
- [K in keyof T]: K extends keyof QueryBase | keyof Where ? T[K] : never;
1617
+ [K in keyof T]: K extends keyof QueryBase | keyof Where | keyof ExpressionMethods | 'sql' ? T[K] : never;
1446
1618
  } : {
1447
- [K in keyof T]: K extends keyof T['relations'] ? T['relations'][K] : T[K];
1619
+ [K in keyof T]: K extends keyof T['relations'] ? T['relations'][K] : K extends keyof QueryBase | keyof Where | keyof ExpressionMethods | 'sql' ? T[K] : never;
1448
1620
  };
1449
1621
  type WhereArgs<T extends PickQueryMetaRelations> = WhereArg<T>[];
1450
1622
  type WhereNotArgs<T extends PickQueryMetaRelations> = [WhereArg<T>];
@@ -1518,6 +1690,11 @@ declare class Where {
1518
1690
  * // where column equals to raw SQL
1519
1691
  * // import `sql` from your `BaseTable`
1520
1692
  * column: sql`sql expression`,
1693
+ * // or use `(q) => q.sql` for the same
1694
+ * column2: (q) => q.sql`sql expression`,
1695
+ *
1696
+ * // reference other columns in such a way:
1697
+ * firstName: (q) => q.ref('lastName'),
1521
1698
  * });
1522
1699
  * ```
1523
1700
  *
@@ -3131,48 +3308,6 @@ declare const resolveSubQueryCallback: (q: ToSQLQuery, cb: (q: ToSQLQuery) => To
3131
3308
  */
3132
3309
  declare const joinSubQuery: (q: ToSQLQuery, sub: ToSQLQuery) => Query;
3133
3310
 
3134
- interface AggregateOptions<T extends PickQueryMetaResultRelationsWindows> {
3135
- distinct?: boolean;
3136
- order?: OrderArg<T> | OrderArg<T>[];
3137
- filter?: WhereArg<T>;
3138
- filterOr?: WhereArg<T>[];
3139
- withinGroup?: boolean;
3140
- over?: Over<T>;
3141
- }
3142
- type Over<T extends PickQueryMetaResultWindows> = keyof T['windows'] | WindowArgDeclaration<T>;
3143
- type FnExpressionArgs<Q extends PickQueryMeta> = (SelectableOrExpression<Q> | FnExpressionArgsPairs<Q> | FnExpressionArgsValue)[];
3144
- interface FnExpressionArgsPairs<Q extends PickQueryMeta> {
3145
- pairs: {
3146
- [K: string]: SelectableOrExpression<Q>;
3147
- };
3148
- }
3149
- interface FnExpressionArgsValue {
3150
- value: unknown;
3151
- }
3152
- declare class FnExpression<Q extends Query = Query, T extends QueryColumn = QueryColumn> extends Expression<T> {
3153
- query: Q;
3154
- fn: string;
3155
- args: FnExpressionArgs<Q>;
3156
- options: AggregateOptions<Q>;
3157
- result: {
3158
- value: T;
3159
- };
3160
- q: QueryData;
3161
- /**
3162
- * @param query - query object.
3163
- * @param fn - SQL function name.
3164
- * @param args - arguments of the function.
3165
- * @param options - aggregate options.
3166
- * @param value - column type of the function result.
3167
- */
3168
- constructor(query: Q, fn: string, args: FnExpressionArgs<Q>, options: AggregateOptions<Q>, value: T);
3169
- makeSQL(ctx: ToSQLCtx, quotedAs?: string): string;
3170
- }
3171
- type ColumnExpression<C extends QueryColumn, Ops extends BaseOperators = C['operators']> = Expression<C> & {
3172
- [K in keyof Ops]: (arg: Ops[K]['_opType']) => ColumnExpression<QueryColumnBooleanOrNull>;
3173
- };
3174
- declare function makeFnExpression<T extends PickQueryMetaResultRelationsWindows, C extends QueryColumn>(self: T, type: C, fn: string, args: FnExpressionArgs<Query>, options?: AggregateOptions<T>): SetQueryReturnsColumnOrThrow<T, C> & C['operators'];
3175
-
3176
3311
  type QueryGetSelf = PickQueryMetaTable;
3177
3312
  type GetArg<T extends QueryGetSelf> = GetStringArg<T> | Expression;
3178
3313
  type GetStringArg<T extends PickQueryMeta> = keyof T['meta']['selectable'] & string;
@@ -6058,121 +6193,6 @@ declare class TransformMethods {
6058
6193
  transform<T extends Query, Fn extends QueryTransformFn<T>>(this: T, fn: Fn): QueryTransform<T, ReturnType<Fn>>;
6059
6194
  }
6060
6195
 
6061
- declare class ColumnRefExpression<T extends QueryColumn> extends Expression<T> {
6062
- name: string;
6063
- result: {
6064
- value: T;
6065
- };
6066
- q: ExpressionData;
6067
- constructor(value: T, name: string);
6068
- makeSQL(ctx: ToSQLCtx, quotedAs?: string): string;
6069
- }
6070
- declare class RefExpression<T extends QueryColumn> extends Expression<T> {
6071
- q: QueryData;
6072
- ref: string;
6073
- result: {
6074
- value: T;
6075
- };
6076
- constructor(value: T, q: QueryData, ref: string);
6077
- makeSQL(ctx: ToSQLCtx, quotedAs?: string): string;
6078
- }
6079
- interface QueryReturnsFnAdd<T extends PickQueryColumnTypes> extends QueryMetaHasSelect {
6080
- type<C extends QueryColumn>(fn: (types: T['columnTypes']) => C): {
6081
- [K in keyof T]: K extends 'result' ? {
6082
- value: C;
6083
- } : K extends 'returnType' ? 'valueOrThrow' : K extends 'then' ? QueryThen<C['outputType']> : T[K];
6084
- } & C['operators'];
6085
- }
6086
- type SetQueryReturnsFn<T extends PickQueryColumnTypes, C extends PickOutputType> = {
6087
- [K in keyof T]: K extends 'result' ? {
6088
- value: C;
6089
- } : K extends 'returnType' ? 'valueOrThrow' : K extends 'then' ? QueryThen<C['outputType']> : T[K];
6090
- } & QueryReturnsFnAdd<T>;
6091
- declare class ExpressionMethods {
6092
- /**
6093
- * `column` references a table column, this can be used in raw SQL or when building a column expression.
6094
- * Only for referencing a column in the query's table. For referencing joined table's columns, see [ref](#ref).
6095
- *
6096
- * ```ts
6097
- * await db.table.select({
6098
- * // select `("table"."id" = 1 OR "table"."name" = 'name') AS "one"`,
6099
- * // returns a boolean
6100
- * one: (q) =>
6101
- * q.sql<boolean>`${q.column('id')} = ${1} OR ${q.column('name')} = ${'name'}`,
6102
- *
6103
- * // selects the same as above, but by building a query
6104
- * two: (q) => q.column('id').equals(1).or(q.column('name').equals('name')),
6105
- * });
6106
- * ```
6107
- *
6108
- * @param name - column name
6109
- */
6110
- column<T extends PickQueryShape, K extends keyof T['shape']>(this: T, name: K): ColumnRefExpression<T['shape'][K]> & T['shape'][K]['operators'];
6111
- /**
6112
- * `ref` is similar to [column](#column), but it also allows to reference a column of joined table,
6113
- * and other dynamically defined columns.
6114
- *
6115
- * ```ts
6116
- * await db.table.join('otherTable').select({
6117
- * // select `("otherTable"."id" = 1 OR "otherTable"."name" = 'name') AS "one"`,
6118
- * // returns a boolean
6119
- * one: (q) =>
6120
- * q.sql<boolean>`${q.ref('otherTable.id')} = ${1} OR ${q.ref(
6121
- * 'otherTable.name',
6122
- * )} = ${'name'}`,
6123
- *
6124
- * // selects the same as above, but by building a query
6125
- * two: (q) =>
6126
- * q
6127
- * .ref('otherTable.id')
6128
- * .equals(1)
6129
- * .or(q.ref('otherTable.name').equals('name')),
6130
- * });
6131
- * ```
6132
- *
6133
- * @param arg - any available column name, such as of a joined table
6134
- */
6135
- ref<T extends PickQueryMeta, K extends keyof T['meta']['selectable'] & string>(this: T, arg: K): RefExpression<T['meta']['selectable'][K]['column']> & T['meta']['selectable'][K]['column']['operators'];
6136
- val(value: unknown): ValExpression;
6137
- /**
6138
- * `fn` allows to call an arbitrary SQL function.
6139
- *
6140
- * For example, calling `sqrt` function to get a square root from some numeric column:
6141
- *
6142
- * ```ts
6143
- * const q = await User.select({
6144
- * sqrt: (q) => q.fn<number>('sqrt', ['numericColumn']),
6145
- * }).take();
6146
- *
6147
- * q.sqrt; // has type `number` just as provided
6148
- * ```
6149
- *
6150
- * If this is an aggregate function, you can specify aggregation options (see [Aggregate](/guide/aggregate.html)) via third parameter.
6151
- *
6152
- * Use `type` method to specify a column type so that its operators such as `lt` and `gt` become available:
6153
- *
6154
- * ```ts
6155
- * const q = await User.select({
6156
- * // Produces `sqrt("numericColumn") > 5`
6157
- * sqrtIsGreaterThan5: (q) =>
6158
- * q
6159
- * .fn('sqrt', ['numericColumn'])
6160
- * .type((t) => t.float())
6161
- * .gt(5),
6162
- * }).take();
6163
- *
6164
- * // Return type is boolean | null
6165
- * // todo: it should be just boolean if the column is not nullable, but for now it's always nullable
6166
- * q.sqrtIsGreaterThan5;
6167
- * ```
6168
- *
6169
- * @param fn
6170
- * @param args
6171
- * @param options
6172
- */
6173
- fn<T extends PickQueryMetaResultRelationsWindowsColumnTypes, Type = unknown, C extends QueryColumn = QueryColumn<Type>>(this: T, fn: string, args: SelectableOrExpression<T>[], options?: AggregateOptions<T>): SetQueryReturnsFn<T, C>;
6174
- }
6175
-
6176
6196
  interface WindowArg<T extends OrderArgSelf> {
6177
6197
  [K: string]: WindowArgDeclaration<T> | Expression;
6178
6198
  }
@@ -7011,6 +7031,12 @@ type SetQueryWith<T, WithData> = {
7011
7031
  type AddQueryWith<T extends PickQueryWithData, With extends WithDataItem> = SetQueryWith<T, {
7012
7032
  [K in keyof T['withData'] | With['table']]: K extends With['table'] ? With : K extends keyof T['withData'] ? T['withData'][K] : never;
7013
7033
  }>;
7034
+ interface QueryOrExpression<T> {
7035
+ result: {
7036
+ value: QueryColumn<T>;
7037
+ };
7038
+ }
7039
+ type QueryOrExpressionBooleanOrNullResult = QueryOrExpression<boolean | null>;
7014
7040
 
7015
7041
  interface ColumnData extends ColumnDataBase {
7016
7042
  maxChars?: number;
@@ -7673,4 +7699,4 @@ type CopyResult<T extends PickQueryMeta> = SetQueryKind<T, 'copy'>;
7673
7699
  */
7674
7700
  declare function copyTableData<T extends PickQueryMetaShape>(query: T, arg: CopyArg<T>): CopyResult<T>;
7675
7701
 
7676
- export { Adapter, AdapterConfig, AdapterOptions, AddQueryDefaults, AddQuerySelect, AddQueryWith, AfterHook, AggregateMethods, AggregateOptions, AliasOrTable, ArrayColumn, ArrayColumnValue, ArrayData, AsMethods, AsQueryArg, BaseOperators, BigIntColumn, BigSerialColumn, BitColumn, BitVaryingColumn, BooleanColumn, BooleanQueryColumn, BoxColumn, ByteaColumn, CharColumn, CidrColumn, CircleColumn, CitextColumn, Clear, ClearStatement, CloneSelfKeys, ColumnData, ColumnExpression, ColumnFromDbParams, ColumnInfoQueryData, ColumnOperators, ColumnRefExpression, ColumnType, ColumnsByType, ColumnsShape, ColumnsShapeToNullableObject, ColumnsShapeToObject, ColumnsShapeToObjectArray, ColumnsShapeToPluck, CommonQueryData, ComputedColumnsBase, CopyOptions, CopyQueryData, Create, CreateBelongsToData, CreateColumn, CreateCtx, CreateData, CreateKind, CreateMethodsNames, CreateRelationsData, CreateRelationsDataOmittingFKeys, 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, From, FromArg, FromQuerySelf, FromResult, GetArg, GetColumnInfo, GetQueryResult, GetResult, GetResultOptional, GetStringArg, GroupArg, Having, HavingItem, HookAction, HookSelect, IdentityColumn, InetColumn, InsertQueryData, IntegerBaseColumn, IntegerColumn, IntervalColumn, IsolationLevel, JSONColumn, JSONTextColumn, Join, JoinArgs, JoinCallback, JoinFirstArg, JoinItem, JoinItemArgs, JoinLateralCallback, JoinLateralItem, JoinLateralResult, JoinOverrides, JoinQueryBuilder, JoinQueryMethod, JoinResult, JoinedParsers, JoinedShapes, JsonItem, JsonMethods, JsonModifiers, LimitedTextBaseColumn, LineColumn, LsegColumn, MacAddr8Column, MacAddrColumn, MapTableScopesOption, MergeQuery, MergeQueryMethods, MoneyColumn, MoreThanOneRowError, NoPrimaryKeyOption, NotFoundError, NumberAsStringBaseColumn, NumberBaseColumn, NumberColumnData, OnConflictMerge, OnConflictQueryBuilder, OnConflictSet, OnConflictTarget, OnMethods, Operator, Operators, OperatorsAny, OperatorsArray, OperatorsBoolean, OperatorsDate, OperatorsJson, OperatorsNumber, OperatorsText, OperatorsTime, OrCreateArg, 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, PickQueryQ, PickQueryQAndBaseQuery, PickQueryQAndInternal, PickQueryRelations, PickQueryRelationsWithData, PickQueryShapeResultSinglePrimaryKey, PickQueryShapeSinglePrimaryKey, PickQuerySinglePrimaryKey, PickQueryWindows, PickQueryWithData, PointColumn, PolygonColumn, Query, QueryAfterHook, QueryArraysResult, QueryBase, QueryBaseThen, QueryBeforeHook, QueryData, QueryDataFromItem, QueryDataJoinTo, QueryDefaultReturnData, QueryError, QueryErrorName, QueryGet, QueryGetSelf, QueryHelperResult, QueryHookSelect, QueryHooks, QueryInternal, QueryLog, QueryLogObject, QueryLogOptions, QueryLogger, QueryMetaHasSelect, QueryMetaHasWhere, QueryMethods, QueryResult, QueryReturnsAll, QueryScopeData, QueryScopes, QuerySourceItem, QueryTransform, QueryTransformFn, QueryUpsertOrCreate, QueryWithComputed, QueryWithTable, RawSQL, RealColumn, RecordOfColumnsShapeBase, RefExpression, RelationConfigBase, RelationConfigDataForCreate, RelationJoinQuery, RelationQuery, RelationQueryBase, RelationsBase, SearchArg, SearchMethods, SearchWeight, SearchWeightRecord, Select, SelectArg, SelectAs, SelectItem, SelectQueryData, SelectSubQueryResult, SelectableFromShape, SelectableOfType, SelectableOrExpression, SelectableOrExpressionOfType, 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, SetQueryWith, 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, UnionArg, UnionItem, UnionKind, UniqueConstraints, UniqueQueryTypeOrExpression, UniqueTableDataItem, UnknownColumn, Update, UpdateArg, UpdateCtx, UpdateCtxCollect, UpdateData, UpdateQueryData, UpdateQueryDataItem, UpdateQueryDataObject, UpdateSelf, UpdatedAtDataInjector, UpsertArg, UpsertResult, UpsertThis, VarCharColumn, VirtualColumn, Where, WhereArg, WhereArgs, WhereInArg, WhereInColumn, WhereInItem, WhereInValues, WhereItem, WhereJsonPathEqualsItem, WhereNotArgs, WhereOnItem, WhereOnJoinItem, WhereQueryBuilder, WhereResult, WhereSearchItem, WhereSearchResult, WindowArg, WindowArgDeclaration, WindowDeclaration, WindowItem, With, WithDataBase, WithDataItem, WithDataItems, WithItem, WithOptions, WrapQueryArg, XMLColumn, _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, _queryUpdate, _queryUpdateOrThrow, _queryUpdateRaw, _queryWhere, _queryWhereExists, _queryWhereIn, _queryWhereNot, _queryWhereNotSql, _queryWhereSql, addComputedColumns, addParserForRawExpression, addParserForSelectItem, addQueryOn, anyShape, checkIfASimpleQuery, cloneQuery, cloneQueryBaseUnscoped, columnCheckToCode, columnCode, columnForeignKeysToCode, columnIndexesToCode, columnsShapeToCode, constraintInnerToCode, constraintToCode, copyTableData, countSelect, createDb, defaultSchemaConfig, extendQuery, foreignKeyArgumentToCode, getClonedQueryData, getColumnInfo, getColumnTypes, getPrimaryKeys, getQueryAs, getShapeFromSelect, handleResult, identityToCode, indexInnerToCode, indexToCode, instantiateColumn, isDefaultTimeStamp, isQueryReturnsAll, isSelectingCount, joinSubQuery, logColors, logParamToLogObject, makeColumnTypes, makeColumnsByType, makeFnExpression, makeRegexToFindInSql, makeSQL, parseRecord, parseResult, parseTableData, parseTableDataInput, primaryKeyInnerToCode, processSelectArg, pushLimitSQL, pushQueryArray, pushQueryOn, pushQueryOrOn, pushQueryValue, pushTableDataCode, queryFrom, queryFromSql, queryJson, queryMethodByReturnType, queryTypeWithLimitOne, queryWrap, quote, quoteString, raw, referencesArgsToCode, resolveSubQueryCallback, saveSearchAlias, setParserForSelectedString, setQueryObjectValue, setQueryOperators, simplifyColumnDefault, sqlFn, sqlQueryArgsToExpression, tableDataMethods, templateLiteralToSQL, testTransaction, throwIfNoWhere, toSQL, toSQLCacheKey };
7702
+ export { Adapter, AdapterConfig, AdapterOptions, AddQueryDefaults, AddQuerySelect, AddQueryWith, AfterHook, AggregateMethods, AggregateOptions, AliasOrTable, ArrayColumn, ArrayColumnValue, ArrayData, AsMethods, AsQueryArg, BaseOperators, BigIntColumn, BigSerialColumn, BitColumn, BitVaryingColumn, BooleanColumn, BooleanQueryColumn, BoxColumn, ByteaColumn, CharColumn, CidrColumn, CircleColumn, CitextColumn, Clear, ClearStatement, CloneSelfKeys, ColumnData, ColumnExpression, ColumnFromDbParams, ColumnInfoQueryData, ColumnOperators, ColumnRefExpression, ColumnType, ColumnsByType, ColumnsShape, ColumnsShapeToNullableObject, ColumnsShapeToObject, ColumnsShapeToObjectArray, ColumnsShapeToPluck, CommonQueryData, ComputedColumnsBase, CopyOptions, CopyQueryData, Create, CreateBelongsToData, CreateColumn, CreateCtx, CreateData, CreateKind, CreateMethodsNames, CreateRelationsData, CreateRelationsDataOmittingFKeys, 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, From, FromArg, FromQuerySelf, FromResult, GetArg, GetColumnInfo, GetQueryResult, GetResult, GetResultOptional, GetStringArg, GroupArg, Having, HavingItem, HookAction, HookSelect, IdentityColumn, InetColumn, InsertQueryData, IntegerBaseColumn, IntegerColumn, IntervalColumn, IsolationLevel, JSONColumn, JSONTextColumn, Join, JoinArgs, JoinCallback, JoinFirstArg, JoinItem, JoinItemArgs, JoinLateralCallback, JoinLateralItem, JoinLateralResult, JoinOverrides, JoinQueryBuilder, JoinQueryMethod, JoinResult, JoinedParsers, JoinedShapes, JsonItem, JsonMethods, JsonModifiers, LimitedTextBaseColumn, LineColumn, LsegColumn, MacAddr8Column, MacAddrColumn, MapTableScopesOption, MergeQuery, MergeQueryMethods, MoneyColumn, MoreThanOneRowError, NoPrimaryKeyOption, NotFoundError, NumberAsStringBaseColumn, NumberBaseColumn, NumberColumnData, 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, PickQueryQ, PickQueryQAndBaseQuery, PickQueryQAndInternal, PickQueryRelations, PickQueryRelationsWithData, PickQueryShapeResultSinglePrimaryKey, PickQueryShapeSinglePrimaryKey, PickQuerySinglePrimaryKey, PickQueryWindows, PickQueryWithData, PointColumn, PolygonColumn, Query, QueryAfterHook, QueryArraysResult, QueryBase, QueryBaseThen, QueryBeforeHook, QueryData, QueryDataFromItem, QueryDataJoinTo, QueryDefaultReturnData, QueryError, QueryErrorName, QueryGet, QueryGetSelf, QueryHelperResult, QueryHookSelect, QueryHooks, QueryInternal, QueryLog, QueryLogObject, QueryLogOptions, QueryLogger, QueryMetaHasSelect, QueryMetaHasWhere, QueryMethods, QueryOrExpression, QueryOrExpressionBooleanOrNullResult, QueryResult, QueryReturnsAll, QueryScopeData, QueryScopes, QuerySourceItem, QueryTransform, QueryTransformFn, QueryUpsertOrCreate, QueryWithComputed, QueryWithTable, RawSQL, RealColumn, RecordOfColumnsShapeBase, RefExpression, RelationConfigBase, RelationConfigDataForCreate, RelationJoinQuery, RelationQuery, RelationQueryBase, RelationsBase, SearchArg, SearchMethods, SearchWeight, SearchWeightRecord, Select, SelectArg, SelectAs, SelectItem, SelectQueryData, SelectSubQueryResult, SelectableFromShape, SelectableOfType, SelectableOrExpression, SelectableOrExpressionOfType, 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, SetQueryWith, 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, UnionArg, UnionItem, UnionKind, UniqueConstraints, UniqueQueryTypeOrExpression, UniqueTableDataItem, UnknownColumn, Update, UpdateArg, UpdateCtx, UpdateCtxCollect, UpdateData, UpdateQueryData, UpdateQueryDataItem, UpdateQueryDataObject, UpdateSelf, UpdatedAtDataInjector, UpsertArg, UpsertResult, UpsertThis, VarCharColumn, VirtualColumn, Where, WhereArg, WhereArgs, WhereInArg, WhereInColumn, WhereInItem, WhereInValues, WhereItem, WhereJsonPathEqualsItem, WhereNotArgs, WhereOnItem, WhereOnJoinItem, WhereQueryBuilder, WhereResult, WhereSearchItem, WhereSearchResult, WindowArg, WindowArgDeclaration, WindowDeclaration, WindowItem, With, WithDataBase, WithDataItem, WithDataItems, WithItem, WithOptions, WrapQueryArg, XMLColumn, _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, _queryUpdate, _queryUpdateOrThrow, _queryUpdateRaw, _queryWhere, _queryWhereExists, _queryWhereIn, _queryWhereNot, _queryWhereNotSql, _queryWhereSql, addComputedColumns, addParserForRawExpression, addParserForSelectItem, addQueryOn, anyShape, checkIfASimpleQuery, cloneQuery, cloneQueryBaseUnscoped, columnCheckToCode, columnCode, columnForeignKeysToCode, columnIndexesToCode, columnsShapeToCode, constraintInnerToCode, constraintToCode, copyTableData, countSelect, createDb, defaultSchemaConfig, extendQuery, foreignKeyArgumentToCode, getClonedQueryData, getColumnInfo, getColumnTypes, getPrimaryKeys, getQueryAs, getShapeFromSelect, handleResult, identityToCode, indexInnerToCode, indexToCode, instantiateColumn, isDefaultTimeStamp, isQueryReturnsAll, isSelectingCount, joinSubQuery, logColors, logParamToLogObject, makeColumnTypes, makeColumnsByType, makeFnExpression, makeRegexToFindInSql, makeSQL, parseRecord, parseResult, parseTableData, parseTableDataInput, primaryKeyInnerToCode, processSelectArg, pushLimitSQL, pushQueryArray, pushQueryOn, pushQueryOrOn, pushQueryValue, pushTableDataCode, queryFrom, queryFromSql, queryJson, queryMethodByReturnType, queryTypeWithLimitOne, queryWrap, quote, quoteString, raw, referencesArgsToCode, resolveSubQueryCallback, saveSearchAlias, setParserForSelectedString, setQueryObjectValue, setQueryOperators, simplifyColumnDefault, sqlFn, sqlQueryArgsToExpression, tableDataMethods, templateLiteralToSQL, testTransaction, throwIfNoWhere, toSQL, toSQLCacheKey };
package/dist/index.js CHANGED
@@ -2024,13 +2024,23 @@ const processWhere = (ands, ctx, table, query, data, quotedAs) => {
2024
2024
  qb.q.and = qb.q.or = void 0;
2025
2025
  qb.q.isSubQuery = true;
2026
2026
  const res = resolveSubQueryCallback(qb, data);
2027
- const expr = res instanceof orchidCore.Expression ? res : res.q.expr;
2028
- if (!(res instanceof orchidCore.Expression) && res.q.expr) {
2029
- const q = joinSubQuery(table, res);
2030
- q.q.select = [expr];
2031
- ands.push(`(${makeSQL(q, ctx).text})`);
2027
+ if (orchidCore.isExpression(res)) {
2028
+ ands.push(`(${res.toSQL(ctx, quotedAs)})`);
2032
2029
  } else {
2033
- pushWhereToSql(ands, ctx, res, res.q, quotedAs, true);
2030
+ if (res.q.expr) {
2031
+ const q = joinSubQuery(table, res);
2032
+ q.q.select = [res.q.expr];
2033
+ ands.push(`(${makeSQL(q, ctx).text})`);
2034
+ } else {
2035
+ pushWhereToSql(
2036
+ ands,
2037
+ ctx,
2038
+ res,
2039
+ res.q,
2040
+ quotedAs,
2041
+ true
2042
+ );
2043
+ }
2034
2044
  }
2035
2045
  return;
2036
2046
  }
@@ -2208,9 +2218,15 @@ const processWhere = (ands, ctx, table, query, data, quotedAs) => {
2208
2218
  }
2209
2219
  }
2210
2220
  } else {
2211
- ands.push(
2212
- `${columnToSql(ctx, query, query.shape, key, quotedAs)} ${value === null ? "IS NULL" : `= ${orchidCore.addValue(ctx.values, value)}`}`
2213
- );
2221
+ const column = columnToSql(ctx, query, query.shape, key, quotedAs);
2222
+ if (typeof value === "function") {
2223
+ const expr = value(table);
2224
+ ands.push(`${column} = ${expr.toSQL(ctx, quotedAs)}`);
2225
+ } else {
2226
+ ands.push(
2227
+ `${column} ${value === null ? "IS NULL" : `= ${orchidCore.addValue(ctx.values, value)}`}`
2228
+ );
2229
+ }
2214
2230
  }
2215
2231
  }
2216
2232
  };
@@ -4706,7 +4722,7 @@ const makeSQL = (table, options) => {
4706
4722
  sql.push(`WINDOW ${window.join(", ")}`);
4707
4723
  }
4708
4724
  if (query.union) {
4709
- query.union.forEach((item) => {
4725
+ for (const item of query.union) {
4710
4726
  let itemSql;
4711
4727
  if (orchidCore.isExpression(item.arg)) {
4712
4728
  itemSql = item.arg.toSQL(ctx, quotedAs);
@@ -4715,7 +4731,7 @@ const makeSQL = (table, options) => {
4715
4731
  itemSql = argSql.text;
4716
4732
  }
4717
4733
  sql.push(`${item.kind} ${item.wrap ? `(${itemSql})` : itemSql}`);
4718
- });
4734
+ }
4719
4735
  }
4720
4736
  if (query.order) {
4721
4737
  pushOrderBySql(ctx, query, quotedAs, query.order);
@@ -8488,6 +8504,11 @@ class Where {
8488
8504
  * // where column equals to raw SQL
8489
8505
  * // import `sql` from your `BaseTable`
8490
8506
  * column: sql`sql expression`,
8507
+ * // or use `(q) => q.sql` for the same
8508
+ * column2: (q) => q.sql`sql expression`,
8509
+ *
8510
+ * // reference other columns in such a way:
8511
+ * firstName: (q) => q.ref('lastName'),
8491
8512
  * });
8492
8513
  * ```
8493
8514
  *
@@ -10336,6 +10357,29 @@ class RefExpression extends orchidCore.Expression {
10336
10357
  return columnToSql(ctx, this.q, this.q.shape, this.ref, quotedAs);
10337
10358
  }
10338
10359
  }
10360
+ class OrExpression extends orchidCore.Expression {
10361
+ constructor(args) {
10362
+ super();
10363
+ this.args = args;
10364
+ this.q = { expr: this };
10365
+ }
10366
+ makeSQL(ctx, quotedAs) {
10367
+ const res = [];
10368
+ for (const arg of this.args) {
10369
+ if (arg) {
10370
+ if (orchidCore.isExpression(arg)) {
10371
+ const sql = arg.toSQL(ctx, quotedAs);
10372
+ if (sql)
10373
+ res.push(sql);
10374
+ } else {
10375
+ res.push(`(${arg.toSQL(ctx).text})`);
10376
+ }
10377
+ }
10378
+ }
10379
+ return `(${res.join(" OR ")})`;
10380
+ }
10381
+ }
10382
+ Object.assign(OrExpression.prototype, Operators.boolean);
10339
10383
  class ExpressionMethods {
10340
10384
  /**
10341
10385
  * `column` references a table column, this can be used in raw SQL or when building a column expression.
@@ -10446,6 +10490,9 @@ class ExpressionMethods {
10446
10490
  fn(fn, args, options) {
10447
10491
  return makeFnExpression(this, orchidCore.emptyObject, fn, args, options);
10448
10492
  }
10493
+ or(...args) {
10494
+ return new OrExpression(args);
10495
+ }
10449
10496
  }
10450
10497
 
10451
10498
  const _queryAll = (q) => {
@@ -11755,6 +11802,7 @@ exports.NumberBaseColumn = NumberBaseColumn;
11755
11802
  exports.OnConflictQueryBuilder = OnConflictQueryBuilder;
11756
11803
  exports.OnMethods = OnMethods;
11757
11804
  exports.Operators = Operators;
11805
+ exports.OrExpression = OrExpression;
11758
11806
  exports.OrchidOrmError = OrchidOrmError;
11759
11807
  exports.OrchidOrmInternalError = OrchidOrmInternalError;
11760
11808
  exports.PathColumn = PathColumn;