kysely 0.16.11 → 0.17.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 (198) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/dialect/mysql/mysql-adapter.js +3 -4
  3. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +19 -0
  4. package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -1
  5. package/dist/cjs/dialect/postgres/postgres-adapter.js +3 -2
  6. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +2 -1
  7. package/dist/cjs/driver/connection-provider.d.ts +1 -1
  8. package/dist/cjs/driver/default-connection-provider.d.ts +1 -1
  9. package/dist/cjs/driver/default-connection-provider.js +2 -2
  10. package/dist/cjs/driver/dummy-driver.d.ts +8 -0
  11. package/dist/cjs/driver/dummy-driver.js +8 -0
  12. package/dist/cjs/driver/single-connection-provider.d.ts +1 -1
  13. package/dist/cjs/driver/single-connection-provider.js +2 -2
  14. package/dist/cjs/index-nodeless.d.ts +2 -0
  15. package/dist/cjs/index-nodeless.js +2 -0
  16. package/dist/cjs/kysely.d.ts +3 -6
  17. package/dist/cjs/kysely.js +30 -41
  18. package/dist/cjs/migration/migrator.js +4 -4
  19. package/dist/cjs/operation-node/operation-node-transformer.js +1 -1
  20. package/dist/cjs/operation-node/raw-node.d.ts +4 -2
  21. package/dist/cjs/operation-node/raw-node.js +8 -2
  22. package/dist/cjs/parser/complex-expression-parser.d.ts +5 -5
  23. package/dist/cjs/parser/complex-expression-parser.js +5 -4
  24. package/dist/cjs/parser/filter-parser.d.ts +9 -9
  25. package/dist/cjs/parser/filter-parser.js +31 -30
  26. package/dist/cjs/parser/group-by-parser.d.ts +1 -2
  27. package/dist/cjs/parser/group-by-parser.js +2 -2
  28. package/dist/cjs/parser/insert-values-parser.d.ts +1 -2
  29. package/dist/cjs/parser/insert-values-parser.js +6 -6
  30. package/dist/cjs/parser/join-parser.d.ts +1 -2
  31. package/dist/cjs/parser/join-parser.js +8 -7
  32. package/dist/cjs/parser/order-by-parser.d.ts +1 -2
  33. package/dist/cjs/parser/order-by-parser.js +4 -4
  34. package/dist/cjs/parser/parse-utils.d.ts +10 -0
  35. package/dist/cjs/parser/parse-utils.js +38 -0
  36. package/dist/cjs/parser/reference-parser.d.ts +2 -3
  37. package/dist/cjs/parser/reference-parser.js +5 -5
  38. package/dist/cjs/parser/select-parser.d.ts +1 -2
  39. package/dist/cjs/parser/select-parser.js +5 -5
  40. package/dist/cjs/parser/table-parser.d.ts +2 -3
  41. package/dist/cjs/parser/table-parser.js +5 -5
  42. package/dist/cjs/parser/update-set-parser.d.ts +1 -2
  43. package/dist/cjs/parser/update-set-parser.js +2 -2
  44. package/dist/cjs/parser/value-parser.d.ts +3 -4
  45. package/dist/cjs/parser/value-parser.js +7 -7
  46. package/dist/cjs/parser/with-parser.d.ts +1 -2
  47. package/dist/cjs/parser/with-parser.js +3 -2
  48. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +2 -1
  49. package/dist/cjs/query-builder/delete-query-builder.d.ts +34 -23
  50. package/dist/cjs/query-builder/delete-query-builder.js +15 -15
  51. package/dist/cjs/query-builder/expression-builder.d.ts +4 -13
  52. package/dist/cjs/query-builder/expression-builder.js +12 -21
  53. package/dist/cjs/query-builder/function-builder.d.ts +2 -6
  54. package/dist/cjs/query-builder/function-builder.js +5 -8
  55. package/dist/cjs/query-builder/insert-query-builder.d.ts +12 -8
  56. package/dist/cjs/query-builder/insert-query-builder.js +8 -7
  57. package/dist/cjs/query-builder/join-builder.d.ts +0 -2
  58. package/dist/cjs/query-builder/join-builder.js +8 -8
  59. package/dist/cjs/query-builder/on-conflict-builder.d.ts +46 -28
  60. package/dist/cjs/query-builder/on-conflict-builder.js +17 -17
  61. package/dist/cjs/query-builder/returning-interface.d.ts +3 -1
  62. package/dist/cjs/query-builder/select-query-builder.d.ts +52 -33
  63. package/dist/cjs/query-builder/select-query-builder.js +28 -26
  64. package/dist/cjs/query-builder/update-query-builder.d.ts +41 -28
  65. package/dist/cjs/query-builder/update-query-builder.js +22 -20
  66. package/dist/cjs/query-builder/where-interface.d.ts +31 -20
  67. package/dist/cjs/query-compiler/default-query-compiler.js +1 -1
  68. package/dist/cjs/query-creator.d.ts +10 -129
  69. package/dist/cjs/query-creator.js +5 -136
  70. package/dist/cjs/query-executor/default-query-executor.d.ts +21 -7
  71. package/dist/cjs/query-executor/default-query-executor.js +17 -19
  72. package/dist/cjs/query-executor/noop-query-executor.d.ts +20 -6
  73. package/dist/cjs/query-executor/noop-query-executor.js +11 -4
  74. package/dist/cjs/query-executor/query-executor-base.d.ts +62 -0
  75. package/dist/cjs/query-executor/query-executor-base.js +46 -0
  76. package/dist/cjs/query-executor/query-executor-provider.d.ts +8 -0
  77. package/dist/cjs/query-executor/query-executor-provider.js +2 -0
  78. package/dist/cjs/query-executor/query-executor.d.ts +20 -13
  79. package/dist/cjs/query-executor/query-executor.js +0 -57
  80. package/dist/cjs/raw-builder/raw-builder.d.ts +42 -11
  81. package/dist/cjs/raw-builder/raw-builder.js +55 -56
  82. package/dist/cjs/raw-builder/sql.d.ts +331 -0
  83. package/dist/cjs/raw-builder/sql.js +161 -0
  84. package/dist/cjs/schema/alter-table-builder.d.ts +42 -8
  85. package/dist/cjs/schema/alter-table-builder.js +20 -0
  86. package/dist/cjs/schema/column-definition-builder.d.ts +22 -8
  87. package/dist/cjs/schema/create-index-builder.d.ts +3 -1
  88. package/dist/cjs/schema/create-index-builder.js +3 -1
  89. package/dist/cjs/schema/create-table-builder.d.ts +7 -3
  90. package/dist/cjs/schema/create-table-builder.js +7 -3
  91. package/dist/cjs/schema/create-view-builder.d.ts +3 -3
  92. package/dist/cjs/schema/create-view-builder.js +3 -3
  93. package/dist/cjs/util/query-id.js +10 -4
  94. package/dist/cjs/util/random-string.js +65 -2
  95. package/dist/cjs/util/type-utils.d.ts +1 -1
  96. package/dist/esm/dialect/mysql/mysql-adapter.js +3 -4
  97. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +19 -0
  98. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -1
  99. package/dist/esm/dialect/postgres/postgres-adapter.js +3 -2
  100. package/dist/esm/dialect/sqlite/sqlite-introspector.js +2 -1
  101. package/dist/esm/driver/connection-provider.d.ts +1 -1
  102. package/dist/esm/driver/default-connection-provider.d.ts +1 -1
  103. package/dist/esm/driver/default-connection-provider.js +2 -2
  104. package/dist/esm/driver/dummy-driver.d.ts +8 -0
  105. package/dist/esm/driver/dummy-driver.js +8 -0
  106. package/dist/esm/driver/single-connection-provider.d.ts +1 -1
  107. package/dist/esm/driver/single-connection-provider.js +2 -2
  108. package/dist/esm/index-nodeless.d.ts +2 -0
  109. package/dist/esm/index-nodeless.js +2 -0
  110. package/dist/esm/kysely.d.ts +3 -6
  111. package/dist/esm/kysely.js +30 -41
  112. package/dist/esm/migration/migrator.js +4 -4
  113. package/dist/esm/operation-node/operation-node-transformer.js +1 -1
  114. package/dist/esm/operation-node/raw-node.d.ts +4 -2
  115. package/dist/esm/operation-node/raw-node.js +8 -2
  116. package/dist/esm/parser/complex-expression-parser.d.ts +5 -5
  117. package/dist/esm/parser/complex-expression-parser.js +5 -4
  118. package/dist/esm/parser/filter-parser.d.ts +9 -9
  119. package/dist/esm/parser/filter-parser.js +31 -30
  120. package/dist/esm/parser/group-by-parser.d.ts +1 -2
  121. package/dist/esm/parser/group-by-parser.js +2 -2
  122. package/dist/esm/parser/insert-values-parser.d.ts +1 -2
  123. package/dist/esm/parser/insert-values-parser.js +6 -6
  124. package/dist/esm/parser/join-parser.d.ts +1 -2
  125. package/dist/esm/parser/join-parser.js +8 -7
  126. package/dist/esm/parser/order-by-parser.d.ts +1 -2
  127. package/dist/esm/parser/order-by-parser.js +4 -4
  128. package/dist/esm/parser/parse-utils.d.ts +10 -0
  129. package/dist/esm/parser/parse-utils.js +32 -0
  130. package/dist/esm/parser/reference-parser.d.ts +2 -3
  131. package/dist/esm/parser/reference-parser.js +5 -5
  132. package/dist/esm/parser/select-parser.d.ts +1 -2
  133. package/dist/esm/parser/select-parser.js +5 -5
  134. package/dist/esm/parser/table-parser.d.ts +2 -3
  135. package/dist/esm/parser/table-parser.js +5 -5
  136. package/dist/esm/parser/update-set-parser.d.ts +1 -2
  137. package/dist/esm/parser/update-set-parser.js +2 -2
  138. package/dist/esm/parser/value-parser.d.ts +3 -4
  139. package/dist/esm/parser/value-parser.js +7 -7
  140. package/dist/esm/parser/with-parser.d.ts +1 -2
  141. package/dist/esm/parser/with-parser.js +3 -2
  142. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +2 -1
  143. package/dist/esm/query-builder/delete-query-builder.d.ts +34 -23
  144. package/dist/esm/query-builder/delete-query-builder.js +15 -15
  145. package/dist/esm/query-builder/expression-builder.d.ts +4 -13
  146. package/dist/esm/query-builder/expression-builder.js +12 -21
  147. package/dist/esm/query-builder/function-builder.d.ts +2 -6
  148. package/dist/esm/query-builder/function-builder.js +5 -8
  149. package/dist/esm/query-builder/insert-query-builder.d.ts +12 -8
  150. package/dist/esm/query-builder/insert-query-builder.js +8 -7
  151. package/dist/esm/query-builder/join-builder.d.ts +0 -2
  152. package/dist/esm/query-builder/join-builder.js +8 -8
  153. package/dist/esm/query-builder/on-conflict-builder.d.ts +46 -28
  154. package/dist/esm/query-builder/on-conflict-builder.js +17 -17
  155. package/dist/esm/query-builder/returning-interface.d.ts +3 -1
  156. package/dist/esm/query-builder/select-query-builder.d.ts +52 -33
  157. package/dist/esm/query-builder/select-query-builder.js +28 -26
  158. package/dist/esm/query-builder/update-query-builder.d.ts +41 -28
  159. package/dist/esm/query-builder/update-query-builder.js +22 -20
  160. package/dist/esm/query-builder/where-interface.d.ts +31 -20
  161. package/dist/esm/query-compiler/default-query-compiler.js +1 -1
  162. package/dist/esm/query-creator.d.ts +10 -129
  163. package/dist/esm/query-creator.js +5 -136
  164. package/dist/esm/query-executor/default-query-executor.d.ts +21 -7
  165. package/dist/esm/query-executor/default-query-executor.js +17 -19
  166. package/dist/esm/query-executor/noop-query-executor.d.ts +20 -6
  167. package/dist/esm/query-executor/noop-query-executor.js +10 -3
  168. package/dist/esm/query-executor/query-executor-base.d.ts +62 -0
  169. package/dist/esm/query-executor/query-executor-base.js +43 -0
  170. package/dist/esm/query-executor/query-executor-provider.d.ts +8 -0
  171. package/dist/esm/query-executor/query-executor-provider.js +2 -0
  172. package/dist/esm/query-executor/query-executor.d.ts +20 -13
  173. package/dist/esm/query-executor/query-executor.js +1 -55
  174. package/dist/esm/raw-builder/raw-builder.d.ts +42 -11
  175. package/dist/esm/raw-builder/raw-builder.js +56 -57
  176. package/dist/esm/raw-builder/sql.d.ts +331 -0
  177. package/dist/esm/raw-builder/sql.js +159 -0
  178. package/dist/esm/schema/alter-table-builder.d.ts +42 -8
  179. package/dist/esm/schema/alter-table-builder.js +20 -0
  180. package/dist/esm/schema/column-definition-builder.d.ts +22 -8
  181. package/dist/esm/schema/create-index-builder.d.ts +3 -1
  182. package/dist/esm/schema/create-index-builder.js +3 -1
  183. package/dist/esm/schema/create-table-builder.d.ts +7 -3
  184. package/dist/esm/schema/create-table-builder.js +7 -3
  185. package/dist/esm/schema/create-view-builder.d.ts +3 -3
  186. package/dist/esm/schema/create-view-builder.js +3 -3
  187. package/dist/esm/util/query-id.js +10 -4
  188. package/dist/esm/util/random-string.js +65 -2
  189. package/dist/esm/util/type-utils.d.ts +1 -1
  190. package/package.json +14 -14
  191. package/dist/cjs/parser/parse-context.d.ts +0 -55
  192. package/dist/cjs/parser/parse-context.js +0 -50
  193. package/dist/cjs/util/private-symbols.d.ts +0 -5
  194. package/dist/cjs/util/private-symbols.js +0 -8
  195. package/dist/esm/parser/parse-context.d.ts +0 -55
  196. package/dist/esm/parser/parse-context.js +0 -47
  197. package/dist/esm/util/private-symbols.d.ts +0 -5
  198. package/dist/esm/util/private-symbols.js +0 -6
