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
package/dist/esm/index.js CHANGED
@@ -3,6 +3,9 @@ export * from './query-creator.js';
3
3
  export * from './query-builder/query-builder.js';
4
4
  export * from './query-builder/join-builder.js';
5
5
  export * from './query-builder/expression-builder.js';
6
+ export * from './query-builder/insert-result.js';
7
+ export * from './query-builder/delete-result.js';
8
+ export * from './query-builder/update-result.js';
6
9
  export * from './raw-builder/raw-builder.js';
7
10
  export * from './query-executor/query-executor.js';
8
11
  export * from './query-executor/default-query-executor.js';
@@ -37,41 +40,19 @@ export * from './dialect/mysql/mysql-query-compiler.js';
37
40
  export * from './dialect/mysql/mysql-driver.js';
38
41
  export * from './dialect/mysql/mysql-introspector.js';
39
42
  export * from './dialect/mysql/mysql-adapter.js';
43
+ export * from './dialect/sqlite/sqlite-dialect.js';
44
+ export * from './dialect/sqlite/sqlite-query-compiler.js';
45
+ export * from './dialect/sqlite/sqlite-driver.js';
46
+ export * from './dialect/sqlite/sqlite-introspector.js';
47
+ export * from './dialect/sqlite/sqlite-adapter.js';
40
48
  export * from './query-compiler/default-query-compiler.js';
41
49
  export * from './query-compiler/query-compiler.js';
42
50
  export * from './migration/migration.js';
43
51
  export * from './dialect/dialect.js';
44
52
  export * from './dialect/dialect-adapter.js';
45
53
  export * from './dialect/dialect-adapter-base.js';
46
- export * from './operation-node/operation-node-transformer.js';
47
- export * from './operation-node/operation-node-visitor.js';
48
54
  export * from './plugin/kysely-plugin.js';
49
55
  export * from './plugin/camel-case/camel-case-plugin.js';
50
- export * from './operation-node/operation-node-transformer.js';
51
- export * from './operation-node/operation-node-visitor.js';
52
- export * from './operation-node/operator-node.js';
53
- export * from './operation-node/or-node.js';
54
- export * from './operation-node/order-by-item-node.js';
55
- export * from './operation-node/order-by-node.js';
56
- export * from './operation-node/parens-node.js';
57
- export * from './operation-node/primary-constraint-node.js';
58
- export * from './operation-node/primitive-value-list-node.js';
59
- export * from './operation-node/query-node.js';
60
- export * from './operation-node/raw-node.js';
61
- export * from './operation-node/reference-node.js';
62
- export * from './operation-node/references-node.js';
63
- export * from './operation-node/rename-column-node.js';
64
- export * from './operation-node/returning-node.js';
65
- export * from './operation-node/select-all-node.js';
66
- export * from './operation-node/select-query-node.js';
67
- export * from './operation-node/selection-node.js';
68
- export * from './operation-node/table-node.js';
69
- export * from './operation-node/unique-constraint-node.js';
70
- export * from './operation-node/update-query-node.js';
71
- export * from './operation-node/value-list-node.js';
72
- export * from './operation-node/value-node.js';
73
- export * from './operation-node/where-node.js';
74
- export * from './operation-node/with-node.js';
75
56
  export * from './operation-node/add-column-node.js';
76
57
  export * from './operation-node/add-constraint-node.js';
77
58
  export * from './operation-node/alias-node.js';
@@ -87,16 +68,20 @@ export * from './operation-node/constraint-node.js';
87
68
  export * from './operation-node/create-index-node.js';
88
69
  export * from './operation-node/create-schema-node.js';
89
70
  export * from './operation-node/create-table-node.js';
71
+ export * from './operation-node/create-view-node.js';
90
72
  export * from './operation-node/data-type-node.js';
73
+ export * from './operation-node/default-value-node.js';
91
74
  export * from './operation-node/delete-query-node.js';
92
75
  export * from './operation-node/drop-column-node.js';
93
76
  export * from './operation-node/drop-constraint-node.js';
