kysely 0.11.4 → 0.12.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 (192) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +1 -0
  3. package/dist/cjs/dynamic/dynamic-reference-builder.js +9 -1
  4. package/dist/cjs/dynamic/dynamic.d.ts +6 -7
  5. package/dist/cjs/dynamic/dynamic.js +6 -7
  6. package/dist/cjs/index.d.ts +13 -3
  7. package/dist/cjs/index.js +11 -1
  8. package/dist/cjs/kysely.d.ts +19 -11
  9. package/dist/cjs/kysely.js +32 -9
  10. package/dist/cjs/migration/migration.d.ts +2 -2
  11. package/dist/cjs/operation-node/create-table-node.d.ts +6 -2
  12. package/dist/cjs/operation-node/create-table-node.js +6 -6
  13. package/dist/cjs/operation-node/create-view-node.d.ts +1 -0
  14. package/dist/cjs/operation-node/insert-query-node.d.ts +4 -4
  15. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  16. package/dist/cjs/operation-node/operation-node-transformer.js +11 -1
  17. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  18. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  19. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  20. package/dist/cjs/operation-node/query-node.d.ts +0 -2
  21. package/dist/cjs/operation-node/query-node.js +0 -10
  22. package/dist/cjs/operation-node/values-node.d.ts +15 -0
  23. package/dist/cjs/operation-node/values-node.js +18 -0
  24. package/dist/cjs/parser/complex-expression-parser.d.ts +9 -0
  25. package/dist/cjs/parser/complex-expression-parser.js +25 -0
  26. package/dist/cjs/parser/filter-parser.d.ts +13 -4
  27. package/dist/cjs/parser/filter-parser.js +21 -24
  28. package/dist/cjs/parser/insert-values-parser.d.ts +5 -9
  29. package/dist/cjs/parser/insert-values-parser.js +27 -41
  30. package/dist/cjs/parser/order-by-parser.d.ts +1 -1
  31. package/dist/cjs/parser/parse-context.d.ts +8 -8
  32. package/dist/cjs/parser/parse-context.js +10 -10
  33. package/dist/cjs/parser/reference-parser.d.ts +8 -7
  34. package/dist/cjs/parser/reference-parser.js +8 -17
  35. package/dist/cjs/parser/returning-parser.d.ts +1 -5
  36. package/dist/cjs/parser/select-parser.d.ts +12 -14
  37. package/dist/cjs/parser/select-parser.js +5 -9
  38. package/dist/cjs/parser/table-parser.d.ts +9 -11
  39. package/dist/cjs/parser/table-parser.js +2 -8
  40. package/dist/cjs/parser/union-parser.d.ts +2 -2
  41. package/dist/cjs/parser/union-parser.js +1 -6
  42. package/dist/cjs/parser/update-set-parser.d.ts +2 -8
  43. package/dist/cjs/parser/update-set-parser.js +6 -26
  44. package/dist/cjs/parser/value-parser.d.ts +9 -6
  45. package/dist/cjs/parser/value-parser.js +7 -30
  46. package/dist/cjs/parser/with-parser.d.ts +6 -3
  47. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
  48. package/dist/cjs/query-builder/delete-query-builder.d.ts +102 -0
  49. package/dist/cjs/query-builder/delete-query-builder.js +185 -0
  50. package/dist/cjs/query-builder/expression-builder.d.ts +8 -6
  51. package/dist/cjs/query-builder/expression-builder.js +3 -3
  52. package/dist/cjs/query-builder/function-builder.d.ts +2 -1
  53. package/dist/cjs/query-builder/function-builder.js +2 -1
  54. package/dist/cjs/query-builder/having-interface.d.ts +49 -0
  55. package/dist/cjs/query-builder/having-interface.js +2 -0
  56. package/dist/cjs/query-builder/insert-query-builder.d.ts +439 -0
  57. package/dist/cjs/query-builder/insert-query-builder.js +256 -0
  58. package/dist/cjs/query-builder/insert-result.d.ts +3 -2
  59. package/dist/cjs/query-builder/insert-result.js +3 -2
  60. package/dist/cjs/query-builder/join-builder.d.ts +19 -20
  61. package/dist/cjs/query-builder/join-builder.js +12 -12
  62. package/dist/cjs/query-builder/join-interface.d.ts +133 -0
  63. package/dist/cjs/query-builder/join-interface.js +2 -0
  64. package/dist/cjs/query-builder/no-result-error.d.ts +9 -0
  65. package/dist/cjs/query-builder/no-result-error.js +14 -0
  66. package/dist/cjs/query-builder/returning-interface.d.ts +73 -0
  67. package/dist/cjs/query-builder/returning-interface.js +2 -0
  68. package/dist/cjs/query-builder/select-query-builder.d.ts +711 -0
  69. package/dist/cjs/query-builder/select-query-builder.js +571 -0
  70. package/dist/cjs/query-builder/update-query-builder.d.ts +190 -0
  71. package/dist/cjs/query-builder/update-query-builder.js +279 -0
  72. package/dist/cjs/query-builder/where-interface.d.ts +381 -0
  73. package/dist/cjs/query-builder/where-interface.js +2 -0
  74. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
  75. package/dist/cjs/query-compiler/default-query-compiler.js +22 -5
  76. package/dist/cjs/query-creator.d.ts +42 -40
  77. package/dist/cjs/query-creator.js +33 -28
  78. package/dist/cjs/query-executor/query-executor.d.ts +1 -1
  79. package/dist/cjs/query-executor/query-executor.js +1 -1
  80. package/dist/cjs/raw-builder/raw-builder.d.ts +2 -0
  81. package/dist/cjs/raw-builder/raw-builder.js +6 -0
  82. package/dist/cjs/schema/alter-table-builder.d.ts +2 -2
  83. package/dist/cjs/schema/column-definition-builder.d.ts +27 -20
  84. package/dist/cjs/schema/create-index-builder.d.ts +2 -1
  85. package/dist/cjs/schema/create-index-builder.js +2 -1
  86. package/dist/cjs/schema/create-table-builder.d.ts +26 -9
  87. package/dist/cjs/schema/create-table-builder.js +42 -9
  88. package/dist/cjs/schema/create-view-builder.d.ts +17 -3
  89. package/dist/cjs/schema/create-view-builder.js +25 -16
  90. package/dist/cjs/schema/schema.d.ts +18 -11
  91. package/dist/cjs/schema/schema.js +18 -11
  92. package/dist/cjs/util/log.d.ts +3 -2
  93. package/dist/cjs/util/log.js +8 -15
  94. package/dist/cjs/util/type-utils.d.ts +7 -7
  95. package/dist/esm/dynamic/dynamic-reference-builder.d.ts +1 -0
  96. package/dist/esm/dynamic/dynamic-reference-builder.js +7 -0
  97. package/dist/esm/dynamic/dynamic.d.ts +6 -7
  98. package/dist/esm/dynamic/dynamic.js +6 -7
  99. package/dist/esm/index.d.ts +13 -3
  100. package/dist/esm/index.js +11 -1
  101. package/dist/esm/kysely.d.ts +19 -11
  102. package/dist/esm/kysely.js +32 -9
  103. package/dist/esm/migration/migration.d.ts +2 -2
  104. package/dist/esm/operation-node/create-table-node.d.ts +6 -2
  105. package/dist/esm/operation-node/create-table-node.js +6 -6
  106. package/dist/esm/operation-node/create-view-node.d.ts +1 -0
  107. package/dist/esm/operation-node/insert-query-node.d.ts +4 -4
  108. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  109. package/dist/esm/operation-node/operation-node-transformer.js +11 -1
  110. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  111. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  112. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  113. package/dist/esm/operation-node/query-node.d.ts +0 -2
  114. package/dist/esm/operation-node/query-node.js +0 -10
  115. package/dist/esm/operation-node/values-node.d.ts +15 -0
  116. package/dist/esm/operation-node/values-node.js +15 -0
  117. package/dist/esm/parser/complex-expression-parser.d.ts +9 -0
  118. package/dist/esm/parser/complex-expression-parser.js +20 -0
  119. package/dist/esm/parser/filter-parser.d.ts +13 -4
  120. package/dist/esm/parser/filter-parser.js +21 -24
  121. package/dist/esm/parser/insert-values-parser.d.ts +5 -9
  122. package/dist/esm/parser/insert-values-parser.js +27 -40
  123. package/dist/esm/parser/order-by-parser.d.ts +1 -1
  124. package/dist/esm/parser/parse-context.d.ts +8 -8
  125. package/dist/esm/parser/parse-context.js +10 -10
  126. package/dist/esm/parser/reference-parser.d.ts +8 -7
  127. package/dist/esm/parser/reference-parser.js +9 -18
  128. package/dist/esm/parser/returning-parser.d.ts +1 -5
  129. package/dist/esm/parser/select-parser.d.ts +12 -14
  130. package/dist/esm/parser/select-parser.js +6 -10
  131. package/dist/esm/parser/table-parser.d.ts +9 -11
  132. package/dist/esm/parser/table-parser.js +3 -9
  133. package/dist/esm/parser/union-parser.d.ts +2 -2
  134. package/dist/esm/parser/union-parser.js +1 -6
  135. package/dist/esm/parser/update-set-parser.d.ts +2 -8
  136. package/dist/esm/parser/update-set-parser.js +5 -24
  137. package/dist/esm/parser/value-parser.d.ts +9 -6
  138. package/dist/esm/parser/value-parser.js +8 -31
  139. package/dist/esm/parser/with-parser.d.ts +6 -3
  140. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
  141. package/dist/esm/query-builder/delete-query-builder.d.ts +102 -0
  142. package/dist/esm/query-builder/delete-query-builder.js +181 -0
  143. package/dist/esm/query-builder/expression-builder.d.ts +8 -6
  144. package/dist/esm/query-builder/expression-builder.js +3 -3
  145. package/dist/esm/query-builder/function-builder.d.ts +2 -1
  146. package/dist/esm/query-builder/function-builder.js +2 -1
  147. package/dist/esm/query-builder/having-interface.d.ts +49 -0
  148. package/dist/esm/query-builder/having-interface.js +1 -0
  149. package/dist/esm/query-builder/insert-query-builder.d.ts +439 -0
  150. package/dist/esm/query-builder/insert-query-builder.js +252 -0
  151. package/dist/esm/query-builder/insert-result.d.ts +3 -2
  152. package/dist/esm/query-builder/insert-result.js +3 -2
  153. package/dist/esm/query-builder/join-builder.d.ts +19 -20
  154. package/dist/esm/query-builder/join-builder.js +12 -12
  155. package/dist/esm/query-builder/join-interface.d.ts +133 -0
  156. package/dist/esm/query-builder/join-interface.js +1 -0
  157. package/dist/esm/query-builder/no-result-error.d.ts +9 -0
  158. package/dist/esm/query-builder/no-result-error.js +10 -0
  159. package/dist/esm/query-builder/returning-interface.d.ts +73 -0
  160. package/dist/esm/query-builder/returning-interface.js +1 -0
  161. package/dist/esm/query-builder/select-query-builder.d.ts +711 -0
  162. package/dist/esm/query-builder/select-query-builder.js +566 -0
  163. package/dist/esm/query-builder/update-query-builder.d.ts +190 -0
  164. package/dist/esm/query-builder/update-query-builder.js +275 -0
  165. package/dist/esm/query-builder/where-interface.d.ts +381 -0
  166. package/dist/esm/query-builder/where-interface.js +1 -0
  167. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
  168. package/dist/esm/query-compiler/default-query-compiler.js +22 -5
  169. package/dist/esm/query-creator.d.ts +42 -40
  170. package/dist/esm/query-creator.js +33 -28
  171. package/dist/esm/query-executor/query-executor.d.ts +1 -1
  172. package/dist/esm/query-executor/query-executor.js +1 -1
  173. package/dist/esm/raw-builder/raw-builder.d.ts +2 -0
  174. package/dist/esm/raw-builder/raw-builder.js +6 -0
  175. package/dist/esm/schema/alter-table-builder.d.ts +2 -2
  176. package/dist/esm/schema/column-definition-builder.d.ts +27 -20
  177. package/dist/esm/schema/create-index-builder.d.ts +2 -1
  178. package/dist/esm/schema/create-index-builder.js +2 -1
  179. package/dist/esm/schema/create-table-builder.d.ts +26 -9
  180. package/dist/esm/schema/create-table-builder.js +43 -10
  181. package/dist/esm/schema/create-view-builder.d.ts +17 -3
  182. package/dist/esm/schema/create-view-builder.js +25 -16
  183. package/dist/esm/schema/schema.d.ts +18 -11
  184. package/dist/esm/schema/schema.js +18 -11
  185. package/dist/esm/util/log.d.ts +3 -2
  186. package/dist/esm/util/log.js +7 -14
  187. package/dist/esm/util/type-utils.d.ts +7 -7
  188. package/package.json +3 -3
  189. package/dist/cjs/query-builder/query-builder.d.ts +0 -1728
  190. package/dist/cjs/query-builder/query-builder.js +0 -1067
  191. package/dist/esm/query-builder/query-builder.d.ts +0 -1728
  192. package/dist/esm/query-builder/query-builder.js +0 -1061