@@ -12,7 +12,6 @@ import { MutationObject } from '../parser/update-set-parser.js';
12
12
  import { Compilable } from '../util/compilable.js';
13
13
  import { QueryExecutor } from '../query-executor/query-executor.js';
14
14
  import { QueryId } from '../util/query-id.js';
15
- import { ParseContext } from '../parser/parse-context.js';
16
15
  import { UpdateResult } from './update-result.js';
17
16
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
18
17
  import { WhereInterface } from './where-interface.js';
@@ -47,7 +46,13 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
47
46
  * ```
48
47
  *
49
48
  * Operator can be any supported operator or if the typings don't support it
50
- * you can always use `db.raw('your operator')`.
49
+ * you can always use
50
+ *
51
+ * ```ts
52
+ * sql`your operator`
53
+ * ```
54
+ *
55
+ * The next example uses the `>` operator:
51
56
  *
52
57
  * ```ts
53
58
  * const persons = await db
@@ -63,8 +68,8 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
63
68
  * select * from "person" where "id" > $1
64
69
  * ```
65
70
  *
66
- * The `where` methods don't change the type of the query. You can add
67
- * conditional `where`s easily by doing something like this:
71
+ * `where` methods don't change the type of the query. You can add
72
+ * conditional statements easily by doing something like this:
68
73
  *
69
74
  * ```ts
