kysely 0.10.0 → 0.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/README.md +7 -3
  2. package/dist/cjs/dialect/dialect-adapter.d.ts +3 -2
  3. package/dist/cjs/dialect/mysql/mysql-adapter.js +1 -1
  4. package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +3 -3
  5. package/dist/cjs/dialect/mysql/mysql-driver.js +25 -32
  6. package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +2 -2
  7. package/dist/cjs/dialect/postgres/postgres-driver.js +8 -19
  8. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +7 -0
  9. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +18 -0
  10. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +64 -0
  11. package/dist/cjs/dialect/sqlite/sqlite-dialect.js +33 -0
  12. package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +14 -0
  13. package/dist/cjs/dialect/sqlite/sqlite-driver.js +116 -0
  14. package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +7 -0
  15. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +44 -0
  16. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +7 -0
  17. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +19 -0
  18. package/dist/cjs/driver/database-connection.d.ts +2 -2
  19. package/dist/cjs/driver/runtime-driver.js +3 -4
  20. package/dist/cjs/index.d.ts +45 -30
  21. package/dist/cjs/index.js +44 -29
  22. package/dist/cjs/kysely.d.ts +6 -4
  23. package/dist/cjs/kysely.js +6 -4
  24. package/dist/cjs/migration/migration.d.ts +1 -1
  25. package/dist/cjs/migration/migration.js +3 -3
  26. package/dist/cjs/operation-node/alias-node.d.ts +1 -1
  27. package/dist/cjs/operation-node/column-definition-node.d.ts +4 -2
  28. package/dist/cjs/operation-node/create-view-node.d.ts +1 -0
  29. package/dist/cjs/operation-node/default-value-node.d.ts +14 -0
  30. package/dist/cjs/operation-node/default-value-node.js +18 -0
  31. package/dist/cjs/operation-node/generated-always-as-node.d.ts +16 -0
  32. package/dist/cjs/operation-node/generated-always-as-node.js +25 -0
  33. package/dist/cjs/operation-node/having-node.d.ts +4 -8
  34. package/dist/cjs/operation-node/having-node.js +3 -3
  35. package/dist/cjs/operation-node/join-node.d.ts +6 -9
  36. package/dist/cjs/operation-node/join-node.js +10 -7
  37. package/dist/cjs/operation-node/on-node.d.ts +14 -0
  38. package/dist/cjs/operation-node/on-node.js +28 -0
  39. package/dist/cjs/operation-node/operation-node-transformer.d.ts +6 -0
  40. package/dist/cjs/operation-node/operation-node-transformer.js +26 -2
  41. package/dist/cjs/operation-node/operation-node-utils.d.ts +1 -1
  42. package/dist/cjs/operation-node/operation-node-visitor.d.ts +7 -0
  43. package/dist/cjs/operation-node/operation-node-visitor.js +9 -2
  44. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  45. package/dist/cjs/operation-node/query-node.d.ts +3 -3
  46. package/dist/cjs/operation-node/raw-node.d.ts +1 -1
  47. package/dist/cjs/operation-node/select-query-node.d.ts +4 -4
  48. package/dist/cjs/operation-node/where-node.d.ts +4 -8
  49. package/dist/cjs/operation-node/where-node.js +3 -3
  50. package/dist/cjs/parser/filter-parser.d.ts +1 -0
  51. package/dist/cjs/parser/filter-parser.js +49 -52
  52. package/dist/cjs/parser/returning-parser.d.ts +4 -2
  53. package/dist/cjs/parser/select-parser.d.ts +2 -2
  54. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.d.ts +1 -1
  55. package/dist/cjs/query-builder/delete-result.d.ts +5 -0
  56. package/dist/cjs/query-builder/delete-result.js +13 -0
  57. package/dist/cjs/query-builder/expression-builder.d.ts +2 -2
  58. package/dist/cjs/query-builder/expression-builder.js +1 -1
  59. package/dist/cjs/query-builder/function-builder.d.ts +5 -5
  60. package/dist/cjs/query-builder/function-builder.js +3 -3
  61. package/dist/cjs/query-builder/insert-result.d.ts +27 -0
  62. package/dist/cjs/query-builder/insert-result.js +35 -0
  63. package/dist/cjs/query-builder/join-builder.d.ts +3 -0
  64. package/dist/cjs/query-builder/query-builder.d.ts +95 -81
  65. package/dist/cjs/query-builder/query-builder.js +38 -41
  66. package/dist/cjs/query-builder/update-result.d.ts +5 -0
  67. package/dist/cjs/query-builder/update-result.js +13 -0
  68. package/dist/cjs/query-compiler/compiled-query.d.ts +5 -0
  69. package/dist/cjs/query-compiler/compiled-query.js +12 -0
  70. package/dist/cjs/query-compiler/default-query-compiler.d.ts +6 -0
  71. package/dist/cjs/query-compiler/default-query-compiler.js +41 -14
  72. package/dist/cjs/query-creator.d.ts +36 -26
  73. package/dist/cjs/query-creator.js +25 -17
  74. package/dist/cjs/raw-builder/raw-builder.d.ts +1 -1
  75. package/dist/cjs/schema/alter-table-builder.d.ts +4 -0
  76. package/dist/cjs/schema/alter-table-builder.js +24 -0
  77. package/dist/cjs/schema/column-definition-builder.d.ts +41 -0
  78. package/dist/cjs/schema/column-definition-builder.js +18 -1
  79. package/dist/cjs/schema/create-table-builder.d.ts +6 -7
  80. package/dist/cjs/schema/create-table-builder.js +6 -7
  81. package/dist/cjs/schema/create-view-builder.d.ts +4 -0
  82. package/dist/cjs/schema/create-view-builder.js +11 -0
  83. package/dist/cjs/util/dynamic-import.d.ts +2 -0
  84. package/dist/cjs/util/dynamic-import.js +32 -0
  85. package/dist/cjs/util/performance-now.d.ts +1 -0
  86. package/dist/cjs/util/performance-now.js +13 -0
  87. package/dist/cjs/util/type-utils.d.ts +4 -15
  88. package/dist/esm/dialect/dialect-adapter.d.ts +3 -2
  89. package/dist/esm/dialect/mysql/mysql-adapter.js +1 -1
  90. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +3 -3
  91. package/dist/esm/dialect/mysql/mysql-driver.js +26 -33
  92. package/dist/esm/dialect/postgres/postgres-dialect.d.ts +2 -2
  93. package/dist/esm/dialect/postgres/postgres-driver.js +8 -19
  94. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +7 -0
  95. package/dist/esm/dialect/sqlite/sqlite-adapter.js +14 -0
  96. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +64 -0
  97. package/dist/esm/dialect/sqlite/sqlite-dialect.js +29 -0
  98. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +14 -0
  99. package/dist/esm/dialect/sqlite/sqlite-driver.js +112 -0
  100. package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +7 -0
  101. package/dist/esm/dialect/sqlite/sqlite-introspector.js +40 -0
  102. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +7 -0
  103. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +15 -0
  104. package/dist/esm/driver/database-connection.d.ts +2 -2
  105. package/dist/esm/driver/runtime-driver.js +3 -4
  106. package/dist/esm/index.d.ts +45 -30
  107. package/dist/esm/index.js +44 -29
  108. package/dist/esm/kysely.d.ts +6 -4
  109. package/dist/esm/kysely.js +6 -4
  110. package/dist/esm/migration/migration.d.ts +1 -1
  111. package/dist/esm/migration/migration.js +3 -3
  112. package/dist/esm/operation-node/alias-node.d.ts +1 -1
  113. package/dist/esm/operation-node/column-definition-node.d.ts +4 -2
  114. package/dist/esm/operation-node/create-view-node.d.ts +1 -0
  115. package/dist/esm/operation-node/default-value-node.d.ts +14 -0
  116. package/dist/esm/operation-node/default-value-node.js +15 -0
  117. package/dist/esm/operation-node/generated-always-as-node.d.ts +16 -0
  118. package/dist/esm/operation-node/generated-always-as-node.js +22 -0
  119. package/dist/esm/operation-node/having-node.d.ts +4 -8
  120. package/dist/esm/operation-node/having-node.js +3 -3
  121. package/dist/esm/operation-node/join-node.d.ts +6 -9
  122. package/dist/esm/operation-node/join-node.js +10 -7
  123. package/dist/esm/operation-node/on-node.d.ts +14 -0
  124. package/dist/esm/operation-node/on-node.js +25 -0
  125. package/dist/esm/operation-node/operation-node-transformer.d.ts +6 -0
  126. package/dist/esm/operation-node/operation-node-transformer.js +26 -2
  127. package/dist/esm/operation-node/operation-node-utils.d.ts +1 -1
  128. package/dist/esm/operation-node/operation-node-visitor.d.ts +7 -0
  129. package/dist/esm/operation-node/operation-node-visitor.js +9 -2
  130. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  131. package/dist/esm/operation-node/query-node.d.ts +3 -3
  132. package/dist/esm/operation-node/raw-node.d.ts +1 -1
  133. package/dist/esm/operation-node/select-query-node.d.ts +4 -4
  134. package/dist/esm/operation-node/where-node.d.ts +4 -8
  135. package/dist/esm/operation-node/where-node.js +3 -3
  136. package/dist/esm/parser/filter-parser.d.ts +1 -0
  137. package/dist/esm/parser/filter-parser.js +48 -52
  138. package/dist/esm/parser/returning-parser.d.ts +4 -2
  139. package/dist/esm/parser/select-parser.d.ts +2 -2
  140. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.d.ts +1 -1
  141. package/dist/esm/query-builder/delete-result.d.ts +5 -0
  142. package/dist/esm/query-builder/delete-result.js +9 -0
  143. package/dist/esm/query-builder/expression-builder.d.ts +2 -2
  144. package/dist/esm/query-builder/expression-builder.js +1 -1
  145. package/dist/esm/query-builder/function-builder.d.ts +5 -5
  146. package/dist/esm/query-builder/function-builder.js +3 -3
  147. package/dist/esm/query-builder/insert-result.d.ts +27 -0
  148. package/dist/esm/query-builder/insert-result.js +31 -0
  149. package/dist/esm/query-builder/join-builder.d.ts +3 -0
  150. package/dist/esm/query-builder/query-builder.d.ts +95 -81
  151. package/dist/esm/query-builder/query-builder.js +38 -41
  152. package/dist/esm/query-builder/update-result.d.ts +5 -0
  153. package/dist/esm/query-builder/update-result.js +9 -0
  154. package/dist/esm/query-compiler/compiled-query.d.ts +5 -0
  155. package/dist/esm/query-compiler/compiled-query.js +11 -1
  156. package/dist/esm/query-compiler/default-query-compiler.d.ts +6 -0
  157. package/dist/esm/query-compiler/default-query-compiler.js +41 -14
  158. package/dist/esm/query-creator.d.ts +36 -26
  159. package/dist/esm/query-creator.js +25 -17
  160. package/dist/esm/raw-builder/raw-builder.d.ts +1 -1
  161. package/dist/esm/schema/alter-table-builder.d.ts +4 -0
  162. package/dist/esm/schema/alter-table-builder.js +24 -0
  163. package/dist/esm/schema/column-definition-builder.d.ts +41 -0
  164. package/dist/esm/schema/column-definition-builder.js +18 -1
  165. package/dist/esm/schema/create-table-builder.d.ts +6 -7
  166. package/dist/esm/schema/create-table-builder.js +6 -7
  167. package/dist/esm/schema/create-view-builder.d.ts +4 -0
  168. package/dist/esm/schema/create-view-builder.js +11 -0
  169. package/dist/esm/util/dynamic-import.d.ts +2 -0
  170. package/dist/esm/util/dynamic-import.js +27 -0
  171. package/dist/esm/util/performance-now.d.ts +1 -0
  172. package/dist/esm/util/performance-now.js +9 -0
  173. package/dist/esm/util/type-utils.d.ts +4 -15
  174. package/package.json +5 -3
