kysely 0.11.1 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +0 -2
  3. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +0 -6
  4. package/dist/cjs/dialect/postgres/postgres-query-compiler.d.ts +3 -0
  5. package/dist/cjs/dialect/postgres/postgres-query-compiler.js +9 -1
  6. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +6 -2
  7. package/dist/cjs/dialect/sqlite/sqlite-driver.js +7 -7
  8. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -2
  9. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +6 -6
  10. package/dist/cjs/driver/runtime-driver.js +1 -1
  11. package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +1 -0
  12. package/dist/cjs/dynamic/dynamic-reference-builder.js +9 -1
  13. package/dist/cjs/dynamic/dynamic.d.ts +6 -7
  14. package/dist/cjs/dynamic/dynamic.js +6 -7
  15. package/dist/cjs/index.d.ts +51 -33
  16. package/dist/cjs/index.js +48 -30
  17. package/dist/cjs/kysely.d.ts +39 -15
  18. package/dist/cjs/kysely.js +32 -9
  19. package/dist/cjs/migration/migration.d.ts +2 -2
  20. package/dist/cjs/operation-node/alias-node.d.ts +1 -1
  21. package/dist/cjs/operation-node/create-table-node.d.ts +6 -2
  22. package/dist/cjs/operation-node/create-table-node.js +6 -6
  23. package/dist/cjs/operation-node/create-view-node.d.ts +1 -0
  24. package/dist/cjs/operation-node/insert-query-node.d.ts +4 -4
  25. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  26. package/dist/cjs/operation-node/operation-node-transformer.js +11 -1
  27. package/dist/cjs/operation-node/operation-node-utils.d.ts +1 -1
  28. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  29. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  30. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  31. package/dist/cjs/operation-node/query-node.d.ts +0 -2
  32. package/dist/cjs/operation-node/query-node.js +0 -10
  33. package/dist/cjs/operation-node/values-node.d.ts +15 -0
  34. package/dist/cjs/operation-node/values-node.js +18 -0
  35. package/dist/cjs/parser/complex-expression-parser.d.ts +9 -0
  36. package/dist/cjs/parser/complex-expression-parser.js +25 -0
  37. package/dist/cjs/parser/filter-parser.d.ts +13 -3
  38. package/dist/cjs/parser/filter-parser.js +56 -62
  39. package/dist/cjs/parser/insert-values-parser.d.ts +7 -10
  40. package/dist/cjs/parser/insert-values-parser.js +31 -39
  41. package/dist/cjs/parser/order-by-parser.d.ts +1 -1
  42. package/dist/cjs/parser/parse-context.d.ts +8 -8
  43. package/dist/cjs/parser/parse-context.js +10 -10
  44. package/dist/cjs/parser/reference-parser.d.ts +8 -7
  45. package/dist/cjs/parser/reference-parser.js +8 -17
  46. package/dist/cjs/parser/returning-parser.d.ts +1 -5
  47. package/dist/cjs/parser/select-parser.d.ts +12 -14
  48. package/dist/cjs/parser/select-parser.js +5 -9
  49. package/dist/cjs/parser/table-parser.d.ts +9 -11
  50. package/dist/cjs/parser/table-parser.js +2 -8
  51. package/dist/cjs/parser/union-parser.d.ts +2 -2
  52. package/dist/cjs/parser/union-parser.js +1 -6
  53. package/dist/cjs/parser/update-set-parser.d.ts +2 -8
  54. package/dist/cjs/parser/update-set-parser.js +6 -26
  55. package/dist/cjs/parser/value-parser.d.ts +9 -6
  56. package/dist/cjs/parser/value-parser.js +7 -30
  57. package/dist/cjs/parser/with-parser.d.ts +6 -3
  58. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
  59. package/dist/cjs/query-builder/delete-query-builder.d.ts +102 -0
  60. package/dist/cjs/query-builder/delete-query-builder.js +185 -0
  61. package/dist/cjs/query-builder/expression-builder.d.ts +8 -6
  62. package/dist/cjs/query-builder/expression-builder.js +3 -3
  63. package/dist/cjs/query-builder/function-builder.d.ts +2 -1
  64. package/dist/cjs/query-builder/function-builder.js +2 -1
  65. package/dist/cjs/query-builder/having-interface.d.ts +49 -0
  66. package/dist/cjs/query-builder/having-interface.js +2 -0
  67. package/dist/cjs/query-builder/insert-query-builder.d.ts +439 -0
  68. package/dist/cjs/query-builder/insert-query-builder.js +256 -0
  69. package/dist/cjs/query-builder/insert-result.d.ts +3 -2
  70. package/dist/cjs/query-builder/insert-result.js +3 -2
  71. package/dist/cjs/query-builder/join-builder.d.ts +22 -20
  72. package/dist/cjs/query-builder/join-builder.js +12 -12
  73. package/dist/cjs/query-builder/join-interface.d.ts +133 -0
  74. package/dist/cjs/query-builder/join-interface.js +2 -0
  75. package/dist/cjs/query-builder/no-result-error.d.ts +9 -0
  76. package/dist/cjs/query-builder/no-result-error.js +14 -0
  77. package/dist/cjs/query-builder/returning-interface.d.ts +73 -0
  78. package/dist/cjs/query-builder/returning-interface.js +2 -0
  79. package/dist/cjs/query-builder/select-query-builder.d.ts +711 -0
  80. package/dist/cjs/query-builder/select-query-builder.js +571 -0
  81. package/dist/cjs/query-builder/update-query-builder.d.ts +190 -0
  82. package/dist/cjs/query-builder/update-query-builder.js +279 -0
  83. package/dist/cjs/query-builder/where-interface.d.ts +381 -0
  84. package/dist/cjs/query-builder/where-interface.js +2 -0
  85. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
  86. package/dist/cjs/query-compiler/default-query-compiler.js +22 -5
  87. package/dist/cjs/query-creator.d.ts +42 -40
  88. package/dist/cjs/query-creator.js +33 -28
  89. package/dist/cjs/query-executor/query-executor.d.ts +1 -1
  90. package/dist/cjs/query-executor/query-executor.js +1 -1
  91. package/dist/cjs/raw-builder/raw-builder.d.ts +2 -0
  92. package/dist/cjs/raw-builder/raw-builder.js +6 -0
  93. package/dist/cjs/schema/alter-table-builder.d.ts +2 -2
  94. package/dist/cjs/schema/column-definition-builder.d.ts +27 -20
  95. package/dist/cjs/schema/create-index-builder.d.ts +2 -1
  96. package/dist/cjs/schema/create-index-builder.js +2 -1
  97. package/dist/cjs/schema/create-table-builder.d.ts +26 -9
  98. package/dist/cjs/schema/create-table-builder.js +42 -9
  99. package/dist/cjs/schema/create-view-builder.d.ts +17 -3
  100. package/dist/cjs/schema/create-view-builder.js +25 -16
  101. package/dist/cjs/schema/schema.d.ts +18 -11
  102. package/dist/cjs/schema/schema.js +18 -11
  103. package/dist/cjs/util/dynamic-import.js +1 -1
  104. package/dist/cjs/util/log.d.ts +11 -8
  105. package/dist/cjs/util/log.js +25 -12
  106. package/dist/cjs/util/type-utils.d.ts +7 -7
  107. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +0 -2
  108. package/dist/esm/dialect/mysql/mysql-query-compiler.js +0 -6
  109. package/dist/esm/dialect/postgres/postgres-query-compiler.d.ts +3 -0
  110. package/dist/esm/dialect/postgres/postgres-query-compiler.js +9 -1
  111. package/dist/esm/dialect/sqlite/sqlite-adapter.js +6 -2
  112. package/dist/esm/dialect/sqlite/sqlite-driver.js +7 -7
  113. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -2
  114. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +6 -6
  115. package/dist/esm/driver/runtime-driver.js +1 -1
  116. package/dist/esm/dynamic/dynamic-reference-builder.d.ts +1 -0
  117. package/dist/esm/dynamic/dynamic-reference-builder.js +7 -0
  118. package/dist/esm/dynamic/dynamic.d.ts +6 -7
  119. package/dist/esm/dynamic/dynamic.js +6 -7
  120. package/dist/esm/index.d.ts +51 -33
  121. package/dist/esm/index.js +48 -30
  122. package/dist/esm/kysely.d.ts +39 -15
  123. package/dist/esm/kysely.js +32 -9
  124. package/dist/esm/migration/migration.d.ts +2 -2
  125. package/dist/esm/operation-node/alias-node.d.ts +1 -1
  126. package/dist/esm/operation-node/create-table-node.d.ts +6 -2
  127. package/dist/esm/operation-node/create-table-node.js +6 -6
  128. package/dist/esm/operation-node/create-view-node.d.ts +1 -0
  129. package/dist/esm/operation-node/insert-query-node.d.ts +4 -4
  130. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  131. package/dist/esm/operation-node/operation-node-transformer.js +11 -1
  132. package/dist/esm/operation-node/operation-node-utils.d.ts +1 -1
  133. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  134. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  135. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  136. package/dist/esm/operation-node/query-node.d.ts +0 -2
  137. package/dist/esm/operation-node/query-node.js +0 -10
  138. package/dist/esm/operation-node/values-node.d.ts +15 -0
  139. package/dist/esm/operation-node/values-node.js +15 -0
  140. package/dist/esm/parser/complex-expression-parser.d.ts +9 -0
  141. package/dist/esm/parser/complex-expression-parser.js +20 -0
  142. package/dist/esm/parser/filter-parser.d.ts +13 -3
  143. package/dist/esm/parser/filter-parser.js +55 -62
  144. package/dist/esm/parser/insert-values-parser.d.ts +7 -10
  145. package/dist/esm/parser/insert-values-parser.js +31 -38
  146. package/dist/esm/parser/order-by-parser.d.ts +1 -1
  147. package/dist/esm/parser/parse-context.d.ts +8 -8
  148. package/dist/esm/parser/parse-context.js +10 -10
  149. package/dist/esm/parser/reference-parser.d.ts +8 -7
  150. package/dist/esm/parser/reference-parser.js +9 -18
  151. package/dist/esm/parser/returning-parser.d.ts +1 -5
  152. package/dist/esm/parser/select-parser.d.ts +12 -14
  153. package/dist/esm/parser/select-parser.js +6 -10
  154. package/dist/esm/parser/table-parser.d.ts +9 -11
  155. package/dist/esm/parser/table-parser.js +3 -9
  156. package/dist/esm/parser/union-parser.d.ts +2 -2
  157. package/dist/esm/parser/union-parser.js +1 -6
  158. package/dist/esm/parser/update-set-parser.d.ts +2 -8
  159. package/dist/esm/parser/update-set-parser.js +5 -24
  160. package/dist/esm/parser/value-parser.d.ts +9 -6
  161. package/dist/esm/parser/value-parser.js +8 -31
  162. package/dist/esm/parser/with-parser.d.ts +6 -3
  163. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
  164. package/dist/esm/query-builder/delete-query-builder.d.ts +102 -0
  165. package/dist/esm/query-builder/delete-query-builder.js +181 -0
  166. package/dist/esm/query-builder/expression-builder.d.ts +8 -6
  167. package/dist/esm/query-builder/expression-builder.js +3 -3
  168. package/dist/esm/query-builder/function-builder.d.ts +2 -1
  169. package/dist/esm/query-builder/function-builder.js +2 -1
  170. package/dist/esm/query-builder/having-interface.d.ts +49 -0
  171. package/dist/esm/query-builder/having-interface.js +1 -0
  172. package/dist/esm/query-builder/insert-query-builder.d.ts +439 -0
  173. package/dist/esm/query-builder/insert-query-builder.js +252 -0
  174. package/dist/esm/query-builder/insert-result.d.ts +3 -2
  175. package/dist/esm/query-builder/insert-result.js +3 -2
  176. package/dist/esm/query-builder/join-builder.d.ts +22 -20
  177. package/dist/esm/query-builder/join-builder.js +12 -12
  178. package/dist/esm/query-builder/join-interface.d.ts +133 -0
  179. package/dist/esm/query-builder/join-interface.js +1 -0
  180. package/dist/esm/query-builder/no-result-error.d.ts +9 -0
  181. package/dist/esm/query-builder/no-result-error.js +10 -0
  182. package/dist/esm/query-builder/returning-interface.d.ts +73 -0
  183. package/dist/esm/query-builder/returning-interface.js +1 -0
  184. package/dist/esm/query-builder/select-query-builder.d.ts +711 -0
  185. package/dist/esm/query-builder/select-query-builder.js +566 -0
  186. package/dist/esm/query-builder/update-query-builder.d.ts +190 -0
  187. package/dist/esm/query-builder/update-query-builder.js +275 -0
  188. package/dist/esm/query-builder/where-interface.d.ts +381 -0
  189. package/dist/esm/query-builder/where-interface.js +1 -0
  190. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
  191. package/dist/esm/query-compiler/default-query-compiler.js +22 -5
  192. package/dist/esm/query-creator.d.ts +42 -40
  193. package/dist/esm/query-creator.js +33 -28
  194. package/dist/esm/query-executor/query-executor.d.ts +1 -1
  195. package/dist/esm/query-executor/query-executor.js +1 -1
  196. package/dist/esm/raw-builder/raw-builder.d.ts +2 -0
  197. package/dist/esm/raw-builder/raw-builder.js +6 -0
  198. package/dist/esm/schema/alter-table-builder.d.ts +2 -2
  199. package/dist/esm/schema/column-definition-builder.d.ts +27 -20
  200. package/dist/esm/schema/create-index-builder.d.ts +2 -1
  201. package/dist/esm/schema/create-index-builder.js +2 -1
  202. package/dist/esm/schema/create-table-builder.d.ts +26 -9
  203. package/dist/esm/schema/create-table-builder.js +43 -10
  204. package/dist/esm/schema/create-view-builder.d.ts +17 -3
  205. package/dist/esm/schema/create-view-builder.js +25 -16
  206. package/dist/esm/schema/schema.d.ts +18 -11
  207. package/dist/esm/schema/schema.js +18 -11
  208. package/dist/esm/util/dynamic-import.js +1 -1
  209. package/dist/esm/util/log.d.ts +11 -8
  210. package/dist/esm/util/log.js +25 -12
  211. package/dist/esm/util/type-utils.d.ts +7 -7
  212. package/package.json +3 -3
  213. package/dist/cjs/query-builder/query-builder.d.ts +0 -1707
  214. package/dist/cjs/query-builder/query-builder.js +0 -1067
  215. package/dist/esm/query-builder/query-builder.d.ts +0 -1707
  216. package/dist/esm/query-builder/query-builder.js +0 -1061
