kysely 0.16.11 → 0.17.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 (170) 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-introspector.js +2 -1
  4. package/dist/cjs/dialect/postgres/postgres-adapter.js +3 -2
  5. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +2 -1
  6. package/dist/cjs/index-nodeless.d.ts +2 -0
  7. package/dist/cjs/index-nodeless.js +2 -0
  8. package/dist/cjs/kysely.d.ts +3 -6
  9. package/dist/cjs/kysely.js +7 -12
  10. package/dist/cjs/migration/migrator.js +4 -4
  11. package/dist/cjs/operation-node/operation-node-transformer.js +1 -1
  12. package/dist/cjs/operation-node/raw-node.d.ts +4 -2
  13. package/dist/cjs/operation-node/raw-node.js +8 -2
  14. package/dist/cjs/parser/complex-expression-parser.d.ts +5 -5
  15. package/dist/cjs/parser/complex-expression-parser.js +5 -4
  16. package/dist/cjs/parser/filter-parser.d.ts +9 -9
  17. package/dist/cjs/parser/filter-parser.js +31 -30
  18. package/dist/cjs/parser/group-by-parser.d.ts +1 -2
  19. package/dist/cjs/parser/group-by-parser.js +2 -2
  20. package/dist/cjs/parser/insert-values-parser.d.ts +1 -2
  21. package/dist/cjs/parser/insert-values-parser.js +6 -6
  22. package/dist/cjs/parser/join-parser.d.ts +1 -2
  23. package/dist/cjs/parser/join-parser.js +8 -7
  24. package/dist/cjs/parser/order-by-parser.d.ts +1 -2
  25. package/dist/cjs/parser/order-by-parser.js +4 -4
  26. package/dist/cjs/parser/parse-utils.d.ts +10 -0
  27. package/dist/cjs/parser/parse-utils.js +38 -0
  28. package/dist/cjs/parser/reference-parser.d.ts +2 -3
  29. package/dist/cjs/parser/reference-parser.js +5 -5
  30. package/dist/cjs/parser/select-parser.d.ts +1 -2
  31. package/dist/cjs/parser/select-parser.js +5 -5
  32. package/dist/cjs/parser/table-parser.d.ts +2 -3
  33. package/dist/cjs/parser/table-parser.js +5 -5
  34. package/dist/cjs/parser/update-set-parser.d.ts +1 -2
  35. package/dist/cjs/parser/update-set-parser.js +2 -2
  36. package/dist/cjs/parser/value-parser.d.ts +3 -4
  37. package/dist/cjs/parser/value-parser.js +7 -7
  38. package/dist/cjs/parser/with-parser.d.ts +1 -2
  39. package/dist/cjs/parser/with-parser.js +3 -2
  40. package/dist/cjs/query-builder/delete-query-builder.d.ts +23 -19
  41. package/dist/cjs/query-builder/delete-query-builder.js +15 -15
  42. package/dist/cjs/query-builder/expression-builder.d.ts +4 -13
  43. package/dist/cjs/query-builder/expression-builder.js +12 -21
  44. package/dist/cjs/query-builder/function-builder.d.ts +2 -6
  45. package/dist/cjs/query-builder/function-builder.js +5 -8
  46. package/dist/cjs/query-builder/insert-query-builder.d.ts +12 -8
  47. package/dist/cjs/query-builder/insert-query-builder.js +8 -7
  48. package/dist/cjs/query-builder/join-builder.d.ts +0 -2
  49. package/dist/cjs/query-builder/join-builder.js +8 -8
  50. package/dist/cjs/query-builder/on-conflict-builder.d.ts +24 -20
  51. package/dist/cjs/query-builder/on-conflict-builder.js +17 -17
  52. package/dist/cjs/query-builder/returning-interface.d.ts +3 -1
  53. package/dist/cjs/query-builder/select-query-builder.d.ts +41 -29
  54. package/dist/cjs/query-builder/select-query-builder.js +28 -26
  55. package/dist/cjs/query-builder/update-query-builder.d.ts +30 -24
  56. package/dist/cjs/query-builder/update-query-builder.js +22 -20
  57. package/dist/cjs/query-builder/where-interface.d.ts +20 -16
  58. package/dist/cjs/query-compiler/default-query-compiler.js +1 -1
  59. package/dist/cjs/query-creator.d.ts +10 -129
  60. package/dist/cjs/query-creator.js +5 -136
  61. package/dist/cjs/query-executor/default-query-executor.d.ts +8 -1
  62. package/dist/cjs/query-executor/default-query-executor.js +13 -13
  63. package/dist/cjs/query-executor/noop-query-executor.d.ts +8 -0
  64. package/dist/cjs/query-executor/noop-query-executor.js +8 -1
  65. package/dist/cjs/query-executor/query-executor-provider.d.ts +8 -0
  66. package/dist/cjs/query-executor/query-executor-provider.js +2 -0
  67. package/dist/cjs/query-executor/query-executor.d.ts +7 -0
  68. package/dist/cjs/raw-builder/raw-builder.d.ts +42 -11
  69. package/dist/cjs/raw-builder/raw-builder.js +55 -56
  70. package/dist/cjs/raw-builder/sql.d.ts +323 -0
  71. package/dist/cjs/raw-builder/sql.js +153 -0
  72. package/dist/cjs/schema/alter-table-builder.d.ts +20 -8
  73. package/dist/cjs/schema/column-definition-builder.d.ts +20 -8
  74. package/dist/cjs/schema/create-index-builder.d.ts +3 -1
  75. package/dist/cjs/schema/create-index-builder.js +3 -1
  76. package/dist/cjs/schema/create-table-builder.d.ts +6 -2
  77. package/dist/cjs/schema/create-table-builder.js +6 -2
  78. package/dist/cjs/schema/create-view-builder.d.ts +3 -3
  79. package/dist/cjs/schema/create-view-builder.js +3 -3
  80. package/dist/cjs/util/query-id.js +10 -4
  81. package/dist/cjs/util/random-string.js +65 -2
  82. package/dist/esm/dialect/mysql/mysql-adapter.js +3 -4
  83. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -1
  84. package/dist/esm/dialect/postgres/postgres-adapter.js +3 -2
  85. package/dist/esm/dialect/sqlite/sqlite-introspector.js +2 -1
  86. package/dist/esm/index-nodeless.d.ts +2 -0
  87. package/dist/esm/index-nodeless.js +2 -0
  88. package/dist/esm/kysely.d.ts +3 -6
  89. package/dist/esm/kysely.js +7 -12
  90. package/dist/esm/migration/migrator.js +4 -4
  91. package/dist/esm/operation-node/operation-node-transformer.js +1 -1
  92. package/dist/esm/operation-node/raw-node.d.ts +4 -2
  93. package/dist/esm/operation-node/raw-node.js +8 -2
  94. package/dist/esm/parser/complex-expression-parser.d.ts +5 -5
  95. package/dist/esm/parser/complex-expression-parser.js +5 -4
  96. package/dist/esm/parser/filter-parser.d.ts +9 -9
  97. package/dist/esm/parser/filter-parser.js +31 -30
  98. package/dist/esm/parser/group-by-parser.d.ts +1 -2
  99. package/dist/esm/parser/group-by-parser.js +2 -2
  100. package/dist/esm/parser/insert-values-parser.d.ts +1 -2
  101. package/dist/esm/parser/insert-values-parser.js +6 -6
  102. package/dist/esm/parser/join-parser.d.ts +1 -2
  103. package/dist/esm/parser/join-parser.js +8 -7
  104. package/dist/esm/parser/order-by-parser.d.ts +1 -2
  105. package/dist/esm/parser/order-by-parser.js +4 -4
  106. package/dist/esm/parser/parse-utils.d.ts +10 -0
  107. package/dist/esm/parser/parse-utils.js +32 -0
  108. package/dist/esm/parser/reference-parser.d.ts +2 -3
  109. package/dist/esm/parser/reference-parser.js +5 -5
  110. package/dist/esm/parser/select-parser.d.ts +1 -2
  111. package/dist/esm/parser/select-parser.js +5 -5
  112. package/dist/esm/parser/table-parser.d.ts +2 -3
  113. package/dist/esm/parser/table-parser.js +5 -5
  114. package/dist/esm/parser/update-set-parser.d.ts +1 -2
  115. package/dist/esm/parser/update-set-parser.js +2 -2
  116. package/dist/esm/parser/value-parser.d.ts +3 -4
  117. package/dist/esm/parser/value-parser.js +7 -7
  118. package/dist/esm/parser/with-parser.d.ts +1 -2
  119. package/dist/esm/parser/with-parser.js +3 -2
  120. package/dist/esm/query-builder/delete-query-builder.d.ts +23 -19
  121. package/dist/esm/query-builder/delete-query-builder.js +15 -15
  122. package/dist/esm/query-builder/expression-builder.d.ts +4 -13
  123. package/dist/esm/query-builder/expression-builder.js +12 -21
  124. package/dist/esm/query-builder/function-builder.d.ts +2 -6
  125. package/dist/esm/query-builder/function-builder.js +5 -8
  126. package/dist/esm/query-builder/insert-query-builder.d.ts +12 -8
  127. package/dist/esm/query-builder/insert-query-builder.js +8 -7
  128. package/dist/esm/query-builder/join-builder.d.ts +0 -2
  129. package/dist/esm/query-builder/join-builder.js +8 -8
  130. package/dist/esm/query-builder/on-conflict-builder.d.ts +24 -20
  131. package/dist/esm/query-builder/on-conflict-builder.js +17 -17
  132. package/dist/esm/query-builder/returning-interface.d.ts +3 -1
  133. package/dist/esm/query-builder/select-query-builder.d.ts +41 -29
  134. package/dist/esm/query-builder/select-query-builder.js +28 -26
  135. package/dist/esm/query-builder/update-query-builder.d.ts +30 -24
  136. package/dist/esm/query-builder/update-query-builder.js +22 -20
  137. package/dist/esm/query-builder/where-interface.d.ts +20 -16
  138. package/dist/esm/query-compiler/default-query-compiler.js +1 -1
  139. package/dist/esm/query-creator.d.ts +10 -129
  140. package/dist/esm/query-creator.js +5 -136
  141. package/dist/esm/query-executor/default-query-executor.d.ts +8 -1
  142. package/dist/esm/query-executor/default-query-executor.js +13 -13
  143. package/dist/esm/query-executor/noop-query-executor.d.ts +8 -0
  144. package/dist/esm/query-executor/noop-query-executor.js +7 -0
  145. package/dist/esm/query-executor/query-executor-provider.d.ts +8 -0
  146. package/dist/esm/query-executor/query-executor-provider.js +2 -0
  147. package/dist/esm/query-executor/query-executor.d.ts +7 -0
  148. package/dist/esm/raw-builder/raw-builder.d.ts +42 -11
  149. package/dist/esm/raw-builder/raw-builder.js +56 -57
  150. package/dist/esm/raw-builder/sql.d.ts +323 -0
  151. package/dist/esm/raw-builder/sql.js +151 -0
  152. package/dist/esm/schema/alter-table-builder.d.ts +20 -8
  153. package/dist/esm/schema/column-definition-builder.d.ts +20 -8
  154. package/dist/esm/schema/create-index-builder.d.ts +3 -1
  155. package/dist/esm/schema/create-index-builder.js +3 -1
  156. package/dist/esm/schema/create-table-builder.d.ts +6 -2
  157. package/dist/esm/schema/create-table-builder.js +6 -2
  158. package/dist/esm/schema/create-view-builder.d.ts +3 -3
  159. package/dist/esm/schema/create-view-builder.js +3 -3
  160. package/dist/esm/util/query-id.js +10 -4
  161. package/dist/esm/util/random-string.js +65 -2
  162. package/package.json +13 -13
  163. package/dist/cjs/parser/parse-context.d.ts +0 -55
  164. package/dist/cjs/parser/parse-context.js +0 -50
  165. package/dist/cjs/util/private-symbols.d.ts +0 -5
  166. package/dist/cjs/util/private-symbols.js +0 -8
  167. package/dist/esm/parser/parse-context.d.ts +0 -55
  168. package/dist/esm/parser/parse-context.js +0 -47
  169. package/dist/esm/util/private-symbols.d.ts +0 -5
  170. package/dist/esm/util/private-symbols.js +0 -6