70
75
  * let query = db
@@ -72,6 +77,8 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
72
77
  * .selectAll()
73
78
  *
74
79
  * if (firstName) {
80
+ * // The query builder is immutable. Remember to reassign
81
+ * // the result back to the query variable.
75
82
  * query = query.where('first_name', '=', firstName)
76
83
  * }
77
84
  *
@@ -79,8 +86,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
79
86
  * ```
80
87
  *
81
88
  * This is true for basically all methods execpt the `select` and
82
- * `returning` methods, which DO change the return type of the
83
- * query.
89
+ * `returning`, that __do__ change the return type of the query.
84
90
  *
85
91
  * Both the first and third argument can also be subqueries.
86
92
  * A subquery is defined by passing a function and calling
@@ -117,7 +123,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
117
123
  *
118
124
  * A `where in` query can be built by using the `in` operator and an array
119
125
  * of values. The values in the array can also be subqueries or raw
120
- * instances.
126
+ * {@link sql} expressions.
121
127
  *
122
128
  * ```ts
123
129
  * const persons = await db
@@ -133,15 +139,17 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
133
139
  * select * from "person" where "id" in ($1, $2, $3)
134
140
  * ```
135
141
  *
136
- * If everything else fails, you can always pass {@link Kysely.raw | raw}
142
+ * If everything else fails, you can always use the {@link sql} tag
137
143
  * as any of the arguments, including the operator:
138
144
  *
139
145
  * ```ts