@@ -0,0 +1,190 @@
1
+ import { OperationNodeSource } from '../operation-node/operation-node-source.js';
2
+ import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
+ import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
4
+ import { TableExpression, TableExpressionDatabase, TableExpressionTables, LeftJoinTableExpressionDatabase, RightJoinTableExpressionDatabase, FullJoinTableExpressionDatabase } from '../parser/table-parser.js';
5
+ import { SelectExpression } from '../parser/select-parser.js';
6
+ import { ExistsExpression, FilterOperator, FilterValueExpressionOrList, WhereGrouper } from '../parser/filter-parser.js';
7
+ import { ReturningRow } from '../parser/returning-parser.js';
8
+ import { ReferenceExpression } from '../parser/reference-parser.js';
9
+ import { AnyRawBuilder, SingleResultType } from '../util/type-utils.js';
10
+ import { UpdateQueryNode } from '../operation-node/update-query-node.js';
11
+ import { MutationObject } from '../parser/update-set-parser.js';
12
+ import { Compilable } from '../util/compilable.js';
13
+ import { QueryExecutor } from '../query-executor/query-executor.js';
14
+ import { QueryId } from '../util/query-id.js';
15
+ import { ParseContext } from '../parser/parse-context.js';
16
+ import { KyselyPlugin } from '../plugin/kysely-plugin.js';
17
+ import { WhereInterface } from './where-interface.js';
18
+ import { JoinInterface } from './join-interface.js';
19
+ import { ReturningInterface } from './returning-interface.js';
20
+ import { NoResultErrorConstructor } from './no-result-error.js';
21
+ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, JoinInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
22
+ #private;
23
+ constructor(props: UpdateQueryBuilderProps);
24
+ where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): UpdateQueryBuilder<DB, TB, O>;
25
+ where(grouper: WhereGrouper<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
26
+ where(raw: AnyRawBuilder): UpdateQueryBuilder<DB, TB, O>;
27
+ whereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
28
+ orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): UpdateQueryBuilder<DB, TB, O>;
29
+ orWhere(grouper: WhereGrouper<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
30
+ orWhere(raw: AnyRawBuilder): UpdateQueryBuilder<DB, TB, O>;
31
+ orWhereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
32
+ whereExists(arg: ExistsExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
33
+ whereNotExists(arg: ExistsExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
34
+ orWhereExists(arg: ExistsExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
35
+ orWhereNotExists(arg: ExistsExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
36
+ innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
37
+ innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
38
+ leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
39
+ leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
40
+ rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
41
+ rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
42
+ fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
43
+ fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
44
+ /**
45
+ * Sets the values to update for an {@link Kysely.updateTable | update} query.
46
+ *
47
+ * This method takes an object whose keys are column names and values are
48
+ * values to update. In addition to the column's type, the values can be `raw`
49
+ * instances or select queries.
50
+ *
51
+ * The return value of an update query is an instance of {@link UpdateResult}.
52
+ * You can use the {@link ReturningInterface.returning | returning} method on
53
+ * supported databases to get out the updated rows.
54
+ *
55
+ * ### Examples
56
+ *
57
+ * Update a row in `person` table:
58
+ *
59
+ * ```ts
60
+ * const result = await db
61
+ * .updateTable('person')
62
+ * .set({
63
+ * first_name: 'Jennifer',
64
+ * last_name: 'Aniston'
65
+ * })
66
+ * .where('id', '=', 1)
67
+ * .executeTakeFirst()
68
+ *
69
+ * console.log(result.numUpdatedRows)
70
+ * ```
71
+ *
72
+ * The generated SQL (PostgreSQL):
73
+ *
74
+ * ```sql
75
+ * update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3
76
+ * ```
77
+ *
78
+ * On PostgreSQL you ca chain `returning` to the query to get
79
+ * the updated rows' columns (or any other expression) as the
80
+ * return value:
81
+ *
82
+ * ```ts
83
+ * const row = await db
84
+ * .updateTable('person')
85
+ * .set({
86
+ * first_name: 'Jennifer',
87
+ * last_name: 'Aniston'
88
+ * })
89
+ * .where('id', '=', 1)
90
+ * .returning('id')
91
+ * .executeTakeFirstOrThrow()
92
+ *
93
+ * row.id
94
+ * ```
95
+ *
96
+ * The generated SQL (PostgreSQL):
97
+ *
98
+ * ```sql
99
+ * update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3 returning "id"
100
+ * ```
101
+ *
102
+ * In addition to primitives, the values can also be `raw` expressions or
103
+ * select queries:
104
+ *
105
+ * ```ts
106
+ * const result = await db
107
+ * .updateTable('person')
108
+ * .set({
109
+ * first_name: 'Jennifer',
110
+ * last_name: db.raw('? || ?', ['Ani', 'ston']),
111
+ * age: db.selectFrom('person').select(raw('avg(age)')),
112
+ * })
113
+ * .where('id', '=', 1)
114
+ * .executeTakeFirst()
115
+ *
116
+ * console.log(result.numUpdatedRows)
117
+ * ```
118
+ *
119
+ * The generated SQL (PostgreSQL):
120
+ *
121
+ * ```sql
122
+ * update "person" set
123
+ * "first_name" = $1,
124
+ * "last_name" = $2 || $3,
125
+ * "age" = (select avg(age) from "person")
126
+ * where "id" = $4
127
+ * ```
128
+ */
129
+ set(row: MutationObject<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
130
+ returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): UpdateQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
131
+ returning<SE extends SelectExpression<DB, TB>>(selection: SE): UpdateQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
132
+ returningAll(): UpdateQueryBuilder<DB, TB, DB[TB]>;
133
+ /**
134
+ * Simply calls the given function passing `this` as the only argument.
135
+ *
136
+ * This method can be useful when adding optional method calls:
137
+ *
138
+ * ### Examples
139
+ *
140
+ * ```ts
141
+ * db.updateTable('person')
142
+ * .set(values)
143
+ * .call((qb) => {
144
+ * if (something) {
145
+ * return qb.where('something', '=', something)
146
+ * } else {
147
+ * return qb.where('somethingElse', '=', somethingElse)
148
+ * }
149
+ * })
150
+ * .execute()
151
+ * ```
152
+ */
153
+ call<T>(func: (qb: this) => T): T;
154
+ /**
155
+ * Change the output type of the query.
156
+ *
157
+ * You should only use this method as the last resort if the types
158
+ * don't support your use case.
159
+ */
160
+ castTo<T>(): UpdateQueryBuilder<DB, TB, T>;
161
+ withPlugin(plugin: KyselyPlugin): UpdateQueryBuilder<DB, TB, O>;
162
+ toOperationNode(): UpdateQueryNode;
163
+ compile(): CompiledQuery;
164
+ /**
165
+ * Executes the query and returns an array of rows.
166
+ *
167
+ * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
168
+ */
169
+ execute(): Promise<O[]>;
170
+ /**
171
+ * Executes the query and returns the first result or undefined if
172
+ * the query returned no result.
173
+ */
174
+ executeTakeFirst(): Promise<SingleResultType<O>>;
175
+ /**
176
+ * Executes the query and returns the first result or throws if
177
+ * the query returned no result.
178
+ *
179
+ * By default an instance of {@link NoResultError} is thrown, but you can
180
+ * provide a custom error class as the only argument to throw a different
181
+ * error.
182
+ */
183
+ executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor): Promise<O>;
184
+ }
185
+ export interface UpdateQueryBuilderProps {
186
+ readonly queryId: QueryId;
187
+ readonly queryNode: UpdateQueryNode;
188
+ readonly executor: QueryExecutor;
189
+ readonly parseContext: ParseContext;
190
+ }
@@ -0,0 +1,275 @@
1
+ import { parseJoin, } from '../parser/join-parser.js';
2
+ import { parseSelectExpressionOrList, parseSelectAll, } from '../parser/select-parser.js';
3
+ import { parseExistFilter, parseReferenceFilter, parseWhereFilter, parseNotExistFilter, } from '../parser/filter-parser.js';
4
+ import { QueryNode } from '../operation-node/query-node.js';
5
+ import { UpdateQueryNode } from '../operation-node/update-query-node.js';
6
+ import { parseUpdateObject, } from '../parser/update-set-parser.js';
7
+ import { preventAwait } from '../util/prevent-await.js';
8
+ import { freeze } from '../util/object-utils.js';
9
+ import { UpdateResult } from './update-result.js';
10
+ import { NoResultError } from './no-result-error.js';
11
+ export class UpdateQueryBuilder {
12
+ #props;
13
+ constructor(props) {
14
+ this.#props = freeze(props);
15
+ }
16
+ where(...args) {
17
+ return new UpdateQueryBuilder({
18
+ ...this.#props,
19
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(this.#props.parseContext, args)),
20
+ });
21
+ }
22
+ whereRef(lhs, op, rhs) {
23
+ return new UpdateQueryBuilder({
24
+ ...this.#props,
25
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
26
+ });
27
+ }
28
+ orWhere(...args) {
29
+ return new UpdateQueryBuilder({
30
+ ...this.#props,
31
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(this.#props.parseContext, args)),
32
+ });
33
+ }
34
+ orWhereRef(lhs, op, rhs) {
35
+ return new UpdateQueryBuilder({
36
+ ...this.#props,
37
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
38
+ });
39
+ }
40
+ whereExists(arg) {
41
+ return new UpdateQueryBuilder({
42
+ ...this.#props,
43
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
44
+ });
45
+ }
46
+ whereNotExists(arg) {
47
+ return new UpdateQueryBuilder({
48
+ ...this.#props,
49
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
50
+ });
51
+ }
52
+ orWhereExists(arg) {
53
+ return new UpdateQueryBuilder({
54
+ ...this.#props,
55
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
56
+ });
57
+ }
58
+ orWhereNotExists(arg) {
59
+ return new UpdateQueryBuilder({
60
+ ...this.#props,
61
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
62
+ });
63
+ }
64
+ innerJoin(...args) {
65
+ return new UpdateQueryBuilder({
66
+ ...this.#props,
67
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'InnerJoin', args)),
68
+ });
69
+ }
70
+ leftJoin(...args) {
71
+ return new UpdateQueryBuilder({
72
+ ...this.#props,
73
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'LeftJoin', args)),
74
+ });
75
+ }
76
+ rightJoin(...args) {
77
+ return new UpdateQueryBuilder({
78
+ ...this.#props,
79
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'RightJoin', args)),
80
+ });
81
+ }
82
+ fullJoin(...args) {
83
+ return new UpdateQueryBuilder({
84
+ ...this.#props,
85
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'FullJoin', args)),
86
+ });
87
+ }
88
+ /**
89
+ * Sets the values to update for an {@link Kysely.updateTable | update} query.
90
+ *
91
+ * This method takes an object whose keys are column names and values are
92
+ * values to update. In addition to the column's type, the values can be `raw`
93
+ * instances or select queries.
94
+ *
95
+ * The return value of an update query is an instance of {@link UpdateResult}.
96
+ * You can use the {@link ReturningInterface.returning | returning} method on
97
+ * supported databases to get out the updated rows.
98
+ *
99
+ * ### Examples
100
+ *
101
+ * Update a row in `person` table:
102
+ *
103
+ * ```ts
104
+ * const result = await db
105
+ * .updateTable('person')
106
+ * .set({
107
+ * first_name: 'Jennifer',
108
+ * last_name: 'Aniston'
109
+ * })
110
+ * .where('id', '=', 1)
111
+ * .executeTakeFirst()
112
+ *
113
+ * console.log(result.numUpdatedRows)
114
+ * ```
115
+ *
116
+ * The generated SQL (PostgreSQL):
117
+ *
118
+ * ```sql
119
+ * update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3
120
+ * ```
121
+ *
122
+ * On PostgreSQL you ca chain `returning` to the query to get
123
+ * the updated rows' columns (or any other expression) as the
124
+ * return value:
125
+ *
126
+ * ```ts
127
+ * const row = await db
128
+ * .updateTable('person')
129
+ * .set({
130
+ * first_name: 'Jennifer',
131
+ * last_name: 'Aniston'
132
+ * })
133
+ * .where('id', '=', 1)
134
+ * .returning('id')
135
+ * .executeTakeFirstOrThrow()
136
+ *
137
+ * row.id
138
+ * ```
139
+ *
140
+ * The generated SQL (PostgreSQL):
141
+ *
142
+ * ```sql
143
+ * update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3 returning "id"
144
+ * ```
145
+ *
146
+ * In addition to primitives, the values can also be `raw` expressions or
147
+ * select queries:
148
+ *
149
+ * ```ts
150
+ * const result = await db
151
+ * .updateTable('person')
152
+ * .set({
153
+ * first_name: 'Jennifer',
154
+ * last_name: db.raw('? || ?', ['Ani', 'ston']),
155
+ * age: db.selectFrom('person').select(raw('avg(age)')),
156
+ * })
157
+ * .where('id', '=', 1)
158
+ * .executeTakeFirst()
159
+ *
160
+ * console.log(result.numUpdatedRows)
161
+ * ```
162
+ *
163
+ * The generated SQL (PostgreSQL):
164
+ *
165
+ * ```sql
166
+ * update "person" set
167
+ * "first_name" = $1,
168
+ * "last_name" = $2 || $3,
169
+ * "age" = (select avg(age) from "person")
170
+ * where "id" = $4
171
+ * ```
172
+ */
173
+ set(row) {
174
+ return new UpdateQueryBuilder({
175
+ ...this.#props,
176
+ queryNode: UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, parseUpdateObject(this.#props.parseContext, row)),
177
+ });
178
+ }
179
+ returning(selection) {
180
+ return new UpdateQueryBuilder({
181
+ ...this.#props,
182
+ queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(this.#props.parseContext, selection)),
183
+ });
184
+ }
185
+ returningAll() {
186
+ return new UpdateQueryBuilder({
187
+ ...this.#props,
188
+ queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll()),
189
+ });
190
+ }
191
+ /**
192
+ * Simply calls the given function passing `this` as the only argument.
193
+ *
194
+ * This method can be useful when adding optional method calls:
195
+ *
196
+ * ### Examples
197
+ *
198
+ * ```ts
199
+ * db.updateTable('person')
200
+ * .set(values)
201
+ * .call((qb) => {
202
+ * if (something) {
203
+ * return qb.where('something', '=', something)
204
+ * } else {
205
+ * return qb.where('somethingElse', '=', somethingElse)
206
+ * }
207
+ * })
208
+ * .execute()
209
+ * ```
210
+ */
211
+ call(func) {
212
+ return func(this);
213
+ }
214
+ /**
215
+ * Change the output type of the query.
216
+ *
217
+ * You should only use this method as the last resort if the types
218
+ * don't support your use case.
219
+ */
220
+ castTo() {
221
+ return new UpdateQueryBuilder(this.#props);
222
+ }
223
+ withPlugin(plugin) {
224
+ return new UpdateQueryBuilder({
225
+ ...this.#props,
226
+ executor: this.#props.executor.withPlugin(plugin),
227
+ });
228
+ }
229
+ toOperationNode() {
230
+ return this.#props.executor.transformQuery(this.#props.queryNode, this.#props.queryId);
231
+ }
232
+ compile() {
233
+ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
234
+ }
235
+ /**
236
+ * Executes the query and returns an array of rows.
237
+ *
238
+ * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
239
+ */
240
+ async execute() {
241
+ const compildQuery = this.compile();
242
+ const query = compildQuery.query;
243
+ const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
244
+ if (this.#props.parseContext.adapter.supportsReturning && query.returning) {
245
+ return result.rows;
246
+ }
247
+ else {
248
+ return [new UpdateResult(result.numUpdatedOrDeletedRows)];
249
+ }
250
+ }
251
+ /**
252
+ * Executes the query and returns the first result or undefined if
253
+ * the query returned no result.
254
+ */
255
+ async executeTakeFirst() {
256
+ const [result] = await this.execute();
257
+ return result;
258
+ }
259
+ /**
260
+ * Executes the query and returns the first result or throws if
261
+ * the query returned no result.
262
+ *
263
+ * By default an instance of {@link NoResultError} is thrown, but you can
264
+ * provide a custom error class as the only argument to throw a different
265
+ * error.
266
+ */
267
+ async executeTakeFirstOrThrow(errorConstructor = NoResultError) {
268
+ const result = await this.executeTakeFirst();
269
+ if (result === undefined) {
270
+ throw new errorConstructor(this.toOperationNode());
271
+ }
272
+ return result;
273
+ }
274
+ }
275
+ preventAwait(UpdateQueryBuilder, "don't await UpdateQueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");