@@ -10,7 +10,6 @@ import { AnyRawBuilder, MergePartial, SingleResultType } from '../util/type-util
10
10
  import { Compilable } from '../util/compilable.js';
11
11
  import { QueryExecutor } from '../query-executor/query-executor.js';
12
12
  import { QueryId } from '../util/query-id.js';
13
- import { ParseContext } from '../parser/parse-context.js';
14
13
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
15
14
  import { WhereInterface } from './where-interface.js';
16
15
  import { JoinInterface } from './join-interface.js';
@@ -47,7 +46,7 @@ export declare class DeleteQueryBuilder<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 `sql\`your operator\``.
51
50
  *
52
51
  * ```ts
53
52
  * const persons = await db
@@ -117,7 +116,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
117
116
  *
118
117
  * A `where in` query can be built by using the `in` operator and an array
119
118
  * of values. The values in the array can also be subqueries or raw
120
- * instances.
119
+ * {@link sql} expressions.
121
120
  *
122
121
  * ```ts
123
122
  * const persons = await db
@@ -133,15 +132,17 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
133
132
  * select * from "person" where "id" in ($1, $2, $3)
134
133
  * ```
135
134
  *
136
- * If everything else fails, you can always pass {@link Kysely.raw | raw}
135
+ * If everything else fails, you can always use the {@link sql} tag
137
136
  * as any of the arguments, including the operator:
138
137
  *
139
138
  * ```ts