94
77
  export * from './operation-node/drop-index-node.js';
95
78
  export * from './operation-node/drop-schema-node.js';
96
79
  export * from './operation-node/drop-table-node.js';
80
+ export * from './operation-node/drop-view-node.js';
97
81
  export * from './operation-node/filter-node.js';
98
82
  export * from './operation-node/foreign-key-constraint-node.js';
99
83
  export * from './operation-node/from-node.js';
84
+ export * from './operation-node/generated-always-as-node.js';
100
85
  export * from './operation-node/group-by-item-node.js';
101
86
  export * from './operation-node/group-by-node.js';
102
87
  export * from './operation-node/having-node.js';
@@ -105,10 +90,40 @@ export * from './operation-node/insert-query-node.js';
105
90
  export * from './operation-node/join-node.js';
106
91
  export * from './operation-node/limit-node.js';
107
92
  export * from './operation-node/list-node.js';
93
+ export * from './operation-node/modify-column-node.js';
108
94
  export * from './operation-node/offset-node.js';
109
- export * from './operation-node//on-conflict-node.js';
110
- export * from './operation-node/operation-node.js';
95
+ export * from './operation-node/on-conflict-node.js';
96
+ export * from './operation-node/on-duplicate-key-node.js';
97
+ export * from './operation-node/on-node.js';
111
98
  export * from './operation-node/operation-node-source.js';
99
+ export * from './operation-node/operation-node-transformer.js';
100
+ export * from './operation-node/operation-node-utils.js';
101
+ export * from './operation-node/operation-node-visitor.js';
102
+ export * from './operation-node/operation-node.js';
103
+ export * from './operation-node/operator-node.js';
104
+ export * from './operation-node/or-node.js';
105
+ export * from './operation-node/order-by-item-node.js';
112
106
  export * from './operation-node/order-by-node.js';
107
+ export * from './operation-node/parens-node.js';
108
+ export * from './operation-node/primary-constraint-node.js';
109
+ export * from './operation-node/primitive-value-list-node.js';
110
+ export * from './operation-node/query-node.js';
111
+ export * from './operation-node/raw-node.js';
112
+ export * from './operation-node/reference-node.js';
113
+ export * from './operation-node/references-node.js';
114
+ export * from './operation-node/rename-column-node.js';
115
+ export * from './operation-node/returning-node.js';
116
+ export * from './operation-node/select-all-node.js';
117
+ export * from './operation-node/select-query-node.js';
118
+ export * from './operation-node/select-query-node.js';
119
+ export * from './operation-node/selection-node.js';
120
+ export * from './operation-node/table-node.js';
121
+ export * from './operation-node/union-node.js';
122
+ export * from './operation-node/unique-constraint-node.js';
123
+ export * from './operation-node/update-query-node.js';
124
+ export * from './operation-node/value-list-node.js';
125
+ export * from './operation-node/value-node.js';
126
+ export * from './operation-node/where-node.js';
127
+ export * from './operation-node/with-node.js';
113
128
  export * from './introspection/database-introspector.js';
114
129
  export * from './util/compilable.js';
