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,279 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UpdateQueryBuilder = void 0;
4
+ const join_parser_js_1 = require("../parser/join-parser.js");
5
+ const select_parser_js_1 = require("../parser/select-parser.js");
6
+ const filter_parser_js_1 = require("../parser/filter-parser.js");
7
+ const query_node_js_1 = require("../operation-node/query-node.js");
8
+ const update_query_node_js_1 = require("../operation-node/update-query-node.js");
9
+ const update_set_parser_js_1 = require("../parser/update-set-parser.js");
10
+ const prevent_await_js_1 = require("../util/prevent-await.js");
11
+ const object_utils_js_1 = require("../util/object-utils.js");
12
+ const update_result_js_1 = require("./update-result.js");
13
+ const no_result_error_js_1 = require("./no-result-error.js");
14
+ class UpdateQueryBuilder {
15
+ #props;
16
+ constructor(props) {
17
+ this.#props = (0, object_utils_js_1.freeze)(props);
18
+ }
19
+ where(...args) {
20
+ return new UpdateQueryBuilder({
21
+ ...this.#props,
22
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
23
+ });
24
+ }
25
+ whereRef(lhs, op, rhs) {
26
+ return new UpdateQueryBuilder({
27
+ ...this.#props,
28
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
29
+ });
30
+ }
31
+ orWhere(...args) {
32
+ return new UpdateQueryBuilder({
33
+ ...this.#props,
34
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
35
+ });
36
+ }
37
+ orWhereRef(lhs, op, rhs) {
38
+ return new UpdateQueryBuilder({
39
+ ...this.#props,
40
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
41
+ });
42
+ }
43
+ whereExists(arg) {
44
+ return new UpdateQueryBuilder({
45
+ ...this.#props,
46
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
47
+ });
48
+ }
49
+ whereNotExists(arg) {
50
+ return new UpdateQueryBuilder({
51
+ ...this.#props,
52
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
53
+ });
54
+ }
55
+ orWhereExists(arg) {
56
+ return new UpdateQueryBuilder({
57
+ ...this.#props,
58
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
59
+ });
60
+ }
61
+ orWhereNotExists(arg) {
62
+ return new UpdateQueryBuilder({
63
+ ...this.#props,
64
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
65
+ });
66
+ }
67
+ innerJoin(...args) {
68
+ return new UpdateQueryBuilder({
69
+ ...this.#props,
70
+ queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'InnerJoin', args)),
71
+ });
72
+ }
73
+ leftJoin(...args) {
74
+ return new UpdateQueryBuilder({
75
+ ...this.#props,
76
+ queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'LeftJoin', args)),
77
+ });
78
+ }
79
+ rightJoin(...args) {
80
+ return new UpdateQueryBuilder({
81
+ ...this.#props,
82
+ queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'RightJoin', args)),
83
+ });
84
+ }
85
+ fullJoin(...args) {
86
+ return new UpdateQueryBuilder({
87
+ ...this.#props,
88
+ queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'FullJoin', args)),
89
+ });
90
+ }
91
+ /**
92
+ * Sets the values to update for an {@link Kysely.updateTable | update} query.
93
+ *
94
+ * This method takes an object whose keys are column names and values are
95
+ * values to update. In addition to the column's type, the values can be `raw`
96
+ * instances or select queries.
97
+ *
98
+ * The return value of an update query is an instance of {@link UpdateResult}.
99
+ * You can use the {@link ReturningInterface.returning | returning} method on
100
+ * supported databases to get out the updated rows.
101
+ *
102
+ * ### Examples
103
+ *
104
+ * Update a row in `person` table:
105
+ *
106
+ * ```ts
107
+ * const result = await db
108
+ * .updateTable('person')
109
+ * .set({
110
+ * first_name: 'Jennifer',
111
+ * last_name: 'Aniston'
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 "first_name" = $1, "last_name" = $2 where "id" = $3
123
+ * ```
124
+ *
125
+ * On PostgreSQL you ca chain `returning` to the query to get
126
+ * the updated rows' columns (or any other expression) as the
127
+ * return value:
128
+ *
129
+ * ```ts
130
+ * const row = await db
131
+ * .updateTable('person')
132
+ * .set({
133
+ * first_name: 'Jennifer',
134
+ * last_name: 'Aniston'
135
+ * })
136
+ * .where('id', '=', 1)
137
+ * .returning('id')
138
+ * .executeTakeFirstOrThrow()
139
+ *
140
+ * row.id
141
+ * ```
142
+ *
143
+ * The generated SQL (PostgreSQL):
144
+ *
145
+ * ```sql
146
+ * update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3 returning "id"
147
+ * ```
148
+ *
149
+ * In addition to primitives, the values can also be `raw` expressions or
150
+ * select queries:
151
+ *
152
+ * ```ts
153
+ * const result = await db
154
+ * .updateTable('person')
155
+ * .set({
156
+ * first_name: 'Jennifer',
157
+ * last_name: db.raw('? || ?', ['Ani', 'ston']),
158
+ * age: db.selectFrom('person').select(raw('avg(age)')),
159
+ * })
160
+ * .where('id', '=', 1)
161
+ * .executeTakeFirst()
162
+ *
163
+ * console.log(result.numUpdatedRows)
164
+ * ```
165
+ *
166
+ * The generated SQL (PostgreSQL):
167
+ *
168
+ * ```sql
169
+ * update "person" set
170
+ * "first_name" = $1,
171
+ * "last_name" = $2 || $3,
172
+ * "age" = (select avg(age) from "person")
173
+ * where "id" = $4
174
+ * ```
175
+ */
176
+ set(row) {
177
+ return new UpdateQueryBuilder({
178
+ ...this.#props,
179
+ queryNode: update_query_node_js_1.UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, (0, update_set_parser_js_1.parseUpdateObject)(this.#props.parseContext, row)),
180
+ });
181
+ }
182
+ returning(selection) {
183
+ return new UpdateQueryBuilder({
184
+ ...this.#props,
185
+ queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectExpressionOrList)(this.#props.parseContext, selection)),
186
+ });
187
+ }
188
+ returningAll() {
189
+ return new UpdateQueryBuilder({
190
+ ...this.#props,
191
+ queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)()),
192
+ });
193
+ }
194
+ /**
195
+ * Simply calls the given function passing `this` as the only argument.
196
+ *
197
+ * This method can be useful when adding optional method calls:
198
+ *
199
+ * ### Examples
200
+ *
201
+ * ```ts
202
+ * db.updateTable('person')
203
+ * .set(values)
204
+ * .call((qb) => {
205
+ * if (something) {
206
+ * return qb.where('something', '=', something)
207
+ * } else {
208
+ * return qb.where('somethingElse', '=', somethingElse)
209
+ * }
210
+ * })
211
+ * .execute()
212
+ * ```
213
+ */
214
+ call(func) {
215
+ return func(this);
216
+ }
217
+ /**
218
+ * Change the output type of the query.
219
+ *
220
+ * You should only use this method as the last resort if the types
221
+ * don't support your use case.
222
+ */
223
+ castTo() {
224
+ return new UpdateQueryBuilder(this.#props);
225
+ }
226
+ withPlugin(plugin) {
227
+ return new UpdateQueryBuilder({
228
+ ...this.#props,
229
+ executor: this.#props.executor.withPlugin(plugin),
230
+ });
231
+ }
232
+ toOperationNode() {
233
+ return this.#props.executor.transformQuery(this.#props.queryNode, this.#props.queryId);
234
+ }
235
+ compile() {
236
+ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
237
+ }
238
+ /**
239
+ * Executes the query and returns an array of rows.
240
+ *
241
+ * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
242
+ */
243
+ async execute() {
244
+ const compildQuery = this.compile();
245
+ const query = compildQuery.query;
246
+ const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
247
+ if (this.#props.parseContext.adapter.supportsReturning && query.returning) {
248
+ return result.rows;
249
+ }
250
+ else {
251
+ return [new update_result_js_1.UpdateResult(result.numUpdatedOrDeletedRows)];
252
+ }
253
+ }
254
+ /**
255
+ * Executes the query and returns the first result or undefined if
256
+ * the query returned no result.
257
+ */
258
+ async executeTakeFirst() {
259
+ const [result] = await this.execute();
260
+ return result;
261
+ }
262
+ /**
263
+ * Executes the query and returns the first result or throws if
264
+ * the query returned no result.
265
+ *
266
+ * By default an instance of {@link NoResultError} is thrown, but you can
267
+ * provide a custom error class as the only argument to throw a different
268
+ * error.
269
+ */
270
+ async executeTakeFirstOrThrow(errorConstructor = no_result_error_js_1.NoResultError) {
271
+ const result = await this.executeTakeFirst();
272
+ if (result === undefined) {
273
+ throw new errorConstructor(this.toOperationNode());
274
+ }
275
+ return result;
276
+ }
277
+ }
278
+ exports.UpdateQueryBuilder = UpdateQueryBuilder;
279
+ (0, prevent_await_js_1.preventAwait)(UpdateQueryBuilder, "don't await UpdateQueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");