kysely 0.16.8 → 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 (179) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +23 -11
  3. package/dist/cjs/dialect/mysql/mysql-adapter.js +3 -4
  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/index-nodeless.d.ts +2 -0
  8. package/dist/cjs/index-nodeless.js +2 -0
  9. package/dist/cjs/kysely.d.ts +3 -6
  10. package/dist/cjs/kysely.js +9 -14
  11. package/dist/cjs/migration/migrator.d.ts +22 -0
  12. package/dist/cjs/migration/migrator.js +27 -5
  13. package/dist/cjs/operation-node/delete-query-node.d.ts +7 -0
  14. package/dist/cjs/operation-node/delete-query-node.js +15 -0
  15. package/dist/cjs/operation-node/operation-node-transformer.js +1 -1
  16. package/dist/cjs/operation-node/raw-node.d.ts +4 -2
  17. package/dist/cjs/operation-node/raw-node.js +8 -2
  18. package/dist/cjs/parser/complex-expression-parser.d.ts +5 -5
  19. package/dist/cjs/parser/complex-expression-parser.js +5 -4
  20. package/dist/cjs/parser/filter-parser.d.ts +9 -9
  21. package/dist/cjs/parser/filter-parser.js +31 -30
  22. package/dist/cjs/parser/group-by-parser.d.ts +1 -2
  23. package/dist/cjs/parser/group-by-parser.js +2 -2
  24. package/dist/cjs/parser/insert-values-parser.d.ts +1 -2
  25. package/dist/cjs/parser/insert-values-parser.js +6 -6
  26. package/dist/cjs/parser/join-parser.d.ts +1 -2
  27. package/dist/cjs/parser/join-parser.js +8 -7
  28. package/dist/cjs/parser/order-by-parser.d.ts +1 -2
  29. package/dist/cjs/parser/order-by-parser.js +4 -4
  30. package/dist/cjs/parser/parse-utils.d.ts +10 -0
  31. package/dist/cjs/parser/parse-utils.js +38 -0
  32. package/dist/cjs/parser/reference-parser.d.ts +2 -3
  33. package/dist/cjs/parser/reference-parser.js +5 -5
  34. package/dist/cjs/parser/select-parser.d.ts +1 -2
  35. package/dist/cjs/parser/select-parser.js +5 -5
  36. package/dist/cjs/parser/table-parser.d.ts +2 -3
  37. package/dist/cjs/parser/table-parser.js +5 -5
  38. package/dist/cjs/parser/update-set-parser.d.ts +1 -2
  39. package/dist/cjs/parser/update-set-parser.js +2 -2
  40. package/dist/cjs/parser/value-parser.d.ts +3 -4
  41. package/dist/cjs/parser/value-parser.js +7 -7
  42. package/dist/cjs/parser/with-parser.d.ts +1 -2
  43. package/dist/cjs/parser/with-parser.js +3 -2
  44. package/dist/cjs/query-builder/delete-query-builder.d.ts +77 -20
  45. package/dist/cjs/query-builder/delete-query-builder.js +81 -14
  46. package/dist/cjs/query-builder/expression-builder.d.ts +4 -13
  47. package/dist/cjs/query-builder/expression-builder.js +12 -21
  48. package/dist/cjs/query-builder/function-builder.d.ts +2 -6
  49. package/dist/cjs/query-builder/function-builder.js +5 -8
  50. package/dist/cjs/query-builder/insert-query-builder.d.ts +11 -9
  51. package/dist/cjs/query-builder/insert-query-builder.js +8 -7
  52. package/dist/cjs/query-builder/join-builder.d.ts +0 -2
  53. package/dist/cjs/query-builder/join-builder.js +8 -8
  54. package/dist/cjs/query-builder/on-conflict-builder.d.ts +24 -20
  55. package/dist/cjs/query-builder/on-conflict-builder.js +17 -17
  56. package/dist/cjs/query-builder/returning-interface.d.ts +2 -2
  57. package/dist/cjs/query-builder/select-query-builder.d.ts +43 -32
  58. package/dist/cjs/query-builder/select-query-builder.js +28 -26
  59. package/dist/cjs/query-builder/update-query-builder.d.ts +29 -25
  60. package/dist/cjs/query-builder/update-query-builder.js +22 -20
  61. package/dist/cjs/query-builder/where-interface.d.ts +20 -16
  62. package/dist/cjs/query-compiler/default-query-compiler.js +16 -7
  63. package/dist/cjs/query-creator.d.ts +24 -138
  64. package/dist/cjs/query-creator.js +19 -145
  65. package/dist/cjs/query-executor/default-query-executor.d.ts +8 -1
  66. package/dist/cjs/query-executor/default-query-executor.js +13 -13
  67. package/dist/cjs/query-executor/noop-query-executor.d.ts +8 -0
  68. package/dist/cjs/query-executor/noop-query-executor.js +8 -1
  69. package/dist/cjs/query-executor/query-executor-provider.d.ts +8 -0
  70. package/dist/cjs/query-executor/query-executor-provider.js +2 -0
  71. package/dist/cjs/query-executor/query-executor.d.ts +7 -0
  72. package/dist/cjs/raw-builder/raw-builder.d.ts +42 -11
  73. package/dist/cjs/raw-builder/raw-builder.js +55 -56
  74. package/dist/cjs/raw-builder/sql.d.ts +323 -0
  75. package/dist/cjs/raw-builder/sql.js +153 -0
  76. package/dist/cjs/schema/alter-table-builder.d.ts +20 -8
  77. package/dist/cjs/schema/alter-table-builder.js +3 -3
  78. package/dist/cjs/schema/column-definition-builder.d.ts +20 -8
  79. package/dist/cjs/schema/create-index-builder.d.ts +3 -1
  80. package/dist/cjs/schema/create-index-builder.js +3 -1
  81. package/dist/cjs/schema/create-table-builder.d.ts +6 -2
  82. package/dist/cjs/schema/create-table-builder.js +8 -4
  83. package/dist/cjs/schema/create-view-builder.d.ts +3 -3
  84. package/dist/cjs/schema/create-view-builder.js +3 -3
  85. package/dist/cjs/util/query-id.js +10 -4
  86. package/dist/cjs/util/random-string.js +65 -2
  87. package/dist/esm/dialect/mysql/mysql-adapter.js +3 -4
  88. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -1
  89. package/dist/esm/dialect/postgres/postgres-adapter.js +3 -2
  90. package/dist/esm/dialect/sqlite/sqlite-introspector.js +2 -1
  91. package/dist/esm/index-nodeless.d.ts +2 -0
  92. package/dist/esm/index-nodeless.js +2 -0
  93. package/dist/esm/kysely.d.ts +3 -6
  94. package/dist/esm/kysely.js +9 -14
  95. package/dist/esm/migration/migrator.d.ts +22 -0
  96. package/dist/esm/migration/migrator.js +27 -5
  97. package/dist/esm/operation-node/delete-query-node.d.ts +7 -0
  98. package/dist/esm/operation-node/delete-query-node.js +15 -0
  99. package/dist/esm/operation-node/operation-node-transformer.js +1 -1
  100. package/dist/esm/operation-node/raw-node.d.ts +4 -2
  101. package/dist/esm/operation-node/raw-node.js +8 -2
  102. package/dist/esm/parser/complex-expression-parser.d.ts +5 -5
  103. package/dist/esm/parser/complex-expression-parser.js +5 -4
  104. package/dist/esm/parser/filter-parser.d.ts +9 -9
  105. package/dist/esm/parser/filter-parser.js +31 -30
  106. package/dist/esm/parser/group-by-parser.d.ts +1 -2
  107. package/dist/esm/parser/group-by-parser.js +2 -2
  108. package/dist/esm/parser/insert-values-parser.d.ts +1 -2
  109. package/dist/esm/parser/insert-values-parser.js +6 -6
  110. package/dist/esm/parser/join-parser.d.ts +1 -2
  111. package/dist/esm/parser/join-parser.js +8 -7
  112. package/dist/esm/parser/order-by-parser.d.ts +1 -2
  113. package/dist/esm/parser/order-by-parser.js +4 -4
  114. package/dist/esm/parser/parse-utils.d.ts +10 -0
  115. package/dist/esm/parser/parse-utils.js +32 -0
  116. package/dist/esm/parser/reference-parser.d.ts +2 -3
  117. package/dist/esm/parser/reference-parser.js +5 -5
  118. package/dist/esm/parser/select-parser.d.ts +1 -2
  119. package/dist/esm/parser/select-parser.js +5 -5
  120. package/dist/esm/parser/table-parser.d.ts +2 -3
  121. package/dist/esm/parser/table-parser.js +5 -5
  122. package/dist/esm/parser/update-set-parser.d.ts +1 -2
  123. package/dist/esm/parser/update-set-parser.js +2 -2
  124. package/dist/esm/parser/value-parser.d.ts +3 -4
  125. package/dist/esm/parser/value-parser.js +7 -7
  126. package/dist/esm/parser/with-parser.d.ts +1 -2
  127. package/dist/esm/parser/with-parser.js +3 -2
  128. package/dist/esm/query-builder/delete-query-builder.d.ts +77 -20
  129. package/dist/esm/query-builder/delete-query-builder.js +81 -14
  130. package/dist/esm/query-builder/expression-builder.d.ts +4 -13
  131. package/dist/esm/query-builder/expression-builder.js +12 -21
  132. package/dist/esm/query-builder/function-builder.d.ts +2 -6
  133. package/dist/esm/query-builder/function-builder.js +5 -8
  134. package/dist/esm/query-builder/insert-query-builder.d.ts +11 -9
  135. package/dist/esm/query-builder/insert-query-builder.js +8 -7
  136. package/dist/esm/query-builder/join-builder.d.ts +0 -2
  137. package/dist/esm/query-builder/join-builder.js +8 -8
  138. package/dist/esm/query-builder/on-conflict-builder.d.ts +24 -20
  139. package/dist/esm/query-builder/on-conflict-builder.js +17 -17
  140. package/dist/esm/query-builder/returning-interface.d.ts +2 -2
  141. package/dist/esm/query-builder/select-query-builder.d.ts +43 -32
  142. package/dist/esm/query-builder/select-query-builder.js +28 -26
  143. package/dist/esm/query-builder/update-query-builder.d.ts +29 -25
  144. package/dist/esm/query-builder/update-query-builder.js +22 -20
  145. package/dist/esm/query-builder/where-interface.d.ts +20 -16
  146. package/dist/esm/query-compiler/default-query-compiler.js +16 -7
  147. package/dist/esm/query-creator.d.ts +24 -138
  148. package/dist/esm/query-creator.js +19 -145
  149. package/dist/esm/query-executor/default-query-executor.d.ts +8 -1
  150. package/dist/esm/query-executor/default-query-executor.js +13 -13
  151. package/dist/esm/query-executor/noop-query-executor.d.ts +8 -0
  152. package/dist/esm/query-executor/noop-query-executor.js +7 -0
  153. package/dist/esm/query-executor/query-executor-provider.d.ts +8 -0
  154. package/dist/esm/query-executor/query-executor-provider.js +2 -0
  155. package/dist/esm/query-executor/query-executor.d.ts +7 -0
  156. package/dist/esm/raw-builder/raw-builder.d.ts +42 -11
  157. package/dist/esm/raw-builder/raw-builder.js +56 -57
  158. package/dist/esm/raw-builder/sql.d.ts +323 -0
  159. package/dist/esm/raw-builder/sql.js +151 -0
  160. package/dist/esm/schema/alter-table-builder.d.ts +20 -8
  161. package/dist/esm/schema/alter-table-builder.js +3 -3
  162. package/dist/esm/schema/column-definition-builder.d.ts +20 -8
  163. package/dist/esm/schema/create-index-builder.d.ts +3 -1
  164. package/dist/esm/schema/create-index-builder.js +3 -1
  165. package/dist/esm/schema/create-table-builder.d.ts +6 -2
  166. package/dist/esm/schema/create-table-builder.js +8 -4
  167. package/dist/esm/schema/create-view-builder.d.ts +3 -3
  168. package/dist/esm/schema/create-view-builder.js +3 -3
  169. package/dist/esm/util/query-id.js +10 -4
  170. package/dist/esm/util/random-string.js +65 -2
  171. package/package.json +13 -13
  172. package/dist/cjs/parser/parse-context.d.ts +0 -55
  173. package/dist/cjs/parser/parse-context.js +0 -50
  174. package/dist/cjs/util/private-symbols.d.ts +0 -5
  175. package/dist/cjs/util/private-symbols.js +0 -8
  176. package/dist/esm/parser/parse-context.d.ts +0 -55
  177. package/dist/esm/parser/parse-context.js +0 -47
  178. package/dist/esm/util/private-symbols.d.ts +0 -5
  179. package/dist/esm/util/private-symbols.js +0 -6