139
+ * import { sql } from 'kysely'
140
+ *
140
141
  * const persons = await db
141
142
  * .selectFrom('person')
142
143
  * .selectAll()
143
144
  * .where(
144
- * db.raw('coalesce(first_name, last_name)'),
145
+ * sql`coalesce(first_name, last_name)`,
145
146
  * 'like',
146
147
  * '%' + name + '%',
147
148
  * )
@@ -176,24 +177,25 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
176
177
  * ```
177
178
  *
178
179
  * 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.
180
+ * (except for the raw {@link sql} expressions). By default kysely only
181
+ * allows you to refer to columns that exist in the database **and**
182
+ * can be referred to in the current query and context.
182
183
  *
183
184
  * Sometimes you may want to refer to columns that come from the user
184
185
  * input and thus are not available at compile time.
185
186
  *
186
- * You have two options, `db.raw` or `db.dynamic`. The example below
187
+ * You have two options, the {@link sql} tag or `db.dynamic`. The example below
187
188
  * uses both:
188
189
  *
189
190
  * ```ts
191
+ * import { sql } from 'kysely'
190
192
  * const { ref } = db.dynamic
191
193
  *
192
194
  * const persons = await db
193
195
  * .selectFrom('person')
194
196
  * .selectAll()
195
197
  * .where(ref(columnFromUserInput), '=', 1)
