kysely 0.26.0 → 0.26.2
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/README.md +6 -6
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +3 -3
- package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +3 -2
- package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -2
- package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +3 -2
- package/dist/cjs/dialect/postgres/postgres-adapter.js +2 -2
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +2 -2
- package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +4 -2
- package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -2
- package/dist/cjs/driver/runtime-driver.js +17 -2
- package/dist/cjs/expression/expression-builder.d.ts +299 -28
- package/dist/cjs/expression/expression-builder.js +36 -26
- package/dist/cjs/expression/expression-wrapper.d.ts +177 -8
- package/dist/cjs/expression/expression-wrapper.js +4 -4
- package/dist/cjs/expression/expression.d.ts +64 -1
- package/dist/cjs/helpers/mysql.d.ts +11 -8
- package/dist/cjs/helpers/mysql.js +21 -32
- package/dist/cjs/helpers/postgres.d.ts +8 -5
- package/dist/cjs/helpers/postgres.js +8 -5
- package/dist/cjs/helpers/sqlite.d.ts +164 -0
- package/dist/cjs/helpers/sqlite.js +180 -0
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/kysely.d.ts +4 -3
- package/dist/cjs/kysely.js +1 -1
- package/dist/cjs/operation-node/common-table-expression-node.d.ts +4 -0
- package/dist/cjs/operation-node/common-table-expression-node.js +6 -0
- package/dist/cjs/operation-node/delete-query-node.d.ts +1 -1
- package/dist/cjs/operation-node/delete-query-node.js +3 -3
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +8 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/operator-node.d.ts +3 -3
- package/dist/cjs/operation-node/operator-node.js +3 -0
- package/dist/cjs/operation-node/order-by-node.d.ts +2 -2
- package/dist/cjs/operation-node/order-by-node.js +4 -4
- package/dist/cjs/operation-node/over-node.d.ts +1 -1
- package/dist/cjs/operation-node/over-node.js +3 -3
- package/dist/cjs/operation-node/select-query-node.d.ts +5 -4
- package/dist/cjs/operation-node/select-query-node.js +13 -7
- package/dist/cjs/operation-node/tuple-node.d.ts +12 -0
- package/dist/cjs/operation-node/tuple-node.js +18 -0
- package/dist/cjs/parser/binary-operation-parser.d.ts +11 -7
- package/dist/cjs/parser/binary-operation-parser.js +35 -46
- package/dist/cjs/parser/expression-parser.d.ts +9 -4
- package/dist/cjs/parser/join-parser.d.ts +2 -2
- package/dist/cjs/parser/join-parser.js +2 -3
- package/dist/cjs/parser/order-by-parser.d.ts +6 -2
- package/dist/cjs/parser/order-by-parser.js +41 -7
- package/dist/cjs/parser/parse-utils.js +2 -2
- package/dist/cjs/parser/reference-parser.js +1 -1
- package/dist/cjs/parser/select-parser.d.ts +5 -5
- package/dist/cjs/parser/set-operation-parser.d.ts +3 -1
- package/dist/cjs/parser/set-operation-parser.js +13 -4
- package/dist/cjs/parser/tuple-parser.d.ts +47 -0
- package/dist/cjs/parser/tuple-parser.js +2 -0
- package/dist/cjs/parser/value-parser.d.ts +4 -2
- package/dist/cjs/parser/value-parser.js +12 -1
- package/dist/cjs/parser/with-parser.d.ts +3 -2
- package/dist/cjs/parser/with-parser.js +16 -4
- package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +3 -3
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +4 -8
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +50 -14
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +5 -5
- package/dist/cjs/query-builder/aggregate-function-builder.js +2 -2
- package/dist/cjs/query-builder/case-builder.js +8 -4
- package/dist/cjs/query-builder/cte-builder.d.ts +20 -0
- package/dist/cjs/query-builder/cte-builder.js +39 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +74 -24
- package/dist/cjs/query-builder/delete-query-builder.js +3 -3
- package/dist/cjs/query-builder/function-module.d.ts +41 -6
- package/dist/cjs/query-builder/function-module.js +3 -0
- package/dist/cjs/query-builder/having-interface.d.ts +2 -5
- package/dist/cjs/query-builder/insert-query-builder.d.ts +1 -1
- package/dist/cjs/query-builder/join-builder.d.ts +2 -6
- package/dist/cjs/query-builder/join-builder.js +2 -2
- package/dist/cjs/query-builder/json-path-builder.d.ts +60 -4
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +143 -44
- package/dist/cjs/query-builder/on-conflict-builder.js +4 -4
- package/dist/cjs/query-builder/over-builder.js +1 -1
- package/dist/cjs/query-builder/select-query-builder.d.ts +245 -86
- package/dist/cjs/query-builder/select-query-builder.js +72 -924
- package/dist/cjs/query-builder/update-query-builder.d.ts +106 -25
- package/dist/cjs/query-builder/update-query-builder.js +2 -2
- package/dist/cjs/query-builder/where-interface.d.ts +71 -24
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +39 -7
- package/dist/cjs/query-creator.d.ts +74 -2
- package/dist/cjs/query-creator.js +83 -6
- package/dist/cjs/raw-builder/raw-builder.d.ts +88 -49
- package/dist/cjs/raw-builder/raw-builder.js +18 -45
- package/dist/cjs/raw-builder/sql.js +8 -8
- package/dist/cjs/schema/alter-table-builder.d.ts +4 -0
- package/dist/cjs/schema/alter-table-builder.js +12 -0
- package/dist/cjs/schema/create-index-builder.d.ts +1 -1
- package/dist/cjs/schema/create-index-builder.js +1 -1
- package/dist/cjs/util/column-type.d.ts +7 -6
- package/dist/cjs/util/json-object-args.d.ts +3 -0
- package/dist/cjs/util/json-object-args.js +35 -0
- package/dist/cjs/util/object-utils.d.ts +1 -0
- package/dist/cjs/util/object-utils.js +9 -1
- package/dist/cjs/util/type-utils.d.ts +10 -10
- package/dist/esm/dialect/dialect-adapter-base.d.ts +3 -3
- package/dist/esm/dialect/mysql/mysql-adapter.d.ts +3 -2
- package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
- package/dist/esm/dialect/postgres/postgres-adapter.d.ts +3 -2
- package/dist/esm/dialect/postgres/postgres-adapter.js +2 -2
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +2 -2
- package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +4 -2
- package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -2
- package/dist/esm/driver/runtime-driver.js +17 -2
- package/dist/esm/expression/expression-builder.d.ts +299 -28
- package/dist/esm/expression/expression-builder.js +40 -30
- package/dist/esm/expression/expression-wrapper.d.ts +177 -8
- package/dist/esm/expression/expression-wrapper.js +5 -5
- package/dist/esm/expression/expression.d.ts +64 -1
- package/dist/esm/helpers/mysql.d.ts +11 -8
- package/dist/esm/helpers/mysql.js +21 -32
- package/dist/esm/helpers/postgres.d.ts +8 -5
- package/dist/esm/helpers/postgres.js +8 -5
- package/dist/esm/helpers/sqlite.d.ts +164 -0
- package/dist/esm/helpers/sqlite.js +175 -0
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/kysely.d.ts +4 -3
- package/dist/esm/kysely.js +1 -1
- package/dist/esm/operation-node/common-table-expression-node.d.ts +4 -0
- package/dist/esm/operation-node/common-table-expression-node.js +6 -0
- package/dist/esm/operation-node/delete-query-node.d.ts +1 -1
- package/dist/esm/operation-node/delete-query-node.js +3 -3
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +8 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-visitor.js +1 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/operator-node.d.ts +3 -3
- package/dist/esm/operation-node/operator-node.js +3 -0
- package/dist/esm/operation-node/order-by-node.d.ts +2 -2
- package/dist/esm/operation-node/order-by-node.js +4 -4
- package/dist/esm/operation-node/over-node.d.ts +1 -1
- package/dist/esm/operation-node/over-node.js +3 -3
- package/dist/esm/operation-node/select-query-node.d.ts +5 -4
- package/dist/esm/operation-node/select-query-node.js +13 -7
- package/dist/esm/operation-node/tuple-node.d.ts +12 -0
- package/dist/esm/operation-node/tuple-node.js +16 -0
- package/dist/esm/parser/binary-operation-parser.d.ts +11 -7
- package/dist/esm/parser/binary-operation-parser.js +36 -47
- package/dist/esm/parser/expression-parser.d.ts +9 -4
- package/dist/esm/parser/join-parser.d.ts +2 -2
- package/dist/esm/parser/join-parser.js +3 -4
- package/dist/esm/parser/order-by-parser.d.ts +6 -2
- package/dist/esm/parser/order-by-parser.js +40 -7
- package/dist/esm/parser/parse-utils.js +3 -3
- package/dist/esm/parser/reference-parser.js +1 -1
- package/dist/esm/parser/select-parser.d.ts +5 -5
- package/dist/esm/parser/set-operation-parser.d.ts +3 -1
- package/dist/esm/parser/set-operation-parser.js +11 -2
- package/dist/esm/parser/tuple-parser.d.ts +47 -0
- package/dist/esm/parser/tuple-parser.js +2 -0
- package/dist/esm/parser/value-parser.d.ts +4 -2
- package/dist/esm/parser/value-parser.js +10 -1
- package/dist/esm/parser/with-parser.d.ts +3 -2
- package/dist/esm/parser/with-parser.js +16 -4
- package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +3 -3
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +5 -9
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +51 -15
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +5 -5
- package/dist/esm/query-builder/aggregate-function-builder.js +3 -3
- package/dist/esm/query-builder/case-builder.js +10 -6
- package/dist/esm/query-builder/cte-builder.d.ts +20 -0
- package/dist/esm/query-builder/cte-builder.js +36 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +74 -24
- package/dist/esm/query-builder/delete-query-builder.js +4 -4
- package/dist/esm/query-builder/function-module.d.ts +41 -6
- package/dist/esm/query-builder/function-module.js +3 -0
- package/dist/esm/query-builder/having-interface.d.ts +2 -5
- package/dist/esm/query-builder/insert-query-builder.d.ts +1 -1
- package/dist/esm/query-builder/join-builder.d.ts +2 -6
- package/dist/esm/query-builder/join-builder.js +3 -3
- package/dist/esm/query-builder/json-path-builder.d.ts +60 -4
- package/dist/esm/query-builder/on-conflict-builder.d.ts +143 -44
- package/dist/esm/query-builder/on-conflict-builder.js +5 -5
- package/dist/esm/query-builder/over-builder.js +1 -1
- package/dist/esm/query-builder/select-query-builder.d.ts +245 -86
- package/dist/esm/query-builder/select-query-builder.js +72 -923
- package/dist/esm/query-builder/update-query-builder.d.ts +106 -25
- package/dist/esm/query-builder/update-query-builder.js +3 -3
- package/dist/esm/query-builder/where-interface.d.ts +71 -24
- package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
- package/dist/esm/query-compiler/default-query-compiler.js +39 -7
- package/dist/esm/query-creator.d.ts +74 -2
- package/dist/esm/query-creator.js +84 -7
- package/dist/esm/raw-builder/raw-builder.d.ts +88 -49
- package/dist/esm/raw-builder/raw-builder.js +17 -42
- package/dist/esm/raw-builder/sql.js +9 -9
- package/dist/esm/schema/alter-table-builder.d.ts +4 -0
- package/dist/esm/schema/alter-table-builder.js +12 -0
- package/dist/esm/schema/create-index-builder.d.ts +1 -1
- package/dist/esm/schema/create-index-builder.js +2 -2
- package/dist/esm/util/column-type.d.ts +7 -6
- package/dist/esm/util/json-object-args.d.ts +3 -0
- package/dist/esm/util/json-object-args.js +32 -0
- package/dist/esm/util/object-utils.d.ts +1 -0
- package/dist/esm/util/object-utils.js +7 -0
- package/dist/esm/util/type-utils.d.ts +10 -10
- package/helpers/sqlite.d.ts +1 -0
- package/helpers/sqlite.js +1 -0
- package/package.json +7 -4
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { ExpressionBuilder } from '../expression/expression-builder.js';
|
|
2
|
-
import { Expression } from '../expression/expression.js';
|
|
3
1
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
2
|
+
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
4
3
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
5
4
|
import { SqlBool } from '../util/type-utils.js';
|
|
6
5
|
export interface HavingInterface<DB, TB extends keyof DB> {
|
|
@@ -9,12 +8,10 @@ export interface HavingInterface<DB, TB extends keyof DB> {
|
|
|
9
8
|
* instead of a `where` statement.
|
|
10
9
|
*/
|
|
11
10
|
having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): HavingInterface<DB, TB>;
|
|
12
|
-
having(
|
|
13
|
-
having(expression: Expression<any>): HavingInterface<DB, TB>;
|
|
11
|
+
having(expression: ExpressionOrFactory<DB, TB, SqlBool>): HavingInterface<DB, TB>;
|
|
14
12
|
/**
|
|
15
13
|
* Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
|
|
16
14
|
* instead of a `where` statement.
|
|
17
15
|
*/
|
|
18
16
|
havingRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): HavingInterface<DB, TB>;
|
|
19
17
|
}
|
|
20
|
-
export type HavingExpressionFactory<DB, TB extends keyof DB> = (eb: ExpressionBuilder<DB, TB>) => Expression<SqlBool>;
|
|
@@ -539,7 +539,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
539
539
|
* }
|
|
540
540
|
* ```
|
|
541
541
|
*/
|
|
542
|
-
$if<O2>(condition: boolean, func: (qb: this) => InsertQueryBuilder<
|
|
542
|
+
$if<O2>(condition: boolean, func: (qb: this) => InsertQueryBuilder<any, any, O2>): O2 extends InsertResult ? InsertQueryBuilder<DB, TB, InsertResult> : O2 extends O & infer E ? InsertQueryBuilder<DB, TB, O & Partial<E>> : InsertQueryBuilder<DB, TB, Partial<O2>>;
|
|
543
543
|
/**
|
|
544
544
|
* Change the output type of the query.
|
|
545
545
|
*
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { ExpressionBuilder } from '../expression/expression-builder.js';
|
|
2
|
-
import { Expression } from '../expression/expression.js';
|
|
3
1
|
import { JoinNode } from '../operation-node/join-node.js';
|
|
4
2
|
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
5
3
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
4
|
+
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
6
5
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
7
6
|
import { SqlBool } from '../util/type-utils.js';
|
|
8
7
|
export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNodeSource {
|
|
@@ -15,8 +14,7 @@ export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNo
|
|
|
15
14
|
* See {@link WhereInterface.where} for documentation and examples.
|
|
16
15
|
*/
|
|
17
16
|
on<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): JoinBuilder<DB, TB>;
|
|
18
|
-
on(
|
|
19
|
-
on(expression: Expression<any>): JoinBuilder<DB, TB>;
|
|
17
|
+
on(expression: ExpressionOrFactory<DB, TB, SqlBool>): JoinBuilder<DB, TB>;
|
|
20
18
|
/**
|
|
21
19
|
* Just like {@link WhereInterface.whereRef} but adds an item to the join's
|
|
22
20
|
* `on` clause instead.
|
|
@@ -38,5 +36,3 @@ export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNo
|
|
|
38
36
|
export interface JoinBuilderProps {
|
|
39
37
|
readonly joinNode: JoinNode;
|
|
40
38
|
}
|
|
41
|
-
type OnExpressionFactory<DB, TB extends keyof DB> = (eb: ExpressionBuilder<DB, TB>) => Expression<SqlBool>;
|
|
42
|
-
export {};
|
|
@@ -14,7 +14,7 @@ class JoinBuilder {
|
|
|
14
14
|
on(...args) {
|
|
15
15
|
return new JoinBuilder({
|
|
16
16
|
...this.#props,
|
|
17
|
-
joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, binary_operation_parser_js_1.
|
|
17
|
+
joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, binary_operation_parser_js_1.parseValueBinaryOperationOrExpression)(args)),
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
@@ -26,7 +26,7 @@ class JoinBuilder {
|
|
|
26
26
|
onRef(lhs, op, rhs) {
|
|
27
27
|
return new JoinBuilder({
|
|
28
28
|
...this.#props,
|
|
29
|
-
joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, binary_operation_parser_js_1.
|
|
29
|
+
joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, binary_operation_parser_js_1.parseReferentialBinaryOperation)(lhs, op, rhs)),
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AliasedExpression, Expression } from '../expression/expression.js';
|
|
1
|
+
import { AliasableExpression, AliasedExpression, Expression } from '../expression/expression.js';
|
|
2
2
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
3
3
|
import { JSONReferenceNode } from '../operation-node/json-reference-node.js';
|
|
4
4
|
import { OperationNode } from '../operation-node/operation-node.js';
|
|
@@ -119,9 +119,9 @@ export declare class JSONPathBuilder<S, O = S> {
|
|
|
119
119
|
* select "profile"->'addresses'->0->'city' as "city" from "person"
|
|
120
120
|
* ```
|
|
121
121
|
*/
|
|
122
|
-
key<K extends any[] extends O ? never : O extends object ? keyof NonNullable<O> & string : never, O2 = undefined extends O ? null | NonNullable<NonNullable<O>[K]> : null extends O ? null | NonNullable<NonNullable<O>[K]> : NonNullable<O>[K]>(key: K): TraversedJSONPathBuilder<S, O2>;
|
|
122
|
+
key<K extends any[] extends O ? never : O extends object ? keyof NonNullable<O> & string : never, O2 = undefined extends O ? null | NonNullable<NonNullable<O>[K]> : null extends O ? null | NonNullable<NonNullable<O>[K]> : string extends keyof NonNullable<O> ? null | NonNullable<NonNullable<O>[K]> : NonNullable<O>[K]>(key: K): TraversedJSONPathBuilder<S, O2>;
|
|
123
123
|
}
|
|
124
|
-
export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O> implements
|
|
124
|
+
export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O> implements AliasableExpression<O> {
|
|
125
125
|
#private;
|
|
126
126
|
constructor(node: JSONReferenceNode);
|
|
127
127
|
/** @private */
|
|
@@ -152,7 +152,7 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
|
|
|
152
152
|
* const result = await db
|
|
153
153
|
* .selectFrom('person')
|
|
154
154
|
* .select(eb =>
|
|
155
|
-
* eb
|
|
155
|
+
* eb('first_name', '=', 'Jennifer').as('is_jennifer')
|
|
156
156
|
* )
|
|
157
157
|
* .executeTakeFirstOrThrow()
|
|
158
158
|
*
|
|
@@ -168,6 +168,62 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
|
|
|
168
168
|
* ```
|
|
169
169
|
*/
|
|
170
170
|
as<A extends string>(alias: A): AliasedExpression<O, A>;
|
|
171
|
+
/**
|
|
172
|
+
* Returns an aliased version of the expression.
|
|
173
|
+
*
|
|
174
|
+
* In addition to slapping `as "the_alias"` at the end of the expression,
|
|
175
|
+
* this method also provides strict typing:
|
|
176
|
+
*
|
|
177
|
+
* ```ts
|
|
178
|
+
* const result = await db
|
|
179
|
+
* .selectFrom('person')
|
|
180
|
+
* .select((eb) =>
|
|
181
|
+
* // `eb.fn<string>` returns an AliasableExpression<string>
|
|
182
|
+
* eb.fn<string>('concat', ['first_name' eb.val(' '), 'last_name']).as('full_name')
|
|
183
|
+
* )
|
|
184
|
+
* .executeTakeFirstOrThrow()
|
|
185
|
+
*
|
|
186
|
+
* // `full_name: string` field exists in the result type.
|
|
187
|
+
* console.log(result.full_name)
|
|
188
|
+
* ```
|
|
189
|
+
*
|
|
190
|
+
* The generated SQL (PostgreSQL):
|
|
191
|
+
*
|
|
192
|
+
* ```ts
|
|
193
|
+
* select
|
|
194
|
+
* concat("first_name", $1, "last_name") as "full_name"
|
|
195
|
+
* from
|
|
196
|
+
* "person"
|
|
197
|
+
* ```
|
|
198
|
+
*
|
|
199
|
+
* You can also pass in a raw SQL snippet (or any expression) but in that case you must
|
|
200
|
+
* provide the alias as the only type argument:
|
|
201
|
+
*
|
|
202
|
+
* ```ts
|
|
203
|
+
* const values = sql<{ a: number, b: string }>`(values (1, 'foo'))`
|
|
204
|
+
*
|
|
205
|
+
* // The alias is `t(a, b)` which specifies the column names
|
|
206
|
+
* // in addition to the table name. We must tell kysely that
|
|
207
|
+
* // columns of the table can be referenced through `t`
|
|
208
|
+
* // by providing an explicit type argument.
|
|
209
|
+
* const aliasedValues = values.as<'t'>(sql`t(a, b)`)
|
|
210
|
+
*
|
|
211
|
+
* await db
|
|
212
|
+
* .insertInto('person')
|
|
213
|
+
* .columns(['first_name', 'last_name'])
|
|
214
|
+
* .expression(
|
|
215
|
+
* db.selectFrom(aliasedValues).select(['t.a', 't.b'])
|
|
216
|
+
* )
|
|
217
|
+
* ```
|
|
218
|
+
*
|
|
219
|
+
* The generated SQL (PostgreSQL):
|
|
220
|
+
*
|
|
221
|
+
* ```ts
|
|
222
|
+
* insert into "person" ("first_name", "last_name")
|
|
223
|
+
* from (values (1, 'foo')) as t(a, b)
|
|
224
|
+
* select "t"."a", "t"."b"
|
|
225
|
+
* ```
|
|
226
|
+
*/
|
|
171
227
|
as<A extends string>(alias: Expression<unknown>): AliasedExpression<O, A>;
|
|
172
228
|
/**
|
|
173
229
|
* Change the output type of the json path.
|
|
@@ -2,10 +2,11 @@ import { Expression } from '../expression/expression.js';
|
|
|
2
2
|
import { OnConflictNode } from '../operation-node/on-conflict-node.js';
|
|
3
3
|
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
4
4
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
5
|
+
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
5
6
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
6
7
|
import { UpdateExpression } from '../parser/update-set-parser.js';
|
|
7
|
-
import { AnyColumn } from '../util/type-utils.js';
|
|
8
|
-
import {
|
|
8
|
+
import { AnyColumn, SqlBool } from '../util/type-utils.js';
|
|
9
|
+
import { WhereInterface } from './where-interface.js';
|
|
9
10
|
export declare class OnConflictBuilder<DB, TB extends keyof DB> implements WhereInterface<DB, TB> {
|
|
10
11
|
#private;
|
|
11
12
|
constructor(props: OnConflictBuilderProps);
|
|
@@ -98,24 +99,53 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
|
|
|
98
99
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
99
100
|
* ```
|
|
100
101
|
*
|
|
101
|
-
* <!-- siteExample("where", "
|
|
102
|
+
* <!-- siteExample("where", "Object filter", 30) -->
|
|
102
103
|
*
|
|
103
|
-
*
|
|
104
|
+
* You can use the `and` function to create a simple equality
|
|
105
|
+
* filter using an object
|
|
104
106
|
*
|
|
105
107
|
* ```ts
|
|
106
108
|
* const persons = await db
|
|
107
109
|
* .selectFrom('person')
|
|
108
110
|
* .selectAll()
|
|
109
|
-
* .where((
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
111
|
+
* .where((eb) => eb.and({
|
|
112
|
+
* first_name: 'Jennifer',
|
|
113
|
+
* last_name: eb.ref('first_name')
|
|
114
|
+
* }))
|
|
115
|
+
* .execute()
|
|
116
|
+
* ```
|
|
117
|
+
*
|
|
118
|
+
* The generated SQL (PostgreSQL):
|
|
119
|
+
*
|
|
120
|
+
* ```sql
|
|
121
|
+
* select *
|
|
122
|
+
* from "person"
|
|
123
|
+
* where (
|
|
124
|
+
* "first_name" = $1
|
|
125
|
+
* and "last_name" = "first_name"
|
|
126
|
+
* )
|
|
127
|
+
* ```
|
|
128
|
+
*
|
|
129
|
+
* <!-- siteExample("where", "OR where", 40) -->
|
|
130
|
+
*
|
|
131
|
+
* To combine conditions using `OR`, you can use the expression builder.
|
|
132
|
+
* There are two ways to create `OR` expressions. Both are shown in this
|
|
133
|
+
* example:
|
|
134
|
+
*
|
|
135
|
+
* ```ts
|
|
136
|
+
* const persons = await db
|
|
137
|
+
* .selectFrom('person')
|
|
138
|
+
* .selectAll()
|
|
139
|
+
* // 1. Using the `or` method on the expression builder:
|
|
140
|
+
* .where((eb) => eb.or([
|
|
141
|
+
* eb('first_name', '=', 'Jennifer'),
|
|
142
|
+
* eb('first_name', '=', 'Sylvester')
|
|
118
143
|
* ]))
|
|
144
|
+
* // 2. Chaining expressions using the `or` method on the
|
|
145
|
+
* // created expressions:
|
|
146
|
+
* .where((eb) =>
|
|
147
|
+
* eb('last_name', '=', 'Aniston').or('last_name', '=', 'Stallone')
|
|
148
|
+
* )
|
|
119
149
|
* .execute()
|
|
120
150
|
* ```
|
|
121
151
|
*
|
|
@@ -125,19 +155,23 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
|
|
|
125
155
|
* select *
|
|
126
156
|
* from "person"
|
|
127
157
|
* where (
|
|
128
|
-
* ("first_name" = $1
|
|
129
|
-
*
|
|
130
|
-
* ("
|
|
158
|
+
* ("first_name" = $1 or "first_name" = $2)
|
|
159
|
+
* and
|
|
160
|
+
* ("last_name" = $3 or "last_name" = $4)
|
|
131
161
|
* )
|
|
132
162
|
* ```
|
|
133
163
|
*
|
|
134
|
-
* <!-- siteExample("where", "Conditional where calls",
|
|
164
|
+
* <!-- siteExample("where", "Conditional where calls", 50) -->
|
|
135
165
|
*
|
|
136
166
|
* You can add expressions conditionally like this:
|
|
137
167
|
*
|
|
138
168
|
* ```ts
|
|
169
|
+
* import { Expression, SqlBool } from 'kysely'
|
|
170
|
+
*
|
|
139
171
|
* const firstName: string | undefined = 'Jennifer'
|
|
140
172
|
* const lastName: string | undefined = 'Aniston'
|
|
173
|
+
* const under18 = true
|
|
174
|
+
* const over60 = true
|
|
141
175
|
*
|
|
142
176
|
* let query = db
|
|
143
177
|
* .selectFrom('person')
|
|
@@ -153,6 +187,23 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
|
|
|
153
187
|
* query = query.where('last_name', '=', lastName)
|
|
154
188
|
* }
|
|
155
189
|
*
|
|
190
|
+
* if (under18 || over60) {
|
|
191
|
+
* // Conditional OR expressions can be added like this.
|
|
192
|
+
* query = query.where((eb) => {
|
|
193
|
+
* const ors: Expression<SqlBool>[] = []
|
|
194
|
+
*
|
|
195
|
+
* if (under18) {
|
|
196
|
+
* ors.push(eb('age', '<', 18))
|
|
197
|
+
* }
|
|
198
|
+
*
|
|
199
|
+
* if (over60) {
|
|
200
|
+
* ors.push(eb('age', '>', 60))
|
|
201
|
+
* }
|
|
202
|
+
*
|
|
203
|
+
* return eb.or(ors)
|
|
204
|
+
* })
|
|
205
|
+
* }
|
|
206
|
+
*
|
|
156
207
|
* const persons = await query.execute()
|
|
157
208
|
* ```
|
|
158
209
|
*
|
|
@@ -205,7 +256,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
|
|
|
205
256
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
206
257
|
* ```
|
|
207
258
|
*
|
|
208
|
-
* <!-- siteExample("where", "Complex where clause",
|
|
259
|
+
* <!-- siteExample("where", "Complex where clause", 60) -->
|
|
209
260
|
*
|
|
210
261
|
* For complex `where` expressions you can pass in a single callback and
|
|
211
262
|
* use the `ExpressionBuilder` to build your expression:
|
|
@@ -217,10 +268,10 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
|
|
|
217
268
|
* const persons = await db
|
|
218
269
|
* .selectFrom('person')
|
|
219
270
|
* .selectAll('person')
|
|
220
|
-
* .where(({
|
|
271
|
+
* .where(({ eb, or, and, not, exists, selectFrom }) => and([
|
|
221
272
|
* or([
|
|
222
|
-
*
|
|
223
|
-
*
|
|
273
|
+
* eb('first_name', '=', firstName),
|
|
274
|
+
* eb('age', '<', maxAge)
|
|
224
275
|
* ]),
|
|
225
276
|
* not(exists(
|
|
226
277
|
* selectFrom('pet')
|
|
@@ -294,8 +345,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
|
|
|
294
345
|
* .execute()
|
|
295
346
|
* ```
|
|
296
347
|
*/
|
|
297
|
-
where(
|
|
298
|
-
where(expression: Expression<any>): OnConflictBuilder<DB, TB>;
|
|
348
|
+
where(expression: ExpressionOrFactory<DB, TB, SqlBool>): OnConflictBuilder<DB, TB>;
|
|
299
349
|
/**
|
|
300
350
|
* Specify an index predicate for the index target.
|
|
301
351
|
*
|
|
@@ -466,24 +516,53 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
|
|
|
466
516
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
467
517
|
* ```
|
|
468
518
|
*
|
|
469
|
-
* <!-- siteExample("where", "
|
|
519
|
+
* <!-- siteExample("where", "Object filter", 30) -->
|
|
470
520
|
*
|
|
471
|
-
*
|
|
521
|
+
* You can use the `and` function to create a simple equality
|
|
522
|
+
* filter using an object
|
|
472
523
|
*
|
|
473
524
|
* ```ts
|
|
474
525
|
* const persons = await db
|
|
475
526
|
* .selectFrom('person')
|
|
476
527
|
* .selectAll()
|
|
477
|
-
* .where((
|
|
478
|
-
*
|
|
479
|
-
*
|
|
480
|
-
*
|
|
481
|
-
*
|
|
482
|
-
*
|
|
483
|
-
*
|
|
484
|
-
*
|
|
485
|
-
*
|
|
528
|
+
* .where((eb) => eb.and({
|
|
529
|
+
* first_name: 'Jennifer',
|
|
530
|
+
* last_name: eb.ref('first_name')
|
|
531
|
+
* }))
|
|
532
|
+
* .execute()
|
|
533
|
+
* ```
|
|
534
|
+
*
|
|
535
|
+
* The generated SQL (PostgreSQL):
|
|
536
|
+
*
|
|
537
|
+
* ```sql
|
|
538
|
+
* select *
|
|
539
|
+
* from "person"
|
|
540
|
+
* where (
|
|
541
|
+
* "first_name" = $1
|
|
542
|
+
* and "last_name" = "first_name"
|
|
543
|
+
* )
|
|
544
|
+
* ```
|
|
545
|
+
*
|
|
546
|
+
* <!-- siteExample("where", "OR where", 40) -->
|
|
547
|
+
*
|
|
548
|
+
* To combine conditions using `OR`, you can use the expression builder.
|
|
549
|
+
* There are two ways to create `OR` expressions. Both are shown in this
|
|
550
|
+
* example:
|
|
551
|
+
*
|
|
552
|
+
* ```ts
|
|
553
|
+
* const persons = await db
|
|
554
|
+
* .selectFrom('person')
|
|
555
|
+
* .selectAll()
|
|
556
|
+
* // 1. Using the `or` method on the expression builder:
|
|
557
|
+
* .where((eb) => eb.or([
|
|
558
|
+
* eb('first_name', '=', 'Jennifer'),
|
|
559
|
+
* eb('first_name', '=', 'Sylvester')
|
|
486
560
|
* ]))
|
|
561
|
+
* // 2. Chaining expressions using the `or` method on the
|
|
562
|
+
* // created expressions:
|
|
563
|
+
* .where((eb) =>
|
|
564
|
+
* eb('last_name', '=', 'Aniston').or('last_name', '=', 'Stallone')
|
|
565
|
+
* )
|
|
487
566
|
* .execute()
|
|
488
567
|
* ```
|
|
489
568
|
*
|
|
@@ -493,19 +572,23 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
|
|
|
493
572
|
* select *
|
|
494
573
|
* from "person"
|
|
495
574
|
* where (
|
|
496
|
-
* ("first_name" = $1
|
|
497
|
-
*
|
|
498
|
-
* ("
|
|
575
|
+
* ("first_name" = $1 or "first_name" = $2)
|
|
576
|
+
* and
|
|
577
|
+
* ("last_name" = $3 or "last_name" = $4)
|
|
499
578
|
* )
|
|
500
579
|
* ```
|
|
501
580
|
*
|
|
502
|
-
* <!-- siteExample("where", "Conditional where calls",
|
|
581
|
+
* <!-- siteExample("where", "Conditional where calls", 50) -->
|
|
503
582
|
*
|
|
504
583
|
* You can add expressions conditionally like this:
|
|
505
584
|
*
|
|
506
585
|
* ```ts
|
|
586
|
+
* import { Expression, SqlBool } from 'kysely'
|
|
587
|
+
*
|
|
507
588
|
* const firstName: string | undefined = 'Jennifer'
|
|
508
589
|
* const lastName: string | undefined = 'Aniston'
|
|
590
|
+
* const under18 = true
|
|
591
|
+
* const over60 = true
|
|
509
592
|
*
|
|
510
593
|
* let query = db
|
|
511
594
|
* .selectFrom('person')
|
|
@@ -521,6 +604,23 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
|
|
|
521
604
|
* query = query.where('last_name', '=', lastName)
|
|
522
605
|
* }
|
|
523
606
|
*
|
|
607
|
+
* if (under18 || over60) {
|
|
608
|
+
* // Conditional OR expressions can be added like this.
|
|
609
|
+
* query = query.where((eb) => {
|
|
610
|
+
* const ors: Expression<SqlBool>[] = []
|
|
611
|
+
*
|
|
612
|
+
* if (under18) {
|
|
613
|
+
* ors.push(eb('age', '<', 18))
|
|
614
|
+
* }
|
|
615
|
+
*
|
|
616
|
+
* if (over60) {
|
|
617
|
+
* ors.push(eb('age', '>', 60))
|
|
618
|
+
* }
|
|
619
|
+
*
|
|
620
|
+
* return eb.or(ors)
|
|
621
|
+
* })
|
|
622
|
+
* }
|
|
623
|
+
*
|
|
524
624
|
* const persons = await query.execute()
|
|
525
625
|
* ```
|
|
526
626
|
*
|
|
@@ -573,7 +673,7 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
|
|
|
573
673
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
574
674
|
* ```
|
|
575
675
|
*
|
|
576
|
-
* <!-- siteExample("where", "Complex where clause",
|
|
676
|
+
* <!-- siteExample("where", "Complex where clause", 60) -->
|
|
577
677
|
*
|
|
578
678
|
* For complex `where` expressions you can pass in a single callback and
|
|
579
679
|
* use the `ExpressionBuilder` to build your expression:
|
|
@@ -585,10 +685,10 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
|
|
|
585
685
|
* const persons = await db
|
|
586
686
|
* .selectFrom('person')
|
|
587
687
|
* .selectAll('person')
|
|
588
|
-
* .where(({
|
|
688
|
+
* .where(({ eb, or, and, not, exists, selectFrom }) => and([
|
|
589
689
|
* or([
|
|
590
|
-
*
|
|
591
|
-
*
|
|
690
|
+
* eb('first_name', '=', firstName),
|
|
691
|
+
* eb('age', '<', maxAge)
|
|
592
692
|
* ]),
|
|
593
693
|
* not(exists(
|
|
594
694
|
* selectFrom('pet')
|
|
@@ -662,8 +762,7 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
|
|
|
662
762
|
* .execute()
|
|
663
763
|
* ```
|
|
664
764
|
*/
|
|
665
|
-
where(
|
|
666
|
-
where(expression: Expression<any>): OnConflictUpdateBuilder<DB, TB>;
|
|
765
|
+
where(expression: ExpressionOrFactory<DB, TB, SqlBool>): OnConflictUpdateBuilder<DB, TB>;
|
|
667
766
|
/**
|
|
668
767
|
* Specify a where condition for the update operation.
|
|
669
768
|
*
|
|
@@ -80,7 +80,7 @@ class OnConflictBuilder {
|
|
|
80
80
|
where(...args) {
|
|
81
81
|
return new OnConflictBuilder({
|
|
82
82
|
...this.#props,
|
|
83
|
-
onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWithIndexWhere(this.#props.onConflictNode, (0, binary_operation_parser_js_1.
|
|
83
|
+
onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWithIndexWhere(this.#props.onConflictNode, (0, binary_operation_parser_js_1.parseValueBinaryOperationOrExpression)(args)),
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
86
|
/**
|
|
@@ -91,7 +91,7 @@ class OnConflictBuilder {
|
|
|
91
91
|
whereRef(lhs, op, rhs) {
|
|
92
92
|
return new OnConflictBuilder({
|
|
93
93
|
...this.#props,
|
|
94
|
-
onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWithIndexWhere(this.#props.onConflictNode, (0, binary_operation_parser_js_1.
|
|
94
|
+
onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWithIndexWhere(this.#props.onConflictNode, (0, binary_operation_parser_js_1.parseReferentialBinaryOperation)(lhs, op, rhs)),
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
97
|
clearWhere() {
|
|
@@ -208,7 +208,7 @@ class OnConflictUpdateBuilder {
|
|
|
208
208
|
where(...args) {
|
|
209
209
|
return new OnConflictUpdateBuilder({
|
|
210
210
|
...this.#props,
|
|
211
|
-
onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWithUpdateWhere(this.#props.onConflictNode, (0, binary_operation_parser_js_1.
|
|
211
|
+
onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWithUpdateWhere(this.#props.onConflictNode, (0, binary_operation_parser_js_1.parseValueBinaryOperationOrExpression)(args)),
|
|
212
212
|
});
|
|
213
213
|
}
|
|
214
214
|
/**
|
|
@@ -219,7 +219,7 @@ class OnConflictUpdateBuilder {
|
|
|
219
219
|
whereRef(lhs, op, rhs) {
|
|
220
220
|
return new OnConflictUpdateBuilder({
|
|
221
221
|
...this.#props,
|
|
222
|
-
onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWithUpdateWhere(this.#props.onConflictNode, (0, binary_operation_parser_js_1.
|
|
222
|
+
onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWithUpdateWhere(this.#props.onConflictNode, (0, binary_operation_parser_js_1.parseReferentialBinaryOperation)(lhs, op, rhs)),
|
|
223
223
|
});
|
|
224
224
|
}
|
|
225
225
|
clearWhere() {
|
|
@@ -34,7 +34,7 @@ class OverBuilder {
|
|
|
34
34
|
*/
|
|
35
35
|
orderBy(orderBy, direction) {
|
|
36
36
|
return new OverBuilder({
|
|
37
|
-
overNode: over_node_js_1.OverNode.
|
|
37
|
+
overNode: over_node_js_1.OverNode.cloneWithOrderByItems(this.#props.overNode, (0, order_by_parser_js_1.parseOrderBy)([orderBy, direction])),
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
40
|
partitionBy(partitionBy) {
|