@@ -116,7 +116,7 @@ export declare class Kysely<DB> extends QueryCreator<DB> {
116
116
  * .execute()
117
117
  * ```
118
118
  *
119
- * The generated SQL (postgresql):
119
+ * The generated SQL (PostgreSQL):
120
120
  *
121
121
  * ```sql
122
122
  * select "person"."id", count("pet"."id") as "pet_count"
@@ -146,17 +146,19 @@ export declare class Kysely<DB> extends QueryCreator<DB> {
146
146
  * const catto = await db.transaction().execute(async (trx) => {
147
147
  * const jennifer = await trx.insertInto('person')
148
148
  * .values({
149
+ * id: db.generated,
149
150
  * first_name: 'Jennifer',
150
- * last_name: 'Aniston',
151
+ * last_name: 'Aniston',
151
152
  * })
152
153
  * .returning('id')
153
- * .executeTakeFirst()
154
+ * .executeTakeFirstOrThrow()
154
155
  *
155
156
  * await someFunction(trx, jennifer)
156
157
  *
157
158
  * return await trx.insertInto('pet')
158
159
  * .values({
159
- * user_id: jennifer!.id,
160
+ * id: db.generated,
161
+ * user_id: jennifer.id,
160
162
  * name: 'Catto',
161
163
  * species: 'cat'
162
164
  * })
@@ -151,7 +151,7 @@ export class Kysely extends QueryCreator {
151
151
  * .execute()
152
152
  * ```
153
153
  *
154
- * The generated SQL (postgresql):
154
+ * The generated SQL (PostgreSQL):
155
155
  *
156
156
  * ```sql
157
157
  * select "person"."id", count("pet"."id") as "pet_count"
@@ -183,17 +183,19 @@ export class Kysely extends QueryCreator {
183
183
  * const catto = await db.transaction().execute(async (trx) => {
184
184
  * const jennifer = await trx.insertInto('person')
185
185
  * .values({
186
+ * id: db.generated,
186
187
  * first_name: 'Jennifer',
187
- * last_name: 'Aniston',
188
+ * last_name: 'Aniston',
188
189
  * })
189
190
  * .returning('id')
190
- * .executeTakeFirst()
191
+ * .executeTakeFirstOrThrow()
191
192
  *
192
193
  * await someFunction(trx, jennifer)
193
194
  *
194
195
  * return await trx.insertInto('pet')
195
196
  * .values({
196
- * user_id: jennifer!.id,
197
+ * id: db.generated,
198
+ * user_id: jennifer.id,
197
199
  * name: 'Catto',
198
200
  * species: 'cat'
199
201
  * })
@@ -62,5 +62,5 @@ export declare class MigrationModule {
62
62
  }
63
63
  export interface Migration {
64
64
  up(db: Kysely<any>): Promise<void>;
65
- down(db: Kysely<any>): Promise<void>;
65
+ down?(db: Kysely<any>): Promise<void>;
66
66
  }
@@ -57,7 +57,7 @@ async function ensureMigrationTableExists(db) {
57
57
  .execute();
58
58
  }
59
59
  catch (error) {
60
- // At least on postgres, `if not exists` doesn't guarantee the `create table`
60
+ // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table`
61
61
  // query doesn't throw if the table already exits. That's why we check if
62
62
  // the table exist here and ignore the error if it does.
63
63
  if (!(await doesTableExists(db, MIGRATION_TABLE))) {
@@ -77,7 +77,7 @@ async function ensureMigrationLockTableExists(db) {
77
77
  .execute();
78
78
  }
79
79
  catch (error) {
80
- // At least on postgres, `if not exists` doesn't guarantee the `create table`
80
+ // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table`
81
81
  // query doesn't throw if the table already exits. That's why we check if
82
82
  // the table exist here and ignore the error if it does.
83
83
  if (!(await doesTableExists(db, MIGRATION_LOCK_TABLE))) {
@@ -179,5 +179,5 @@ function ensureMigrationsAreNotCorrupted(executedMigrationNames, oldMigrationNam
179
179
  }
180
180
  }
181
181
  function isMigration(obj) {
182
- return isObject(obj) && isFunction(obj.up) && isFunction(obj.down);
182
+ return isObject(obj) && isFunction(obj.up);
183
183
  }
@@ -5,7 +5,7 @@ import { RawNode } from './raw-node.js';
5
5
  import { ReferenceNode } from './reference-node.js';
6
6
  import { SelectQueryNode } from './select-query-node.js';
7
7
  import { TableNode } from './table-node.js';
8
- export declare type AliasNodeChild = ColumnNode | ReferenceNode | TableNode | RawNode | SelectQueryNode;
8
+ export declare type AliasNodeChild = ColumnNode | ReferenceNode | TableNode | SelectQueryNode | RawNode;
9
9
  export interface AliasNode extends OperationNode {
10
10
  readonly kind: 'AliasNode';
11
11
  readonly node: AliasNodeChild;
@@ -1,10 +1,11 @@
1
1
  import { CheckConstraintNode } from './check-constraint-node.js';
2
2
  import { ColumnNode } from './column-node.js';
3
3
  import { DataTypeNode } from './data-type-node.js';
4
+ import { DefaultValueNode } from './default-value-node.js';
5
+ import { GeneratedAlwaysAsNode } from './generated-always-as-node.js';
4
6
  import { OperationNode } from './operation-node.js';
5
7
  import { RawNode } from './raw-node.js';
6
8
  import { ReferencesNode } from './references-node.js';
7
- import { ValueNode } from './value-node.js';
8
9
  export declare type ColumnDefinitionNodeProps = Omit<Partial<ColumnDefinitionNode>, 'kind'>;
9
10
  export declare type ColumnDataTypeNode = DataTypeNode | RawNode;
10
11
  export interface ColumnDefinitionNode extends OperationNode {
@@ -16,8 +17,9 @@ export interface ColumnDefinitionNode extends OperationNode {
16
17
  readonly autoIncrement: boolean;
17
18
  readonly unique: boolean;
18
19
  readonly nullable: boolean;
19
- readonly defaultTo?: ValueNode | RawNode;
20
+ readonly defaultTo?: DefaultValueNode;
20
21
  readonly check?: CheckConstraintNode;
22
+ readonly generatedAlwaysAs?: GeneratedAlwaysAsNode;
21
23
  }
22
24
  /**
23
25
  * @internal
@@ -9,6 +9,7 @@ export interface CreateViewNode extends OperationNode {
9
9
  readonly name: IdentifierNode;
10
10
  readonly materialized?: boolean;
11
11
  readonly orReplace?: boolean;
12
+ readonly ifNotExists?: boolean;
12
13
  readonly columns?: ReadonlyArray<ColumnNode>;
13
14
  readonly as?: SelectQueryNode | RawNode;
14
15
  }
@@ -0,0 +1,14 @@
1
+ import { OperationNode } from './operation-node.js';
2
+ import { RawNode } from './raw-node.js';
3
+ import { ValueNode } from './value-node.js';
4
+ export interface DefaultValueNode extends OperationNode {
5
+ readonly kind: 'DefaultValueNode';
6
+ readonly defaultValue: ValueNode | RawNode;
7
+ }
8
+ /**
9
+ * @internal
10
+ */
11
+ export declare const DefaultValueNode: Readonly<{
12
+ is(node: OperationNode): node is DefaultValueNode;
13
+ create(defaultValue: ValueNode | RawNode): DefaultValueNode;
14
+ }>;
@@ -0,0 +1,15 @@
1
+ import { freeze } from '../util/object-utils.js';
2
+ /**
3
+ * @internal
4
+ */
5
+ export const DefaultValueNode = freeze({
6
+ is(node) {
7
+ return node.kind === 'DefaultValueNode';
8
+ },
9
+ create(defaultValue) {
10
+ return freeze({
11
+ kind: 'DefaultValueNode',
12
+ defaultValue,
13
+ });
14
+ },
15
+ });
@@ -0,0 +1,16 @@
1
+ import { OperationNode } from './operation-node.js';
2
+ import { RawNode } from './raw-node.js';
3
+ export declare type GeneratedAlwaysAsNodeParams = Omit<GeneratedAlwaysAsNode, 'kind' | 'expression'>;
4
+ export interface GeneratedAlwaysAsNode extends OperationNode {
5
+ readonly kind: 'GeneratedAlwaysAsNode';
6
+ readonly expression: RawNode;
7
+ readonly stored?: boolean;
8
+ }
9
+ /**
10
+ * @internal
11
+ */
12
+ export declare const GeneratedAlwaysAsNode: Readonly<{
13
+ is(node: OperationNode): node is GeneratedAlwaysAsNode;
14
+ create(expression: string): GeneratedAlwaysAsNode;
15
+ cloneWith(node: GeneratedAlwaysAsNode, params: GeneratedAlwaysAsNodeParams): GeneratedAlwaysAsNode;
16
+ }>;
@@ -0,0 +1,22 @@
1
+ import { freeze } from '../util/object-utils.js';
2
+ import { RawNode } from './raw-node.js';
3
+ /**
4
+ * @internal
5
+ */
6
+ export const GeneratedAlwaysAsNode = freeze({
7
+ is(node) {
8
+ return node.kind === 'GeneratedAlwaysAsNode';
9
+ },
10
+ create(expression) {
11
+ return freeze({
12
+ kind: 'GeneratedAlwaysAsNode',
13
+ expression: RawNode.createWithSql(expression),
14
+ });
15
+ },
16
+ cloneWith(node, params) {
17
+ return freeze({
18
+ ...node,
19
+ ...params,
20
+ });
21
+ },
22
+ });
@@ -1,18 +1,14 @@
1
- import { AndNode } from './and-node.js';
2
- import { FilterNode } from './filter-node.js';
1
+ import { FilterExpressionNode } from './operation-node-utils.js';
3
2
  import { OperationNode } from './operation-node.js';
4
- import { OrNode } from './or-node.js';
5
- import { ParensNode } from './parens-node.js';
6
- export declare type HavingNodeChild = FilterNode | AndNode | OrNode | ParensNode;
7
3
  export interface HavingNode extends OperationNode {
8
4
  readonly kind: 'HavingNode';
9
- readonly having: HavingNodeChild;
5
+ readonly having: FilterExpressionNode;
10
6
  }
11
7
  /**
12
8
  * @internal
13
9
  */
14
10
  export declare const HavingNode: Readonly<{
15
11
  is(node: OperationNode): node is HavingNode;
16
- create(filter: HavingNodeChild): HavingNode;
17
- cloneWithFilter(havingNode: HavingNode, op: 'And' | 'Or', having: HavingNodeChild): HavingNode;
12
+ create(filter: FilterExpressionNode): HavingNode;
13
+ cloneWithFilter(havingNode: HavingNode, op: 'And' | 'Or', filter: FilterExpressionNode): HavingNode;
18
14
  }>;
@@ -14,12 +14,12 @@ export const HavingNode = freeze({
14
14
  having: filter,
15
15
  });
16
16
  },
17
- cloneWithFilter(havingNode, op, having) {
17
+ cloneWithFilter(havingNode, op, filter) {
18
18
  return freeze({
19
19
  ...havingNode,
20
20
  having: op === 'And'
21
- ? AndNode.create(havingNode.having, having)
22
- : OrNode.create(havingNode.having, having),
21
+ ? AndNode.create(havingNode.having, filter)
22
+ : OrNode.create(havingNode.having, filter),
23
23
  });
24
24
  },
25
25
  });
@@ -1,18 +1,15 @@
1
1
  import { AliasNode } from './alias-node.js';
2
- import { AndNode } from './and-node.js';
3
- import { FilterNode } from './filter-node.js';
2
+ import { OnNode } from './on-node.js';
3
+ import { FilterExpressionNode } from './operation-node-utils.js';
4
4
  import { OperationNode } from './operation-node.js';
5
- import { OrNode } from './or-node.js';
6
- import { ParensNode } from './parens-node.js';
7
5
  import { TableNode } from './table-node.js';
8
6
  export declare type JoinTableNode = TableNode | AliasNode;
9
7
  export declare type JoinType = 'InnerJoin' | 'LeftJoin' | 'RightJoin' | 'FullJoin';
10
- export declare type JoinNodeOnNode = FilterNode | AndNode | OrNode | ParensNode;
11
8
  export interface JoinNode extends OperationNode {
12
9
  readonly kind: 'JoinNode';
13
10
  readonly joinType: JoinType;
14
11
  readonly table: JoinTableNode;
15
- readonly on?: JoinNodeOnNode;
12
+ readonly on?: OnNode;
16
13
  }
17
14
  /**
18
15
  * @internal
@@ -20,7 +17,7 @@ export interface JoinNode extends OperationNode {
20
17
  export declare const JoinNode: Readonly<{
21
18
  is(node: OperationNode): node is JoinNode;
22
19
  create(joinType: JoinType, table: JoinTableNode): JoinNode;
23
- createWithOn(joinType: JoinType, table: JoinTableNode, on: JoinNodeOnNode): JoinNode;
24
- cloneWithOn(joinNode: JoinNode, on: JoinNodeOnNode): JoinNode;
25
- cloneWithOrOn(joinNode: JoinNode, on: JoinNodeOnNode): JoinNode;
20
+ createWithOn(joinType: JoinType, table: JoinTableNode, on: FilterExpressionNode): JoinNode;
21
+ cloneWithOn(joinNode: JoinNode, filter: FilterExpressionNode): JoinNode;
22
+ cloneWithOrOn(joinNode: JoinNode, filter: FilterExpressionNode): JoinNode;
26
23
  }>;
@@ -1,6 +1,5 @@
1
1
  import { freeze } from '../util/object-utils.js';
2
- import { AndNode } from './and-node.js';
3
- import { OrNode } from './or-node.js';
2
+ import { OnNode } from './on-node.js';
4
3
  /**
5
4
  * @internal
6
5
  */
@@ -21,19 +20,23 @@ export const JoinNode = freeze({
21
20
  kind: 'JoinNode',
22
21
  joinType,
23
22
  table,
24
- on,
23
+ on: OnNode.create(on),
25
24
  });
26
25
  },
27
- cloneWithOn(joinNode, on) {
26
+ cloneWithOn(joinNode, filter) {
28
27
  return freeze({
29
28
  ...joinNode,
30
- on: joinNode.on ? AndNode.create(joinNode.on, on) : on,
29
+ on: joinNode.on
30
+ ? OnNode.cloneWithFilter(joinNode.on, 'And', filter)
31
+ : OnNode.create(filter),
31
32
  });
32
33
  },
33
- cloneWithOrOn(joinNode, on) {
34
+ cloneWithOrOn(joinNode, filter) {
34
35
  return freeze({
35
36
  ...joinNode,
36
- on: joinNode.on ? OrNode.create(joinNode.on, on) : on,
37
+ on: joinNode.on
38
+ ? OnNode.cloneWithFilter(joinNode.on, 'Or', filter)
39
+ : OnNode.create(filter),
37
40
  });
38
41
  },
39
42
  });
@@ -0,0 +1,14 @@
1
+ import { FilterExpressionNode } from './operation-node-utils.js';
2
+ import { OperationNode } from './operation-node.js';
3
+ export interface OnNode extends OperationNode {
4
+ readonly kind: 'OnNode';
5
+ readonly on: FilterExpressionNode;
6
+ }
7
+ /**
8
+ * @internal
9
+ */
10
+ export declare const OnNode: Readonly<{
11
+ is(node: OperationNode): node is OnNode;
12
+ create(filter: FilterExpressionNode): OnNode;
13
+ cloneWithFilter(onNode: OnNode, op: 'And' | 'Or', filter: FilterExpressionNode): OnNode;
14
+ }>;
@@ -0,0 +1,25 @@
1
+ import { freeze } from '../util/object-utils.js';
2
+ import { AndNode } from './and-node.js';
3
+ import { OrNode } from './or-node.js';
4
+ /**
5
+ * @internal
6
+ */
7
+ export const OnNode = freeze({
8
+ is(node) {
9
+ return node.kind === 'OnNode';
10
+ },
11
+ create(filter) {
12
+ return freeze({
13
+ kind: 'OnNode',
14
+ on: filter,
15
+ });
16
+ },
17
+ cloneWithFilter(onNode, op, filter) {
18
+ return freeze({
19
+ ...onNode,
20
+ on: op === 'And'
21
+ ? AndNode.create(onNode.on, filter)
22
+ : OrNode.create(onNode.on, filter),
23
+ });
24
+ },
25
+ });
@@ -60,6 +60,9 @@ import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
60
60
  import { UnionNode } from './union-node.js';
61
61
  import { CreateViewNode } from './create-view-node.js';
62
62
  import { DropViewNode } from './drop-view-node.js';
63
+ import { GeneratedAlwaysAsNode } from './generated-always-as-node.js';
64
+ import { DefaultValueNode } from './default-value-node.js';
65
+ import { OnNode } from './on-node.js';
63
66
  /**
64
67
  * Transforms an operation node tree into another one.
65
68
  *
@@ -149,6 +152,9 @@ export declare class OperationNodeTransformer {
149
152
  protected transformDropConstraint(node: DropConstraintNode): DropConstraintNode;
150
153
  protected transformCreateView(node: CreateViewNode): CreateViewNode;
151
154
  protected transformDropView(node: DropViewNode): DropViewNode;
155
+ protected transformGeneratedAlwaysAs(node: GeneratedAlwaysAsNode): GeneratedAlwaysAsNode;
156
+ protected transformDefaultValue(node: DefaultValueNode): DefaultValueNode;
157
+ protected transformOn(node: OnNode): OnNode;
152
158
  protected transformDataType(node: DataTypeNode): DataTypeNode;
153
159
  protected transformSelectAll(node: SelectAllNode): SelectAllNode;
154
160
  protected transformIdentifier(node: IdentifierNode): IdentifierNode;
@@ -30,7 +30,7 @@ import { freeze } from '../util/object-utils.js';
30
30
  */
31
31
  export class OperationNodeTransformer {
32
32
  nodeStack = [];
33
- #transformers = {
33
+ #transformers = freeze({
34
34
  AliasNode: this.transformAlias.bind(this),
35
35
  ColumnNode: this.transformColumn.bind(this),
36
36
  IdentifierNode: this.transformIdentifier.bind(this),
@@ -92,7 +92,10 @@ export class OperationNodeTransformer {
92
92
  UnionNode: this.transformUnion.bind(this),
93
93
  CreateViewNode: this.transformCreateView.bind(this),
94
94
  DropViewNode: this.transformDropView.bind(this),
95
- };
95
+ GeneratedAlwaysAsNode: this.transformGeneratedAlwaysAs.bind(this),
96
+ DefaultValueNode: this.transformDefaultValue.bind(this),
97
+ OnNode: this.transformOn.bind(this),
98
+ });
96
99
  transformNode = (node) => {
97
100
  if (!node) {
98
101
  return undefined;
@@ -271,6 +274,7 @@ export class OperationNodeTransformer {
271
274
  nullable: node.nullable,
272
275
  defaultTo: this.transformNode(node.defaultTo),
273
276
  check: this.transformNode(node.check),
277
+ generatedAlwaysAs: this.transformNode(node.generatedAlwaysAs),
274
278
  };
275
279
  }
276
280
  transformAddColumn(node) {
@@ -522,6 +526,7 @@ export class OperationNodeTransformer {
522
526
  kind: 'CreateViewNode',
523
527
  name: this.transformNode(node.name),
524
528
  orReplace: node.orReplace,
529
+ ifNotExists: node.ifNotExists,
525
530
  materialized: node.materialized,
526
531
  columns: this.transformNodeList(node.columns),
527
532
  as: this.transformNode(node.as),
@@ -535,6 +540,25 @@ export class OperationNodeTransformer {
535
540
  materialized: node.materialized,
536
541
  };
537
542
  }
543
+ transformGeneratedAlwaysAs(node) {
544
+ return {
545
+ kind: 'GeneratedAlwaysAsNode',
546
+ expression: this.transformNode(node.expression),
547
+ stored: node.stored,
548
+ };
549
+ }
550
+ transformDefaultValue(node) {
551
+ return {
552
+ kind: 'DefaultValueNode',
553
+ defaultValue: this.transformNode(node.defaultValue),
554
+ };
555
+ }
556
+ transformOn(node) {
557
+ return {
558
+ kind: 'OnNode',
559
+ on: this.transformNode(node.on),
560
+ };
561
+ }
538
562
  transformDataType(node) {
539
563
  // An Object.freezed leaf node. No need to clone.
540
564
  return node;
@@ -14,4 +14,4 @@ import { ValueNode } from './value-node.js';
14
14
  export declare type ReferenceExpressionNode = ColumnNode | ReferenceNode | SelectQueryNode | RawNode;
15
15
  export declare type ValueExpressionNode = ValueNode | ValueListNode | PrimitiveValueListNode | ReferenceExpressionNode;
16
16
  export declare type TableExpressionNode = TableNode | AliasNode;
17
- export declare type FilterExpressionNode = FilterNode | AndNode | OrNode | ParensNode;
17
+ export declare type FilterExpressionNode = FilterNode | AndNode | OrNode | ParensNode | RawNode;
@@ -60,9 +60,13 @@ import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
60
60
  import { UnionNode } from './union-node.js';
61
61
  import { CreateViewNode } from './create-view-node.js';
62
62
  import { DropViewNode } from './drop-view-node.js';
63
+ import { GeneratedAlwaysAsNode } from './generated-always-as-node.js';
64
+ import { DefaultValueNode } from './default-value-node.js';
65
+ import { OnNode } from './on-node.js';
63
66
  export declare abstract class OperationNodeVisitor {
64
67
  #private;
65
68
  protected readonly nodeStack: OperationNode[];
69
+ protected get parentNode(): OperationNode | undefined;
66
70
  protected readonly visitNode: (node: OperationNode) => void;
67
71
  protected abstract visitSelectQuery(node: SelectQueryNode): void;
68
72
  protected abstract visitSelection(node: SelectionNode): void;
@@ -125,4 +129,7 @@ export declare abstract class OperationNodeVisitor {
125
129
  protected abstract visitOperator(node: OperatorNode): void;
126
130
  protected abstract visitCreateView(node: CreateViewNode): void;
127
131
  protected abstract visitDropView(node: DropViewNode): void;
132
+ protected abstract visitGeneratedAlwaysAs(node: GeneratedAlwaysAsNode): void;
133
+ protected abstract visitDefaultValue(node: DefaultValueNode): void;
134
+ protected abstract visitOn(node: OnNode): void;
128
135
  }
@@ -1,6 +1,10 @@
1
+ import { freeze } from '../util/object-utils.js';
1
2
  export class OperationNodeVisitor {
2
3
  nodeStack = [];
3
- #visitors = {
4
+ get parentNode() {
5
+ return this.nodeStack[this.nodeStack.length - 2];
6
+ }
7
+ #visitors = freeze({
4
8
  AliasNode: this.visitAlias.bind(this),
5
9
  ColumnNode: this.visitColumn.bind(this),
6
10
  IdentifierNode: this.visitIdentifier.bind(this),
@@ -62,7 +66,10 @@ export class OperationNodeVisitor {
62
66
  UnionNode: this.visitUnion.bind(this),
63
67
  CreateViewNode: this.visitCreateView.bind(this),
64
68
  DropViewNode: this.visitDropView.bind(this),
65
- };
69
+ GeneratedAlwaysAsNode: this.visitGeneratedAlwaysAs.bind(this),
70
+ DefaultValueNode: this.visitDefaultValue.bind(this),
71
+ OnNode: this.visitOn.bind(this),
72
+ });
66
73
  visitNode = (node) => {
67
74
  this.nodeStack.push(node);
68
75
  this.#visitors[node.kind](node);
@@ -1,4 +1,4 @@
1
- export declare type OperationNodeKind = 'IdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'FilterNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'UnionNode' | 'CreateViewNode' | 'DropViewNode';
1
+ export declare type OperationNodeKind = 'IdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'FilterNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'UnionNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedAlwaysAsNode' | 'DefaultValueNode' | 'OnNode';
2
2
  export interface OperationNode {
3
3
  readonly kind: OperationNodeKind;
4
4
  }