196
- * .orWhere(db.raw('??', [columnFromUserInput]), '=', 2)
198
+ * .orWhere(sql.id(columnFromUserInput), '=', 2)
197
199
  * .execute()
198
200
  * ```
199
201
  */
@@ -327,13 +329,14 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
327
329
  /**
328
330
  * Adds a `where exists` clause to the query.
329
331
  *
330
- * You can either use a subquery or a raw instance.
332
+ * You can either use a subquery or a raw {@link sql} snippet.
331
333
  *
332
334
  * ### Examples
333
335
  *
334
336
  * The query below selets all persons that own a pet named Catto:
335
337
  *
336
338
  * ```ts
339
+ * const petName = 'Catto'
337
340
  * const persons = await db
338
341
  * .selectFrom('person')
339
342
  * .selectAll()
@@ -341,7 +344,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
341
344
  * .selectFrom('pet')
342
345
  * .select('pet.id')
343
346
  * .whereRef('person.id', '=', 'pet.owner_id')
344
- * .where('pet.name', '=', 'Catto')
347
+ * .where('pet.name', '=', petName)
345
348
  * )
346
349
  * .execute()
347
350
  * ```
@@ -358,16 +361,16 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
358
361
  * )
359
362
  * ```
360
363
  *
361
- * The same query as in the previous example but with using raw:
364
+ * The same query as in the previous example but with using raw {@link sql}:
362
365
  *
363
366
  * ```ts
367
+ * import { sql } from 'kysely'
368
+ *
369
+ * const petName = 'Catto'
364
370
  * db.selectFrom('person')
365
371
  * .selectAll()
366
372
  * .whereExists(
367
- * db.raw(
368
- * '(select pet.id from pet where person.id = pet.owner_id and pet.name = ?)',
369
- * ['Catto']
370
- * )
373
+ * sql`(select pet.id from pet where person.id = pet.owner_id and pet.name = ${petName})`
371
374
  * )
372
375
  * ```
373
376
  *
@@ -565,6 +568,8 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
565
568
  * Return arbitrary expressions:
566
569
  *
