kysely 0.9.8 → 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.
Files changed (220) hide show
  1. package/README.md +22 -16
  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 +31 -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 +10 -0
  21. package/dist/cjs/index.js +10 -0
  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/column-definition-node.d.ts +8 -6
  27. package/dist/cjs/operation-node/column-definition-node.js +4 -4
  28. package/dist/cjs/operation-node/create-schema-node.d.ts +1 -2
  29. package/dist/cjs/operation-node/create-table-node.d.ts +2 -3
  30. package/dist/cjs/operation-node/create-table-node.js +2 -2
  31. package/dist/cjs/operation-node/create-view-node.d.ts +23 -0
  32. package/dist/cjs/operation-node/create-view-node.js +25 -0
  33. package/dist/cjs/operation-node/default-value-node.d.ts +14 -0
  34. package/dist/cjs/operation-node/default-value-node.js +18 -0
  35. package/dist/cjs/operation-node/drop-index-node.d.ts +1 -2
  36. package/dist/cjs/operation-node/drop-schema-node.d.ts +2 -3
  37. package/dist/cjs/operation-node/drop-schema-node.js +3 -3
  38. package/dist/cjs/operation-node/drop-table-node.d.ts +2 -3
  39. package/dist/cjs/operation-node/drop-table-node.js +2 -2
  40. package/dist/cjs/operation-node/drop-view-node.d.ts +17 -0
  41. package/dist/cjs/operation-node/drop-view-node.js +25 -0
  42. package/dist/cjs/operation-node/generated-always-as-node.d.ts +16 -0
  43. package/dist/cjs/operation-node/generated-always-as-node.js +25 -0
  44. package/dist/cjs/operation-node/having-node.d.ts +4 -8
  45. package/dist/cjs/operation-node/having-node.js +3 -3
  46. package/dist/cjs/operation-node/join-node.d.ts +6 -9
  47. package/dist/cjs/operation-node/join-node.js +10 -7
  48. package/dist/cjs/operation-node/on-node.d.ts +14 -0
  49. package/dist/cjs/operation-node/on-node.js +28 -0
  50. package/dist/cjs/operation-node/operation-node-transformer.d.ts +10 -0
  51. package/dist/cjs/operation-node/operation-node-transformer.js +55 -11
  52. package/dist/cjs/operation-node/operation-node-visitor.d.ts +11 -0
  53. package/dist/cjs/operation-node/operation-node-visitor.js +11 -2
  54. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  55. package/dist/cjs/operation-node/query-node.d.ts +3 -3
  56. package/dist/cjs/operation-node/raw-node.d.ts +1 -1
  57. package/dist/cjs/operation-node/select-query-node.d.ts +5 -5
  58. package/dist/cjs/operation-node/select-query-node.js +1 -1
  59. package/dist/cjs/operation-node/where-node.d.ts +4 -8
  60. package/dist/cjs/operation-node/where-node.js +3 -3
  61. package/dist/cjs/parser/filter-parser.js +1 -1
  62. package/dist/cjs/parser/returning-parser.d.ts +4 -2
  63. package/dist/cjs/parser/select-parser.d.ts +2 -2
  64. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.d.ts +17 -0
  65. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.js +22 -0
  66. package/dist/cjs/plugin/immediate-value.ts/immediate-value-transformer.d.ts +13 -0
  67. package/dist/cjs/plugin/immediate-value.ts/immediate-value-transformer.js +21 -0
  68. package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +4 -0
  69. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +6 -0
  70. package/dist/cjs/query-builder/delete-result.d.ts +5 -0
  71. package/dist/cjs/query-builder/delete-result.js +13 -0
  72. package/dist/cjs/query-builder/expression-builder.d.ts +2 -2
  73. package/dist/cjs/query-builder/expression-builder.js +1 -1
  74. package/dist/cjs/query-builder/function-builder.d.ts +5 -5
  75. package/dist/cjs/query-builder/function-builder.js +3 -3
  76. package/dist/cjs/query-builder/insert-result.d.ts +27 -0
  77. package/dist/cjs/query-builder/insert-result.js +35 -0
  78. package/dist/cjs/query-builder/query-builder.d.ts +91 -81
  79. package/dist/cjs/query-builder/query-builder.js +38 -41
  80. package/dist/cjs/query-builder/update-result.d.ts +5 -0
  81. package/dist/cjs/query-builder/update-result.js +13 -0
  82. package/dist/cjs/query-compiler/compiled-query.d.ts +5 -0
  83. package/dist/cjs/query-compiler/compiled-query.js +12 -0
  84. package/dist/cjs/query-compiler/default-query-compiler.d.ts +10 -0
  85. package/dist/cjs/query-compiler/default-query-compiler.js +82 -23
  86. package/dist/cjs/query-compiler/query-compiler.d.ts +3 -1
  87. package/dist/cjs/query-creator.d.ts +36 -26
  88. package/dist/cjs/query-creator.js +25 -17
  89. package/dist/cjs/raw-builder/raw-builder.d.ts +1 -1
  90. package/dist/cjs/schema/alter-table-builder.d.ts +6 -2
  91. package/dist/cjs/schema/alter-table-builder.js +28 -4
  92. package/dist/cjs/schema/column-definition-builder.d.ts +43 -2
  93. package/dist/cjs/schema/column-definition-builder.js +23 -6
  94. package/dist/cjs/schema/create-schema-builder.js +1 -1
  95. package/dist/cjs/schema/create-table-builder.d.ts +7 -8
  96. package/dist/cjs/schema/create-table-builder.js +8 -9
  97. package/dist/cjs/schema/create-view-builder.d.ts +28 -0
  98. package/dist/cjs/schema/create-view-builder.js +84 -0
  99. package/dist/cjs/schema/drop-index-builder.js +1 -1
  100. package/dist/cjs/schema/drop-schema-builder.js +3 -1
  101. package/dist/cjs/schema/drop-table-builder.js +3 -1
  102. package/dist/cjs/schema/drop-view-builder.d.ts +20 -0
  103. package/dist/cjs/schema/drop-view-builder.js +39 -0
  104. package/dist/cjs/schema/schema.d.ts +30 -3
  105. package/dist/cjs/schema/schema.js +44 -3
  106. package/dist/cjs/util/dynamic-import.d.ts +2 -0
  107. package/dist/cjs/util/dynamic-import.js +32 -0
  108. package/dist/cjs/util/performance-now.d.ts +1 -0
  109. package/dist/cjs/util/performance-now.js +13 -0
  110. package/dist/cjs/util/type-utils.d.ts +4 -15
  111. package/dist/esm/dialect/dialect-adapter.d.ts +3 -2
  112. package/dist/esm/dialect/mysql/mysql-adapter.js +1 -1
  113. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +3 -3
  114. package/dist/esm/dialect/mysql/mysql-driver.js +26 -33
  115. package/dist/esm/dialect/postgres/postgres-dialect.d.ts +2 -2
  116. package/dist/esm/dialect/postgres/postgres-driver.js +8 -19
  117. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +7 -0
  118. package/dist/esm/dialect/sqlite/sqlite-adapter.js +14 -0
  119. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +64 -0
  120. package/dist/esm/dialect/sqlite/sqlite-dialect.js +29 -0
  121. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +14 -0
  122. package/dist/esm/dialect/sqlite/sqlite-driver.js +112 -0
  123. package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +7 -0
  124. package/dist/esm/dialect/sqlite/sqlite-introspector.js +27 -0
  125. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +7 -0
  126. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +15 -0
  127. package/dist/esm/driver/database-connection.d.ts +2 -2
  128. package/dist/esm/driver/runtime-driver.js +3 -4
  129. package/dist/esm/index.d.ts +10 -0
  130. package/dist/esm/index.js +10 -0
  131. package/dist/esm/kysely.d.ts +6 -4
  132. package/dist/esm/kysely.js +6 -4
  133. package/dist/esm/migration/migration.d.ts +1 -1
  134. package/dist/esm/migration/migration.js +3 -3
  135. package/dist/esm/operation-node/column-definition-node.d.ts +8 -6
  136. package/dist/esm/operation-node/column-definition-node.js +4 -4
  137. package/dist/esm/operation-node/create-schema-node.d.ts +1 -2
  138. package/dist/esm/operation-node/create-table-node.d.ts +2 -3
  139. package/dist/esm/operation-node/create-table-node.js +2 -2
  140. package/dist/esm/operation-node/create-view-node.d.ts +23 -0
  141. package/dist/esm/operation-node/create-view-node.js +22 -0
  142. package/dist/esm/operation-node/default-value-node.d.ts +14 -0
  143. package/dist/esm/operation-node/default-value-node.js +15 -0
  144. package/dist/esm/operation-node/drop-index-node.d.ts +1 -2
  145. package/dist/esm/operation-node/drop-schema-node.d.ts +2 -3
  146. package/dist/esm/operation-node/drop-schema-node.js +3 -3
  147. package/dist/esm/operation-node/drop-table-node.d.ts +2 -3
  148. package/dist/esm/operation-node/drop-table-node.js +2 -2
  149. package/dist/esm/operation-node/drop-view-node.d.ts +17 -0
  150. package/dist/esm/operation-node/drop-view-node.js +22 -0
  151. package/dist/esm/operation-node/generated-always-as-node.d.ts +16 -0
  152. package/dist/esm/operation-node/generated-always-as-node.js +22 -0
  153. package/dist/esm/operation-node/having-node.d.ts +4 -8
  154. package/dist/esm/operation-node/having-node.js +3 -3
  155. package/dist/esm/operation-node/join-node.d.ts +6 -9
  156. package/dist/esm/operation-node/join-node.js +10 -7
  157. package/dist/esm/operation-node/on-node.d.ts +14 -0
  158. package/dist/esm/operation-node/on-node.js +25 -0
  159. package/dist/esm/operation-node/operation-node-transformer.d.ts +10 -0
  160. package/dist/esm/operation-node/operation-node-transformer.js +55 -11
  161. package/dist/esm/operation-node/operation-node-visitor.d.ts +11 -0
  162. package/dist/esm/operation-node/operation-node-visitor.js +11 -2
  163. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  164. package/dist/esm/operation-node/query-node.d.ts +3 -3
  165. package/dist/esm/operation-node/raw-node.d.ts +1 -1
  166. package/dist/esm/operation-node/select-query-node.d.ts +5 -5
  167. package/dist/esm/operation-node/select-query-node.js +1 -1
  168. package/dist/esm/operation-node/where-node.d.ts +4 -8
  169. package/dist/esm/operation-node/where-node.js +3 -3
  170. package/dist/esm/parser/filter-parser.js +1 -1
  171. package/dist/esm/parser/returning-parser.d.ts +4 -2
  172. package/dist/esm/parser/select-parser.d.ts +2 -2
  173. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.d.ts +17 -0
  174. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.js +18 -0
  175. package/dist/esm/plugin/immediate-value.ts/immediate-value-transformer.d.ts +13 -0
  176. package/dist/esm/plugin/immediate-value.ts/immediate-value-transformer.js +17 -0
  177. package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +4 -0
  178. package/dist/esm/plugin/with-schema/with-schema-transformer.js +6 -0
  179. package/dist/esm/query-builder/delete-result.d.ts +5 -0
  180. package/dist/esm/query-builder/delete-result.js +9 -0
  181. package/dist/esm/query-builder/expression-builder.d.ts +2 -2
  182. package/dist/esm/query-builder/expression-builder.js +1 -1
  183. package/dist/esm/query-builder/function-builder.d.ts +5 -5
  184. package/dist/esm/query-builder/function-builder.js +3 -3
  185. package/dist/esm/query-builder/insert-result.d.ts +27 -0
  186. package/dist/esm/query-builder/insert-result.js +31 -0
  187. package/dist/esm/query-builder/query-builder.d.ts +91 -81
  188. package/dist/esm/query-builder/query-builder.js +38 -41
  189. package/dist/esm/query-builder/update-result.d.ts +5 -0
  190. package/dist/esm/query-builder/update-result.js +9 -0
  191. package/dist/esm/query-compiler/compiled-query.d.ts +5 -0
  192. package/dist/esm/query-compiler/compiled-query.js +11 -1
  193. package/dist/esm/query-compiler/default-query-compiler.d.ts +10 -0
  194. package/dist/esm/query-compiler/default-query-compiler.js +82 -23
  195. package/dist/esm/query-compiler/query-compiler.d.ts +3 -1
  196. package/dist/esm/query-creator.d.ts +36 -26
  197. package/dist/esm/query-creator.js +25 -17
  198. package/dist/esm/raw-builder/raw-builder.d.ts +1 -1
  199. package/dist/esm/schema/alter-table-builder.d.ts +6 -2
  200. package/dist/esm/schema/alter-table-builder.js +28 -4
  201. package/dist/esm/schema/column-definition-builder.d.ts +43 -2
  202. package/dist/esm/schema/column-definition-builder.js +23 -6
  203. package/dist/esm/schema/create-schema-builder.js +1 -1
  204. package/dist/esm/schema/create-table-builder.d.ts +7 -8
  205. package/dist/esm/schema/create-table-builder.js +8 -9
  206. package/dist/esm/schema/create-view-builder.d.ts +28 -0
  207. package/dist/esm/schema/create-view-builder.js +80 -0
  208. package/dist/esm/schema/drop-index-builder.js +1 -1
  209. package/dist/esm/schema/drop-schema-builder.js +3 -1
  210. package/dist/esm/schema/drop-table-builder.js +3 -1
  211. package/dist/esm/schema/drop-view-builder.d.ts +20 -0
  212. package/dist/esm/schema/drop-view-builder.js +35 -0
  213. package/dist/esm/schema/schema.d.ts +30 -3
  214. package/dist/esm/schema/schema.js +44 -3
  215. package/dist/esm/util/dynamic-import.d.ts +2 -0
  216. package/dist/esm/util/dynamic-import.js +27 -0
  217. package/dist/esm/util/performance-now.d.ts +1 -0
  218. package/dist/esm/util/performance-now.js +9 -0
  219. package/dist/esm/util/type-utils.d.ts +4 -15
  220. package/package.json +5 -3