@@ -5,7 +5,6 @@ import { InsertQueryBuilder } from '../query-builder/insert-query-builder.js';
5
5
  import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
6
6
  import { QueryCreator } from '../query-creator.js';
7
7
  import { RawBuilder } from '../raw-builder/raw-builder.js';
8
- import { ParseContext } from './parse-context.js';
9
8
  export declare type CommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB>) => CommonTableExpressionOutput<DB, CN>;
10
9
  export declare type RecursiveCommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB & Record<ExtractTableFromCommonTableExpressionName<CN>, ExtractRowFromCommonTableExpressionName<CN>>>) => CommonTableExpressionOutput<DB, CN>;
11
10
  export declare type QueryCreatorWithCommonTableExpression<DB, CN extends string, CTE> = QueryCreator<DB & Record<ExtractTableFromCommonTableExpressionName<CN>, ExtractRowFromCommonTableExpression<CTE>>>;
@@ -37,5 +36,5 @@ declare type ExtractRowFromCommonTableExpressionName<CN extends string> = CN ext
37
36
  * Parses a string like 'id, first_name' into a type 'id' | 'first_name'
38
37
  */
39
38
  declare type ExtractColumnNamesFromColumnList<R extends string> = R extends `${infer C}, ${infer RS}` ? C | ExtractColumnNamesFromColumnList<RS> : R;
