kysely 0.27.1 → 0.27.3
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/cjs/dialect/database-introspector.d.ts +1 -0
- package/dist/cjs/dialect/mssql/mssql-introspector.js +13 -2
- package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +4 -0
- package/dist/cjs/dialect/mssql/mssql-query-compiler.js +8 -0
- package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +1 -1
- package/dist/cjs/dialect/postgres/postgres-driver.js +2 -1
- package/dist/cjs/dialect/postgres/postgres-introspector.js +2 -0
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
- package/dist/cjs/driver/database-connection.d.ts +1 -1
- package/dist/cjs/expression/expression-builder.d.ts +30 -4
- package/dist/cjs/expression/expression-builder.js +5 -0
- package/dist/cjs/index.d.ts +7 -1
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/migration/migrator.d.ts +19 -2
- package/dist/cjs/migration/migrator.js +77 -43
- package/dist/cjs/operation-node/add-index-node.js +1 -1
- package/dist/cjs/operation-node/cast-node.d.ts +13 -0
- package/dist/cjs/operation-node/cast-node.js +19 -0
- package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
- package/dist/cjs/operation-node/data-type-node.d.ts +5 -1
- package/dist/cjs/operation-node/data-type-node.js +55 -1
- package/dist/cjs/operation-node/delete-query-node.d.ts +4 -0
- package/dist/cjs/operation-node/delete-query-node.js +12 -0
- package/dist/cjs/operation-node/fetch-node.d.ts +15 -0
- package/dist/cjs/operation-node/fetch-node.js +19 -0
- package/dist/cjs/operation-node/insert-query-node.d.ts +4 -1
- package/dist/cjs/operation-node/insert-query-node.js +5 -0
- package/dist/cjs/operation-node/join-node.d.ts +1 -1
- package/dist/cjs/operation-node/matched-node.d.ts +13 -0
- package/dist/cjs/operation-node/matched-node.js +19 -0
- package/dist/cjs/operation-node/merge-query-node.d.ts +25 -0
- package/dist/cjs/operation-node/merge-query-node.js +45 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +10 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +50 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +10 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +5 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/query-node.d.ts +10 -3
- package/dist/cjs/operation-node/query-node.js +15 -1
- package/dist/cjs/operation-node/select-query-node.d.ts +5 -0
- package/dist/cjs/operation-node/select-query-node.js +6 -0
- package/dist/cjs/operation-node/top-node.d.ts +14 -0
- package/dist/cjs/operation-node/top-node.js +19 -0
- package/dist/cjs/operation-node/update-query-node.d.ts +7 -1
- package/dist/cjs/operation-node/update-query-node.js +11 -0
- package/dist/cjs/parser/binary-operation-parser.d.ts +1 -1
- package/dist/cjs/parser/binary-operation-parser.js +2 -2
- package/dist/cjs/parser/data-type-parser.js +7 -3
- package/dist/cjs/parser/fetch-parser.d.ts +2 -0
- package/dist/cjs/parser/fetch-parser.js +18 -0
- package/dist/cjs/parser/insert-values-parser.d.ts +3 -3
- package/dist/cjs/parser/merge-parser.d.ts +9 -0
- package/dist/cjs/parser/merge-parser.js +32 -0
- package/dist/cjs/parser/table-parser.d.ts +4 -3
- package/dist/cjs/parser/top-parser.d.ts +2 -0
- package/dist/cjs/parser/top-parser.js +20 -0
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +4 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +99 -0
- package/dist/cjs/query-builder/delete-query-builder.js +120 -0
- package/dist/cjs/query-builder/insert-query-builder.d.ts +73 -3
- package/dist/cjs/query-builder/insert-query-builder.js +242 -0
- package/dist/cjs/query-builder/merge-query-builder.d.ts +557 -0
- package/dist/cjs/query-builder/merge-query-builder.js +518 -0
- package/dist/cjs/query-builder/merge-result.d.ts +4 -0
- package/dist/cjs/query-builder/merge-result.js +10 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +102 -7
- package/dist/cjs/query-builder/select-query-builder.js +14 -0
- package/dist/cjs/query-builder/update-query-builder.d.ts +82 -3
- package/dist/cjs/query-builder/update-query-builder.js +98 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +10 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +94 -10
- package/dist/cjs/query-compiler/query-compiler.d.ts +2 -1
- package/dist/cjs/query-creator.d.ts +40 -2
- package/dist/cjs/query-creator.js +9 -0
- package/dist/cjs/schema/alter-table-add-index-builder.js +6 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +13 -1
- package/dist/cjs/schema/column-definition-builder.js +15 -1
- package/dist/cjs/util/infer-result.d.ts +2 -1
- package/dist/cjs/util/type-utils.d.ts +3 -2
- package/dist/esm/dialect/database-introspector.d.ts +1 -0
- package/dist/esm/dialect/mssql/mssql-introspector.js +13 -2
- package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +4 -0
- package/dist/esm/dialect/mssql/mssql-query-compiler.js +8 -0
- package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +1 -1
- package/dist/esm/dialect/postgres/postgres-driver.js +2 -1
- package/dist/esm/dialect/postgres/postgres-introspector.js +2 -0
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
- package/dist/esm/driver/database-connection.d.ts +1 -1
- package/dist/esm/expression/expression-builder.d.ts +30 -4
- package/dist/esm/expression/expression-builder.js +5 -0
- package/dist/esm/index.d.ts +7 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/migration/migrator.d.ts +19 -2
- package/dist/esm/migration/migrator.js +76 -42
- package/dist/esm/operation-node/add-index-node.js +1 -1
- package/dist/esm/operation-node/cast-node.d.ts +13 -0
- package/dist/esm/operation-node/cast-node.js +17 -0
- package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
- package/dist/esm/operation-node/data-type-node.d.ts +5 -1
- package/dist/esm/operation-node/data-type-node.js +53 -0
- package/dist/esm/operation-node/delete-query-node.d.ts +4 -0
- package/dist/esm/operation-node/delete-query-node.js +12 -0
- package/dist/esm/operation-node/fetch-node.d.ts +15 -0
- package/dist/esm/operation-node/fetch-node.js +17 -0
- package/dist/esm/operation-node/insert-query-node.d.ts +4 -1
- package/dist/esm/operation-node/insert-query-node.js +5 -0
- package/dist/esm/operation-node/join-node.d.ts +1 -1
- package/dist/esm/operation-node/matched-node.d.ts +13 -0
- package/dist/esm/operation-node/matched-node.js +17 -0
- package/dist/esm/operation-node/merge-query-node.d.ts +25 -0
- package/dist/esm/operation-node/merge-query-node.js +43 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +10 -0
- package/dist/esm/operation-node/operation-node-transformer.js +50 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +10 -0
- package/dist/esm/operation-node/operation-node-visitor.js +5 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/query-node.d.ts +10 -3
- package/dist/esm/operation-node/query-node.js +15 -1
- package/dist/esm/operation-node/select-query-node.d.ts +5 -0
- package/dist/esm/operation-node/select-query-node.js +6 -0
- package/dist/esm/operation-node/top-node.d.ts +14 -0
- package/dist/esm/operation-node/top-node.js +17 -0
- package/dist/esm/operation-node/update-query-node.d.ts +7 -1
- package/dist/esm/operation-node/update-query-node.js +11 -0
- package/dist/esm/parser/binary-operation-parser.d.ts +1 -1
- package/dist/esm/parser/binary-operation-parser.js +2 -2
- package/dist/esm/parser/data-type-parser.js +8 -4
- package/dist/esm/parser/fetch-parser.d.ts +2 -0
- package/dist/esm/parser/fetch-parser.js +15 -0
- package/dist/esm/parser/insert-values-parser.d.ts +3 -3
- package/dist/esm/parser/merge-parser.d.ts +9 -0
- package/dist/esm/parser/merge-parser.js +28 -0
- package/dist/esm/parser/table-parser.d.ts +4 -3
- package/dist/esm/parser/top-parser.d.ts +2 -0
- package/dist/esm/parser/top-parser.js +17 -0
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +4 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +99 -0
- package/dist/esm/query-builder/delete-query-builder.js +120 -0
- package/dist/esm/query-builder/insert-query-builder.d.ts +73 -3
- package/dist/esm/query-builder/insert-query-builder.js +242 -0
- package/dist/esm/query-builder/merge-query-builder.d.ts +557 -0
- package/dist/esm/query-builder/merge-query-builder.js +512 -0
- package/dist/esm/query-builder/merge-result.d.ts +4 -0
- package/dist/esm/query-builder/merge-result.js +7 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +102 -7
- package/dist/esm/query-builder/select-query-builder.js +14 -0
- package/dist/esm/query-builder/update-query-builder.d.ts +82 -3
- package/dist/esm/query-builder/update-query-builder.js +98 -0
- package/dist/esm/query-compiler/default-query-compiler.d.ts +10 -0
- package/dist/esm/query-compiler/default-query-compiler.js +94 -10
- package/dist/esm/query-compiler/query-compiler.d.ts +2 -1
- package/dist/esm/query-creator.d.ts +40 -2
- package/dist/esm/query-creator.js +10 -1
- package/dist/esm/schema/alter-table-add-index-builder.js +7 -3
- package/dist/esm/schema/column-definition-builder.d.ts +13 -1
- package/dist/esm/schema/column-definition-builder.js +15 -1
- package/dist/esm/util/infer-result.d.ts +2 -1
- package/dist/esm/util/type-utils.d.ts +3 -2
- package/package.json +22 -21
|
@@ -21,6 +21,8 @@ const set_operation_parser_js_1 = require("../parser/set-operation-parser.js");
|
|
|
21
21
|
const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
|
|
22
22
|
const expression_wrapper_js_1 = require("../expression/expression-wrapper.js");
|
|
23
23
|
const value_parser_js_1 = require("../parser/value-parser.js");
|
|
24
|
+
const fetch_parser_js_1 = require("../parser/fetch-parser.js");
|
|
25
|
+
const top_parser_js_1 = require("../parser/top-parser.js");
|
|
24
26
|
class SelectQueryBuilderImpl {
|
|
25
27
|
#props;
|
|
26
28
|
constructor(props) {
|
|
@@ -188,6 +190,18 @@ class SelectQueryBuilderImpl {
|
|
|
188
190
|
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOffset(this.#props.queryNode, offset_node_js_1.OffsetNode.create((0, value_parser_js_1.parseValueExpression)(offset))),
|
|
189
191
|
});
|
|
190
192
|
}
|
|
193
|
+
fetch(rowCount, modifier = 'only') {
|
|
194
|
+
return new SelectQueryBuilderImpl({
|
|
195
|
+
...this.#props,
|
|
196
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithFetch(this.#props.queryNode, (0, fetch_parser_js_1.parseFetch)(rowCount, modifier)),
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
top(expression, modifiers) {
|
|
200
|
+
return new SelectQueryBuilderImpl({
|
|
201
|
+
...this.#props,
|
|
202
|
+
queryNode: query_node_js_1.QueryNode.cloneWithTop(this.#props.queryNode, (0, top_parser_js_1.parseTop)(expression, modifiers)),
|
|
203
|
+
});
|
|
204
|
+
}
|
|
191
205
|
union(expression) {
|
|
192
206
|
return new SelectQueryBuilderImpl({
|
|
193
207
|
...this.#props,
|
|
@@ -8,7 +8,7 @@ import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
|
8
8
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
9
9
|
import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js';
|
|
10
10
|
import { UpdateQueryNode } from '../operation-node/update-query-node.js';
|
|
11
|
-
import {
|
|
11
|
+
import { UpdateObjectExpression, ExtractUpdateTypeFromReferenceExpression } from '../parser/update-set-parser.js';
|
|
12
12
|
import { Compilable } from '../util/compilable.js';
|
|
13
13
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
14
14
|
import { QueryId } from '../util/query-id.js';
|
|
@@ -400,6 +400,46 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
400
400
|
* ```
|
|
401
401
|
*/
|
|
402
402
|
clearWhere(): UpdateQueryBuilder<DB, UT, TB, O>;
|
|
403
|
+
/**
|
|
404
|
+
* Changes an `update` query into a `update top` query.
|
|
405
|
+
*
|
|
406
|
+
* `top` clause is only supported by some dialects like MS SQL Server.
|
|
407
|
+
*
|
|
408
|
+
* ### Examples
|
|
409
|
+
*
|
|
410
|
+
* Update the first row:
|
|
411
|
+
*
|
|
412
|
+
* ```ts
|
|
413
|
+
* await db.updateTable('person')
|
|
414
|
+
* .top(1)
|
|
415
|
+
* .set({ first_name: 'Foo' })
|
|
416
|
+
* .where('age', '>', 18)
|
|
417
|
+
* .executeTakeFirstOrThrow()
|
|
418
|
+
* ```
|
|
419
|
+
*
|
|
420
|
+
* The generated SQL (MS SQL Server):
|
|
421
|
+
*
|
|
422
|
+
* ```sql
|
|
423
|
+
* update top(1) "person" set "first_name" = @1 where "age" > @2
|
|
424
|
+
* ```
|
|
425
|
+
*
|
|
426
|
+
* Update the 50% first rows:
|
|
427
|
+
*
|
|
428
|
+
* ```ts
|
|
429
|
+
* await db.updateTable('person')
|
|
430
|
+
* .top(50, 'percent')
|
|
431
|
+
* .set({ first_name: 'Foo' })
|
|
432
|
+
* .where('age', '>', 18)
|
|
433
|
+
* .executeTakeFirstOrThrow()
|
|
434
|
+
* ```
|
|
435
|
+
*
|
|
436
|
+
* The generated SQL (MS SQL Server):
|
|
437
|
+
*
|
|
438
|
+
* ```sql
|
|
439
|
+
* update top(50) percent "person" set "first_name" = @1 where "age" > @2
|
|
440
|
+
* ```
|
|
441
|
+
*/
|
|
442
|
+
top(expression: number | bigint, modifiers?: 'percent'): UpdateQueryBuilder<DB, UT, TB, O>;
|
|
403
443
|
/**
|
|
404
444
|
* Adds a from clause to the update query.
|
|
405
445
|
*
|
|
@@ -555,6 +595,26 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
555
595
|
*/
|
|
556
596
|
fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilderWithFullJoin<DB, UT, TB, O, TE>;
|
|
557
597
|
fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilderWithFullJoin<DB, UT, TB, O, TE>;
|
|
598
|
+
/**
|
|
599
|
+
* Adds a limit clause to the update query for supported databases, such as MySQL.
|
|
600
|
+
*
|
|
601
|
+
* ### Examples
|
|
602
|
+
*
|
|
603
|
+
* Update the first 2 rows in the 'person' table:
|
|
604
|
+
*
|
|
605
|
+
* ```ts
|
|
606
|
+
* return await db
|
|
607
|
+
* .updateTable('person')
|
|
608
|
+
* .set({ first_name: 'Foo' })
|
|
609
|
+
* .limit(2);
|
|
610
|
+
* ```
|
|
611
|
+
*
|
|
612
|
+
* The generated SQL (MySQL):
|
|
613
|
+
* ```sql
|
|
614
|
+
* update `person` set `first_name` = 'Foo' limit 2
|
|
615
|
+
* ```
|
|
616
|
+
*/
|
|
617
|
+
limit(limit: ValueExpression<DB, TB, number>): UpdateQueryBuilder<DB, UT, TB, O>;
|
|
558
618
|
/**
|
|
559
619
|
* Sets the values to update for an {@link Kysely.updateTable | update} query.
|
|
560
620
|
*
|
|
@@ -695,8 +755,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
695
755
|
* where "id" = $5
|
|
696
756
|
* ```
|
|
697
757
|
*/
|
|
698
|
-
set(update:
|
|
699
|
-
set(update: UpdateObjectFactory<DB, TB, UT>): UpdateQueryBuilder<DB, UT, TB, O>;
|
|
758
|
+
set(update: UpdateObjectExpression<DB, TB, UT>): UpdateQueryBuilder<DB, UT, TB, O>;
|
|
700
759
|
set<RE extends ReferenceExpression<DB, UT>>(key: RE, value: ValueExpression<DB, TB, ExtractUpdateTypeFromReferenceExpression<DB, UT, RE>>): UpdateQueryBuilder<DB, UT, TB, O>;
|
|
701
760
|
/**
|
|
702
761
|
* Allows you to return data from modified rows.
|
|
@@ -765,6 +824,26 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
765
824
|
* that support `returning` such as PostgreSQL.
|
|
766
825
|
*/
|
|
767
826
|
returningAll(): UpdateQueryBuilder<DB, UT, TB, Selectable<DB[TB]>>;
|
|
827
|
+
/**
|
|
828
|
+
* Clears all `returning` clauses from the query.
|
|
829
|
+
*
|
|
830
|
+
* ### Examples
|
|
831
|
+
*
|
|
832
|
+
* ```ts
|
|
833
|
+
* db.updateTable('person')
|
|
834
|
+
* .returningAll()
|
|
835
|
+
* .set({ age: 39 })
|
|
836
|
+
* .where('first_name', '=', 'John')
|
|
837
|
+
* .clearReturning()
|
|
838
|
+
* ```
|
|
839
|
+
*
|
|
840
|
+
* The generated SQL(PostgreSQL):
|
|
841
|
+
*
|
|
842
|
+
* ```sql
|
|
843
|
+
* update "person" set "age" = 39 where "first_name" = "John"
|
|
844
|
+
* ```
|
|
845
|
+
*/
|
|
846
|
+
clearReturning(): UpdateQueryBuilder<DB, UT, TB, UpdateResult>;
|
|
768
847
|
/**
|
|
769
848
|
* Simply calls the provided function passing `this` as the only argument. `$call` returns
|
|
770
849
|
* what the provided function returns.
|
|
@@ -12,6 +12,9 @@ const object_utils_js_1 = require("../util/object-utils.js");
|
|
|
12
12
|
const update_result_js_1 = require("./update-result.js");
|
|
13
13
|
const no_result_error_js_1 = require("./no-result-error.js");
|
|
14
14
|
const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
|
|
15
|
+
const value_parser_js_1 = require("../parser/value-parser.js");
|
|
16
|
+
const limit_node_js_1 = require("../operation-node/limit-node.js");
|
|
17
|
+
const top_parser_js_1 = require("../parser/top-parser.js");
|
|
15
18
|
class UpdateQueryBuilder {
|
|
16
19
|
#props;
|
|
17
20
|
constructor(props) {
|
|
@@ -35,6 +38,51 @@ class UpdateQueryBuilder {
|
|
|
35
38
|
queryNode: query_node_js_1.QueryNode.cloneWithoutWhere(this.#props.queryNode),
|
|
36
39
|
});
|
|
37
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Changes an `update` query into a `update top` query.
|
|
43
|
+
*
|
|
44
|
+
* `top` clause is only supported by some dialects like MS SQL Server.
|
|
45
|
+
*
|
|
46
|
+
* ### Examples
|
|
47
|
+
*
|
|
48
|
+
* Update the first row:
|
|
49
|
+
*
|
|
50
|
+
* ```ts
|
|
51
|
+
* await db.updateTable('person')
|
|
52
|
+
* .top(1)
|
|
53
|
+
* .set({ first_name: 'Foo' })
|
|
54
|
+
* .where('age', '>', 18)
|
|
55
|
+
* .executeTakeFirstOrThrow()
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* The generated SQL (MS SQL Server):
|
|
59
|
+
*
|
|
60
|
+
* ```sql
|
|
61
|
+
* update top(1) "person" set "first_name" = @1 where "age" > @2
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* Update the 50% first rows:
|
|
65
|
+
*
|
|
66
|
+
* ```ts
|
|
67
|
+
* await db.updateTable('person')
|
|
68
|
+
* .top(50, 'percent')
|
|
69
|
+
* .set({ first_name: 'Foo' })
|
|
70
|
+
* .where('age', '>', 18)
|
|
71
|
+
* .executeTakeFirstOrThrow()
|
|
72
|
+
* ```
|
|
73
|
+
*
|
|
74
|
+
* The generated SQL (MS SQL Server):
|
|
75
|
+
*
|
|
76
|
+
* ```sql
|
|
77
|
+
* update top(50) percent "person" set "first_name" = @1 where "age" > @2
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
top(expression, modifiers) {
|
|
81
|
+
return new UpdateQueryBuilder({
|
|
82
|
+
...this.#props,
|
|
83
|
+
queryNode: query_node_js_1.QueryNode.cloneWithTop(this.#props.queryNode, (0, top_parser_js_1.parseTop)(expression, modifiers)),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
38
86
|
from(from) {
|
|
39
87
|
return new UpdateQueryBuilder({
|
|
40
88
|
...this.#props,
|
|
@@ -65,6 +113,31 @@ class UpdateQueryBuilder {
|
|
|
65
113
|
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)('FullJoin', args)),
|
|
66
114
|
});
|
|
67
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Adds a limit clause to the update query for supported databases, such as MySQL.
|
|
118
|
+
*
|
|
119
|
+
* ### Examples
|
|
120
|
+
*
|
|
121
|
+
* Update the first 2 rows in the 'person' table:
|
|
122
|
+
*
|
|
123
|
+
* ```ts
|
|
124
|
+
* return await db
|
|
125
|
+
* .updateTable('person')
|
|
126
|
+
* .set({ first_name: 'Foo' })
|
|
127
|
+
* .limit(2);
|
|
128
|
+
* ```
|
|
129
|
+
*
|
|
130
|
+
* The generated SQL (MySQL):
|
|
131
|
+
* ```sql
|
|
132
|
+
* update `person` set `first_name` = 'Foo' limit 2
|
|
133
|
+
* ```
|
|
134
|
+
*/
|
|
135
|
+
limit(limit) {
|
|
136
|
+
return new UpdateQueryBuilder({
|
|
137
|
+
...this.#props,
|
|
138
|
+
queryNode: update_query_node_js_1.UpdateQueryNode.cloneWithLimit(this.#props.queryNode, limit_node_js_1.LimitNode.create((0, value_parser_js_1.parseValueExpression)(limit))),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
68
141
|
set(...args) {
|
|
69
142
|
return new UpdateQueryBuilder({
|
|
70
143
|
...this.#props,
|
|
@@ -83,6 +156,31 @@ class UpdateQueryBuilder {
|
|
|
83
156
|
queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)()),
|
|
84
157
|
});
|
|
85
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Clears all `returning` clauses from the query.
|
|
161
|
+
*
|
|
162
|
+
* ### Examples
|
|
163
|
+
*
|
|
164
|
+
* ```ts
|
|
165
|
+
* db.updateTable('person')
|
|
166
|
+
* .returningAll()
|
|
167
|
+
* .set({ age: 39 })
|
|
168
|
+
* .where('first_name', '=', 'John')
|
|
169
|
+
* .clearReturning()
|
|
170
|
+
* ```
|
|
171
|
+
*
|
|
172
|
+
* The generated SQL(PostgreSQL):
|
|
173
|
+
*
|
|
174
|
+
* ```sql
|
|
175
|
+
* update "person" set "age" = 39 where "first_name" = "John"
|
|
176
|
+
* ```
|
|
177
|
+
*/
|
|
178
|
+
clearReturning() {
|
|
179
|
+
return new UpdateQueryBuilder({
|
|
180
|
+
...this.#props,
|
|
181
|
+
queryNode: query_node_js_1.QueryNode.cloneWithoutReturning(this.#props.queryNode),
|
|
182
|
+
});
|
|
183
|
+
}
|
|
86
184
|
/**
|
|
87
185
|
* Simply calls the provided function passing `this` as the only argument. `$call` returns
|
|
88
186
|
* what the provided function returns.
|
|
@@ -88,7 +88,12 @@ import { JSONPathNode } from '../operation-node/json-path-node.js';
|
|
|
88
88
|
import { JSONPathLegNode } from '../operation-node/json-path-leg-node.js';
|
|
89
89
|
import { JSONOperatorChainNode } from '../operation-node/json-operator-chain-node.js';
|
|
90
90
|
import { TupleNode } from '../operation-node/tuple-node.js';
|
|
91
|
+
import { MergeQueryNode } from '../operation-node/merge-query-node.js';
|
|
92
|
+
import { MatchedNode } from '../operation-node/matched-node.js';
|
|
91
93
|
import { AddIndexNode } from '../operation-node/add-index-node.js';
|
|
94
|
+
import { CastNode } from '../operation-node/cast-node.js';
|
|
95
|
+
import { FetchNode } from '../operation-node/fetch-node.js';
|
|
96
|
+
import { TopNode } from '../operation-node/top-node.js';
|
|
92
97
|
export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
|
|
93
98
|
#private;
|
|
94
99
|
protected get numParameters(): number;
|
|
@@ -185,7 +190,12 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
185
190
|
protected visitJSONPath(node: JSONPathNode): void;
|
|
186
191
|
protected visitJSONPathLeg(node: JSONPathLegNode): void;
|
|
187
192
|
protected visitJSONOperatorChain(node: JSONOperatorChainNode): void;
|
|
193
|
+
protected visitMergeQuery(node: MergeQueryNode): void;
|
|
194
|
+
protected visitMatched(node: MatchedNode): void;
|
|
188
195
|
protected visitAddIndex(node: AddIndexNode): void;
|
|
196
|
+
protected visitCast(node: CastNode): void;
|
|
197
|
+
protected visitFetch(node: FetchNode): void;
|
|
198
|
+
protected visitTop(node: TopNode): void;
|
|
189
199
|
protected append(str: string): void;
|
|
190
200
|
protected appendValue(parameter: unknown): void;
|
|
191
201
|
protected getLeftIdentifierWrapper(): string;
|
|
@@ -10,6 +10,7 @@ const query_node_js_1 = require("../operation-node/query-node.js");
|
|
|
10
10
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
11
11
|
const create_view_node_js_1 = require("../operation-node/create-view-node.js");
|
|
12
12
|
const set_operation_node_js_1 = require("../operation-node/set-operation-node.js");
|
|
13
|
+
const merge_query_node_js_1 = require("../operation-node/merge-query-node.js");
|
|
13
14
|
class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisitor {
|
|
14
15
|
#sql = '';
|
|
15
16
|
#parameters = [];
|
|
@@ -56,6 +57,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
56
57
|
this.append(' ');
|
|
57
58
|
this.compileList(node.frontModifiers, ' ');
|
|
58
59
|
}
|
|
60
|
+
if (node.top) {
|
|
61
|
+
this.append(' ');
|
|
62
|
+
this.visitNode(node.top);
|
|
63
|
+
}
|
|
59
64
|
if (node.selections) {
|
|
60
65
|
this.append(' ');
|
|
61
66
|
this.compileList(node.selections);
|
|
@@ -96,6 +101,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
96
101
|
this.append(' ');
|
|
97
102
|
this.visitNode(node.offset);
|
|
98
103
|
}
|
|
104
|
+
if (node.fetch) {
|
|
105
|
+
this.append(' ');
|
|
106
|
+
this.visitNode(node.fetch);
|
|
107
|
+
}
|
|
99
108
|
if (node.endModifiers?.length) {
|
|
100
109
|
this.append(' ');
|
|
101
110
|
this.compileList(this.sortSelectModifiers([...node.endModifiers]), ' ');
|
|
@@ -137,12 +146,13 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
137
146
|
this.visitNode(node.having);
|
|
138
147
|
}
|
|
139
148
|
visitInsertQuery(node) {
|
|
140
|
-
const
|
|
149
|
+
const rootQueryNode = this.nodeStack.find(query_node_js_1.QueryNode.is);
|
|
150
|
+
const isSubQuery = rootQueryNode !== node;
|
|
141
151
|
if (!isSubQuery && node.explain) {
|
|
142
152
|
this.visitNode(node.explain);
|
|
143
153
|
this.append(' ');
|
|
144
154
|
}
|
|
145
|
-
if (isSubQuery) {
|
|
155
|
+
if (isSubQuery && !merge_query_node_js_1.MergeQueryNode.is(rootQueryNode)) {
|
|
146
156
|
this.append('(');
|
|
147
157
|
}
|
|
148
158
|
if (node.with) {
|
|
@@ -153,8 +163,14 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
153
163
|
if (node.ignore) {
|
|
154
164
|
this.append(' ignore');
|
|
155
165
|
}
|
|
156
|
-
|
|
157
|
-
|
|
166
|
+
if (node.top) {
|
|
167
|
+
this.append(' ');
|
|
168
|
+
this.visitNode(node.top);
|
|
169
|
+
}
|
|
170
|
+
if (node.into) {
|
|
171
|
+
this.append(' into ');
|
|
172
|
+
this.visitNode(node.into);
|
|
173
|
+
}
|
|
158
174
|
if (node.columns) {
|
|
159
175
|
this.append(' (');
|
|
160
176
|
this.compileList(node.columns);
|
|
@@ -180,7 +196,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
180
196
|
this.append(' ');
|
|
181
197
|
this.visitNode(node.returning);
|
|
182
198
|
}
|
|
183
|
-
if (isSubQuery) {
|
|
199
|
+
if (isSubQuery && !merge_query_node_js_1.MergeQueryNode.is(rootQueryNode)) {
|
|
184
200
|
this.append(')');
|
|
185
201
|
}
|
|
186
202
|
}
|
|
@@ -202,6 +218,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
202
218
|
this.append(' ');
|
|
203
219
|
}
|
|
204
220
|
this.append('delete ');
|
|
221
|
+
if (node.top) {
|
|
222
|
+
this.visitNode(node.top);
|
|
223
|
+
this.append(' ');
|
|
224
|
+
}
|
|
205
225
|
this.visitNode(node.from);
|
|
206
226
|
if (node.using) {
|
|
207
227
|
this.append(' ');
|
|
@@ -387,6 +407,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
387
407
|
this.append(' ');
|
|
388
408
|
this.visitNode(node.generated);
|
|
389
409
|
}
|
|
410
|
+
if (node.identity) {
|
|
411
|
+
this.append(' identity');
|
|
412
|
+
}
|
|
390
413
|
if (node.defaultTo) {
|
|
391
414
|
this.append(' ');
|
|
392
415
|
this.visitNode(node.defaultTo);
|
|
@@ -470,12 +493,13 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
470
493
|
this.visitNode(node.groupBy);
|
|
471
494
|
}
|
|
472
495
|
visitUpdateQuery(node) {
|
|
473
|
-
const
|
|
496
|
+
const rootQueryNode = this.nodeStack.find(query_node_js_1.QueryNode.is);
|
|
497
|
+
const isSubQuery = rootQueryNode !== node;
|
|
474
498
|
if (!isSubQuery && node.explain) {
|
|
475
499
|
this.visitNode(node.explain);
|
|
476
500
|
this.append(' ');
|
|
477
501
|
}
|
|
478
|
-
if (isSubQuery) {
|
|
502
|
+
if (isSubQuery && !merge_query_node_js_1.MergeQueryNode.is(rootQueryNode)) {
|
|
479
503
|
this.append('(');
|
|
480
504
|
}
|
|
481
505
|
if (node.with) {
|
|
@@ -483,8 +507,15 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
483
507
|
this.append(' ');
|
|
484
508
|
}
|
|
485
509
|
this.append('update ');
|
|
486
|
-
|
|
487
|
-
|
|
510
|
+
if (node.top) {
|
|
511
|
+
this.visitNode(node.top);
|
|
512
|
+
this.append(' ');
|
|
513
|
+
}
|
|
514
|
+
if (node.table) {
|
|
515
|
+
this.visitNode(node.table);
|
|
516
|
+
this.append(' ');
|
|
517
|
+
}
|
|
518
|
+
this.append('set ');
|
|
488
519
|
if (node.updates) {
|
|
489
520
|
this.compileList(node.updates);
|
|
490
521
|
}
|
|
@@ -500,11 +531,15 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
500
531
|
this.append(' ');
|
|
501
532
|
this.visitNode(node.where);
|
|
502
533
|
}
|
|
534
|
+
if (node.limit) {
|
|
535
|
+
this.append(' ');
|
|
536
|
+
this.visitNode(node.limit);
|
|
537
|
+
}
|
|
503
538
|
if (node.returning) {
|
|
504
539
|
this.append(' ');
|
|
505
540
|
this.visitNode(node.returning);
|
|
506
541
|
}
|
|
507
|
-
if (isSubQuery) {
|
|
542
|
+
if (isSubQuery && !merge_query_node_js_1.MergeQueryNode.is(rootQueryNode)) {
|
|
508
543
|
this.append(')');
|
|
509
544
|
}
|
|
510
545
|
}
|
|
@@ -1040,6 +1075,36 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
1040
1075
|
this.visitNode(node.values[i]);
|
|
1041
1076
|
}
|
|
1042
1077
|
}
|
|
1078
|
+
visitMergeQuery(node) {
|
|
1079
|
+
if (node.with) {
|
|
1080
|
+
this.visitNode(node.with);
|
|
1081
|
+
this.append(' ');
|
|
1082
|
+
}
|
|
1083
|
+
this.append('merge ');
|
|
1084
|
+
if (node.top) {
|
|
1085
|
+
this.visitNode(node.top);
|
|
1086
|
+
this.append(' ');
|
|
1087
|
+
}
|
|
1088
|
+
this.append('into ');
|
|
1089
|
+
this.visitNode(node.into);
|
|
1090
|
+
if (node.using) {
|
|
1091
|
+
this.append(' ');
|
|
1092
|
+
this.visitNode(node.using);
|
|
1093
|
+
}
|
|
1094
|
+
if (node.whens) {
|
|
1095
|
+
this.append(' ');
|
|
1096
|
+
this.compileList(node.whens);
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
visitMatched(node) {
|
|
1100
|
+
if (node.not) {
|
|
1101
|
+
this.append('not ');
|
|
1102
|
+
}
|
|
1103
|
+
this.append('matched');
|
|
1104
|
+
if (node.bySource) {
|
|
1105
|
+
this.append(' by source');
|
|
1106
|
+
}
|
|
1107
|
+
}
|
|
1043
1108
|
visitAddIndex(node) {
|
|
1044
1109
|
this.append('add ');
|
|
1045
1110
|
if (node.unique) {
|
|
@@ -1057,6 +1122,24 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
1057
1122
|
this.visitNode(node.using);
|
|
1058
1123
|
}
|
|
1059
1124
|
}
|
|
1125
|
+
visitCast(node) {
|
|
1126
|
+
this.append('cast(');
|
|
1127
|
+
this.visitNode(node.expression);
|
|
1128
|
+
this.append(' as ');
|
|
1129
|
+
this.visitNode(node.dataType);
|
|
1130
|
+
this.append(')');
|
|
1131
|
+
}
|
|
1132
|
+
visitFetch(node) {
|
|
1133
|
+
this.append('fetch next ');
|
|
1134
|
+
this.visitNode(node.rowCount);
|
|
1135
|
+
this.append(` rows ${node.modifier}`);
|
|
1136
|
+
}
|
|
1137
|
+
visitTop(node) {
|
|
1138
|
+
this.append(`top(${node.expression})`);
|
|
1139
|
+
if (node.modifiers) {
|
|
1140
|
+
this.append(` ${node.modifiers}`);
|
|
1141
|
+
}
|
|
1142
|
+
}
|
|
1060
1143
|
append(str) {
|
|
1061
1144
|
this.#sql += str;
|
|
1062
1145
|
}
|
|
@@ -1167,4 +1250,5 @@ const JOIN_TYPE_SQL = (0, object_utils_js_1.freeze)({
|
|
|
1167
1250
|
FullJoin: 'full join',
|
|
1168
1251
|
LateralInnerJoin: 'inner join lateral',
|
|
1169
1252
|
LateralLeftJoin: 'left join lateral',
|
|
1253
|
+
Using: 'using',
|
|
1170
1254
|
});
|
|
@@ -9,10 +9,11 @@ import { DropSchemaNode } from '../operation-node/drop-schema-node.js';
|
|
|
9
9
|
import { DropTableNode } from '../operation-node/drop-table-node.js';
|
|
10
10
|
import { DropTypeNode } from '../operation-node/drop-type-node.js';
|
|
11
11
|
import { DropViewNode } from '../operation-node/drop-view-node.js';
|
|
12
|
+
import { MergeQueryNode } from '../operation-node/merge-query-node.js';
|
|
12
13
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
13
14
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
14
15
|
import { CompiledQuery } from './compiled-query.js';
|
|
15
|
-
export type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode | CreateTypeNode | DropTypeNode;
|
|
16
|
+
export type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode | CreateTypeNode | DropTypeNode | MergeQueryNode;
|
|
16
17
|
/**
|
|
17
18
|
* a `QueryCompiler` compiles a query expressed as a tree of `OperationNodes` into SQL.
|
|
18
19
|
*/
|
|
@@ -12,6 +12,8 @@ import { UpdateResult } from './query-builder/update-result.js';
|
|
|
12
12
|
import { KyselyPlugin } from './plugin/kysely-plugin.js';
|
|
13
13
|
import { CTEBuilderCallback } from './query-builder/cte-builder.js';
|
|
14
14
|
import { CallbackSelection, SelectCallback, SelectExpression, Selection } from './parser/select-parser.js';
|
|
15
|
+
import { MergeQueryBuilder } from './query-builder/merge-query-builder.js';
|
|
16
|
+
import { MergeResult } from './query-builder/merge-result.js';
|
|
15
17
|
export declare class QueryCreator<DB> {
|
|
16
18
|
#private;
|
|
17
19
|
constructor(props: QueryCreatorProps);
|
|
@@ -125,7 +127,7 @@ export declare class QueryCreator<DB> {
|
|
|
125
127
|
selectFrom<TE extends keyof DB & string>(from: TE[]): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>;
|
|
126
128
|
selectFrom<TE extends TableExpression<DB, keyof DB>>(from: TE[]): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
|
|
127
129
|
selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>;
|
|
128
|
-
selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, ExtractTableAlias<DB, TE>, {}>;
|
|
130
|
+
selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, ExtractTableAlias<DB & PickTableWithAlias<DB, TE>, TE>, {}>;
|
|
129
131
|
selectFrom<TE extends TableExpression<DB, keyof DB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
|
|
130
132
|
/**
|
|
131
133
|
* Creates a `select` query builder without a `from` clause.
|
|
@@ -320,8 +322,44 @@ export declare class QueryCreator<DB> {
|
|
|
320
322
|
* ```
|
|
321
323
|
*/
|
|
322
324
|
updateTable<TR extends keyof DB & string>(table: TR): UpdateQueryBuilder<DB, ExtractTableAlias<DB, TR>, ExtractTableAlias<DB, TR>, UpdateResult>;
|
|
323
|
-
updateTable<TR extends AnyAliasedTable<DB>>(table: TR): UpdateQueryBuilder<DB & PickTableWithAlias<DB, TR>, ExtractTableAlias<DB, TR>, ExtractTableAlias<DB, TR>, UpdateResult>;
|
|
325
|
+
updateTable<TR extends AnyAliasedTable<DB>>(table: TR): UpdateQueryBuilder<DB & PickTableWithAlias<DB, TR>, ExtractTableAlias<DB & PickTableWithAlias<DB, TR>, TR>, ExtractTableAlias<DB & PickTableWithAlias<DB, TR>, TR>, UpdateResult>;
|
|
324
326
|
updateTable<TR extends TableReference<DB>>(table: TR): UpdateQueryBuilder<From<DB, TR>, FromTables<DB, never, TR>, FromTables<DB, never, TR>, UpdateResult>;
|
|
327
|
+
/**
|
|
328
|
+
* Creates a merge query.
|
|
329
|
+
*
|
|
330
|
+
* The return value of the query is a {@link MergeResult}.
|
|
331
|
+
*
|
|
332
|
+
* See the {@link MergeQueryBuilder.using} method for examples on how to specify
|
|
333
|
+
* the other table.
|
|
334
|
+
*
|
|
335
|
+
* ### Examples
|
|
336
|
+
*
|
|
337
|
+
* ```ts
|
|
338
|
+
* const result = await db
|
|
339
|
+
* .mergeInto('person')
|
|
340
|
+
* .using('pet', 'pet.owner_id', 'person.id')
|
|
341
|
+
* .whenMatched((and) => and('has_pets', '!=', 'Y'))
|
|
342
|
+
* .thenUpdateSet({ has_pets: 'Y' })
|
|
343
|
+
* .whenNotMatched()
|
|
344
|
+
* .thenDoNothing()
|
|
345
|
+
* .executeTakeFirstOrThrow()
|
|
346
|
+
*
|
|
347
|
+
* console.log(result.numChangedRows)
|
|
348
|
+
* ```
|
|
349
|
+
*
|
|
350
|
+
* The generated SQL (PostgreSQL):
|
|
351
|
+
*
|
|
352
|
+
* ```sql
|
|
353
|
+
* merge into "person"
|
|
354
|
+
* using "pet" on "pet"."owner_id" = "person"."id"
|
|
355
|
+
* when matched and "has_pets" != $1 then
|
|
356
|
+
* update set "has_pets" = $2
|
|
357
|
+
* when not matched then
|
|
358
|
+
* do nothing
|
|
359
|
+
* ```
|
|
360
|
+
*/
|
|
361
|
+
mergeInto<TR extends keyof DB & string>(targetTable: TR): MergeQueryBuilder<DB, TR, MergeResult>;
|
|
362
|
+
mergeInto<TR extends AnyAliasedTable<DB>>(targetTable: TR): MergeQueryBuilder<DB & PickTableWithAlias<DB, TR>, ExtractTableAlias<DB & PickTableWithAlias<DB, TR>, TR>, MergeResult>;
|
|
325
363
|
/**
|
|
326
364
|
* Creates a `with` query (Common Table Expression).
|
|
327
365
|
*
|
|
@@ -16,6 +16,8 @@ const query_id_js_1 = require("./util/query-id.js");
|
|
|
16
16
|
const with_schema_plugin_js_1 = require("./plugin/with-schema/with-schema-plugin.js");
|
|
17
17
|
const object_utils_js_1 = require("./util/object-utils.js");
|
|
18
18
|
const select_parser_js_1 = require("./parser/select-parser.js");
|
|
19
|
+
const merge_query_builder_js_1 = require("./query-builder/merge-query-builder.js");
|
|
20
|
+
const merge_query_node_js_1 = require("./operation-node/merge-query-node.js");
|
|
19
21
|
class QueryCreator {
|
|
20
22
|
#props;
|
|
21
23
|
constructor(props) {
|
|
@@ -127,6 +129,13 @@ class QueryCreator {
|
|
|
127
129
|
queryNode: update_query_node_js_1.UpdateQueryNode.create((0, table_parser_js_1.parseTableExpression)(table), this.#props.withNode),
|
|
128
130
|
});
|
|
129
131
|
}
|
|
132
|
+
mergeInto(targetTable) {
|
|
133
|
+
return new merge_query_builder_js_1.MergeQueryBuilder({
|
|
134
|
+
queryId: (0, query_id_js_1.createQueryId)(),
|
|
135
|
+
executor: this.#props.executor,
|
|
136
|
+
queryNode: merge_query_node_js_1.MergeQueryNode.create((0, table_parser_js_1.parseAliasedTable)(targetTable), this.#props.withNode),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
130
139
|
/**
|
|
131
140
|
* Creates a `with` query (Common Table Expression).
|
|
132
141
|
*
|
|
@@ -52,7 +52,9 @@ class AlterTableAddIndexBuilder {
|
|
|
52
52
|
return new AlterTableAddIndexBuilder({
|
|
53
53
|
...this.#props,
|
|
54
54
|
node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, {
|
|
55
|
-
addIndex: add_index_node_js_1.AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [
|
|
55
|
+
addIndex: add_index_node_js_1.AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [
|
|
56
|
+
(0, reference_parser_js_1.parseOrderedColumnName)(column),
|
|
57
|
+
]),
|
|
56
58
|
}),
|
|
57
59
|
});
|
|
58
60
|
}
|
|
@@ -111,7 +113,9 @@ class AlterTableAddIndexBuilder {
|
|
|
111
113
|
return new AlterTableAddIndexBuilder({
|
|
112
114
|
...this.#props,
|
|
113
115
|
node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, {
|
|
114
|
-
addIndex: add_index_node_js_1.AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [
|
|
116
|
+
addIndex: add_index_node_js_1.AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [
|
|
117
|
+
expression.toOperationNode(),
|
|
118
|
+
]),
|
|
115
119
|
}),
|
|
116
120
|
});
|
|
117
121
|
}
|
|
@@ -14,6 +14,14 @@ export declare class ColumnDefinitionBuilder implements OperationNodeSource {
|
|
|
14
14
|
* you can use the `serial` or `bigserial` data type instead.
|
|
15
15
|
*/
|
|
16
16
|
autoIncrement(): ColumnDefinitionBuilder;
|
|
17
|
+
/**
|
|
18
|
+
* Makes the column an identity column.
|
|
19
|
+
*
|
|
20
|
+
* This only works on some dialects like MS SQL Server (MSSQL).
|
|
21
|
+
*
|
|
22
|
+
* For PostgreSQL's `generated always as identity` use {@link generatedAlwaysAsIdentity}.
|
|
23
|
+
*/
|
|
24
|
+
identity(): ColumnDefinitionBuilder;
|
|
17
25
|
/**
|
|
18
26
|
* Makes the column the primary key.
|
|
19
27
|
*
|
|
@@ -137,7 +145,11 @@ export declare class ColumnDefinitionBuilder implements OperationNodeSource {
|
|
|
137
145
|
*/
|
|
138
146
|
generatedAlwaysAs(expression: Expression<any>): ColumnDefinitionBuilder;
|
|
139
147
|
/**
|
|
140
|
-
* Adds the `generated always as identity` specifier
|
|
148
|
+
* Adds the `generated always as identity` specifier.
|
|
149
|
+
*
|
|
150
|
+
* This only works on some dialects like PostgreSQL.
|
|
151
|
+
*
|
|
152
|
+
* For MS SQL Server (MSSQL)'s identity column use {@link identity}.
|
|
141
153
|
*/
|
|
142
154
|
generatedAlwaysAsIdentity(): ColumnDefinitionBuilder;
|
|
143
155
|
/**
|