@@ -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 (postgresql):
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 (postgresql):
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 (postgresql):
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 (postgresql):
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 (postgresql):
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 is the number of affected rows. You can use the
530
- * {@link QueryBuilder.returning | returning} method on supported databases
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 numAffectedRows = await db
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 (postgresql):
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 (postgresql):
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 numAffectedRows = await db
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 (postgresql):
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 postgres.
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 (postgresql):
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 (postgresql):
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 (postgresql):
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 node = this.#props.executor.transformQuery(this.#props.queryNode, this.#props.queryId);
899
- const compildQuery = this.#props.executor.compileQuery(node, this.#props.queryId);
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 (insert_query_node_js_1.InsertQueryNode.is(node)) {
902
- if (this.#props.parseContext.adapter.supportsReturning &&
903
- node.returning) {
904
- return result.rows;
905
- }
906
- else if (result.insertedPrimaryKey != null) {
907
- return [result.insertedPrimaryKey];
908
- }
909
- else {
910
- return [];
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 (update_query_node_js_1.UpdateQueryNode.is(node) || delete_query_node_js_1.DeleteQueryNode.is(node)) {
914
- if (this.#props.parseContext.adapter.supportsReturning &&
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,5 @@
1
+ export declare class UpdateResult {
2
+ #private;
3
+ constructor(numUpdatedRows: bigint);
4
+ get numUpdatedRows(): bigint;
5
+ }
@@ -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
+ });
@@ -64,6 +64,9 @@ import { ColumnNode } from '../operation-node/column-node.js';
64
64
  import { UnionNode } from '../operation-node/union-node.js';
65
65
  import { CreateViewNode } from '../operation-node/create-view-node.js';
66
66
  import { DropViewNode } from '../operation-node/drop-view-node.js';
67
+ import { GeneratedAlwaysAsNode } from '../operation-node/generated-always-as-node.js';
68
+ import { DefaultValueNode } from '../operation-node/default-value-node.js';
69
+ import { OnNode } from '../operation-node/on-node.js';
67
70
  export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
68
71
  #private;
69
72
  protected get numParameters(): number;
@@ -93,6 +96,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
93
96
  protected visitPrimitiveValueList(node: PrimitiveValueListNode): void;
94
97
  protected visitParens(node: ParensNode): void;
95
98
  protected visitJoin(node: JoinNode): void;
99
+ protected visitOn(node: OnNode): void;
96
100
  protected visitRaw(node: RawNode): void;
97
101
  protected visitOperator(node: OperatorNode): void;
98
102
  protected visitTable(node: TableNode): void;
@@ -134,6 +138,8 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
134
138
  protected visitUnion(node: UnionNode): void;
135
139
  protected visitCreateView(node: CreateViewNode): void;
136
140
  protected visitDropView(node: DropViewNode): void;
141
+ protected visitGeneratedAlwaysAs(node: GeneratedAlwaysAsNode): void;
142
+ protected visitDefaultValue(node: DefaultValueNode): void;
137
143
  protected append(str: string): void;
138
144
  protected appendValue(parameter: unknown): void;
139
145
  protected getLeftIdentifierWrapper(): string;
@@ -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
- // This is a sub query if this is not the root node.
28
- const isSubQuery = this.nodeStack.length !== 1;
29
- if (isSubQuery) {
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 (isSubQuery) {
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);
@@ -302,23 +310,27 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
302
310
  this.visitNode(node.column);
303
311
  this.append(' ');
304
312
  this.visitNode(node.dataType);
313
+ if (node.generatedAlwaysAs) {
314
+ this.append(' ');
315
+ this.visitNode(node.generatedAlwaysAs);
316
+ }
305
317
  if (node.defaultTo) {
306
- this.append(' default ');
318
+ this.append(' ');
307
319
  this.visitNode(node.defaultTo);
308
320
  }
309
321
  if (!node.nullable) {
310
322
  this.append(' not null');
311
323
  }
312
- if (node.autoIncrement) {
313
- this.append(' ');
314
- this.append(this.getAutoIncrement());
315
- }
316
324
  if (node.unique) {
317
325
  this.append(' unique');
318
326
  }
319
327
  if (node.primaryKey) {
320
328
  this.append(' primary key');
321
329
  }
330
+ if (node.autoIncrement) {
331
+ this.append(' ');
332
+ this.append(this.getAutoIncrement());
333
+ }
322
334
  if (node.references) {
323
335
  this.append(' ');
324
336
  this.visitNode(node.references);
@@ -656,6 +668,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
656
668
  this.append('materialized ');
657
669
  }
658
670
  this.append('view ');
671
+ if (node.ifNotExists) {
672
+ this.append('if not exists ');
673
+ }
659
674
  this.visitNode(node.name);
660
675
  this.append(' ');
661
676
  if (node.columns) {
@@ -679,6 +694,18 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
679
694
  }
680
695
  this.visitNode(node.name);
681
696
  }
697
+ visitGeneratedAlwaysAs(node) {
698
+ this.append('generated always as (');
699
+ this.visitNode(node.expression);
700
+ this.append(')');
701
+ if (node.stored) {
702
+ this.append(' stored');
703
+ }
704
+ }
705
+ visitDefaultValue(node) {
706
+ this.append('default ');
707
+ this.visitNode(node.defaultValue);
708
+ }
682
709
  append(str) {
683
710
  this.#sql += str;
684
711
  }
@@ -720,17 +747,17 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
720
747
  }
721
748
  }