@@ -0,0 +1,381 @@
1
+ import { ExistsExpression, FilterOperator, FilterValueExpressionOrList, WhereGrouper } from '../parser/filter-parser.js';
2
+ import { ReferenceExpression } from '../parser/reference-parser.js';
3
+ import { AnyRawBuilder } from '../util/type-utils.js';
4
+ export interface WhereInterface<DB, TB extends keyof DB> {
5
+ /**
6
+ * Adds a `where` clause to the query.
7
+ *
8
+ * Also see {@link WhereInterface.whereExists | whereExists}, {@link WhereInterface.whereRef | whereRef}
9
+ * and {@link WhereInterface.whereRef | orWhere}.
10
+ *
11
+ * ### Examples
12
+ *
13
+ * Find a row by column value:
14
+ *
15
+ * ```ts
16
+ * const person = await db
17
+ * .selectFrom('person')
18
+ * .selectAll()
19
+ * .where('id', '=', 100)
20
+ * .executeTakeFirst()
21
+ * ```
22
+ *
23
+ * The generated SQL (PostgreSQL):
24
+ *
25
+ * ```sql
26
+ * select * from "person" where "id" = $1
27
+ * ```
28
+ *
29
+ * Operator can be any supported operator or if the typings don't support it
30
+ * you can always use `db.raw('your operator')`.
31
+ *
32
+ * ```ts
33
+ * const persons = await db
34
+ * .selectFrom('person')
35
+ * .selectAll()
36
+ * .where('id', '>', 100)
37
+ * .execute()
38
+ * ```
39
+ *
40
+ * The generated SQL (PostgreSQL):
41
+ *
42
+ * ```sql
43
+ * select * from "person" where "id" > $1
44
+ * ```
45
+ *
46
+ * The `where` methods don't change the type of the query. You can add
47
+ * conditional `where`s easily by doing something like this:
48
+ *
49
+ * ```ts
50
+ * let query = db
51
+ * .selectFrom('person')
52
+ * .selectAll()
53
+ *
54
+ * if (firstName) {
55
+ * query = query.where('first_name', '=', firstName)
56
+ * }
57
+ *
58
+ * const persons = await query.execute()
59
+ * ```
60
+ *
61
+ * This is true for basically all methods execpt the `select` and
62
+ * `returning` methods, which DO change the return type of the
63
+ * query.
64
+ *
65
+ * Both the first and third argument can also be subqueries.
66
+ * A subquery is defined by passing a function and calling
67
+ * the `selectFrom` method of the object passed into the
68
+ * function:
69
+ *
70
+ * ```ts
71
+ * const persons = await db
72
+ * .selectFrom('person')
73
+ * .selectAll()
74
+ * .where(
75
+ * (qb) => qb.selectFrom('pet')
76
+ * .select('pet.name')
77
+ * .whereRef('pet.owner_id', '=', 'person.id')
78
+ * .limit(1),
79
+ * '=',
80
+ * 'Fluffy'
81
+ * )
82
+ * .execute()
83
+ * ```
84
+ *
85
+ * The generated SQL (PostgreSQL):
86
+ *
87
+ * ```sql
88
+ * select *
89
+ * from "person"
90
+ * where (
91
+ * select "pet"."name"
92
+ * from "pet"
93
+ * where "pet"."owner_id" = "person"."id"
94
+ * limit $1
95
+ * ) = $2
96
+ * ```
97
+ *
98
+ * A `where in` query can be built by using the `in` operator and an array
99
+ * of values. The values in the array can also be subqueries or raw
100
+ * instances.
101
+ *
102
+ * ```ts
103
+ * const persons = await db
104
+ * .selectFrom('person')
105
+ * .selectAll()
106
+ * .where('person.id', 'in', [100, 200, 300])
107
+ * .execute()
108
+ * ```
109
+ *
110
+ * The generated SQL (PostgreSQL):
111
+ *
112
+ * ```sql
113
+ * select * from "person" where "id" in ($1, $2, $3)
114
+ * ```
115
+ *
116
+ * If everything else fails, you can always pass {@link Kysely.raw | raw}
117
+ * as any of the arguments, including the operator:
118
+ *
119
+ * ```ts
120
+ * const persons = await db
121
+ * .selectFrom('person')
122
+ * .selectAll()
123
+ * .where(
124
+ * db.raw('coalesce(first_name, last_name)'),
125
+ * 'like',
126
+ * '%' + name + '%',
127
+ * )
128
+ * .execute()
129
+ * ```
130
+ *
131
+ * The generated SQL (PostgreSQL):
132
+ *
133
+ * ```sql
134
+ * select * from "person"
135
+ * where coalesce(first_name, last_name) like $1
136
+ * ```
137
+ *
138
+ * If you only pass one function argument to this method, it can be
139
+ * used to create parentheses around other where statements:
140
+ *
141
+ * ```ts
142
+ * const persons = await db
143
+ * .selectFrom('person')
144
+ * .selectAll()
145
+ * .where((qb) => qb
146
+ * .where('id', '=', 1)
147
+ * .orWhere('id', '=', 2)
148
+ * )
149
+ * .execute()
150
+ * ```
151
+ *
152
+ * The generated SQL (PostgreSQL):
153
+ *
154
+ * ```sql
155
+ * select * from "person" (where "id" = 1 or "id" = 2)
156
+ * ```
157
+ *
158
+ * In all examples above the columns were known at compile time
159
+ * (except for the `raw` expressions). By default kysely only allows
160
+ * you to refer to columns that exist in the database **and** can be
161
+ * referred to in the current query and context.
162
+ *
163
+ * Sometimes you may want to refer to columns that come from the user
164
+ * input and thus are not available at compile time.
165
+ *
166
+ * You have two options, `db.raw` or `db.dynamic`. The example below
167
+ * uses both:
168
+ *
169
+ * ```ts
170
+ * const { ref } = db.dynamic
171
+ *
172
+ * const persons = await db
173
+ * .selectFrom('person')
174
+ * .selectAll()
175
+ * .where(ref(columnFromUserInput), '=', 1)
176
+ * .orWhere(db.raw('??', [columnFromUserInput]), '=', 2)
177
+ * .execute()
178
+ * ```
179
+ */
180
+ where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): WhereInterface<DB, TB>;
181
+ where(grouper: WhereGrouper<DB, TB>): WhereInterface<DB, TB>;
182
+ where(raw: AnyRawBuilder): WhereInterface<DB, TB>;
183
+ /**
184
+ * Adds a `where` clause where both sides of the operator are references
185
+ * to columns.
186
+ *
187
+ * The normal `where` method treats the right hand side argument as a
188
+ * value by default. `whereRef` treats it as a column reference. This method is
189
+ * expecially useful with joins and correclated subqueries.
190
+ *
191
+ * ### Examples
192
+ *
193
+ * Usage with a join:
194
+ *
195
+ * ```ts
196
+ * db.selectFrom(['person', 'pet'])
197
+ * .selectAll()
198
+ * .whereRef('person.first_name', '=', 'pet.name')
199
+ * ```
200
+ *
201
+ * The generated SQL (PostgreSQL):
202
+ *
203
+ * ```sql
204
+ * select * from "person", "pet" where "person"."first_name" = "pet"."name"
205
+ * ```
206
+ *
207
+ * Usage in a subquery:
208
+ *
209
+ * ```ts
210
+ * const persons = await db
211
+ * .selectFrom('person')
212
+ * .selectAll('person')
213
+ * .select((qb) => qb
214
+ * .selectFrom('pet')
215
+ * .select('name')
216
+ * .whereRef('pet.owner_id', '=', 'person.id')
217
+ * .limit(1)
218
+ * .as('pet_name')
219
+ * )
220
+ * .execute()
221
+ * ```
222
+ *
223
+ * The generated SQL (PostgreSQL):
224
+ *
225
+ * ```sql
226
+ * select "person".*, (
227
+ * select "name"
228
+ * from "pet"
229
+ * where "pet"."owner_id" = "person"."id"
230
+ * limit $1
231
+ * ) as "pet_name"
232
+ * from "person"
233
+ */
234
+ whereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): WhereInterface<DB, TB>;
235
+ /**
236
+ * Adds an `or where` clause to the query. Otherwise works just like
237
+ * {@link WhereInterface.where | where}.
238
+ *
239
+ * It's often necessary to wrap `or where` clauses in parentheses to control
240
+ * precendence. You can use the one argument version of the `where` method
241
+ * for that. See the examples.
242
+ *
243
+ * ### Examples
244
+ *
245
+ * ```ts
246
+ * const persons = await db
247
+ * .selectFrom('person')
248
+ * .selectAll()
249
+ * .where('id', '=', 1)
250
+ * .orWhere('id', '=', 2)
251
+ * .execute()
252
+ * ```
253
+ *
254
+ * The generated SQL (PostgreSQL):
255
+ *
256
+ * ```sql
257
+ * select * from "person" where "id" = 1 or "id" = 2
258
+ * ```
259
+ *
260
+ * Grouping with parentheses:
261
+ *
262
+ * ```ts
263
+ * const persons = await db
264
+ * .selectFrom('person')
265
+ * .selectAll()
266
+ * .where((qb) => qb
267
+ * .where('id', '=', 1)
268
+ * .orWhere('id', '=', 2)
269
+ * )
270
+ * .execute()
271
+ * ```
272
+ *
273
+ * The generated SQL (PostgreSQL):
274
+ *
275
+ * ```sql
276
+ * select * from "person" (where "id" = 1 or "id" = 2)
277
+ * ```
278
+ *
279
+ * Even the first `where` can be an `orWhere`. This is useful
280
+ * if you are looping through a set of conditions:
281
+ *
282
+ * ```ts
283
+ * const persons = await db
284
+ * .selectFrom('person')
285
+ * .selectAll()
286
+ * .where((qb) => qb
287
+ * .orWhere('id', '=', 1)
288
+ * .orWhere('id', '=', 2)
289
+ * )
290
+ * .execute()
291
+ * ```
292
+ *
293
+ * The generated SQL (PostgreSQL):
294
+ *
295
+ * ```sql
296
+ * select * from "person" (where "id" = 1 or "id" = 2)
297
+ * ```
298
+ */
299
+ orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): WhereInterface<DB, TB>;
300
+ orWhere(grouper: WhereGrouper<DB, TB>): WhereInterface<DB, TB>;
301
+ orWhere(raw: AnyRawBuilder): WhereInterface<DB, TB>;
302
+ /**
303
+ * Adds an `or where` clause to the query. Otherwise works just like
304
+ * {@link WhereInterface.whereRef | whereRef}.
305
+ *
306
+ * Also see {@link WhereInterface.orWhere | orWhere} and {@link WhereInterface.where | where}.
307
+ */
308
+ orWhereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): WhereInterface<DB, TB>;
309
+ /**
310
+ * Adds a `where exists` clause to the query.
311
+ *
312
+ * You can either use a subquery or a raw instance.
313
+ *
314
+ * ### Examples
315
+ *
316
+ * The query below selets all persons that own a pet named Catto:
317
+ *
318
+ * ```ts
319
+ * const persons = await db
320
+ * .selectFrom('person')
321
+ * .selectAll()
322
+ * .whereExists((qb) => qb
323
+ * .selectFrom('pet')
324
+ * .select('pet.id')
325
+ * .whereRef('person.id', '=', 'pet.owner_id')
326
+ * .where('pet.name', '=', 'Catto')
327
+ * )
328
+ * .execute()
329
+ * ```
330
+ *
331
+ * The generated SQL (PostgreSQL):
332
+ *
333
+ * ```sql
334
+ * select * from "person"
335
+ * where exists (
336
+ * select "pet"."id"
337
+ * from "pet"
338
+ * where "person"."id" = "pet"."owner_id"
339
+ * and "pet"."name" = $1
340
+ * )
341
+ * ```
342
+ *
343
+ * The same query as in the previous example but with using raw:
344
+ *
345
+ * ```ts
346
+ * db.selectFrom('person')
347
+ * .selectAll()
348
+ * .whereExists(
349
+ * db.raw(
350
+ * '(select pet.id from pet where person.id = pet.owner_id and pet.name = ?)',
351
+ * ['Catto']
352
+ * )
353
+ * )
354
+ * ```
355
+ *
356
+ * The generated SQL (PostgreSQL):
357
+ *
358
+ * ```sql
359
+ * select * from "person"
360
+ * where exists (
361
+ * select pet.id
362
+ * from pet
363
+ * where person.id = pet.owner_id
364
+ * and pet.name = $1
365
+ * )
366
+ * ```
367
+ */
368
+ whereExists(arg: ExistsExpression<DB, TB>): WhereInterface<DB, TB>;
369
+ /**
370
+ * Just like {@link WhereInterface.whereExists | whereExists} but creates a `not exists` clause.
371
+ */
372
+ whereNotExists(arg: ExistsExpression<DB, TB>): WhereInterface<DB, TB>;
373
+ /**
374
+ * Just like {@link WhereInterface.whereExists | whereExists} but creates a `or exists` clause.
375
+ */
376
+ orWhereExists(arg: ExistsExpression<DB, TB>): WhereInterface<DB, TB>;
377
+ /**
378
+ * Just like {@link WhereInterface.whereExists | whereExists} but creates a `or not exists` clause.
379
+ */
380
+ orWhereNotExists(arg: ExistsExpression<DB, TB>): WhereInterface<DB, TB>;
381
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -67,6 +67,7 @@ import { DropViewNode } from '../operation-node/drop-view-node.js';
67
67
  import { GeneratedAlwaysAsNode } from '../operation-node/generated-always-as-node.js';