567
570
  * ```ts
571
+ * import { sql } from 'kysely'
572
+ *
568
573
  * const { id, full_name, first_pet_id } = await db
569
574
  * .insertInto('person')
570
575
  * .values({
@@ -573,7 +578,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
573
578
  * })
574
579
  * .returning([
575
580
  * 'id as id',
576
- * db.raw<string>(`concat(first_name, ' ', last_name)`).as('full_name'),
581
+ * sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
577
582
  * (qb) => qb.selectFrom('pets').select('pet.id').limit(1).as('first_pet_id')
578
583
  * ])
579
584
  * .executeTakeFirst()
@@ -736,5 +741,4 @@ export interface DeleteQueryBuilderProps {
736
741
  readonly queryId: QueryId;
737
742
  readonly queryNode: DeleteQueryNode;
738
743
  readonly executor: QueryExecutor;
739
- readonly parseContext: ParseContext;
740
744
  }
@@ -18,79 +18,79 @@ export class DeleteQueryBuilder {
18
18
  where(...args) {
19
19
  return new DeleteQueryBuilder({
20
20
  ...this.#props,
21
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(this.#props.parseContext, args)),
21
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(args)),
22
22
  });
23
23
  }
24
24
  whereRef(lhs, op, rhs) {
25
25
  return new DeleteQueryBuilder({
26
26
  ...this.#props,
27
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
27
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
28
28
  });
29
29
  }
30
30
  orWhere(...args) {
31
31
  return new DeleteQueryBuilder({
32
32
  ...this.#props,
33
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(this.#props.parseContext, args)),
33
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(args)),
34
34
  });
35
35
  }
36
36
  orWhereRef(lhs, op, rhs) {
37
37
  return new DeleteQueryBuilder({
38
38
  ...this.#props,
39
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
39
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
40
40
  });
41
41
  }
42
42
  whereExists(arg) {
43
43
  return new DeleteQueryBuilder({
44
44
  ...this.#props,
45
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
45
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(arg)),
46
46
  });
47
47
  }
48
48
  whereNotExists(arg) {
49
49
  return new DeleteQueryBuilder({
50
50
  ...this.#props,
51
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
51
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(arg)),
52
52
  });
53
53
  }
54
54
  orWhereExists(arg) {
55
55
  return new DeleteQueryBuilder({
56
56
  ...this.#props,
57
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
57
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(arg)),
58
58
  });
59
59
  }
60
60
  orWhereNotExists(arg) {
61
61
  return new DeleteQueryBuilder({
62
62
  ...this.#props,
63
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
63
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(arg)),
64
64
  });
65
65
  }
66
66
  innerJoin(...args) {
67
67
  return new DeleteQueryBuilder({
68
68
  ...this.#props,
69
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'InnerJoin', args)),
69
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('InnerJoin', args)),
70
70
  });
71
71
  }
72
72
  leftJoin(...args) {
73
73
  return new DeleteQueryBuilder({
74
74
  ...this.#props,
75
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'LeftJoin', args)),
75
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LeftJoin', args)),
76
76
  });
77
77
  }
78
78
  rightJoin(...args) {
79
79
  return new DeleteQueryBuilder({
80
80
  ...this.#props,
81
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'RightJoin', args)),
81
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('RightJoin', args)),
82
82
  });
83
83
  }
84
84
  fullJoin(...args) {
85
85
  return new DeleteQueryBuilder({
86
86
  ...this.#props,
87
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'FullJoin', args)),
87
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)),
88
88
  });
89
89
  }
90
90
  returning(selection) {
91
91
  return new DeleteQueryBuilder({
92
92
  ...this.#props,
93
- queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(this.#props.parseContext, selection)),
93
+ queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(selection)),
94
94
  });
95
95
  }
96
96
  returningAll() {
@@ -136,7 +136,7 @@ export class DeleteQueryBuilder {
136
136
  orderBy(orderBy, direction) {
137
137
  return new DeleteQueryBuilder({
138
138
  ...this.#props,
139
- queryNode: DeleteQueryNode.cloneWithOrderByItem(this.#props.queryNode, parseOrderBy(this.#props.parseContext, orderBy, direction)),
139
+ queryNode: DeleteQueryNode.cloneWithOrderByItem(this.#props.queryNode, parseOrderBy(orderBy, direction)),
140
140
  });
141
141
  }
142
142
  /**
@@ -263,7 +263,7 @@ export class DeleteQueryBuilder {
263
263
  const compildQuery = this.compile();
264
264
  const query = compildQuery.query;
265
265
  const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
266
- if (this.#props.parseContext.adapter.supportsReturning && query.returning) {
266
+ if (this.#props.executor.adapter.supportsReturning && query.returning) {
267
267
  return result.rows;
268
268
  }
269
269
  else {
@@ -1,10 +1,9 @@
1
1
  import { SelectQueryBuilder } from './select-query-builder.js';
2
2
  import { TableExpression, TableExpressionDatabase, TableExpressionTables } from '../parser/table-parser.js';
3
- import { NoopQueryExecutor } from '../query-executor/noop-query-executor.js';
4
- import { ParseContext } from '../parser/parse-context.js';
5
3
  import { FunctionBuilder } from './function-builder.js';
6
4
  import { ExtractTypeFromReferenceExpression, StringReference } from '../parser/reference-parser.js';
7
5
  import { RawBuilder } from '../raw-builder/raw-builder.js';
6
+ import { QueryExecutor } from '../index-nodeless.js';
8
7
  export declare class ExpressionBuilder<DB, TB extends keyof DB> {
9
8
  #private;
10
9
  constructor(props: ExpressionBuilderProps);
@@ -90,10 +89,6 @@ export declare class ExpressionBuilder<DB, TB extends keyof DB> {
90
89
  * See {@link QueryCreator.withSchema}
91
90
  */
92
91
  withSchema(schema: string): ExpressionBuilder<DB, TB>;
93
- /**
94
- * See {@link QueryCreator.raw}.
95
- */
96
- raw<T = unknown>(sql: string, parameters?: unknown[]): RawBuilder<T>;
97
92
  /**
98
93
  * This can be used to reference columns.
99
94
  *
@@ -115,21 +110,17 @@ export declare class ExpressionBuilder<DB, TB extends keyof DB> {
115
110
  * )
116
111
  * ```
117
112
  *
118
- * In the next example we use `ref` in a raw expression. Unless you
113
+ * In the next example we use `ref` in a raw sql expression. Unless you
119
114
  * want to be as type-safe as possible, this is probably overkill:
120
115
  *