40
- export declare function parseCommonTableExpression(ctx: ParseContext, name: string, expression: CommonTableExpression<any, any>): CommonTableExpressionNode;
39
+ export declare function parseCommonTableExpression(name: string, expression: CommonTableExpression<any, any>): CommonTableExpressionNode;
41
40
  export {};
@@ -1,8 +1,9 @@
1
1
  /// <reference types="./with-parser.d.ts" />
2
2
  import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
3
3
  import { CommonTableExpressionNameNode } from '../operation-node/common-table-expression-name-node.js';
4
- export function parseCommonTableExpression(ctx, name, expression) {
5
- const builder = expression(ctx.createQueryCreator());
4
+ import { createQueryCreator } from './parse-utils.js';
5
+ export function parseCommonTableExpression(name, expression) {
6
+ const builder = expression(createQueryCreator());
6
7
  return CommonTableExpressionNode.create(parseCommonTableExpressionName(name), builder.toOperationNode());
7
8
  }
8
9
  function parseCommonTableExpressionName(name) {
@@ -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';
@@ -19,6 +18,7 @@ import { NoResultErrorConstructor } from './no-result-error.js';
19
18
  import { DeleteResult } from './delete-result.js';
20
19
  import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
21
20
  import { Selectable } from '../util/column-type.js';
21
+ import { OrderByDirectionExpression, OrderByExpression } from '../parser/order-by-parser.js';
22
22
  export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, JoinInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
23
23
  #private;
24
24
  constructor(props: DeleteQueryBuilderProps);
@@ -46,7 +46,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
46
46
  * ```
47
47
  *
48
48
  * Operator can be any supported operator or if the typings don't support it
49
- * you can always use `db.raw('your operator')`.
49
+ * you can always use `sql\`your operator\``.
50
50
  *
51
51
  * ```ts
52
52
  * const persons = await db
@@ -116,7 +116,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
116
116
  *
117
117
  * A `where in` query can be built by using the `in` operator and an array
118
118
  * of values. The values in the array can also be subqueries or raw
119
- * instances.
119
+ * {@link sql} expressions.
120
120
  *
121
121
  * ```ts
122
122
  * const persons = await db
@@ -132,15 +132,17 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
132
132
  * select * from "person" where "id" in ($1, $2, $3)
133
133
  * ```
134
134
  *
135
- * 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
136
136
  * as any of the arguments, including the operator:
137
137
  *
138
138
  * ```ts
139
+ * import { sql } from 'kysely'
140
+ *
139
141
  * const persons = await db
140
142
  * .selectFrom('person')
141
143
  * .selectAll()
142
144
  * .where(
143
- * db.raw('coalesce(first_name, last_name)'),
145
+ * sql`coalesce(first_name, last_name)`,
144
146
  * 'like',
145
147
  * '%' + name + '%',
146
148
  * )
@@ -175,24 +177,25 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
175
177
  * ```
176
178
  *
177
179
  * In all examples above the columns were known at compile time
178
- * (except for the `raw` expressions). By default kysely only allows
179
- * you to refer to columns that exist in the database **and** can be
180
- * 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.
181
183
  *
182
184
  * Sometimes you may want to refer to columns that come from the user
183
185
  * input and thus are not available at compile time.
184
186
  *
185
- * 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
186
188
  * uses both:
187
189
  *
188
190
  * ```ts
191
+ * import { sql } from 'kysely'
189
192
  * const { ref } = db.dynamic
190
193
  *
191
194
  * const persons = await db
192
195
  * .selectFrom('person')
193
196
  * .selectAll()
194
197
  * .where(ref(columnFromUserInput), '=', 1)
195
- * .orWhere(db.raw('??', [columnFromUserInput]), '=', 2)
198
+ * .orWhere(sql.id(columnFromUserInput), '=', 2)
196
199
  * .execute()
197
200
  * ```
198
201
  */
@@ -326,13 +329,14 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
326
329
  /**
327
330
  * Adds a `where exists` clause to the query.
328
331
  *
329
- * You can either use a subquery or a raw instance.
332
+ * You can either use a subquery or a raw {@link sql} snippet.
330
333
  *
331
334
  * ### Examples
332
335
  *
333
336
  * The query below selets all persons that own a pet named Catto:
334
337
  *
335
338
  * ```ts
339
+ * const petName = 'Catto'
336
340
  * const persons = await db
337
341
  * .selectFrom('person')
338
342
  * .selectAll()
@@ -340,7 +344,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
340
344
  * .selectFrom('pet')
341
345
  * .select('pet.id')
342
346
  * .whereRef('person.id', '=', 'pet.owner_id')
343
- * .where('pet.name', '=', 'Catto')
347
+ * .where('pet.name', '=', petName)
344
348
  * )
345
349
  * .execute()
346
350
  * ```
@@ -357,16 +361,16 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
357
361
  * )
358
362
  * ```
359
363
  *
360
- * 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}:
361
365
  *