146
+ * import { sql } from 'kysely'
147
+ *
140
148
  * const persons = await db
141
149
  * .selectFrom('person')
142
150
  * .selectAll()
143
151
  * .where(
144
- * db.raw('coalesce(first_name, last_name)'),
152
+ * sql`coalesce(first_name, last_name)`,
145
153
  * 'like',
146
154
  * '%' + name + '%',
147
155
  * )
@@ -176,24 +184,25 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
176
184
  * ```
177
185
  *
178
186
  * In all examples above the columns were known at compile time
179
- * (except for the `raw` expressions). By default kysely only allows
180
- * you to refer to columns that exist in the database **and** can be
181
- * referred to in the current query and context.
187
+ * (except for the raw {@link sql} expressions). By default kysely only
188
+ * allows you to refer to columns that exist in the database **and**
189
+ * can be referred to in the current query and context.
182
190
  *
183
191
  * Sometimes you may want to refer to columns that come from the user
184
192
  * input and thus are not available at compile time.
185
193
  *
186
- * You have two options, `db.raw` or `db.dynamic`. The example below
194
+ * You have two options, the {@link sql} tag or `db.dynamic`. The example below
187
195
  * uses both:
188
196
  *
189
197
  * ```ts
198
+ * import { sql } from 'kysely'
190
199
  * const { ref } = db.dynamic