68
68
  import { DefaultValueNode } from '../operation-node/default-value-node.js';
69
69
  import { OnNode } from '../operation-node/on-node.js';
70
+ import { ValuesNode } from '../operation-node/values-node.js';
70
71
  export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
71
72
  #private;
72
73
  protected get numParameters(): number;
@@ -81,6 +82,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
81
82
  protected visitWhere(node: WhereNode): void;
82
83
  protected visitHaving(node: HavingNode): void;
83
84
  protected visitInsertQuery(node: InsertQueryNode): void;
85
+ protected visitValues(node: ValuesNode): void;
84
86
  protected visitDeleteQuery(node: DeleteQueryNode): void;
85
87
  protected visitReturning(node: ReturningNode): void;
86
88
  protected visitAlias(node: AliasNode): void;
@@ -1,3 +1,4 @@
1
+ import { InsertQueryNode } from '../operation-node/insert-query-node.js';
1
2
  import { OperationNodeVisitor } from '../operation-node/operation-node-visitor.js';
2
3
  import { QueryNode } from '../operation-node/query-node.js';
3
4
  import { RawNode } from '../operation-node/raw-node.js';
@@ -24,9 +25,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
24
25
  return this.#sql;
25
26
  }
26
27
  visitSelectQuery(node) {
27
- const wrapInParens = this.nodeStack.length !== 1 &&
28
+ const wrapInParens = this.parentNode !== undefined &&
28
29
  !CreateViewNode.is(this.parentNode) &&
29
- !UnionNode.is(this.parentNode);
30
+ !UnionNode.is(this.parentNode) &&
31
+ !InsertQueryNode.is(this.parentNode);
30
32
  if (wrapInParens) {
31
33
  this.append('(');
32
34
  }
@@ -143,8 +145,8 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
143
145
  this.append(')');
144
146
  }