@@ -18,6 +18,9 @@ import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
18
18
  import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
19
19
  import { parseGroupBy } from '../parser/group-by-parser.js';
20
20
  import { parseUnion } from '../parser/union-parser.js';
21
+ import { InsertResult } from './insert-result.js';
22
+ import { UpdateResult } from './update-result.js';
23
+ import { DeleteResult } from './delete-result.js';
21
24
  /**
22
25
  * The main query builder class.
23
26
  *
@@ -62,7 +65,7 @@ export class QueryBuilder {
62
65
  * .whereRef('person.first_name', '=', 'pet.name')
63
66
  * ```
64
67
  *
65
- * The generated SQL (postgresql):
68
+ * The generated SQL (PostgreSQL):
66
69
  *
67
70
  * ```sql
68
71
  * select * from "person", "pet" where "person"."first_name" = "pet"."name"
@@ -85,7 +88,7 @@ export class QueryBuilder {
85
88
  * .execute()
86
89
  * ```
87
90
  *
88
- * The generated SQL (postgresql):
91
+ * The generated SQL (PostgreSQL):
89
92
  *
90
93
  * ```sql
91
94
  * select "person".*, (
@@ -144,7 +147,7 @@ export class QueryBuilder {
144
147
  * .execute()
145
148
  * ```
146
149
  *
147
- * The generated SQL (postgresql):
150
+ * The generated SQL (PostgreSQL):
148
151
  *
149
152
  * ```sql
150
153
  * select * from "person"
@@ -170,7 +173,7 @@ export class QueryBuilder {
170
173
  * )
171
174
  * ```
172
175
  *
173
- * The generated SQL (postgresql):
176
+ * The generated SQL (PostgreSQL):
174
177
  *
175
178
  * ```sql
176
179
  * select * from "person"
@@ -324,7 +327,7 @@ export class QueryBuilder {
324
327
  * .execute()
325
328
  * ```
326
329
  *
327
- * The generated SQL (postgresql):
330
+ * The generated SQL (PostgreSQL):
328
331
  *
329
332
  * ```sql
330
333
  * select distinct "first_name" from "person"
@@ -523,15 +526,15 @@ export class QueryBuilder {
523
526
  * values to update. In addition to the column's type, the values can be `raw`
524
527
  * instances or select queries.
525
528
  *
526
- * The return value is the number of affected rows. You can use the
527
- * {@link QueryBuilder.returning | returning} method on supported databases
528
- * to get out the updated rows.
529
+ * The return value of an update query is an instance of {@link UpdateResult}.
530
+ * You can use the {@link QueryBuilder.returning | returning} method on
531
+ * supported databases to get out the updated rows.
529
532
  *
530
533
  * @example
531
534
  * Update a row in `person` table:
532
535
  *
533
536
  * ```ts
534
- * const numAffectedRows = await db
537
+ * const result = await db
535
538
  * .updateTable('person')
536
539
  * .set({
537
540
  * first_name: 'Jennifer',
@@ -539,9 +542,11 @@ export class QueryBuilder {
539
542
  * })
540
543
  * .where('id', '=', 1)
541
544
  * .executeTakeFirst()
545
+ *
546
+ * console.log(result.numUpdatedRows)
542
547
  * ```
543
548
  *
544
- * The generated SQL (postgresql):
549
+ * The generated SQL (PostgreSQL):
545
550
  *
546
551
  * ```sql
547
552
  * update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3
@@ -566,7 +571,7 @@ export class QueryBuilder {
566
571
  * row.id
567
572
  * ```
568
573
  *
569
- * The generated SQL (postgresql):
574
+ * The generated SQL (PostgreSQL):
570
575
  *
571
576
  * ```sql
572
577
  * update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3 returning "id"
@@ -577,7 +582,7 @@ export class QueryBuilder {
577
582
  * select queries:
578
583
  *
579
584
  * ```ts
580
- * const numAffectedRows = await db
585
+ * const result = await db
581
586
  * .updateTable('person')
582
587
  * .set({
583
588
  * first_name: 'Jennifer',
@@ -586,9 +591,11 @@ export class QueryBuilder {
586
591
  * })
587
592
  * .where('id', '=', 1)
588
593
  * .executeTakeFirst()
594
+ *
595
+ * console.log(result.numUpdatedRows)
589
596
  * ```
590
597
  *
591
- * The generated SQL (postgresql):
598
+ * The generated SQL (PostgreSQL):
592
599
  *
593
600
  * ```sql
594
601
  * update "person" set
@@ -614,7 +621,7 @@ export class QueryBuilder {
614
621
  }
615
622
  /**
616
623
  * Adds a `returning *` to an insert/update/delete query on databases
617
- * that support `returning` such as postgres.
624
+ * that support `returning` such as PostgreSQL.
618
625
  */
