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
|
@@ -19,6 +19,8 @@ import { parseSetOperations, } from '../parser/set-operation-parser.js';
|
|
|
19
19
|
import { parseValueBinaryOperationOrExpression, parseReferentialBinaryOperation, } from '../parser/binary-operation-parser.js';
|
|
20
20
|
import { ExpressionWrapper } from '../expression/expression-wrapper.js';
|
|
21
21
|
import { parseValueExpression, } from '../parser/value-parser.js';
|
|
22
|
+
import { parseFetch } from '../parser/fetch-parser.js';
|
|
23
|
+
import { parseTop } from '../parser/top-parser.js';
|
|
22
24
|
class SelectQueryBuilderImpl {
|
|
23
25
|
#props;
|
|
24
26
|
constructor(props) {
|
|
@@ -186,6 +188,18 @@ class SelectQueryBuilderImpl {
|
|
|
186
188
|
queryNode: SelectQueryNode.cloneWithOffset(this.#props.queryNode, OffsetNode.create(parseValueExpression(offset))),
|
|
187
189
|
});
|
|
188
190
|
}
|
|
191
|
+
fetch(rowCount, modifier = 'only') {
|
|
192
|
+
return new SelectQueryBuilderImpl({
|
|
193
|
+
...this.#props,
|
|
194
|
+
queryNode: SelectQueryNode.cloneWithFetch(this.#props.queryNode, parseFetch(rowCount, modifier)),
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
top(expression, modifiers) {
|
|
198
|
+
return new SelectQueryBuilderImpl({
|
|
199
|
+
...this.#props,
|
|
200
|
+
queryNode: QueryNode.cloneWithTop(this.#props.queryNode, parseTop(expression, modifiers)),
|
|
201
|
+
});
|
|
202
|
+
}
|
|
189
203
|
union(expression) {
|
|
190
204
|
return new SelectQueryBuilderImpl({
|
|
191
205
|
...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.
|
|
@@ -10,6 +10,9 @@ import { freeze } from '../util/object-utils.js';
|
|
|
10
10
|
import { UpdateResult } from './update-result.js';
|
|
11
11
|
import { isNoResultErrorConstructor, NoResultError, } from './no-result-error.js';
|
|
12
12
|
import { parseReferentialBinaryOperation, parseValueBinaryOperationOrExpression, } from '../parser/binary-operation-parser.js';
|
|
13
|
+
import { parseValueExpression, } from '../parser/value-parser.js';
|
|
14
|
+
import { LimitNode } from '../operation-node/limit-node.js';
|
|
15
|
+
import { parseTop } from '../parser/top-parser.js';
|
|
13
16
|
export class UpdateQueryBuilder {
|
|
14
17
|
#props;
|
|
15
18
|
constructor(props) {
|
|
@@ -33,6 +36,51 @@ export class UpdateQueryBuilder {
|
|
|
33
36
|
queryNode: QueryNode.cloneWithoutWhere(this.#props.queryNode),
|
|
34
37
|
});
|
|
35
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Changes an `update` query into a `update top` query.
|
|
41
|
+
*
|
|
42
|
+
* `top` clause is only supported by some dialects like MS SQL Server.
|
|
43
|
+
*
|
|
44
|
+
* ### Examples
|
|
45
|
+
*
|
|
46
|
+
* Update the first row:
|
|
47
|
+
*
|
|
48
|
+
* ```ts
|
|
49
|
+
* await db.updateTable('person')
|
|
50
|
+
* .top(1)
|
|
51
|
+
* .set({ first_name: 'Foo' })
|
|
52
|
+
* .where('age', '>', 18)
|
|
53
|
+
* .executeTakeFirstOrThrow()
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* The generated SQL (MS SQL Server):
|
|
57
|
+
*
|
|
58
|
+
* ```sql
|
|
59
|
+
* update top(1) "person" set "first_name" = @1 where "age" > @2
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* Update the 50% first rows:
|
|
63
|
+
*
|
|
64
|
+
* ```ts
|
|
65
|
+
* await db.updateTable('person')
|
|
66
|
+
* .top(50, 'percent')
|
|
67
|
+
* .set({ first_name: 'Foo' })
|
|
68
|
+
* .where('age', '>', 18)
|
|
69
|
+
* .executeTakeFirstOrThrow()
|
|
70
|
+
* ```
|
|
71
|
+
*
|
|
72
|
+
* The generated SQL (MS SQL Server):
|
|
73
|
+
*
|
|
74
|
+
* ```sql
|
|
75
|
+
* update top(50) percent "person" set "first_name" = @1 where "age" > @2
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
top(expression, modifiers) {
|
|
79
|
+
return new UpdateQueryBuilder({
|
|
80
|
+
...this.#props,
|
|
81
|
+
queryNode: QueryNode.cloneWithTop(this.#props.queryNode, parseTop(expression, modifiers)),
|
|
82
|
+
});
|
|
83
|
+
}
|
|
36
84
|
from(from) {
|
|
37
85
|
return new UpdateQueryBuilder({
|
|
38
86
|
...this.#props,
|
|
@@ -63,6 +111,31 @@ export class UpdateQueryBuilder {
|
|
|
63
111
|
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)),
|
|
64
112
|
});
|
|
65
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Adds a limit clause to the update query for supported databases, such as MySQL.
|
|
116
|
+
*
|
|
117
|
+
* ### Examples
|
|
118
|
+
*
|
|
119
|
+
* Update the first 2 rows in the 'person' table:
|
|
120
|
+
*
|
|
121
|
+
* ```ts
|
|
122
|
+
* return await db
|
|
123
|
+
* .updateTable('person')
|
|
124
|
+
* .set({ first_name: 'Foo' })
|
|
125
|
+
* .limit(2);
|
|
126
|
+
* ```
|
|
127
|
+
*
|
|
128
|
+
* The generated SQL (MySQL):
|
|
129
|
+
* ```sql
|
|
130
|
+
* update `person` set `first_name` = 'Foo' limit 2
|
|
131
|
+
* ```
|
|
132
|
+
*/
|
|
133
|
+
limit(limit) {
|
|
134
|
+
return new UpdateQueryBuilder({
|
|
135
|
+
...this.#props,
|
|
136
|
+
queryNode: UpdateQueryNode.cloneWithLimit(this.#props.queryNode, LimitNode.create(parseValueExpression(limit))),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
66
139
|
set(...args) {
|
|
67
140
|
return new UpdateQueryBuilder({
|
|
68
141
|
...this.#props,
|
|
@@ -81,6 +154,31 @@ export class UpdateQueryBuilder {
|
|
|
81
154
|
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll()),
|
|
82
155
|
});
|
|
83
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Clears all `returning` clauses from the query.
|
|
159
|
+
*
|
|
160
|
+
* ### Examples
|
|
161
|
+
*
|
|
162
|
+
* ```ts
|
|
163
|
+
* db.updateTable('person')
|
|
164
|
+
* .returningAll()
|
|
165
|
+
* .set({ age: 39 })
|
|
166
|
+
* .where('first_name', '=', 'John')
|
|
167
|
+
* .clearReturning()
|
|
168
|
+
* ```
|
|
169
|
+
*
|
|
170
|
+
* The generated SQL(PostgreSQL):
|
|
171
|
+
*
|
|
172
|
+
* ```sql
|
|
173
|
+
* update "person" set "age" = 39 where "first_name" = "John"
|
|
174
|
+
* ```
|
|
175
|
+
*/
|
|
176
|
+
clearReturning() {
|
|
177
|
+
return new UpdateQueryBuilder({
|
|
178
|
+
...this.#props,
|
|
179
|
+
queryNode: QueryNode.cloneWithoutReturning(this.#props.queryNode),
|
|
180
|
+
});
|
|
181
|
+
}
|
|
84
182
|
/**
|
|
85
183
|
* Simply calls the provided function passing `this` as the only argument. `$call` returns
|
|
86
184
|
* 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;
|
|
@@ -8,6 +8,7 @@ import { QueryNode } from '../operation-node/query-node.js';
|
|
|
8
8
|
import { freeze, isString, isNumber, isBoolean, isNull, isDate, isBigInt, } from '../util/object-utils.js';
|
|
9
9
|
import { CreateViewNode } from '../operation-node/create-view-node.js';
|
|
10
10
|
import { SetOperationNode } from '../operation-node/set-operation-node.js';
|
|
11
|
+
import { MergeQueryNode } from '../operation-node/merge-query-node.js';
|
|
11
12
|
export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
12
13
|
#sql = '';
|
|
13
14
|
#parameters = [];
|
|
@@ -54,6 +55,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
54
55
|
this.append(' ');
|
|
55
56
|
this.compileList(node.frontModifiers, ' ');
|
|
56
57
|
}
|
|
58
|
+
if (node.top) {
|
|
59
|
+
this.append(' ');
|
|
60
|
+
this.visitNode(node.top);
|
|
61
|
+
}
|
|
57
62
|
if (node.selections) {
|
|
58
63
|
this.append(' ');
|
|
59
64
|
this.compileList(node.selections);
|
|
@@ -94,6 +99,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
94
99
|
this.append(' ');
|
|
95
100
|
this.visitNode(node.offset);
|
|
96
101
|
}
|
|
102
|
+
if (node.fetch) {
|
|
103
|
+
this.append(' ');
|
|
104
|
+
this.visitNode(node.fetch);
|
|
105
|
+
}
|
|
97
106
|
if (node.endModifiers?.length) {
|
|
98
107
|
this.append(' ');
|
|
99
108
|
this.compileList(this.sortSelectModifiers([...node.endModifiers]), ' ');
|
|
@@ -135,12 +144,13 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
135
144
|
this.visitNode(node.having);
|
|
136
145
|
}
|
|
137
146
|
visitInsertQuery(node) {
|
|
138
|
-
const
|
|
147
|
+
const rootQueryNode = this.nodeStack.find(QueryNode.is);
|
|
148
|
+
const isSubQuery = rootQueryNode !== node;
|
|
139
149
|
if (!isSubQuery && node.explain) {
|
|
140
150
|
this.visitNode(node.explain);
|
|
141
151
|
this.append(' ');
|
|
142
152
|
}
|
|
143
|
-
if (isSubQuery) {
|
|
153
|
+
if (isSubQuery && !MergeQueryNode.is(rootQueryNode)) {
|
|
144
154
|
this.append('(');
|
|
145
155
|
}
|
|
146
156
|
if (node.with) {
|
|
@@ -151,8 +161,14 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
151
161
|
if (node.ignore) {
|
|
152
162
|
this.append(' ignore');
|
|
153
163
|
}
|
|
154
|
-
|
|
155
|
-
|
|
164
|
+
if (node.top) {
|
|
165
|
+
this.append(' ');
|
|
166
|
+
this.visitNode(node.top);
|
|
167
|
+
}
|
|
168
|
+
if (node.into) {
|
|
169
|
+
this.append(' into ');
|
|
170
|
+
this.visitNode(node.into);
|
|
171
|
+
}
|
|
156
172
|
if (node.columns) {
|
|
157
173
|
this.append(' (');
|
|
158
174
|
this.compileList(node.columns);
|
|
@@ -178,7 +194,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
178
194
|
this.append(' ');
|
|
179
195
|
this.visitNode(node.returning);
|
|
180
196
|
}
|
|
181
|
-
if (isSubQuery) {
|
|
197
|
+
if (isSubQuery && !MergeQueryNode.is(rootQueryNode)) {
|
|
182
198
|
this.append(')');
|
|
183
199
|
}
|
|
184
200
|
}
|
|
@@ -200,6 +216,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
200
216
|
this.append(' ');
|
|
201
217
|
}
|
|
202
218
|
this.append('delete ');
|
|
219
|
+
if (node.top) {
|
|
220
|
+
this.visitNode(node.top);
|
|
221
|
+
this.append(' ');
|
|
222
|
+
}
|
|
203
223
|
this.visitNode(node.from);
|
|
204
224
|
if (node.using) {
|
|
205
225
|
this.append(' ');
|
|
@@ -385,6 +405,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
385
405
|
this.append(' ');
|
|
386
406
|
this.visitNode(node.generated);
|
|
387
407
|
}
|
|
408
|
+
if (node.identity) {
|
|
409
|
+
this.append(' identity');
|
|
410
|
+
}
|
|
388
411
|
if (node.defaultTo) {
|
|
389
412
|
this.append(' ');
|
|
390
413
|
this.visitNode(node.defaultTo);
|
|
@@ -468,12 +491,13 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
468
491
|
this.visitNode(node.groupBy);
|
|
469
492
|
}
|
|
470
493
|
visitUpdateQuery(node) {
|
|
471
|
-
const
|
|
494
|
+
const rootQueryNode = this.nodeStack.find(QueryNode.is);
|
|
495
|
+
const isSubQuery = rootQueryNode !== node;
|
|
472
496
|
if (!isSubQuery && node.explain) {
|
|
473
497
|
this.visitNode(node.explain);
|
|
474
498
|
this.append(' ');
|
|
475
499
|
}
|
|
476
|
-
if (isSubQuery) {
|
|
500
|
+
if (isSubQuery && !MergeQueryNode.is(rootQueryNode)) {
|
|
477
501
|
this.append('(');
|
|
478
502
|
}
|
|
479
503
|
if (node.with) {
|
|
@@ -481,8 +505,15 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
481
505
|
this.append(' ');
|
|
482
506
|
}
|
|
483
507
|
this.append('update ');
|
|
484
|
-
|
|
485
|
-
|
|
508
|
+
if (node.top) {
|
|
509
|
+
this.visitNode(node.top);
|
|
510
|
+
this.append(' ');
|
|
511
|
+
}
|
|
512
|
+
if (node.table) {
|
|
513
|
+
this.visitNode(node.table);
|
|
514
|
+
this.append(' ');
|
|
515
|
+
}
|
|
516
|
+
this.append('set ');
|
|
486
517
|
if (node.updates) {
|
|
487
518
|
this.compileList(node.updates);
|
|
488
519
|
}
|
|
@@ -498,11 +529,15 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
498
529
|
this.append(' ');
|
|
499
530
|
this.visitNode(node.where);
|
|
500
531
|
}
|
|
532
|
+
if (node.limit) {
|
|
533
|
+
this.append(' ');
|
|
534
|
+
this.visitNode(node.limit);
|
|
535
|
+
}
|
|
501
536
|
if (node.returning) {
|
|
502
537
|
this.append(' ');
|
|
503
538
|
this.visitNode(node.returning);
|
|
504
539
|
}
|
|
505
|
-
if (isSubQuery) {
|
|
540
|
+
if (isSubQuery && !MergeQueryNode.is(rootQueryNode)) {
|
|
506
541
|
this.append(')');
|
|
507
542
|
}
|
|
508
543
|
}
|
|
@@ -1038,6 +1073,36 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
1038
1073
|
this.visitNode(node.values[i]);
|
|
1039
1074
|
}
|
|
1040
1075
|
}
|
|
1076
|
+
visitMergeQuery(node) {
|
|
1077
|
+
if (node.with) {
|
|
1078
|
+
this.visitNode(node.with);
|
|
1079
|
+
this.append(' ');
|
|
1080
|
+
}
|
|
1081
|
+
this.append('merge ');
|
|
1082
|
+
if (node.top) {
|
|
1083
|
+
this.visitNode(node.top);
|
|
1084
|
+
this.append(' ');
|
|
1085
|
+
}
|
|
1086
|
+
this.append('into ');
|
|
1087
|
+
this.visitNode(node.into);
|
|
1088
|
+
if (node.using) {
|
|
1089
|
+
this.append(' ');
|
|
1090
|
+
this.visitNode(node.using);
|
|
1091
|
+
}
|
|
1092
|
+
if (node.whens) {
|
|
1093
|
+
this.append(' ');
|
|
1094
|
+
this.compileList(node.whens);
|
|
1095
|
+
}
|
|
1096
|
+
}
|
|
1097
|
+
visitMatched(node) {
|
|
1098
|
+
if (node.not) {
|
|
1099
|
+
this.append('not ');
|
|
1100
|
+
}
|
|
1101
|
+
this.append('matched');
|
|
1102
|
+
if (node.bySource) {
|
|
1103
|
+
this.append(' by source');
|
|
1104
|
+
}
|
|
1105
|
+
}
|
|
1041
1106
|
visitAddIndex(node) {
|
|
1042
1107
|
this.append('add ');
|
|
1043
1108
|
if (node.unique) {
|
|
@@ -1055,6 +1120,24 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
1055
1120
|
this.visitNode(node.using);
|
|
1056
1121
|
}
|
|
1057
1122
|
}
|
|
1123
|
+
visitCast(node) {
|
|
1124
|
+
this.append('cast(');
|
|
1125
|
+
this.visitNode(node.expression);
|
|
1126
|
+
this.append(' as ');
|
|
1127
|
+
this.visitNode(node.dataType);
|
|
1128
|
+
this.append(')');
|
|
1129
|
+
}
|
|
1130
|
+
visitFetch(node) {
|
|
1131
|
+
this.append('fetch next ');
|
|
1132
|
+
this.visitNode(node.rowCount);
|
|
1133
|
+
this.append(` rows ${node.modifier}`);
|
|
1134
|
+
}
|
|
1135
|
+
visitTop(node) {
|
|
1136
|
+
this.append(`top(${node.expression})`);
|
|
1137
|
+
if (node.modifiers) {
|
|
1138
|
+
this.append(` ${node.modifiers}`);
|
|
1139
|
+
}
|
|
1140
|
+
}
|
|
1058
1141
|
append(str) {
|
|
1059
1142
|
this.#sql += str;
|
|
1060
1143
|
}
|
|
@@ -1164,4 +1247,5 @@ const JOIN_TYPE_SQL = freeze({
|
|
|
1164
1247
|
FullJoin: 'full join',
|
|
1165
1248
|
LateralInnerJoin: 'inner join lateral',
|
|
1166
1249
|
LateralLeftJoin: 'left join lateral',
|
|
1250
|
+
Using: 'using',
|
|
1167
1251
|
});
|
|
@@ -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
|
*
|
|
@@ -7,13 +7,15 @@ import { DeleteQueryNode } from './operation-node/delete-query-node.js';
|
|
|
7
7
|
import { InsertQueryNode } from './operation-node/insert-query-node.js';
|
|
8
8
|
import { SelectQueryNode } from './operation-node/select-query-node.js';
|
|
9
9
|
import { UpdateQueryNode } from './operation-node/update-query-node.js';
|
|
10
|
-
import { parseTable, parseTableExpression, parseTableExpressionOrList, } from './parser/table-parser.js';
|
|
10
|
+
import { parseTable, parseTableExpression, parseTableExpressionOrList, parseAliasedTable, } from './parser/table-parser.js';
|
|
11
11
|
import { parseCommonTableExpression, } from './parser/with-parser.js';
|
|
12
12
|
import { WithNode } from './operation-node/with-node.js';
|
|
13
13
|
import { createQueryId } from './util/query-id.js';
|
|
14
14
|
import { WithSchemaPlugin } from './plugin/with-schema/with-schema-plugin.js';
|
|
15
15
|
import { freeze } from './util/object-utils.js';
|
|
16
16
|
import { parseSelectArg, } from './parser/select-parser.js';
|
|
17
|
+
import { MergeQueryBuilder } from './query-builder/merge-query-builder.js';
|
|
18
|
+
import { MergeQueryNode } from './operation-node/merge-query-node.js';
|
|
17
19
|
export class QueryCreator {
|
|
18
20
|
#props;
|
|
19
21
|
constructor(props) {
|
|
@@ -125,6 +127,13 @@ export class QueryCreator {
|
|
|
125
127
|
queryNode: UpdateQueryNode.create(parseTableExpression(table), this.#props.withNode),
|
|
126
128
|
});
|
|
127
129
|
}
|
|
130
|
+
mergeInto(targetTable) {
|
|
131
|
+
return new MergeQueryBuilder({
|
|
132
|
+
queryId: createQueryId(),
|
|
133
|
+
executor: this.#props.executor,
|
|
134
|
+
queryNode: MergeQueryNode.create(parseAliasedTable(targetTable), this.#props.withNode),
|
|
135
|
+
});
|
|
136
|
+
}
|
|
128
137
|
/**
|
|
129
138
|
* Creates a `with` query (Common Table Expression).
|
|
130
139
|
*
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { AddIndexNode } from '../operation-node/add-index-node.js';
|
|
3
3
|
import { AlterTableNode } from '../operation-node/alter-table-node.js';
|
|
4
4
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
5
|
-
import { parseOrderedColumnName } from '../parser/reference-parser.js';
|
|
5
|
+
import { parseOrderedColumnName, } from '../parser/reference-parser.js';
|
|
6
6
|
import { freeze } from '../util/object-utils.js';
|
|
7
7
|
import { preventAwait } from '../util/prevent-await.js';
|
|
8
8
|
export class AlterTableAddIndexBuilder {
|
|
@@ -50,7 +50,9 @@ export class AlterTableAddIndexBuilder {
|
|
|
50
50
|
return new AlterTableAddIndexBuilder({
|
|
51
51
|
...this.#props,
|
|
52
52
|
node: AlterTableNode.cloneWithTableProps(this.#props.node, {
|
|
53
|
-
addIndex: AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [
|
|
53
|
+
addIndex: AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [
|
|
54
|
+
parseOrderedColumnName(column),
|
|
55
|
+
]),
|
|
54
56
|
}),
|
|
55
57
|
});
|
|
56
58
|
}
|
|
@@ -109,7 +111,9 @@ export class AlterTableAddIndexBuilder {
|
|
|
109
111
|
return new AlterTableAddIndexBuilder({
|
|
110
112
|
...this.#props,
|
|
111
113
|
node: AlterTableNode.cloneWithTableProps(this.#props.node, {
|
|
112
|
-
addIndex: AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [
|
|
114
|
+
addIndex: AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [
|
|
115
|
+
expression.toOperationNode(),
|
|
116
|
+
]),
|
|
113
117
|
}),
|
|
114
118
|
});
|
|
115
119
|
}
|
|
@@ -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
|
/**
|