121
116
  * ```ts
122
117
  * db.update('pet').set({
123
- * name: (eb) => eb.raw('concat(?, ?)', [
124
- * eb.ref('pet.name'),
125
- * suffix,
126
- * ])
118
+ * name: (eb) => sql`concat(${eb.ref('pet.name')}, ${suffix})`
127
119
  * })
128
120
  * ```
129
121
  */
130
122
  ref<RE extends StringReference<DB, TB>>(reference: RE): RawBuilder<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
131
123
  }
132
124
  export interface ExpressionBuilderProps {
133
- readonly executor: NoopQueryExecutor;
134
- readonly parseContext: ParseContext;
125
+ readonly executor: QueryExecutor;
135
126
  }
@@ -4,9 +4,11 @@ import { SelectQueryNode } from '../operation-node/select-query-node.js';
4
4
  import { parseTableExpressionOrList, } from '../parser/table-parser.js';
5
5
  import { WithSchemaPlugin } from '../plugin/with-schema/with-schema-plugin.js';
6
6
  import { createQueryId } from '../util/query-id.js';
7
- import { freeze } from '../util/object-utils.js';
8
7
  import { FunctionBuilder } from './function-builder.js';
8
+ import { parseStringReference, } from '../parser/reference-parser.js';
9
9
  import { RawBuilder } from '../raw-builder/raw-builder.js';