191
200
  *
192
201
  * const persons = await db
193
202
  * .selectFrom('person')
194
203
  * .selectAll()
195
204
  * .where(ref(columnFromUserInput), '=', 1)
196
- * .orWhere(db.raw('??', [columnFromUserInput]), '=', 2)
205
+ * .orWhere(sql.id(columnFromUserInput), '=', 2)
197
206
  * .execute()
198
207
  * ```
199
208
  */
@@ -327,13 +336,14 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
327
336
  /**
328
337
  * Adds a `where exists` clause to the query.
329
338
  *
330
- * You can either use a subquery or a raw instance.
339
+ * You can either use a subquery or a raw {@link sql} snippet.
331
340
  *
332
341
  * ### Examples
333
342
  *
334
343
  * The query below selets all persons that own a pet named Catto:
335
344
  *
336
345
  * ```ts
346
+ * const petName = 'Catto'
337
347
  * const persons = await db
338
348
  * .selectFrom('person')
339
349
  * .selectAll()
@@ -341,7 +351,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
341
351
  * .selectFrom('pet')
342
352
  * .select('pet.id')
343
353
  * .whereRef('person.id', '=', 'pet.owner_id')
344
- * .where('pet.name', '=', 'Catto')
354
+ * .where('pet.name', '=', petName)
345
355
  * )
346
356
  * .execute()
347
357
  * ```
@@ -358,16 +368,16 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
358
368
  * )
359
369
  * ```
360
370
  *
361
- * The same query as in the previous example but with using raw:
371
+ * The same query as in the previous example but with using raw {@link sql}:
362
372
  *
363
373
  * ```ts
374
+ * import { sql } from 'kysely'
375
+ *
376
+ * const petName = 'Catto'
364
377
  * db.selectFrom('person')
365
378
  * .selectAll()
366
379
  * .whereExists(
367
- * db.raw(
368
- * '(select pet.id from pet where person.id = pet.owner_id and pet.name = ?)',
369
- * ['Catto']
370
- * )
380
+ * sql`(select pet.id from pet where person.id = pet.owner_id and pet.name = ${petName})`
371
381
  * )
372
382
  * ```
373
383
  *
@@ -526,8 +536,8 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
526
536
  * Sets the values to update for an {@link Kysely.updateTable | update} query.
527
537
  *
528
538
  * This method takes an object whose keys are column names and values are
529
- * values to update. In addition to the column's type, the values can be `raw`
530
- * instances or select queries.
539
+ * values to update. In addition to the column's type, the values can be
540
+ * raw {@link sql} snippets or select queries.
531
541
  *
532
542
  * The return value of an update query is an instance of {@link UpdateResult}.
533
543
  * You can use the {@link returning} method on supported databases to get out
@@ -580,16 +590,18 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
580
590
  * update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3 returning "id"
581
591
  * ```
582
592
  *
583
- * In addition to primitives, the values can also be `raw` expressions or
593
+ * In addition to primitives, the values can also be raw sql expressions or
584
594
  * select queries:
585
595
  *
586
596
  * ```ts
597
+ * import { sql } from 'kysely'
598
+ *
587
599
  * const result = await db
588
600
  * .updateTable('person')
