kysely 0.10.1 → 0.11.0
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 +7 -3
- package/dist/cjs/dialect/dialect-adapter.d.ts +3 -2
- package/dist/cjs/dialect/mysql/mysql-adapter.js +1 -1
- package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +3 -3
- package/dist/cjs/dialect/mysql/mysql-driver.js +25 -32
- package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +2 -2
- package/dist/cjs/dialect/postgres/postgres-driver.js +8 -19
- package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +7 -0
- package/dist/cjs/dialect/sqlite/sqlite-adapter.js +18 -0
- package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +64 -0
- package/dist/cjs/dialect/sqlite/sqlite-dialect.js +33 -0
- package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +14 -0
- package/dist/cjs/dialect/sqlite/sqlite-driver.js +116 -0
- package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +7 -0
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +31 -0
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +7 -0
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +19 -0
- package/dist/cjs/driver/database-connection.d.ts +2 -2
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.js +8 -0
- package/dist/cjs/kysely.d.ts +6 -4
- package/dist/cjs/kysely.js +6 -4
- package/dist/cjs/migration/migration.d.ts +1 -1
- package/dist/cjs/migration/migration.js +3 -3
- package/dist/cjs/operation-node/create-view-node.d.ts +1 -0
- package/dist/cjs/operation-node/having-node.d.ts +4 -8
- package/dist/cjs/operation-node/having-node.js +3 -3
- package/dist/cjs/operation-node/join-node.d.ts +6 -9
- package/dist/cjs/operation-node/join-node.js +10 -7
- package/dist/cjs/operation-node/on-node.d.ts +14 -0
- package/dist/cjs/operation-node/on-node.js +28 -0
- 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 +3 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/query-node.d.ts +3 -3
- package/dist/cjs/operation-node/select-query-node.d.ts +4 -4
- package/dist/cjs/operation-node/where-node.d.ts +4 -8
- package/dist/cjs/operation-node/where-node.js +3 -3
- package/dist/cjs/parser/filter-parser.js +1 -1
- package/dist/cjs/parser/returning-parser.d.ts +4 -2
- package/dist/cjs/parser/select-parser.d.ts +2 -2
- package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.d.ts +1 -1
- package/dist/cjs/query-builder/delete-result.d.ts +5 -0
- package/dist/cjs/query-builder/delete-result.js +13 -0
- package/dist/cjs/query-builder/expression-builder.d.ts +2 -2
- package/dist/cjs/query-builder/expression-builder.js +1 -1
- package/dist/cjs/query-builder/function-builder.d.ts +5 -5
- package/dist/cjs/query-builder/function-builder.js +3 -3
- package/dist/cjs/query-builder/insert-result.d.ts +27 -0
- package/dist/cjs/query-builder/insert-result.js +35 -0
- package/dist/cjs/query-builder/query-builder.d.ts +91 -81
- package/dist/cjs/query-builder/query-builder.js +38 -41
- package/dist/cjs/query-builder/update-result.d.ts +5 -0
- package/dist/cjs/query-builder/update-result.js +13 -0
- package/dist/cjs/query-compiler/compiled-query.d.ts +5 -0
- package/dist/cjs/query-compiler/compiled-query.js +12 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +24 -13
- package/dist/cjs/query-creator.d.ts +36 -26
- package/dist/cjs/query-creator.js +25 -17
- package/dist/cjs/schema/create-view-builder.d.ts +4 -0
- package/dist/cjs/schema/create-view-builder.js +11 -0
- package/dist/cjs/util/dynamic-import.d.ts +2 -0
- package/dist/cjs/util/dynamic-import.js +32 -0
- package/dist/cjs/util/type-utils.d.ts +4 -15
- package/dist/esm/dialect/dialect-adapter.d.ts +3 -2
- package/dist/esm/dialect/mysql/mysql-adapter.js +1 -1
- package/dist/esm/dialect/mysql/mysql-dialect.d.ts +3 -3
- package/dist/esm/dialect/mysql/mysql-driver.js +26 -33
- package/dist/esm/dialect/postgres/postgres-dialect.d.ts +2 -2
- package/dist/esm/dialect/postgres/postgres-driver.js +8 -19
- package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +7 -0
- package/dist/esm/dialect/sqlite/sqlite-adapter.js +14 -0
- package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +64 -0
- package/dist/esm/dialect/sqlite/sqlite-dialect.js +29 -0
- package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +14 -0
- package/dist/esm/dialect/sqlite/sqlite-driver.js +112 -0
- package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +7 -0
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +27 -0
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +7 -0
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +15 -0
- package/dist/esm/driver/database-connection.d.ts +2 -2
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.js +8 -0
- package/dist/esm/kysely.d.ts +6 -4
- package/dist/esm/kysely.js +6 -4
- package/dist/esm/migration/migration.d.ts +1 -1
- package/dist/esm/migration/migration.js +3 -3
- package/dist/esm/operation-node/create-view-node.d.ts +1 -0
- package/dist/esm/operation-node/having-node.d.ts +4 -8
- package/dist/esm/operation-node/having-node.js +3 -3
- package/dist/esm/operation-node/join-node.d.ts +6 -9
- package/dist/esm/operation-node/join-node.js +10 -7
- package/dist/esm/operation-node/on-node.d.ts +14 -0
- package/dist/esm/operation-node/on-node.js +25 -0
- 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 +3 -0
- package/dist/esm/operation-node/operation-node-visitor.js +4 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/query-node.d.ts +3 -3
- package/dist/esm/operation-node/select-query-node.d.ts +4 -4
- package/dist/esm/operation-node/where-node.d.ts +4 -8
- package/dist/esm/operation-node/where-node.js +3 -3
- package/dist/esm/parser/filter-parser.js +1 -1
- package/dist/esm/parser/returning-parser.d.ts +4 -2
- package/dist/esm/parser/select-parser.d.ts +2 -2
- package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.d.ts +1 -1
- package/dist/esm/query-builder/delete-result.d.ts +5 -0
- package/dist/esm/query-builder/delete-result.js +9 -0
- package/dist/esm/query-builder/expression-builder.d.ts +2 -2
- package/dist/esm/query-builder/expression-builder.js +1 -1
- package/dist/esm/query-builder/function-builder.d.ts +5 -5
- package/dist/esm/query-builder/function-builder.js +3 -3
- package/dist/esm/query-builder/insert-result.d.ts +27 -0
- package/dist/esm/query-builder/insert-result.js +31 -0
- package/dist/esm/query-builder/query-builder.d.ts +91 -81
- package/dist/esm/query-builder/query-builder.js +38 -41
- package/dist/esm/query-builder/update-result.d.ts +5 -0
- package/dist/esm/query-builder/update-result.js +9 -0
- package/dist/esm/query-compiler/compiled-query.d.ts +5 -0
- package/dist/esm/query-compiler/compiled-query.js +11 -1
- package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/esm/query-compiler/default-query-compiler.js +24 -13
- package/dist/esm/query-creator.d.ts +36 -26
- package/dist/esm/query-creator.js +25 -17
- package/dist/esm/schema/create-view-builder.d.ts +4 -0
- package/dist/esm/schema/create-view-builder.js +11 -0
- package/dist/esm/util/dynamic-import.d.ts +2 -0
- package/dist/esm/util/dynamic-import.js +27 -0
- package/dist/esm/util/type-utils.d.ts +4 -15
- package/package.json +3 -1
|
@@ -21,6 +21,9 @@ const delete_query_node_js_1 = require("../operation-node/delete-query-node.js")
|
|
|
21
21
|
const on_duplicate_key_node_js_1 = require("../operation-node/on-duplicate-key-node.js");
|
|
22
22
|
const group_by_parser_js_1 = require("../parser/group-by-parser.js");
|
|
23
23
|
const union_parser_js_1 = require("../parser/union-parser.js");
|
|
24
|
+
const insert_result_js_1 = require("./insert-result.js");
|
|
25
|
+
const update_result_js_1 = require("./update-result.js");
|
|
26
|
+
const delete_result_js_1 = require("./delete-result.js");
|
|
24
27
|
/**
|
|
25
28
|
* The main query builder class.
|
|
26
29
|
*
|
|
@@ -65,7 +68,7 @@ class QueryBuilder {
|
|
|
65
68
|
* .whereRef('person.first_name', '=', 'pet.name')
|
|
66
69
|
* ```
|
|
67
70
|
*
|
|
68
|
-
* The generated SQL (
|
|
71
|
+
* The generated SQL (PostgreSQL):
|
|
69
72
|
*
|
|
70
73
|
* ```sql
|
|
71
74
|
* select * from "person", "pet" where "person"."first_name" = "pet"."name"
|
|
@@ -88,7 +91,7 @@ class QueryBuilder {
|
|
|
88
91
|
* .execute()
|
|
89
92
|
* ```
|
|
90
93
|
*
|
|
91
|
-
* The generated SQL (
|
|
94
|
+
* The generated SQL (PostgreSQL):
|
|
92
95
|
*
|
|
93
96
|
* ```sql
|
|
94
97
|
* select "person".*, (
|
|
@@ -147,7 +150,7 @@ class QueryBuilder {
|
|
|
147
150
|
* .execute()
|
|
148
151
|
* ```
|
|
149
152
|
*
|
|
150
|
-
* The generated SQL (
|
|
153
|
+
* The generated SQL (PostgreSQL):
|
|
151
154
|
*
|
|
152
155
|
* ```sql
|
|
153
156
|
* select * from "person"
|
|
@@ -173,7 +176,7 @@ class QueryBuilder {
|
|
|
173
176
|
* )
|
|
174
177
|
* ```
|
|
175
178
|
*
|
|
176
|
-
* The generated SQL (
|
|
179
|
+
* The generated SQL (PostgreSQL):
|
|
177
180
|
*
|
|
178
181
|
* ```sql
|
|
179
182
|
* select * from "person"
|
|
@@ -327,7 +330,7 @@ class QueryBuilder {
|
|
|
327
330
|
* .execute()
|
|
328
331
|
* ```
|
|
329
332
|
*
|
|
330
|
-
* The generated SQL (
|
|
333
|
+
* The generated SQL (PostgreSQL):
|
|
331
334
|
*
|
|
332
335
|
* ```sql
|
|
333
336
|
* select distinct "first_name" from "person"
|
|
@@ -526,15 +529,15 @@ class QueryBuilder {
|
|
|
526
529
|
* values to update. In addition to the column's type, the values can be `raw`
|
|
527
530
|
* instances or select queries.
|
|
528
531
|
*
|
|
529
|
-
* The return value
|
|
530
|
-
* {@link QueryBuilder.returning | returning} method on
|
|
531
|
-
* to get out the updated rows.
|
|
532
|
+
* The return value of an update query is an instance of {@link UpdateResult}.
|
|
533
|
+
* You can use the {@link QueryBuilder.returning | returning} method on
|
|
534
|
+
* supported databases to get out the updated rows.
|
|
532
535
|
*
|
|
533
536
|
* @example
|
|
534
537
|
* Update a row in `person` table:
|
|
535
538
|
*
|
|
536
539
|
* ```ts
|
|
537
|
-
* const
|
|
540
|
+
* const result = await db
|
|
538
541
|
* .updateTable('person')
|
|
539
542
|
* .set({
|
|
540
543
|
* first_name: 'Jennifer',
|
|
@@ -542,9 +545,11 @@ class QueryBuilder {
|
|
|
542
545
|
* })
|
|
543
546
|
* .where('id', '=', 1)
|
|
544
547
|
* .executeTakeFirst()
|
|
548
|
+
*
|
|
549
|
+
* console.log(result.numUpdatedRows)
|
|
545
550
|
* ```
|
|
546
551
|
*
|
|
547
|
-
* The generated SQL (
|
|
552
|
+
* The generated SQL (PostgreSQL):
|
|
548
553
|
*
|
|
549
554
|
* ```sql
|
|
550
555
|
* update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3
|
|
@@ -569,7 +574,7 @@ class QueryBuilder {
|
|
|
569
574
|
* row.id
|
|
570
575
|
* ```
|
|
571
576
|
*
|
|
572
|
-
* The generated SQL (
|
|
577
|
+
* The generated SQL (PostgreSQL):
|
|
573
578
|
*
|
|
574
579
|
* ```sql
|
|
575
580
|
* update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3 returning "id"
|
|
@@ -580,7 +585,7 @@ class QueryBuilder {
|
|
|
580
585
|
* select queries:
|
|
581
586
|
*
|
|
582
587
|
* ```ts
|
|
583
|
-
* const
|
|
588
|
+
* const result = await db
|
|
584
589
|
* .updateTable('person')
|
|
585
590
|
* .set({
|
|
586
591
|
* first_name: 'Jennifer',
|
|
@@ -589,9 +594,11 @@ class QueryBuilder {
|
|
|
589
594
|
* })
|
|
590
595
|
* .where('id', '=', 1)
|
|
591
596
|
* .executeTakeFirst()
|
|
597
|
+
*
|
|
598
|
+
* console.log(result.numUpdatedRows)
|
|
592
599
|
* ```
|
|
593
600
|
*
|
|
594
|
-
* The generated SQL (
|
|
601
|
+
* The generated SQL (PostgreSQL):
|
|
595
602
|
*
|
|
596
603
|
* ```sql
|
|
597
604
|
* update "person" set
|
|
@@ -617,7 +624,7 @@ class QueryBuilder {
|
|
|
617
624
|
}
|
|
618
625
|
/**
|
|
619
626
|
* Adds a `returning *` to an insert/update/delete query on databases
|
|
620
|
-
* that support `returning` such as
|
|
627
|
+
* that support `returning` such as PostgreSQL.
|
|
621
628
|
*/
|
|
622
629
|
returningAll() {
|
|
623
630
|
assertCanHaveReturningClause(this.#props.queryNode);
|
|
@@ -645,7 +652,7 @@ class QueryBuilder {
|
|
|
645
652
|
* .execute()
|
|
646
653
|
* ```
|
|
647
654
|
*
|
|
648
|
-
* The generated SQL (
|
|
655
|
+
* The generated SQL (PostgreSQL):
|
|
649
656
|
*
|
|
650
657
|
* ```sql
|
|
651
658
|
* select "person"."first_name" as "fn"
|
|
@@ -672,7 +679,7 @@ class QueryBuilder {
|
|
|
672
679
|
* .execute()
|
|
673
680
|
* ```
|
|
674
681
|
*
|
|
675
|
-
* The generated SQL (
|
|
682
|
+
* The generated SQL (PostgreSQL):
|
|
676
683
|
*
|
|
677
684
|
* ```sql
|
|
678
685
|
* select *
|
|
@@ -704,7 +711,7 @@ class QueryBuilder {
|
|
|
704
711
|
* someQuery('fn')
|
|
705
712
|
* ```
|
|
706
713
|
*
|
|
707
|
-
* The generated SQL (
|
|
714
|
+
* The generated SQL (PostgreSQL):
|
|
708
715
|
*
|
|
709
716
|
* ```sql
|
|
710
717
|
* select "person"."first_name" as "fn"
|
|
@@ -895,32 +902,22 @@ class QueryBuilder {
|
|
|
895
902
|
* Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
|
|
896
903
|
*/
|
|
897
904
|
async execute() {
|
|
898
|
-
const
|
|
899
|
-
const
|
|
905
|
+
const compildQuery = this.compile();
|
|
906
|
+
const query = compildQuery.query;
|
|
900
907
|
const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
|
|
901
|
-
if (
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
}
|
|
908
|
+
if (this.#props.parseContext.adapter.supportsReturning &&
|
|
909
|
+
query_node_js_1.QueryNode.isMutating(query) &&
|
|
910
|
+
query.returning) {
|
|
911
|
+
return result.rows;
|
|
912
|
+
}
|
|
913
|
+
else if (insert_query_node_js_1.InsertQueryNode.is(query)) {
|
|
914
|
+
return [new insert_result_js_1.InsertResult(result.insertId)];
|
|
915
|
+
}
|
|
916
|
+
else if (update_query_node_js_1.UpdateQueryNode.is(query)) {
|
|
917
|
+
return [new update_result_js_1.UpdateResult(result.numUpdatedOrDeletedRows)];
|
|
912
918
|
}
|
|
913
|
-
else if (
|
|
914
|
-
|
|
915
|
-
node.returning) {
|
|
916
|
-
return result.rows;
|
|
917
|
-
}
|
|
918
|
-
else if (result.numUpdatedOrDeletedRows != null) {
|
|
919
|
-
return [result.numUpdatedOrDeletedRows];
|
|
920
|
-
}
|
|
921
|
-
else {
|
|
922
|
-
return [];
|
|
923
|
-
}
|
|
919
|
+
else if (delete_query_node_js_1.DeleteQueryNode.is(query)) {
|
|
920
|
+
return [new delete_result_js_1.DeleteResult(result.numUpdatedOrDeletedRows)];
|
|
924
921
|
}
|
|
925
922
|
else {
|
|
926
923
|
return result.rows;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UpdateResult = void 0;
|
|
4
|
+
class UpdateResult {
|
|
5
|
+
#numUpdatedRows;
|
|
6
|
+
constructor(numUpdatedRows) {
|
|
7
|
+
this.#numUpdatedRows = numUpdatedRows;
|
|
8
|
+
}
|
|
9
|
+
get numUpdatedRows() {
|
|
10
|
+
return this.#numUpdatedRows;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.UpdateResult = UpdateResult;
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
+
import { RootOperationNode } from './query-compiler.js';
|
|
1
2
|
export interface CompiledQuery {
|
|
3
|
+
readonly query: RootOperationNode;
|
|
2
4
|
readonly sql: string;
|
|
3
5
|
readonly parameters: ReadonlyArray<unknown>;
|
|
4
6
|
}
|
|
7
|
+
export declare const CompiledQuery: Readonly<{
|
|
8
|
+
raw(sql: string): CompiledQuery;
|
|
9
|
+
}>;
|
|
@@ -1,2 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CompiledQuery = void 0;
|
|
4
|
+
const raw_node_js_1 = require("../operation-node/raw-node.js");
|
|
5
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
6
|
+
exports.CompiledQuery = (0, object_utils_js_1.freeze)({
|
|
7
|
+
raw(sql) {
|
|
8
|
+
return (0, object_utils_js_1.freeze)({
|
|
9
|
+
sql,
|
|
10
|
+
query: raw_node_js_1.RawNode.createWithSql(sql),
|
|
11
|
+
parameters: (0, object_utils_js_1.freeze)([]),
|
|
12
|
+
});
|
|
13
|
+
},
|
|
14
|
+
});
|
|
@@ -66,6 +66,7 @@ import { CreateViewNode } from '../operation-node/create-view-node.js';
|
|
|
66
66
|
import { DropViewNode } from '../operation-node/drop-view-node.js';
|
|
67
67
|
import { GeneratedAlwaysAsNode } from '../operation-node/generated-always-as-node.js';
|
|
68
68
|
import { DefaultValueNode } from '../operation-node/default-value-node.js';
|
|
69
|
+
import { OnNode } from '../operation-node/on-node.js';
|
|
69
70
|
export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
|
|
70
71
|
#private;
|
|
71
72
|
protected get numParameters(): number;
|
|
@@ -95,6 +96,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
95
96
|
protected visitPrimitiveValueList(node: PrimitiveValueListNode): void;
|
|
96
97
|
protected visitParens(node: ParensNode): void;
|
|
97
98
|
protected visitJoin(node: JoinNode): void;
|
|
99
|
+
protected visitOn(node: OnNode): void;
|
|
98
100
|
protected visitRaw(node: RawNode): void;
|
|
99
101
|
protected visitOperator(node: OperatorNode): void;
|
|
100
102
|
protected visitTable(node: TableNode): void;
|
|
@@ -5,6 +5,8 @@ const operation_node_visitor_js_1 = require("../operation-node/operation-node-vi
|
|
|
5
5
|
const query_node_js_1 = require("../operation-node/query-node.js");
|
|
6
6
|
const raw_node_js_1 = require("../operation-node/raw-node.js");
|
|
7
7
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
8
|
+
const union_node_js_1 = require("../operation-node/union-node.js");
|
|
9
|
+
const create_view_node_js_1 = require("../operation-node/create-view-node.js");
|
|
8
10
|
class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisitor {
|
|
9
11
|
#sql = '';
|
|
10
12
|
#parameters = [];
|
|
@@ -16,6 +18,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
16
18
|
this.#parameters = [];
|
|
17
19
|
this.visitNode(node);
|
|
18
20
|
return (0, object_utils_js_1.freeze)({
|
|
21
|
+
query: node,
|
|
19
22
|
sql: this.getSql(),
|
|
20
23
|
parameters: [...this.#parameters],
|
|
21
24
|
});
|
|
@@ -24,9 +27,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
24
27
|
return this.#sql;
|
|
25
28
|
}
|
|
26
29
|
visitSelectQuery(node) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
const wrapInParens = this.nodeStack.length !== 1 &&
|
|
31
|
+
!create_view_node_js_1.CreateViewNode.is(this.parentNode) &&
|
|
32
|
+
!union_node_js_1.UnionNode.is(this.parentNode);
|
|
33
|
+
if (wrapInParens) {
|
|
30
34
|
this.append('(');
|
|
31
35
|
}
|
|
32
36
|
if (node.with) {
|
|
@@ -85,7 +89,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
85
89
|
this.append(SELECT_MODIFIER_SQL[modifier]);
|
|
86
90
|
});
|
|
87
91
|
}
|
|
88
|
-
if (
|
|
92
|
+
if (wrapInParens) {
|
|
89
93
|
this.append(')');
|
|
90
94
|
}
|
|
91
95
|
}
|
|
@@ -265,11 +269,15 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
265
269
|
this.append(JOIN_TYPE_SQL[node.joinType]);
|
|
266
270
|
this.append(' ');
|
|
267
271
|
this.visitNode(node.table);
|
|
268
|
-
this.append(' on ');
|
|
269
272
|
if (node.on) {
|
|
273
|
+
this.append(' ');
|
|
270
274
|
this.visitNode(node.on);
|
|
271
275
|
}
|
|
272
276
|
}
|
|
277
|
+
visitOn(node) {
|
|
278
|
+
this.append('on ');
|
|
279
|
+
this.visitNode(node.on);
|
|
280
|
+
}
|
|
273
281
|
visitRaw(node) {
|
|
274
282
|
node.sqlFragments.forEach((sql, i) => {
|
|
275
283
|
this.append(sql);
|
|
@@ -313,16 +321,16 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
313
321
|
if (!node.nullable) {
|
|
314
322
|
this.append(' not null');
|
|
315
323
|
}
|
|
316
|
-
if (node.autoIncrement) {
|
|
317
|
-
this.append(' ');
|
|
318
|
-
this.append(this.getAutoIncrement());
|
|
319
|
-
}
|
|
320
324
|
if (node.unique) {
|
|
321
325
|
this.append(' unique');
|
|
322
326
|
}
|
|
323
327
|
if (node.primaryKey) {
|
|
324
328
|
this.append(' primary key');
|
|
325
329
|
}
|
|
330
|
+
if (node.autoIncrement) {
|
|
331
|
+
this.append(' ');
|
|
332
|
+
this.append(this.getAutoIncrement());
|
|
333
|
+
}
|
|
326
334
|
if (node.references) {
|
|
327
335
|
this.append(' ');
|
|
328
336
|
this.visitNode(node.references);
|
|
@@ -660,6 +668,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
660
668
|
this.append('materialized ');
|
|
661
669
|
}
|
|
662
670
|
this.append('view ');
|
|
671
|
+
if (node.ifNotExists) {
|
|
672
|
+
this.append('if not exists ');
|
|
673
|
+
}
|
|
663
674
|
this.visitNode(node.name);
|
|
664
675
|
this.append(' ');
|
|
665
676
|
if (node.columns) {
|
|
@@ -736,17 +747,17 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
736
747
|
}
|
|
737
748
|
}
|
|
738
749
|
exports.DefaultQueryCompiler = DefaultQueryCompiler;
|
|
739
|
-
const SELECT_MODIFIER_SQL = {
|
|
750
|
+
const SELECT_MODIFIER_SQL = (0, object_utils_js_1.freeze)({
|
|
740
751
|
ForKeyShare: 'for key share',
|
|
741
752
|
ForNoKeyUpdate: 'for no key update',
|
|
742
753
|
ForUpdate: 'for update',
|
|
743
754
|
ForShare: 'for share',
|
|
744
755
|
NoWait: 'nowait',
|
|
745
756
|
SkipLocked: 'skip locked',
|
|
746
|
-
};
|
|
747
|
-
const JOIN_TYPE_SQL = {
|
|
757
|
+
});
|
|
758
|
+
const JOIN_TYPE_SQL = (0, object_utils_js_1.freeze)({
|
|
748
759
|
InnerJoin: 'inner join',
|
|
749
760
|
LeftJoin: 'left join',
|
|
750
761
|
RightJoin: 'right join',
|
|
751
762
|
FullJoin: 'full join',
|
|
752
|
-
};
|
|
763
|
+
});
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { QueryBuilder } from './query-builder/query-builder.js';
|
|
2
2
|
import { QueryBuilderWithTable, TableExpression, TableReference } from './parser/table-parser.js';
|
|
3
|
-
import { InsertResultTypeTag, DeleteResultTypeTag, UpdateResultTypeTag } from './util/type-utils.js';
|
|
4
3
|
import { QueryExecutor } from './query-executor/query-executor.js';
|
|
5
4
|
import { RawBuilder } from './raw-builder/raw-builder.js';
|
|
6
5
|
import { CommonTableExpression, QueryCreatorWithCommonTableExpression } from './parser/with-parser.js';
|
|
7
6
|
import { WithNode } from './operation-node/with-node.js';
|
|
8
7
|
import { ParseContext } from './parser/parse-context.js';
|
|
8
|
+
import { InsertResult } from './query-builder/insert-result.js';
|
|
9
|
+
import { DeleteResult } from './query-builder/delete-result.js';
|
|
10
|
+
import { UpdateResult } from './query-builder/update-result.js';
|
|
9
11
|
export declare class QueryCreator<DB> {
|
|
10
12
|
#private;
|
|
11
13
|
constructor(props: QueryCreatorProps);
|
|
@@ -21,7 +23,7 @@ export declare class QueryCreator<DB> {
|
|
|
21
23
|
* db.selectFrom('person').selectAll()
|
|
22
24
|
* ```
|
|
23
25
|
*
|
|
24
|
-
* The generated SQL (
|
|
26
|
+
* The generated SQL (PostgreSQL):
|
|
25
27
|
*
|
|
26
28
|
* ```sql
|
|
27
29
|
* select * from "person"
|
|
@@ -38,7 +40,7 @@ export declare class QueryCreator<DB> {
|
|
|
38
40
|
* console.log(persons[0].id)
|
|
39
41
|
* ```
|
|
40
42
|
*
|
|
41
|
-
* The generated SQL (
|
|
43
|
+
* The generated SQL (PostgreSQL):
|
|
42
44
|
*
|
|
43
45
|
* ```sql
|
|
44
46
|
* select "p"."id", "p"."first_name" from "person" as "p"
|
|
@@ -57,7 +59,7 @@ export declare class QueryCreator<DB> {
|
|
|
57
59
|
* console.log(persons[0].identifier)
|
|
58
60
|
* ```
|
|
59
61
|
*
|
|
60
|
-
* The generated SQL (
|
|
62
|
+
* The generated SQL (PostgreSQL):
|
|
61
63
|
*
|
|
62
64
|
* ```sql
|
|
63
65
|
* select "p"."identifier",
|
|
@@ -79,7 +81,7 @@ export declare class QueryCreator<DB> {
|
|
|
79
81
|
* console.log(items[0].one)
|
|
80
82
|
* ```
|
|
81
83
|
*
|
|
82
|
-
* The generated SQL (
|
|
84
|
+
* The generated SQL (PostgreSQL):
|
|
83
85
|
*
|
|
84
86
|
* ```sql
|
|
85
87
|
* select "q"."one",
|
|
@@ -106,7 +108,7 @@ export declare class QueryCreator<DB> {
|
|
|
106
108
|
* .execute()
|
|
107
109
|
* ```
|
|
108
110
|
*
|
|
109
|
-
* The generated SQL (
|
|
111
|
+
* The generated SQL (PostgreSQL):
|
|
110
112
|
*
|
|
111
113
|
* ```sql
|
|
112
114
|
* select "p".id, "a"."species", "q"."one"
|
|
@@ -121,20 +123,17 @@ export declare class QueryCreator<DB> {
|
|
|
121
123
|
/**
|
|
122
124
|
* Creates an insert query.
|
|
123
125
|
*
|
|
124
|
-
* The return value of this query is
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
* If you are running a database engine like `Mysql` that always returns the primary
|
|
128
|
-
* key, you can safely use `!` or the {@link QueryBuilder.castTo | castTo} method
|
|
129
|
-
* to cast away the `undefined` from the type.
|
|
126
|
+
* The return value of this query is an instance of {@link InsertResult}. {@link InsertResult}
|
|
127
|
+
* has the {@link InsertResult.insertId | insertId} field that holds the auto incremented id of
|
|
128
|
+
* the inserted row if the db returned one.
|
|
130
129
|
*
|
|
131
130
|
* See the {@link QueryBuilder.values | values} method for more info and examples. Also see
|
|
132
131
|
* the {@link QueryBuilder.returning | returning} method for a way to return columns
|
|
133
|
-
* on supported databases like
|
|
132
|
+
* on supported databases like PostgreSQL.
|
|
134
133
|
*
|
|
135
134
|
* @example
|
|
136
135
|
* ```ts
|
|
137
|
-
* const
|
|
136
|
+
* const result = await db
|
|
138
137
|
* .insertInto('person')
|
|
139
138
|
* .values({
|
|
140
139
|
* id: db.generated,
|
|
@@ -142,10 +141,12 @@ export declare class QueryCreator<DB> {
|
|
|
142
141
|
* last_name: 'Aniston'
|
|
143
142
|
* })
|
|
144
143
|
* .executeTakeFirst()
|
|
144
|
+
*
|
|
145
|
+
* console.log(result.insertId)
|
|
145
146
|
* ```
|
|
146
147
|
*
|
|
147
148
|
* @example
|
|
148
|
-
* Some databases like
|
|
149
|
+
* Some databases like PostgreSQL support the `returning` method:
|
|
149
150
|
*
|
|
150
151
|
* ```ts
|
|
151
152
|
* const { id } = await db
|
|
@@ -159,22 +160,26 @@ export declare class QueryCreator<DB> {
|
|
|
159
160
|
* .executeTakeFirst()
|
|
160
161
|
* ```
|
|
161
162
|
*/
|
|
162
|
-
insertInto<T extends keyof DB & string>(table: T): QueryBuilder<DB, T,
|
|
163
|
+
insertInto<T extends keyof DB & string>(table: T): QueryBuilder<DB, T, InsertResult>;
|
|
163
164
|
/**
|
|
164
165
|
* Creates a delete query.
|
|
165
166
|
*
|
|
166
167
|
* See the {@link QueryBuilder.where} method for examples on how to specify
|
|
167
|
-
* a where clause for the delete operation
|
|
168
|
+
* a where clause for the delete operation.
|
|
169
|
+
*
|
|
170
|
+
* The return value of the query is an instance of {@link DeleteResult}.
|
|
168
171
|
*
|
|
169
172
|
* @example
|
|
170
173
|
* ```ts
|
|
171
|
-
* const
|
|
174
|
+
* const result = await db
|
|
172
175
|
* .deleteFrom('person')
|
|
173
176
|
* .where('person.id', '=', 1)
|
|
174
177
|
* .executeTakeFirst()
|
|
178
|
+
*
|
|
179
|
+
* console.log(result.numDeletedRows)
|
|
175
180
|
* ```
|
|
176
181
|
*/
|
|
177
|
-
deleteFrom<TR extends TableReference<DB>>(table: TR): QueryBuilderWithTable<DB, never,
|
|
182
|
+
deleteFrom<TR extends TableReference<DB>>(table: TR): QueryBuilderWithTable<DB, never, DeleteResult, TR>;
|
|
178
183
|
/**
|
|
179
184
|
* Creates an update query.
|
|
180
185
|
*
|
|
@@ -184,16 +189,20 @@ export declare class QueryCreator<DB> {
|
|
|
184
189
|
* See the {@link QueryBuilder.set} method for examples on how to
|
|
185
190
|
* specify the updates.
|
|
186
191
|
*
|
|
192
|
+
* The return value of the query is an {@link UpdateResult}.
|
|
193
|
+
*
|
|
187
194
|
* @example
|
|
188
195
|
* ```ts
|
|
189
|
-
* const
|
|
196
|
+
* const result = await db
|
|
190
197
|
* .updateTable('person')
|
|
191
198
|
* .set({ first_name: 'Jennifer' })
|
|
192
199
|
* .where('person.id', '=', 1)
|
|
193
200
|
* .executeTakeFirst()
|
|
201
|
+
*
|
|
202
|
+
* console.log(result.numUpdatedRows)
|
|
194
203
|
* ```
|
|
195
204
|
*/
|
|
196
|
-
updateTable<TR extends TableReference<DB>>(table: TR): QueryBuilderWithTable<DB, never,
|
|
205
|
+
updateTable<TR extends TableReference<DB>>(table: TR): QueryBuilderWithTable<DB, never, UpdateResult, TR>;
|
|
197
206
|
/**
|
|
198
207
|
* Creates a `with` query (common table expressions).
|
|
199
208
|
*
|
|
@@ -233,7 +242,7 @@ export declare class QueryCreator<DB> {
|
|
|
233
242
|
* .execute()
|
|
234
243
|
* ```
|
|
235
244
|
*
|
|
236
|
-
* The generated SQL (
|
|
245
|
+
* The generated SQL (PostgreSQL):
|
|
237
246
|
*
|
|
238
247
|
* ```sql
|
|
239
248
|
* select * from "mammals"."pet"
|
|
@@ -253,7 +262,7 @@ export declare class QueryCreator<DB> {
|
|
|
253
262
|
* .execute()
|
|
254
263
|
* ```
|
|
255
264
|
*
|
|
256
|
-
* The generated SQL (
|
|
265
|
+
* The generated SQL (PostgreSQL):
|
|
257
266
|
*
|
|
258
267
|
* ```sql
|
|
259
268
|
* select "p"."name" from "mammals"."pet" as "p"
|
|
@@ -298,7 +307,7 @@ export declare class QueryCreator<DB> {
|
|
|
298
307
|
* console.log(person.name)
|
|
299
308
|
* ```
|
|
300
309
|
*
|
|
301
|
-
* The generated SQL (
|
|
310
|
+
* The generated SQL (PostgreSQL):
|
|
302
311
|
*
|
|
303
312
|
* ```sql
|
|
304
313
|
* select concat(first_name, ' ', last_name) as "name"
|
|
@@ -356,7 +365,7 @@ export declare class QueryCreator<DB> {
|
|
|
356
365
|
* }
|
|
357
366
|
* ```
|
|
358
367
|
*
|
|
359
|
-
* The generated SQL (
|
|
368
|
+
* The generated SQL (PostgreSQL):
|
|
360
369
|
*
|
|
361
370
|
* ```sql
|
|
362
371
|
* select * from "person" where now() - birth_date > interval $1 year
|
|
@@ -370,7 +379,8 @@ export declare class QueryCreator<DB> {
|
|
|
370
379
|
* Example of creating a completely raw query from scratch:
|
|
371
380
|
*
|
|
372
381
|
* ```ts
|
|
373
|
-
* const
|
|
382
|
+
* const result = await db.raw<Person>('select p.* from person p').execute()
|
|
383
|
+
* const persons = result.rows
|
|
374
384
|
* ```
|
|
375
385
|
*
|
|
376
386
|
* For a raw query, you need to specify the type of the returned __row__. In
|