145
147
  if (node.values) {
146
- this.append(' values ');
147
- this.compileList(node.values);
148
+ this.append(' ');
149
+ this.visitNode(node.values);
148
150
  }
149
151
  if (node.onConflict) {
150
152
  this.append(' ');
@@ -162,6 +164,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
162
164
  this.append(')');
163
165
  }
164
166
  }
167
+ visitValues(node) {
168
+ this.append('values ');
169
+ this.compileList(node.values);
170
+ }
165
171
  visitDeleteQuery(node) {
166
172
  const isSubQuery = this.nodeStack.find(QueryNode.is) !== node;
167
173
  if (isSubQuery) {
@@ -294,7 +300,11 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
294
300
  this.visitNode(node.table);
295
301
  }
296
302
  visitCreateTable(node) {
297
- this.append('create table ');
303
+ this.append('create ');
304
+ if (node.temporary) {
305
+ this.append('temporary ');
306
+ }
307
+ this.append('table ');
298
308
  if (node.ifNotExists) {
299
309
  this.append('if not exists ');
300
310
  }
@@ -302,6 +312,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
302
312
  this.append(' (');
303
313
  this.compileList([...node.columns, ...(node.constraints ?? [])]);
304
314
  this.append(')');
315
+ if (node.onCommit) {
316
+ this.append(' on commit ');
317
+ this.append(node.onCommit);
318
+ }
305
319
  }
306
320
  visitColumnDefinition(node) {
307
321
  this.visitNode(node.column);
@@ -664,6 +678,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
664
678
  if (node.materialized) {
665
679
  this.append('materialized ');
666
680
  }
681
+ if (node.temporary) {
682
+ this.append('temporary ');
683
+ }
667
684
  this.append('view ');
668
685
  if (node.ifNotExists) {
669
686
  this.append('if not exists ');