10
+ import { RawNode } from '../index-nodeless.js';
11
+ import { freeze } from '../util/object-utils.js';
10
12
  export class ExpressionBuilder {
11
13
  #props;
12
14
  constructor(props) {
@@ -44,14 +46,13 @@ export class ExpressionBuilder {
44
46
  * ```
45
47
  */
46
48
  get fn() {
47
- return new FunctionBuilder({ executor: this.#props.executor });
49
+ return new FunctionBuilder();
48
50
  }
49
51
  selectFrom(table) {
50
52
  return new SelectQueryBuilder({
51
53
  queryId: createQueryId(),
52
54
  executor: this.#props.executor,
53
- parseContext: this.#props.parseContext,
54
- queryNode: SelectQueryNode.create(parseTableExpressionOrList(this.#props.parseContext, table)),
55
+ queryNode: SelectQueryNode.create(parseTableExpressionOrList(table)),
55
56
  });
56
57
  }
57
58
  /**
@@ -63,17 +64,6 @@ export class ExpressionBuilder {
63
64
  executor: this.#props.executor.withPluginAtFront(new WithSchemaPlugin(schema)),
64
65
  });
65
66
  }
66
- /**
67
- * See {@link QueryCreator.raw}.
68
- */
69
- raw(sql, parameters) {
70
- return new RawBuilder({
71
- queryId: createQueryId(),
72
- executor: this.#props.executor,
73
- sql,
74
- parameters,
75
- });
76
- }
77
67
  /**
78
68
  * This can be used to reference columns.
79
69
  *
@@ -95,19 +85,20 @@ export class ExpressionBuilder {
95
85
  * )
96
86
  * ```
97
87
  *
98
- * In the next example we use `ref` in a raw expression. Unless you
88
+ * In the next example we use `ref` in a raw sql expression. Unless you
99
89
  * want to be as type-safe as possible, this is probably overkill:
100
90
  *
101
91
  * ```ts
102
92
  * db.update('pet').set({
103
- * name: (eb) => eb.raw('concat(?, ?)', [
104
- * eb.ref('pet.name'),
105
- * suffix,
106
- * ])
93
+ * name: (eb) => sql`concat(${eb.ref('pet.name')}, ${suffix})`
107
94
  * })
108
95
  * ```
109
96
  */
110
97
  ref(reference) {
111
- return this.raw('??', [reference]);
98
+ return new RawBuilder({
99
+ queryId: createQueryId(),
100
+ plugins: this.#props.executor.plugins,
101
+ rawNode: RawNode.createWithChild(parseStringReference(reference)),
102
+ });
112
103
  }
113
104
  }
@@ -1,10 +1,9 @@
1
1
  import { StringReference, ExtractTypeFromReferenceExpression } from '../parser/reference-parser.js';
2
- import { QueryExecutor } from '../query-executor/query-executor.js';
3
2
  import { RawBuilder } from '../raw-builder/raw-builder.js';
4
3
  /**
5
4
  * Helpers for type safe SQL function calls.
6
5
  *
7
- * You can always use {@link Kysely.raw} to call functions and build arbitrary
6
+ * You can always use the {@link sql} tag to call functions and build arbitrary
8
7
  * expressions. This module simply has shortcuts for most common function calls.
9
8
  *
10
9
  * ### Examples
@@ -35,7 +34,7 @@ import { RawBuilder } from '../raw-builder/raw-builder.js';
35
34
  */
36
35
  export declare class FunctionBuilder<DB, TB extends keyof DB> {
37
36
  #private;
38
- constructor(props: FunctionBuilderProps);
37
+ constructor();
39
38
  /**
40
39
  * Calls the `max` function for the column given as the argument.
41
40
  *
@@ -132,6 +131,3 @@ export declare class FunctionBuilder<DB, TB extends keyof DB> {
132
131
  */
133
132
  count<O extends number | string | bigint, C extends StringReference<DB, TB> = any>(column: C): RawBuilder<O>;
134
133
  }
135
- export interface FunctionBuilderProps {
136
- readonly executor: QueryExecutor;
137
- }
@@ -1,11 +1,12 @@
1
1
  /// <reference types="./function-builder.d.ts" />
2
+ import { RawNode } from '../index-nodeless.js';
3
+ import { parseStringReference, } from '../parser/reference-parser.js';
2
4
  import { RawBuilder } from '../raw-builder/raw-builder.js';
3
- import { freeze } from '../util/object-utils.js';
4
5
  import { createQueryId } from '../util/query-id.js';
5
6
  /**
6
7
  * Helpers for type safe SQL function calls.
7
8
  *
8
- * You can always use {@link Kysely.raw} to call functions and build arbitrary
9
+ * You can always use the {@link sql} tag to call functions and build arbitrary
9
10
  * expressions. This module simply has shortcuts for most common function calls.
10
11
  *
11
12
  * ### Examples
@@ -35,9 +36,7 @@ import { createQueryId } from '../util/query-id.js';
35
36
  * ```
36
37
  */
37
38
  export class FunctionBuilder {
38
- #props;
39
- constructor(props) {
40
- this.#props = freeze(props);
39
+ constructor() {
41
40
  this.min = this.min.bind(this);
42
41
  this.max = this.max.bind(this);
43
42
  this.avg = this.avg.bind(this);
@@ -152,9 +151,7 @@ export class FunctionBuilder {
152
151
  #oneArgFunction(fn, column) {
153
152
  return new RawBuilder({
154
153
  queryId: createQueryId(),
155
- executor: this.#props.executor,
156
- sql: `${fn}(??)`,
157
- parameters: [column],
154
+ rawNode: RawNode.create([`${fn}(`, ')'], [parseStringReference(column)]),
158
155
  });
159
156
  }
160
157
  }
@@ -8,7 +8,6 @@ import { MutationObject } from '../parser/update-set-parser.js';
8
8
  import { Compilable } from '../util/compilable.js';
9
9
  import { QueryExecutor } from '../query-executor/query-executor.js';
10
10
  import { QueryId } from '../util/query-id.js';
11
- import { ParseContext } from '../parser/parse-context.js';
12
11
  import { InsertResult } from './insert-result.js';
13
12
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
14
13
  import { ReturningRow } from '../parser/returning-parser.js';
@@ -25,7 +24,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
25
24
  *
26
25
  * This method takes an object whose keys are column names and values are
27
26
  * values to insert. In addition to the column's type, the values can be
28
- * {@link Kysely.raw | raw} instances or select queries.
27
+ * raw {@link sql} snippets or select queries.
29
28
  *
30
29
  * You must provide all fields you haven't explicitly marked as nullable
31
30
  * or optional using {@link Generated} or {@link ColumnType}.
@@ -106,16 +105,18 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
106
105
  * insert into "person" ("first_name", "last_name") values ($1, $2) returning "id"
107
106
  * ```
108
107
  *
109
- * In addition to primitives, the values can also be `raw` expressions or
108
+ * In addition to primitives, the values can also be raw sql expressions or
110
109
  * select queries:
111
110
  *
112
111
  * ```ts
112
+ * import { sql } from 'kysely'
113
+ *
113
114
  * const result = await db
114
115
  * .insertInto('person')
115
116
  * .values({
116
117
  * first_name: 'Jennifer',
117
- * last_name: db.raw('? || ?', ['Ani', 'ston']),
118
- * age: db.selectFrom('person').select(raw('avg(age)')),
118
+ * last_name: sql`${'Ani'} || ${'ston'}`,
119
+ * age: db.selectFrom('person').select(sql`avg(age)`),
119
120
  * })
120
121
  * .executeTakeFirst()
121
122
  *
@@ -271,6 +272,8 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
271
272
  * the unique index is an expression index:
272
273
  *
273
274
  * ```ts
275
+ * import { sql } from 'kysely'
276
+ *
274
277
  * await db
275
278
  * .insertInto('pet')
276
279
  * .values({
@@ -278,7 +281,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
278
281
  * species: 'cat',
279
282
  * })
280
283
  * .onConflict((oc) => oc
281
- * .expression(db.raw('lower(name)'))
284
+ * .expression(sql`lower(name)`)
282
285
  * .doUpdateSet({ species: 'hamster' })
283
286
  * )
284
287
  * .execute()
@@ -423,6 +426,8 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
423
426
  * Return arbitrary expressions:
424
427
  *
425
428
  * ```ts
429
+ * import { sql } from 'kysely'
430
+ *
426
431
  * const { id, full_name, first_pet_id } = await db
427
432
  * .insertInto('person')
428
433
  * .values({
@@ -431,7 +436,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
431
436
  * })
432
437
  * .returning([
433
438
  * 'id as id',
434
- * db.raw<string>(`concat(first_name, ' ', last_name)`).as('full_name'),
439
+ * sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
435
440
  * (qb) => qb.selectFrom('pets').select('pet.id').limit(1).as('first_pet_id')
436
441
  * ])
437
442
  * .executeTakeFirst()
@@ -541,5 +546,4 @@ export interface InsertQueryBuilderProps {
541
546
  readonly queryId: QueryId;
542
547
  readonly queryNode: InsertQueryNode;
543
548
  readonly executor: QueryExecutor;
544
- readonly parseContext: ParseContext;
545
549
  }
@@ -19,7 +19,7 @@ export class InsertQueryBuilder {
19
19
  this.#props = freeze(props);
20
20
  }
21
21
  values(args) {
22
- const [columns, values] = parseInsertObjectOrList(this.#props.parseContext, args);
22
+ const [columns, values] = parseInsertObjectOrList(args);
23
23
  return new InsertQueryBuilder({
24
24
  ...this.#props,
25
25
  queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
@@ -80,7 +80,7 @@ export class InsertQueryBuilder {
80
80
  return new InsertQueryBuilder({
81
81
  ...this.#props,
82
82
  queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
83
- values: parseComplexExpression(this.#props.parseContext, expression),
83
+ values: parseComplexExpression(expression),
84
84
  }),
85
85
  });
86
86
  }
@@ -174,6 +174,8 @@ export class InsertQueryBuilder {
174
174
  * the unique index is an expression index:
175
175
  *
176
176
  * ```ts
177
+ * import { sql } from 'kysely'
178
+ *
177
179
  * await db
178
180
  * .insertInto('pet')
179
181
  * .values({
@@ -181,7 +183,7 @@ export class InsertQueryBuilder {
181
183
  * species: 'cat',
182
184
  * })
183
185
  * .onConflict((oc) => oc
184
- * .expression(db.raw('lower(name)'))
186
+ * .expression(sql`lower(name)`)
185
187
  * .doUpdateSet({ species: 'hamster' })
186
188
  * )
187
189
  * .execute()
@@ -269,7 +271,6 @@ export class InsertQueryBuilder {
269
271
  queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
270
272
  onConflict: callback(new OnConflictBuilder({
271
273
  onConflictNode: OnConflictNode.create(),
272
- parseContext: this.#props.parseContext,
273
274
  })).toOperationNode(),
274
275
  }),
275
276
  });
@@ -296,14 +297,14 @@ export class InsertQueryBuilder {
296
297
  return new InsertQueryBuilder({
297
298
  ...this.#props,
298
299
  queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
299
- onDuplicateKey: OnDuplicateKeyNode.create(parseUpdateObject(this.#props.parseContext, updates)),
300
+ onDuplicateKey: OnDuplicateKeyNode.create(parseUpdateObject(updates)),
300
301
  }),
301
302
  });
302
303
  }
303
304
  returning(selection) {
304
305
  return new InsertQueryBuilder({
305
306
  ...this.#props,
306
- queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(this.#props.parseContext, selection)),
307
+ queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(selection)),
307
308
  });
308
309
  }
309
310
  returningAll() {
@@ -413,7 +414,7 @@ export class InsertQueryBuilder {
413
414
  const compildQuery = this.compile();
414
415
  const query = compildQuery.query;
415
416
  const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
416
- if (this.#props.parseContext.adapter.supportsReturning && query.returning) {
417
+ if (this.#props.executor.adapter.supportsReturning && query.returning) {
417
418
  return result.rows;
418
419
  }
419
420
  else {
@@ -1,7 +1,6 @@
1
1
  import { JoinNode } from '../operation-node/join-node.js';
2
2
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
3
3
  import { ExistsExpression, FilterOperator, FilterValueExpressionOrList } from '../parser/filter-parser.js';
4
- import { ParseContext } from '../parser/parse-context.js';
5
4
  import { ReferenceExpression } from '../parser/reference-parser.js';
6
5
  import { AnyRawBuilder } from '../util/type-utils.js';
7
6
  export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNodeSource {
@@ -71,5 +70,4 @@ export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNo
71
70
  }
72
71
  export interface JoinBuilderProps {
73
72
  readonly joinNode: JoinNode;
74
- readonly parseContext: ParseContext;
75
73
  }