589
601
  * .set({
590
602
  * first_name: 'Jennifer',
591
- * last_name: db.raw('? || ?', ['Ani', 'ston']),
592
- * age: db.selectFrom('person').select(raw('avg(age)')),
603
+ * last_name: sql`${'Ani'} || ${'ston'}`,
604
+ * age: db.selectFrom('person').select(sql`avg(age)`),
593
605
  * })
594
606
  * .where('id', '=', 1)
595
607
  * .executeTakeFirst()
@@ -651,6 +663,8 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
651
663
  * Return arbitrary expressions:
652
664
  *
653
665
  * ```ts
666
+ * import { sql } from 'kysely'
667
+ *
654
668
  * const { id, full_name, first_pet_id } = await db
655
669
  * .insertInto('person')
656
670
  * .values({
@@ -659,7 +673,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
659
673
  * })
660
674
  * .returning([
661
675
  * 'id as id',
662
- * db.raw<string>(`concat(first_name, ' ', last_name)`).as('full_name'),
676
+ * sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
663
677
  * (qb) => qb.selectFrom('pets').select('pet.id').limit(1).as('first_pet_id')
664
678
  * ])
665
679
  * .executeTakeFirst()
@@ -770,5 +784,4 @@ export interface UpdateQueryBuilderProps {
770
784
  readonly queryId: QueryId;
771
785
  readonly queryNode: UpdateQueryNode;
772
786
  readonly executor: QueryExecutor;
773
- readonly parseContext: ParseContext;
774
787
  }
@@ -17,81 +17,81 @@ export class UpdateQueryBuilder {
17
17
  where(...args) {
18
18
  return new UpdateQueryBuilder({
19
19
  ...this.#props,
20
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(this.#props.parseContext, args)),
20
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(args)),
21
21
  });
22
22
  }
23
23
  whereRef(lhs, op, rhs) {
24
24
  return new UpdateQueryBuilder({
25
25
  ...this.#props,
26
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
26
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
27
27
  });
28
28
  }
29
29
  orWhere(...args) {
30
30
  return new UpdateQueryBuilder({
31
31
  ...this.#props,
32
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(this.#props.parseContext, args)),
32
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(args)),
33
33
  });
34
34
  }
35
35
  orWhereRef(lhs, op, rhs) {
36
36
  return new UpdateQueryBuilder({
37
37
  ...this.#props,
38
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
38
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
39
39
  });
40
40
  }
41
41
  whereExists(arg) {
42
42
  return new UpdateQueryBuilder({
43
43
  ...this.#props,
44
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
44
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(arg)),
45
45
  });
46
46
  }
47
47
  whereNotExists(arg) {
48
48
  return new UpdateQueryBuilder({
49
49
  ...this.#props,
50
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
50
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(arg)),
51
51
  });
52
52
  }
53
53
  orWhereExists(arg) {
54
54
  return new UpdateQueryBuilder({
55
55
  ...this.#props,
56
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
56
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(arg)),
57
57
  });
58
58
  }
59
59
  orWhereNotExists(arg) {
60
60
  return new UpdateQueryBuilder({
61
61
  ...this.#props,
62
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
62
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(arg)),
63
63
  });
64
64
  }
65
65
  innerJoin(...args) {
66
66
  return new UpdateQueryBuilder({
67
67
  ...this.#props,
68
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'InnerJoin', args)),
68
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('InnerJoin', args)),
69
69
  });
70
70
  }
71
71
  leftJoin(...args) {
72
72
  return new UpdateQueryBuilder({
73
73
  ...this.#props,
74
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'LeftJoin', args)),
74
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LeftJoin', args)),
75
75
  });
76
76
  }
77
77
  rightJoin(...args) {
78
78
  return new UpdateQueryBuilder({
79
79
  ...this.#props,
80
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'RightJoin', args)),
80
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('RightJoin', args)),
81
81
  });
82
82
  }
83
83
  fullJoin(...args) {
84
84
  return new UpdateQueryBuilder({
85
85
  ...this.#props,
86
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'FullJoin', args)),
86
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)),
87
87
  });
88
88
  }
89
89
  /**
90
90
  * Sets the values to update for an {@link Kysely.updateTable | update} query.
91
91
  *
92
92
  * This method takes an object whose keys are column names and values are
93
- * values to update. In addition to the column's type, the values can be `raw`
94
- * instances or select queries.
93
+ * values to update. In addition to the column's type, the values can be
94
+ * raw {@link sql} snippets or select queries.
95
95
  *
96
96
  * The return value of an update query is an instance of {@link UpdateResult}.
97
97
  * You can use the {@link returning} method on supported databases to get out
@@ -144,16 +144,18 @@ export class UpdateQueryBuilder {
144
144
  * update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3 returning "id"
145
145
  * ```