362
366
  * ```ts
367
+ * import { sql } from 'kysely'
368
+ *
369
+ * const petName = 'Catto'
363
370
  * db.selectFrom('person')
364
371
  * .selectAll()
365
372
  * .whereExists(
366
- * db.raw(
367
- * '(select pet.id from pet where person.id = pet.owner_id and pet.name = ?)',
368
- * ['Catto']
369
- * )
373
+ * sql`(select pet.id from pet where person.id = pet.owner_id and pet.name = ${petName})`
370
374
  * )
371
375
  * ```
372
376
  *
@@ -564,7 +568,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
564
568
  * Return arbitrary expressions:
565
569
  *
566
570
  * ```ts
567
- * const { raw } = db
571
+ * import { sql } from 'kysely'
568
572
  *
569
573
  * const { id, full_name, first_pet_id } = await db
570
574
  * .insertInto('person')
@@ -574,7 +578,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
574
578
  * })
575
579
  * .returning([
576
580
  * 'id as id',
577
- * raw<string>(`concat(first_name, ' ', last_name)`).as('full_name'),
581
+ * sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
578
582
  * (qb) => qb.selectFrom('pets').select('pet.id').limit(1).as('first_pet_id')
579
583
  * ])
580
584
  * .executeTakeFirst()
@@ -587,6 +591,60 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
587
591
  * that support `returning` such as PostgreSQL.
588
592
  */
589
593
  returningAll(): DeleteQueryBuilder<DB, TB, Selectable<DB[TB]>>;
594
+ /**
595
+ * Adds an `order by` clause to the query.
596
+ *
597
+ * `orderBy` calls are additive. To order by multiple columns, call `orderBy`
598
+ * multiple times.
599
+ *
600
+ * The first argument is the expression to order by and the second is the
601
+ * order (`asc` or `desc`).
602
+ *
603
+ * An `order by` clause in a delete query is only supported by some dialects
604
+ * like MySQL.
605
+ *
606
+ * See {@link SelectQueryBuilder.orderBy} for more examples.
607
+ *
608
+ * ### Examples
609
+ *
610
+ * Delete 5 oldest items in a table:
611
+ *
612
+ * ```ts
613
+ * await db
614
+ * .deleteFrom('pet')
615
+ * .orderBy('created_at')
616
+ * .limit(5)
617
+ * .execute()
618
+ * ```
619
+ *
620
+ * The generated SQL (MySQL):
621
+ *
622
+ * ```sql
623
+ * delete from `pet`
624
+ * order by `created_at`
625
+ * limit ?
626
+ * ```
627
+ */
628
+ orderBy(orderBy: OrderByExpression<DB, TB, O>, direction?: OrderByDirectionExpression): DeleteQueryBuilder<DB, TB, O>;
629
+ /**
630
+ * Adds a limit clause to the query.
631
+ *
632
+ * A limit clause in a delete query is only supported by some dialects
633
+ * like MySQL.
634
+ *
635
+ * ### Examples
636
+ *
637
+ * Delete 5 oldest items in a table:
638
+ *
639
+ * ```ts
640
+ * await db
641
+ * .deleteFrom('pet')
642
+ * .orderBy('created_at')
643
+ * .limit(5)
644
+ * .execute()
645
+ * ```
646
+ */
647
+ limit(limit: number): DeleteQueryBuilder<DB, TB, O>;
590
648
  /**
591
649
  * Simply calls the given function passing `this` as the only argument.
592
650
  *
@@ -683,5 +741,4 @@ export interface DeleteQueryBuilderProps {
683
741
  readonly queryId: QueryId;
684
742
  readonly queryNode: DeleteQueryNode;
685
743
  readonly executor: QueryExecutor;
686
- readonly parseContext: ParseContext;
687
744
  }
@@ -7,6 +7,9 @@ import { preventAwait } from '../util/prevent-await.js';
7
7
  import { freeze } from '../util/object-utils.js';
8
8
  import { NoResultError } from './no-result-error.js';
9
9
  import { DeleteResult } from './delete-result.js';
10
+ import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
11
+ import { LimitNode } from '../operation-node/limit-node.js';
12
+ import { parseOrderBy, } from '../parser/order-by-parser.js';
10
13
  export class DeleteQueryBuilder {
11
14
  #props;
12
15
  constructor(props) {
@@ -15,79 +18,79 @@ export class DeleteQueryBuilder {
15
18
  where(...args) {
16
19
  return new DeleteQueryBuilder({
17
20
  ...this.#props,
18
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(this.#props.parseContext, args)),
21
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(args)),
19
22
  });
20
23
  }
21
24
  whereRef(lhs, op, rhs) {
22
25
  return new DeleteQueryBuilder({
23
26
  ...this.#props,
24
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
27
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
25
28
  });
26
29
  }
27
30
  orWhere(...args) {
28
31
  return new DeleteQueryBuilder({
29
32
  ...this.#props,
30
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(this.#props.parseContext, args)),
33
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(args)),
31
34
  });
32
35
  }
33
36
  orWhereRef(lhs, op, rhs) {
34
37
  return new DeleteQueryBuilder({
35
38
  ...this.#props,
36
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
39
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
37
40
  });
38
41
  }
39
42
  whereExists(arg) {
40
43
  return new DeleteQueryBuilder({
41
44
  ...this.#props,
42
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
45
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(arg)),
43
46
  });
44
47
  }
45
48
  whereNotExists(arg) {
46
49
  return new DeleteQueryBuilder({
47
50
  ...this.#props,
48
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
51
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(arg)),
49
52
  });
50
53
  }
51
54
  orWhereExists(arg) {
52
55
  return new DeleteQueryBuilder({
53
56
  ...this.#props,
54
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
57
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(arg)),
55
58
  });
56
59
  }
57
60
  orWhereNotExists(arg) {
58
61
  return new DeleteQueryBuilder({
59
62
  ...this.#props,
60
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
63
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(arg)),
61
64
  });
62
65
  }
63
66
  innerJoin(...args) {
64
67
  return new DeleteQueryBuilder({
65
68
  ...this.#props,
66
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'InnerJoin', args)),
69
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('InnerJoin', args)),
67
70
  });
68
71
  }
69
72
  leftJoin(...args) {
70
73
  return new DeleteQueryBuilder({
71
74
  ...this.#props,
72
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'LeftJoin', args)),
75
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LeftJoin', args)),
73
76
  });
74
77
  }
75
78
  rightJoin(...args) {
76
79
  return new DeleteQueryBuilder({
77
80
  ...this.#props,
78
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'RightJoin', args)),
81
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('RightJoin', args)),
79
82
  });
80
83
  }
81
84
  fullJoin(...args) {
82
85
  return new DeleteQueryBuilder({
83
86
  ...this.#props,
84
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'FullJoin', args)),
87
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)),
85
88
  });
86
89
  }
87
90
  returning(selection) {
88
91
  return new DeleteQueryBuilder({
89
92
  ...this.#props,
90
- queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(this.#props.parseContext, selection)),
93
+ queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(selection)),
91
94
  });
92
95
  }
93
96
  returningAll() {
@@ -96,6 +99,70 @@ export class DeleteQueryBuilder {
96
99
  queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll()),
97
100
  });
98
101
  }
102
+ /**
103
+ * Adds an `order by` clause to the query.
104
+ *
105
+ * `orderBy` calls are additive. To order by multiple columns, call `orderBy`
106
+ * multiple times.
107
+ *
108
+ * The first argument is the expression to order by and the second is the
109
+ * order (`asc` or `desc`).
110
+ *
111
+ * An `order by` clause in a delete query is only supported by some dialects
112
+ * like MySQL.
113
+ *
114
+ * See {@link SelectQueryBuilder.orderBy} for more examples.
115
+ *
116
+ * ### Examples
117
+ *
118
+ * Delete 5 oldest items in a table:
119
+ *
120
+ * ```ts
121
+ * await db
122
+ * .deleteFrom('pet')
123
+ * .orderBy('created_at')
124
+ * .limit(5)
125
+ * .execute()
126
+ * ```
127
+ *
128
+ * The generated SQL (MySQL):
129
+ *
130
+ * ```sql
131
+ * delete from `pet`
132
+ * order by `created_at`
133
+ * limit ?
134
+ * ```
135
+ */
136
+ orderBy(orderBy, direction) {
137
+ return new DeleteQueryBuilder({
138
+ ...this.#props,
139
+ queryNode: DeleteQueryNode.cloneWithOrderByItem(this.#props.queryNode, parseOrderBy(orderBy, direction)),
140
+ });
141
+ }
142
+ /**
143
+ * Adds a limit clause to the query.
144
+ *
145
+ * A limit clause in a delete query is only supported by some dialects
146
+ * like MySQL.
147
+ *
148
+ * ### Examples
149
+ *
150
+ * Delete 5 oldest items in a table:
151
+ *
152
+ * ```ts
153
+ * await db
154
+ * .deleteFrom('pet')
155
+ * .orderBy('created_at')
156
+ * .limit(5)
157
+ * .execute()
158
+ * ```
159
+ */
160
+ limit(limit) {
161
+ return new DeleteQueryBuilder({
162
+ ...this.#props,
163
+ queryNode: DeleteQueryNode.cloneWithLimit(this.#props.queryNode, LimitNode.create(limit)),
164
+ });
165
+ }
99
166
  /**
100
167
  * Simply calls the given function passing `this` as the only argument.
101
168
  *
@@ -196,7 +263,7 @@ export class DeleteQueryBuilder {
196
263
  const compildQuery = this.compile();
197
264
  const query = compildQuery.query;
198
265
  const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
199
- if (this.#props.parseContext.adapter.supportsReturning && query.returning) {
266
+ if (this.#props.executor.adapter.supportsReturning && query.returning) {
200
267
  return result.rows;
201
268
  }
202
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
  }