722
749
  exports.DefaultQueryCompiler = DefaultQueryCompiler;
723
- const SELECT_MODIFIER_SQL = {
750
+ const SELECT_MODIFIER_SQL = (0, object_utils_js_1.freeze)({
724
751
  ForKeyShare: 'for key share',
725
752
  ForNoKeyUpdate: 'for no key update',
726
753
  ForUpdate: 'for update',
727
754
  ForShare: 'for share',
728
755
  NoWait: 'nowait',
729
756
  SkipLocked: 'skip locked',
730
- };
731
- const JOIN_TYPE_SQL = {
757
+ });
758
+ const JOIN_TYPE_SQL = (0, object_utils_js_1.freeze)({
732
759
  InnerJoin: 'inner join',
733
760
  LeftJoin: 'left join',
734
761
  RightJoin: 'right join',
735
762
  FullJoin: 'full join',
736
- };
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 (postgresql):
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 (postgresql):
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 (postgresql):
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 (postgresql):
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 (postgresql):
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 `number | undefined` because of the differences
125
- * between database engines. Most engines (like Mysql) return the auto incrementing
126
- * primary key (if it exists), but some (like postgres) return nothing by default.
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 postgres.
132
+ * on supported databases like PostgreSQL.
134
133
  *
135
134
  * @example
136
135
  * ```ts
137
- * const maybePrimaryKey: number | undefined = await db
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 postgres support the `returning` method:
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, InsertResultTypeTag>;
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 numAffectedRows = await db
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, DeleteResultTypeTag, TR>;
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 numAffectedRows = await db
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, UpdateResultTypeTag, TR>;
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 (postgresql):
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 (postgresql):
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 (postgresql):
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 (postgresql):
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 persons = await db.raw<Person>('select p.* from person p').execute()
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