146
146
  *
147
- * In addition to primitives, the values can also be `raw` expressions or
147
+ * In addition to primitives, the values can also be raw sql expressions or
148
148
  * select queries:
149
149
  *
150
150
  * ```ts
151
+ * import { sql } from 'kysely'
152
+ *
151
153
  * const result = await db
152
154
  * .updateTable('person')
153
155
  * .set({
154
156
  * first_name: 'Jennifer',
155
- * last_name: db.raw('? || ?', ['Ani', 'ston']),
156
- * age: db.selectFrom('person').select(raw('avg(age)')),
157
+ * last_name: sql`${'Ani'} || ${'ston'}`,
158
+ * age: db.selectFrom('person').select(sql`avg(age)`),
157
159
  * })
158
160
  * .where('id', '=', 1)
159
161
  * .executeTakeFirst()
@@ -174,13 +176,13 @@ export class UpdateQueryBuilder {
174
176
  set(row) {
175
177
  return new UpdateQueryBuilder({
176
178
  ...this.#props,
177
- queryNode: UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, parseUpdateObject(this.#props.parseContext, row)),
179
+ queryNode: UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, parseUpdateObject(row)),
178
180
  });
179
181
  }
180
182
  returning(selection) {
181
183
  return new UpdateQueryBuilder({
182
184
  ...this.#props,
183
- queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(this.#props.parseContext, selection)),
185
+ queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(selection)),
184
186
  });
185
187
  }
186
188
  returningAll() {
@@ -291,7 +293,7 @@ export class UpdateQueryBuilder {
291
293
  const compildQuery = this.compile();
292
294
  const query = compildQuery.query;
293
295
  const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
294
- if (this.#props.parseContext.adapter.supportsReturning && query.returning) {
296
+ if (this.#props.executor.adapter.supportsReturning && query.returning) {
295
297
  return result.rows;
296
298
  }
297
299
  else {
@@ -26,7 +26,13 @@ export interface WhereInterface<DB, TB extends keyof DB> {
26
26
  * ```
27
27
  *
28
28
  * Operator can be any supported operator or if the typings don't support it
29
- * you can always use `db.raw('your operator')`.
29
+ * you can always use
30
+ *
31
+ * ```ts
32
+ * sql`your operator`
33
+ * ```
34
+ *
35
+ * The next example uses the `>` operator:
30
36
  *
31
37
  * ```ts
32
38
  * const persons = await db
@@ -42,8 +48,8 @@ export interface WhereInterface<DB, TB extends keyof DB> {
42
48
  * select * from "person" where "id" > $1
43
49
  * ```
44
50
  *
45
- * The `where` methods don't change the type of the query. You can add
46
- * conditional `where`s easily by doing something like this:
51
+ * `where` methods don't change the type of the query. You can add
52
+ * conditional statements easily by doing something like this:
47
53
  *
48
54
  * ```ts
49
55
  * let query = db
@@ -51,6 +57,8 @@ export interface WhereInterface<DB, TB extends keyof DB> {
51
57
  * .selectAll()
52
58
  *
53
59
  * if (firstName) {
60
+ * // The query builder is immutable. Remember to reassign
61
+ * // the result back to the query variable.
54
62
  * query = query.where('first_name', '=', firstName)
55
63
  * }
56
64
  *
@@ -58,8 +66,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
58
66
  * ```
59
67
  *
60
68
  * This is true for basically all methods execpt the `select` and
61
- * `returning` methods, which DO change the return type of the
62
- * query.
69
+ * `returning`, that __do__ change the return type of the query.
63
70
  *
64
71
  * Both the first and third argument can also be subqueries.
65
72
  * A subquery is defined by passing a function and calling
@@ -96,7 +103,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
96
103
  *
97
104
  * A `where in` query can be built by using the `in` operator and an array
98
105
  * of values. The values in the array can also be subqueries or raw
99
- * instances.
106
+ * {@link sql} expressions.
100
107
  *
101
108
  * ```ts
102
109
  * const persons = await db
@@ -112,15 +119,17 @@ export interface WhereInterface<DB, TB extends keyof DB> {
112
119
  * select * from "person" where "id" in ($1, $2, $3)
113
120
  * ```