619
626
  returningAll() {
620
627
  assertCanHaveReturningClause(this.#props.queryNode);
@@ -642,7 +649,7 @@ export class QueryBuilder {
642
649
  * .execute()
643
650
  * ```
644
651
  *
645
- * The generated SQL (postgresql):
652
+ * The generated SQL (PostgreSQL):
646
653
  *
647
654
  * ```sql
648
655
  * select "person"."first_name" as "fn"
@@ -669,7 +676,7 @@ export class QueryBuilder {
669
676
  * .execute()
670
677
  * ```
671
678
  *
672
- * The generated SQL (postgresql):
679
+ * The generated SQL (PostgreSQL):
673
680
  *
674
681
  * ```sql
675
682
  * select *
@@ -701,7 +708,7 @@ export class QueryBuilder {
701
708
  * someQuery('fn')
702
709
  * ```
703
710
  *
704
- * The generated SQL (postgresql):
711
+ * The generated SQL (PostgreSQL):
705
712
  *
706
713
  * ```sql
707
714
  * select "person"."first_name" as "fn"
@@ -892,32 +899,22 @@ export class QueryBuilder {
892
899
  * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
893
900
  */
894
901
  async execute() {
895
- const node = this.#props.executor.transformQuery(this.#props.queryNode, this.#props.queryId);
896
- const compildQuery = this.#props.executor.compileQuery(node, this.#props.queryId);
902
+ const compildQuery = this.compile();
903
+ const query = compildQuery.query;
897
904
  const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
898
- if (InsertQueryNode.is(node)) {
899
- if (this.#props.parseContext.adapter.supportsReturning &&
900
- node.returning) {
901
- return result.rows;
902
- }
903
- else if (result.insertedPrimaryKey != null) {
904
- return [result.insertedPrimaryKey];
905
- }
906
- else {
907
- return [];
908
- }
905
+ if (this.#props.parseContext.adapter.supportsReturning &&
906
+ QueryNode.isMutating(query) &&
907
+ query.returning) {
908
+ return result.rows;
909
+ }
910
+ else if (InsertQueryNode.is(query)) {
911
+ return [new InsertResult(result.insertId)];
912
+ }
913
+ else if (UpdateQueryNode.is(query)) {
914
+ return [new UpdateResult(result.numUpdatedOrDeletedRows)];
909
915
  }
910
- else if (UpdateQueryNode.is(node) || DeleteQueryNode.is(node)) {
911
- if (this.#props.parseContext.adapter.supportsReturning &&
912
- node.returning) {
913
- return result.rows;
914
- }
915
- else if (result.numUpdatedOrDeletedRows != null) {
916
- return [result.numUpdatedOrDeletedRows];
917
- }
918
- else {
919
- return [];
920
- }
916
+ else if (DeleteQueryNode.is(query)) {
917
+ return [new DeleteResult(result.numUpdatedOrDeletedRows)];
921
918
  }
922
919
  else {
923
920
  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,9 @@
1
+ export class UpdateResult {
2
+ #numUpdatedRows;
3
+ constructor(numUpdatedRows) {
4
+ this.#numUpdatedRows = numUpdatedRows;
5
+ }
6
+ get numUpdatedRows() {
7
+ return this.#numUpdatedRows;
8
+ }
9
+ }
@@ -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 +1,11 @@
1
- export {};
1
+ import { RawNode } from '../operation-node/raw-node.js';
2
+ import { freeze } from '../util/object-utils.js';
3
+ export const CompiledQuery = freeze({
4
+ raw(sql) {
5
+ return freeze({
6
+ sql,
7
+ query: RawNode.createWithSql(sql),
8
+ parameters: freeze([]),
9
+ });
10
+ },
11
+ });
@@ -62,6 +62,11 @@ import { ModifyColumnNode } from '../operation-node/modify-column-node.js';
62
62
  import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
63
63
  import { ColumnNode } from '../operation-node/column-node.js';
64
64
  import { UnionNode } from '../operation-node/union-node.js';
65
+ import { CreateViewNode } from '../operation-node/create-view-node.js';
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';
65
70
  export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
66
71
  #private;
67
72
  protected get numParameters(): number;
@@ -91,6 +96,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
91
96
  protected visitPrimitiveValueList(node: PrimitiveValueListNode): void;
92
97
  protected visitParens(node: ParensNode): void;
93
98
  protected visitJoin(node: JoinNode): void;
99
+ protected visitOn(node: OnNode): void;
94
100
  protected visitRaw(node: RawNode): void;
95
101
  protected visitOperator(node: OperatorNode): void;
96
102
  protected visitTable(node: TableNode): void;
@@ -130,6 +136,10 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
130
136
  protected visitAddConstraint(node: AddConstraintNode): void;
131
137
  protected visitDropConstraint(node: DropConstraintNode): void;
132
138
  protected visitUnion(node: UnionNode): void;
139
+ protected visitCreateView(node: CreateViewNode): void;
140
+ protected visitDropView(node: DropViewNode): void;
141
+ protected visitGeneratedAlwaysAs(node: GeneratedAlwaysAsNode): void;
142
+ protected visitDefaultValue(node: DefaultValueNode): void;
133
143
  protected append(str: string): void;
134
144
  protected appendValue(parameter: unknown): void;
135
145
  protected getLeftIdentifierWrapper(): string;
@@ -2,6 +2,8 @@ import { OperationNodeVisitor } from '../operation-node/operation-node-visitor.j
2
2
  import { QueryNode } from '../operation-node/query-node.js';
3
3
  import { RawNode } from '../operation-node/raw-node.js';
4
4
  import { getLast, freeze, isString, isNumber, isBoolean, isNull, isDate, isBigInt, } from '../util/object-utils.js';
5
+ import { UnionNode } from '../operation-node/union-node.js';
6
+ import { CreateViewNode } from '../operation-node/create-view-node.js';
5
7
  export class DefaultQueryCompiler extends OperationNodeVisitor {
6
8
  #sql = '';
7
9
  #parameters = [];
@@ -13,6 +15,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
13
15
  this.#parameters = [];
14
16
  this.visitNode(node);
15
17
  return freeze({
18
+ query: node,
16
19
  sql: this.getSql(),
17
20
  parameters: [...this.#parameters],
18
21
  });
@@ -21,9 +24,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
21
24
  return this.#sql;
22
25
  }
23
26
  visitSelectQuery(node) {
24
- // This is a sub query if this is not the root node.
25
- const isSubQuery = this.nodeStack.length !== 1;
26
- if (isSubQuery) {
27
+ const wrapInParens = this.nodeStack.length !== 1 &&
28
+ !CreateViewNode.is(this.parentNode) &&
29
+ !UnionNode.is(this.parentNode);
30
+ if (wrapInParens) {
27
31
  this.append('(');
28
32
  }
29
33
  if (node.with) {
@@ -35,7 +39,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
35
39
  this.compileDistinctOn(node.distinctOnSelections);
36
40
  this.append(' ');
37
41
  }
38
- if (node.isDistinct) {
42
+ if (node.distinct) {
39
43
  this.append('distinct');
40
44
  this.append(' ');
41
45
  }
@@ -82,7 +86,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
82
86
  this.append(SELECT_MODIFIER_SQL[modifier]);
83
87
  });
84
88
  }
85
- if (isSubQuery) {
89
+ if (wrapInParens) {
86
90
  this.append(')');
87
91
  }
88
92
  }
@@ -262,11 +266,15 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
262
266
  this.append(JOIN_TYPE_SQL[node.joinType]);
263
267
  this.append(' ');
264
268
  this.visitNode(node.table);
265
- this.append(' on ');
266
269
  if (node.on) {
270
+ this.append(' ');
267
271
  this.visitNode(node.on);
268
272
  }
269
273
  }
274
+ visitOn(node) {
275
+ this.append('on ');
276
+ this.visitNode(node.on);
277
+ }
270
278
  visitRaw(node) {
271
279
  node.sqlFragments.forEach((sql, i) => {
272
280
  this.append(sql);
@@ -287,7 +295,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
287
295
  }
288
296
  visitCreateTable(node) {
289
297
  this.append('create table ');
290
- if (node.modifier === 'IfNotExists') {
298
+ if (node.ifNotExists) {
291
299
  this.append('if not exists ');
292
300
  }
293
301
  this.visitNode(node.table);
@@ -299,23 +307,27 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
299
307
  this.visitNode(node.column);
300
308
  this.append(' ');
301
309
  this.visitNode(node.dataType);
310
+ if (node.generatedAlwaysAs) {
311
+ this.append(' ');
312
+ this.visitNode(node.generatedAlwaysAs);
313
+ }
302
314
  if (node.defaultTo) {
303
- this.append(' default ');
315
+ this.append(' ');
304
316
  this.visitNode(node.defaultTo);
305
317
  }
306
- if (!node.isNullable) {
318
+ if (!node.nullable) {
307
319
  this.append(' not null');
308
320
  }
309
- if (node.isAutoIncrementing) {
310
- this.append(' ');
311
- this.append(this.getAutoIncrement());
312
- }
313
- if (node.isUnique) {
321
+ if (node.unique) {
314
322
  this.append(' unique');
315
323
  }
316
- if (node.isPrimaryKey) {
324
+ if (node.primaryKey) {
317
325
  this.append(' primary key');
318
326
  }
327
+ if (node.autoIncrement) {
328
+ this.append(' ');
329
+ this.append(this.getAutoIncrement());
330
+ }
319
331
  if (node.references) {
320
332
  this.append(' ');
321
333
  this.visitNode(node.references);
@@ -345,7 +357,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
345
357
  }
346
358
  visitDropTable(node) {
347
359
  this.append('drop table ');
348
- if (node.modifier === 'IfExists') {
360
+ if (node.ifExists) {
349
361
  this.append('if exists ');
350
362
  }
351
363
  this.visitNode(node.table);
@@ -467,7 +479,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
467
479
  }
468
480
  visitDropIndex(node) {
469
481
  this.append('drop index ');
470
- if (node.modifier === 'IfExists') {
482
+ if (node.ifExists) {
471
483
  this.append('if exists ');
472
484
  }
473
485
  this.visitNode(node.name);
@@ -478,14 +490,14 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
478
490
  }
479
491
  visitCreateSchema(node) {
480
492
  this.append('create schema ');
481
- if (node.modifier === 'IfNotExists') {
493
+ if (node.ifNotExists) {
482
494
  this.append('if not exists ');
483
495
  }
484
496
  this.visitNode(node.schema);
485
497
  }
486
498
  visitDropSchema(node) {
487
499
  this.append('drop schema ');
488
- if (node.modifier === 'IfExists') {
500
+ if (node.ifExists) {
489
501
  this.append('if exists ');
490
502
  }
491
503
  this.visitNode(node.schema);
@@ -644,6 +656,53 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
644
656
  }
645
657
  this.visitNode(node.union);
646
658
  }
659
+ visitCreateView(node) {
660
+ this.append('create ');
661
+ if (node.orReplace) {
662
+ this.append('or replace ');
663
+ }
664
+ if (node.materialized) {
665
+ this.append('materialized ');
666
+ }
667
+ this.append('view ');
668
+ if (node.ifNotExists) {
669
+ this.append('if not exists ');
670
+ }
671
+ this.visitNode(node.name);
672
+ this.append(' ');
673
+ if (node.columns) {
674
+ this.append('(');
675
+ this.compileList(node.columns);
676
+ this.append(') ');
677
+ }
678
+ if (node.as) {
679
+ this.append('as ');
680
+ this.visitNode(node.as);
681
+ }
682
+ }
683
+ visitDropView(node) {
684
+ this.append('drop ');
685
+ if (node.materialized) {
686
+ this.append('materialized ');
687
+ }
688
+ this.append('view ');
689
+ if (node.ifExists) {
690
+ this.append('if exists ');
691
+ }
692
+ this.visitNode(node.name);
693
+ }
694
+ visitGeneratedAlwaysAs(node) {
695
+ this.append('generated always as (');
696
+ this.visitNode(node.expression);
697
+ this.append(')');
698
+ if (node.stored) {
699
+ this.append(' stored');
700
+ }
701
+ }
702
+ visitDefaultValue(node) {
703
+ this.append('default ');
704
+ this.visitNode(node.defaultValue);
705
+ }
647
706
  append(str) {
648
707
  this.#sql += str;
649
708
  }
@@ -684,17 +743,17 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
684
743
  }
685
744
  }
686
745
  }
687
- const SELECT_MODIFIER_SQL = {
746
+ const SELECT_MODIFIER_SQL = freeze({
688
747
  ForKeyShare: 'for key share',
689
748
  ForNoKeyUpdate: 'for no key update',
690
749
  ForUpdate: 'for update',
691
750
  ForShare: 'for share',
692
751
  NoWait: 'nowait',
693
752
  SkipLocked: 'skip locked',
694
- };
695
- const JOIN_TYPE_SQL = {
753
+ });
754
+ const JOIN_TYPE_SQL = freeze({
696
755
  InnerJoin: 'inner join',
697
756
  LeftJoin: 'left join',
698
757
  RightJoin: 'right join',
699
758
  FullJoin: 'full join',
700
- };
759
+ });
@@ -2,13 +2,15 @@ import { AlterTableNode } from '../operation-node/alter-table-node.js';
2
2
  import { CreateIndexNode } from '../operation-node/create-index-node.js';
3
3
  import { CreateSchemaNode } from '../operation-node/create-schema-node.js';
4
4
  import { CreateTableNode } from '../operation-node/create-table-node.js';
5
+ import { CreateViewNode } from '../operation-node/create-view-node.js';
5
6
  import { DropIndexNode } from '../operation-node/drop-index-node.js';
6
7
  import { DropSchemaNode } from '../operation-node/drop-schema-node.js';
7
8
  import { DropTableNode } from '../operation-node/drop-table-node.js';
9
+ import { DropViewNode } from '../operation-node/drop-view-node.js';
8
10
  import { QueryNode } from '../operation-node/query-node.js';
9
11
  import { RawNode } from '../operation-node/raw-node.js';
10
12
  import { CompiledQuery } from './compiled-query.js';
11
- export declare type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | AlterTableNode | DropTableNode | DropIndexNode | CreateSchemaNode | DropSchemaNode | RawNode;
13
+ export declare type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode;
12
14
  /**
13
15
  * a `QueryCompiler` compiles a query expressed as a tree of `OperationNodes` into SQL.
14
16
  */