114
121
  *
115
- * If everything else fails, you can always pass {@link Kysely.raw | raw}
122
+ * If everything else fails, you can always use the {@link sql} tag
116
123
  * as any of the arguments, including the operator:
117
124
  *
118
125
  * ```ts
126
+ * import { sql } from 'kysely'
127
+ *
119
128
  * const persons = await db
120
129
  * .selectFrom('person')
121
130
  * .selectAll()
122
131
  * .where(
123
- * db.raw('coalesce(first_name, last_name)'),
132
+ * sql`coalesce(first_name, last_name)`,
124
133
  * 'like',
125
134
  * '%' + name + '%',
126
135
  * )
@@ -155,24 +164,25 @@ export interface WhereInterface<DB, TB extends keyof DB> {
155
164
  * ```
156
165
  *
157
166
  * In all examples above the columns were known at compile time
158
- * (except for the `raw` expressions). By default kysely only allows
159
- * you to refer to columns that exist in the database **and** can be
160
- * referred to in the current query and context.
167
+ * (except for the raw {@link sql} expressions). By default kysely only
168
+ * allows you to refer to columns that exist in the database **and**
169
+ * can be referred to in the current query and context.
161
170
  *
162
171
  * Sometimes you may want to refer to columns that come from the user
163
172
  * input and thus are not available at compile time.
164
173
  *
165
- * You have two options, `db.raw` or `db.dynamic`. The example below
174
+ * You have two options, the {@link sql} tag or `db.dynamic`. The example below
166
175
  * uses both:
167
176
  *
168
177
  * ```ts
178
+ * import { sql } from 'kysely'
169
179
  * const { ref } = db.dynamic
170
180
  *
171
181
  * const persons = await db
172
182
  * .selectFrom('person')
173
183
  * .selectAll()
174
184
  * .where(ref(columnFromUserInput), '=', 1)
175
- * .orWhere(db.raw('??', [columnFromUserInput]), '=', 2)
185
+ * .orWhere(sql.id(columnFromUserInput), '=', 2)
176
186
  * .execute()
177
187
  * ```
178
188
  */
@@ -306,13 +316,14 @@ export interface WhereInterface<DB, TB extends keyof DB> {
306
316
  /**
307
317
  * Adds a `where exists` clause to the query.
308
318
  *
309
- * You can either use a subquery or a raw instance.
319
+ * You can either use a subquery or a raw {@link sql} snippet.
310
320
  *
311
321
  * ### Examples
312
322
  *
313
323
  * The query below selets all persons that own a pet named Catto:
314
324
  *
315
325
  * ```ts
326
+ * const petName = 'Catto'
316
327
  * const persons = await db
317
328
  * .selectFrom('person')
318
329
  * .selectAll()
@@ -320,7 +331,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
320
331
  * .selectFrom('pet')
321
332
  * .select('pet.id')
322
333
  * .whereRef('person.id', '=', 'pet.owner_id')
323
- * .where('pet.name', '=', 'Catto')
334
+ * .where('pet.name', '=', petName)
324
335
  * )
325
336
  * .execute()
326
337
  * ```
@@ -337,16 +348,16 @@ export interface WhereInterface<DB, TB extends keyof DB> {
337
348
  * )
338
349
  * ```
339
350
  *
340
- * The same query as in the previous example but with using raw:
351
+ * The same query as in the previous example but with using raw {@link sql}:
341
352
  *
342
353
  * ```ts
354
+ * import { sql } from 'kysely'
355
+ *
356
+ * const petName = 'Catto'
343
357
  * db.selectFrom('person')
344
358
  * .selectAll()
345
359
  * .whereExists(
346
- * db.raw(
347
- * '(select pet.id from pet where person.id = pet.owner_id and pet.name = ?)',
348
- * ['Catto']
349
- * )
360
+ * sql`(select pet.id from pet where person.id = pet.owner_id and pet.name = ${petName})`
350
361
  * )
351
362
  * ```
352
363
  *
@@ -291,7 +291,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
291
291
  this.visitNode(node.on);
292
292
  }
293
293
  visitRaw(node) {
294
- const { sqlFragments, params } = node;
294
+ const { sqlFragments, parameters: params } = node;
295
295
  for (let i = 0; i < sqlFragments.length; ++i) {
296
296
  this.append(sqlFragments[i]);
297
297
  if (params.length > i) {