kysely 0.11.3 → 0.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/dialect/dialect-adapter-base.d.ts +36 -0
  3. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +36 -0
  4. package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +16 -0
  5. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +29 -0
  6. package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +3 -0
  7. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +36 -0
  8. package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +16 -0
  9. package/dist/cjs/dialect/postgres/postgres-driver.d.ts +29 -0
  10. package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +3 -0
  11. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +36 -0
  12. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +6 -2
  13. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +16 -0
  14. package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +29 -0
  15. package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +3 -0
  16. package/dist/cjs/driver/default-connection-provider.d.ts +4 -0
  17. package/dist/cjs/driver/runtime-driver.d.ts +29 -0
  18. package/dist/cjs/driver/single-connection-provider.d.ts +4 -0
  19. package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +1 -0
  20. package/dist/cjs/dynamic/dynamic-reference-builder.js +9 -1
  21. package/dist/cjs/dynamic/dynamic.d.ts +6 -7
  22. package/dist/cjs/dynamic/dynamic.js +6 -7
  23. package/dist/cjs/index.d.ts +14 -3
  24. package/dist/cjs/index.js +12 -1
  25. package/dist/cjs/kysely.d.ts +170 -11
  26. package/dist/cjs/kysely.js +69 -9
  27. package/dist/cjs/migration/migration.d.ts +2 -2
  28. package/dist/cjs/operation-node/common-table-expression-name-node.d.ts +15 -0
  29. package/dist/cjs/operation-node/common-table-expression-name-node.js +23 -0
  30. package/dist/cjs/operation-node/common-table-expression-node.d.ts +3 -3
  31. package/dist/cjs/operation-node/create-table-node.d.ts +6 -2
  32. package/dist/cjs/operation-node/create-table-node.js +6 -6
  33. package/dist/cjs/operation-node/create-view-node.d.ts +1 -0
  34. package/dist/cjs/operation-node/insert-query-node.d.ts +4 -4
  35. package/dist/cjs/operation-node/operation-node-transformer.d.ts +4 -0
  36. package/dist/cjs/operation-node/operation-node-transformer.js +20 -1
  37. package/dist/cjs/operation-node/operation-node-visitor.d.ts +4 -0
  38. package/dist/cjs/operation-node/operation-node-visitor.js +2 -0
  39. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  40. package/dist/cjs/operation-node/query-node.d.ts +0 -2
  41. package/dist/cjs/operation-node/query-node.js +0 -10
  42. package/dist/cjs/operation-node/values-node.d.ts +15 -0
  43. package/dist/cjs/operation-node/values-node.js +18 -0
  44. package/dist/cjs/operation-node/with-node.d.ts +3 -1
  45. package/dist/cjs/operation-node/with-node.js +2 -1
  46. package/dist/cjs/package.json +1 -3
  47. package/dist/cjs/parser/complex-expression-parser.d.ts +9 -0
  48. package/dist/cjs/parser/complex-expression-parser.js +25 -0
  49. package/dist/cjs/parser/filter-parser.d.ts +13 -4
  50. package/dist/cjs/parser/filter-parser.js +21 -24
  51. package/dist/cjs/parser/insert-values-parser.d.ts +7 -10
  52. package/dist/cjs/parser/insert-values-parser.js +31 -39
  53. package/dist/cjs/parser/order-by-parser.d.ts +1 -1
  54. package/dist/cjs/parser/parse-context.d.ts +22 -8
  55. package/dist/cjs/parser/parse-context.js +10 -10
  56. package/dist/cjs/parser/reference-parser.d.ts +8 -7
  57. package/dist/cjs/parser/reference-parser.js +8 -17
  58. package/dist/cjs/parser/returning-parser.d.ts +1 -5
  59. package/dist/cjs/parser/select-parser.d.ts +12 -14
  60. package/dist/cjs/parser/select-parser.js +5 -9
  61. package/dist/cjs/parser/table-parser.d.ts +9 -11
  62. package/dist/cjs/parser/table-parser.js +2 -8
  63. package/dist/cjs/parser/union-parser.d.ts +2 -2
  64. package/dist/cjs/parser/union-parser.js +1 -6
  65. package/dist/cjs/parser/update-set-parser.d.ts +2 -8
  66. package/dist/cjs/parser/update-set-parser.js +6 -26
  67. package/dist/cjs/parser/value-parser.d.ts +9 -6
  68. package/dist/cjs/parser/value-parser.js +7 -30
  69. package/dist/cjs/parser/with-parser.d.ts +36 -6
  70. package/dist/cjs/parser/with-parser.js +13 -2
  71. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +34 -0
  72. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.d.ts +34 -0
  73. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
  74. package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +34 -0
  75. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +8 -0
  76. package/dist/cjs/query-builder/delete-query-builder.d.ts +647 -0
  77. package/dist/cjs/query-builder/delete-query-builder.js +185 -0
  78. package/dist/cjs/query-builder/expression-builder.d.ts +8 -6
  79. package/dist/cjs/query-builder/expression-builder.js +3 -3
  80. package/dist/cjs/query-builder/function-builder.d.ts +2 -1
  81. package/dist/cjs/query-builder/function-builder.js +2 -1
  82. package/dist/cjs/query-builder/having-interface.d.ts +49 -0
  83. package/dist/cjs/query-builder/having-interface.js +2 -0
  84. package/dist/cjs/query-builder/insert-query-builder.d.ts +504 -0
  85. package/dist/cjs/query-builder/insert-query-builder.js +256 -0
  86. package/dist/cjs/query-builder/insert-result.d.ts +3 -2
  87. package/dist/cjs/query-builder/insert-result.js +3 -2
  88. package/dist/cjs/query-builder/join-builder.d.ts +19 -20
  89. package/dist/cjs/query-builder/join-builder.js +12 -12
  90. package/dist/cjs/query-builder/join-interface.d.ts +130 -0
  91. package/dist/cjs/query-builder/join-interface.js +2 -0
  92. package/dist/cjs/query-builder/no-result-error.d.ts +9 -0
  93. package/dist/cjs/query-builder/no-result-error.js +14 -0
  94. package/dist/cjs/query-builder/returning-interface.d.ts +73 -0
  95. package/dist/cjs/query-builder/returning-interface.js +2 -0
  96. package/dist/cjs/query-builder/{query-builder.d.ts → select-query-builder.d.ts} +145 -634
  97. package/dist/cjs/query-builder/select-query-builder.js +571 -0
  98. package/dist/cjs/query-builder/update-query-builder.d.ts +735 -0
  99. package/dist/cjs/query-builder/update-query-builder.js +279 -0
  100. package/dist/cjs/query-builder/where-interface.d.ts +378 -0
  101. package/dist/cjs/query-builder/where-interface.js +2 -0
  102. package/dist/cjs/query-compiler/default-query-compiler.d.ts +4 -0
  103. package/dist/cjs/query-compiler/default-query-compiler.js +33 -5
  104. package/dist/cjs/query-creator.d.ts +69 -43
  105. package/dist/cjs/query-creator.js +66 -29
  106. package/dist/cjs/query-executor/default-query-executor.d.ts +19 -0
  107. package/dist/cjs/query-executor/noop-query-executor.d.ts +19 -0
  108. package/dist/cjs/query-executor/query-executor.d.ts +1 -1
  109. package/dist/cjs/query-executor/query-executor.js +1 -1
  110. package/dist/cjs/raw-builder/raw-builder.d.ts +2 -0
  111. package/dist/cjs/raw-builder/raw-builder.js +7 -1
  112. package/dist/cjs/schema/alter-table-builder.d.ts +218 -2
  113. package/dist/cjs/schema/column-definition-builder.d.ts +135 -20
  114. package/dist/cjs/schema/create-index-builder.d.ts +2 -1
  115. package/dist/cjs/schema/create-index-builder.js +2 -1
  116. package/dist/cjs/schema/create-table-builder.d.ts +26 -9
  117. package/dist/cjs/schema/create-table-builder.js +42 -9
  118. package/dist/cjs/schema/create-view-builder.d.ts +17 -3
  119. package/dist/cjs/schema/create-view-builder.js +25 -16
  120. package/dist/cjs/schema/schema.d.ts +18 -11
  121. package/dist/cjs/schema/schema.js +18 -11
  122. package/dist/cjs/util/log.d.ts +3 -2
  123. package/dist/cjs/util/log.js +8 -15
  124. package/dist/cjs/util/type-utils.d.ts +7 -7
  125. package/dist/esm/dialect/dialect-adapter-base.d.ts +36 -0
  126. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +36 -0
  127. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +16 -0
  128. package/dist/esm/dialect/mysql/mysql-driver.d.ts +29 -0
  129. package/dist/esm/dialect/mysql/mysql-introspector.d.ts +3 -0
  130. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +36 -0
  131. package/dist/esm/dialect/postgres/postgres-dialect.d.ts +16 -0
  132. package/dist/esm/dialect/postgres/postgres-driver.d.ts +29 -0
  133. package/dist/esm/dialect/postgres/postgres-introspector.d.ts +3 -0
  134. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +36 -0
  135. package/dist/esm/dialect/sqlite/sqlite-adapter.js +6 -2
  136. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +16 -0
  137. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +29 -0
  138. package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +3 -0
  139. package/dist/esm/driver/default-connection-provider.d.ts +4 -0
  140. package/dist/esm/driver/runtime-driver.d.ts +29 -0
  141. package/dist/esm/driver/single-connection-provider.d.ts +4 -0
  142. package/dist/esm/dynamic/dynamic-reference-builder.d.ts +1 -0
  143. package/dist/esm/dynamic/dynamic-reference-builder.js +7 -0
  144. package/dist/esm/dynamic/dynamic.d.ts +6 -7
  145. package/dist/esm/dynamic/dynamic.js +6 -7
  146. package/dist/esm/index.d.ts +14 -3
  147. package/dist/esm/index.js +12 -1
  148. package/dist/esm/kysely.d.ts +170 -11
  149. package/dist/esm/kysely.js +69 -9
  150. package/dist/esm/migration/migration.d.ts +2 -2
  151. package/dist/esm/operation-node/common-table-expression-name-node.d.ts +15 -0
  152. package/dist/esm/operation-node/common-table-expression-name-node.js +20 -0
  153. package/dist/esm/operation-node/common-table-expression-node.d.ts +3 -3
  154. package/dist/esm/operation-node/create-table-node.d.ts +6 -2
  155. package/dist/esm/operation-node/create-table-node.js +6 -6
  156. package/dist/esm/operation-node/create-view-node.d.ts +1 -0
  157. package/dist/esm/operation-node/insert-query-node.d.ts +4 -4
  158. package/dist/esm/operation-node/operation-node-transformer.d.ts +4 -0
  159. package/dist/esm/operation-node/operation-node-transformer.js +20 -1
  160. package/dist/esm/operation-node/operation-node-visitor.d.ts +4 -0
  161. package/dist/esm/operation-node/operation-node-visitor.js +2 -0
  162. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  163. package/dist/esm/operation-node/query-node.d.ts +0 -2
  164. package/dist/esm/operation-node/query-node.js +0 -10
  165. package/dist/esm/operation-node/values-node.d.ts +15 -0
  166. package/dist/esm/operation-node/values-node.js +15 -0
  167. package/dist/esm/operation-node/with-node.d.ts +3 -1
  168. package/dist/esm/operation-node/with-node.js +2 -1
  169. package/dist/esm/package.json +1 -3
  170. package/dist/esm/parser/complex-expression-parser.d.ts +9 -0
  171. package/dist/esm/parser/complex-expression-parser.js +20 -0
  172. package/dist/esm/parser/filter-parser.d.ts +13 -4
  173. package/dist/esm/parser/filter-parser.js +21 -24
  174. package/dist/esm/parser/insert-values-parser.d.ts +7 -10
  175. package/dist/esm/parser/insert-values-parser.js +31 -38
  176. package/dist/esm/parser/order-by-parser.d.ts +1 -1
  177. package/dist/esm/parser/parse-context.d.ts +22 -8
  178. package/dist/esm/parser/parse-context.js +10 -10
  179. package/dist/esm/parser/reference-parser.d.ts +8 -7
  180. package/dist/esm/parser/reference-parser.js +9 -18
  181. package/dist/esm/parser/returning-parser.d.ts +1 -5
  182. package/dist/esm/parser/select-parser.d.ts +12 -14
  183. package/dist/esm/parser/select-parser.js +6 -10
  184. package/dist/esm/parser/table-parser.d.ts +9 -11
  185. package/dist/esm/parser/table-parser.js +3 -9
  186. package/dist/esm/parser/union-parser.d.ts +2 -2
  187. package/dist/esm/parser/union-parser.js +1 -6
  188. package/dist/esm/parser/update-set-parser.d.ts +2 -8
  189. package/dist/esm/parser/update-set-parser.js +5 -24
  190. package/dist/esm/parser/value-parser.d.ts +9 -6
  191. package/dist/esm/parser/value-parser.js +8 -31
  192. package/dist/esm/parser/with-parser.d.ts +36 -6
  193. package/dist/esm/parser/with-parser.js +13 -2
  194. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +34 -0
  195. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.d.ts +34 -0
  196. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
  197. package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +34 -0
  198. package/dist/esm/plugin/with-schema/with-schema-transformer.js +8 -0
  199. package/dist/esm/query-builder/delete-query-builder.d.ts +647 -0
  200. package/dist/esm/query-builder/delete-query-builder.js +181 -0
  201. package/dist/esm/query-builder/expression-builder.d.ts +8 -6
  202. package/dist/esm/query-builder/expression-builder.js +3 -3
  203. package/dist/esm/query-builder/function-builder.d.ts +2 -1
  204. package/dist/esm/query-builder/function-builder.js +2 -1
  205. package/dist/esm/query-builder/having-interface.d.ts +49 -0
  206. package/dist/esm/query-builder/having-interface.js +1 -0
  207. package/dist/esm/query-builder/insert-query-builder.d.ts +504 -0
  208. package/dist/esm/query-builder/insert-query-builder.js +252 -0
  209. package/dist/esm/query-builder/insert-result.d.ts +3 -2
  210. package/dist/esm/query-builder/insert-result.js +3 -2
  211. package/dist/esm/query-builder/join-builder.d.ts +19 -20
  212. package/dist/esm/query-builder/join-builder.js +12 -12
  213. package/dist/esm/query-builder/join-interface.d.ts +130 -0
  214. package/dist/esm/query-builder/join-interface.js +1 -0
  215. package/dist/esm/query-builder/no-result-error.d.ts +9 -0
  216. package/dist/esm/query-builder/no-result-error.js +10 -0
  217. package/dist/esm/query-builder/returning-interface.d.ts +73 -0
  218. package/dist/esm/query-builder/returning-interface.js +1 -0
  219. package/dist/esm/query-builder/{query-builder.d.ts → select-query-builder.d.ts} +145 -634
  220. package/dist/esm/query-builder/select-query-builder.js +566 -0
  221. package/dist/esm/query-builder/update-query-builder.d.ts +735 -0
  222. package/dist/esm/query-builder/update-query-builder.js +275 -0
  223. package/dist/esm/query-builder/where-interface.d.ts +378 -0
  224. package/dist/esm/query-builder/where-interface.js +1 -0
  225. package/dist/esm/query-compiler/default-query-compiler.d.ts +4 -0
  226. package/dist/esm/query-compiler/default-query-compiler.js +33 -5
  227. package/dist/esm/query-creator.d.ts +69 -43
  228. package/dist/esm/query-creator.js +66 -29
  229. package/dist/esm/query-executor/default-query-executor.d.ts +19 -0
  230. package/dist/esm/query-executor/noop-query-executor.d.ts +19 -0
  231. package/dist/esm/query-executor/query-executor.d.ts +1 -1
  232. package/dist/esm/query-executor/query-executor.js +1 -1
  233. package/dist/esm/raw-builder/raw-builder.d.ts +2 -0
  234. package/dist/esm/raw-builder/raw-builder.js +7 -1
  235. package/dist/esm/schema/alter-table-builder.d.ts +218 -2
  236. package/dist/esm/schema/column-definition-builder.d.ts +135 -20
  237. package/dist/esm/schema/create-index-builder.d.ts +2 -1
  238. package/dist/esm/schema/create-index-builder.js +2 -1
  239. package/dist/esm/schema/create-table-builder.d.ts +26 -9
  240. package/dist/esm/schema/create-table-builder.js +43 -10
  241. package/dist/esm/schema/create-view-builder.d.ts +17 -3
  242. package/dist/esm/schema/create-view-builder.js +25 -16
  243. package/dist/esm/schema/schema.d.ts +18 -11
  244. package/dist/esm/schema/schema.js +18 -11
  245. package/dist/esm/util/log.d.ts +3 -2
  246. package/dist/esm/util/log.js +7 -14
  247. package/dist/esm/util/type-utils.d.ts +7 -7
  248. package/package.json +10 -8
  249. package/dist/cjs/query-builder/query-builder.js +0 -1067
  250. package/dist/esm/query-builder/query-builder.js +0 -1061
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InsertQueryBuilder = void 0;
4
+ const select_parser_js_1 = require("../parser/select-parser.js");
5
+ const insert_values_parser_js_1 = require("../parser/insert-values-parser.js");
6
+ const insert_query_node_js_1 = require("../operation-node/insert-query-node.js");
7
+ const query_node_js_1 = require("../operation-node/query-node.js");
8
+ const update_set_parser_js_1 = require("../parser/update-set-parser.js");
9
+ const prevent_await_js_1 = require("../util/prevent-await.js");
10
+ const on_conflict_parser_js_1 = require("../parser/on-conflict-parser.js");
11
+ const object_utils_js_1 = require("../util/object-utils.js");
12
+ const on_duplicate_key_node_js_1 = require("../operation-node/on-duplicate-key-node.js");
13
+ const insert_result_js_1 = require("./insert-result.js");
14
+ const no_result_error_js_1 = require("./no-result-error.js");
15
+ const complex_expression_parser_js_1 = require("../parser/complex-expression-parser.js");
16
+ const column_node_js_1 = require("../operation-node/column-node.js");
17
+ class InsertQueryBuilder {
18
+ #props;
19
+ constructor(props) {
20
+ this.#props = (0, object_utils_js_1.freeze)(props);
21
+ }
22
+ values(args) {
23
+ const [columns, values] = (0, insert_values_parser_js_1.parseInsertObjectOrList)(this.#props.parseContext, args);
24
+ return new InsertQueryBuilder({
25
+ ...this.#props,
26
+ queryNode: insert_query_node_js_1.InsertQueryNode.cloneWith(this.#props.queryNode, {
27
+ columns,
28
+ values,
29
+ }),
30
+ });
31
+ }
32
+ /**
33
+ * Sets the columns to insert.
34
+ *
35
+ * The {@link values} method sets both the columns and the values and this method
36
+ * is not needed. But if you are using the {@link expression} method, you can use
37
+ * this method to set the columns to insert.
38
+ *
39
+ * ### Examples
40
+ *
41
+ * ```ts
42
+ * db.insertInto('person')
43
+ * .columns(['first_name'])
44
+ * .expression((eb) => eb.selectFrom('pet').select('pet.name'))
45
+ * ```
46
+ *
47
+ * The generated SQL (PostgreSQL):
48
+ *
49
+ * ```sql
50
+ * insert into "person" ("first_name")
51
+ * select "pet"."name" from "pet"
52
+ * ```
53
+ */
54
+ columns(columns) {
55
+ return new InsertQueryBuilder({
56
+ ...this.#props,
57
+ queryNode: insert_query_node_js_1.InsertQueryNode.cloneWith(this.#props.queryNode, {
58
+ columns: (0, object_utils_js_1.freeze)(columns.map(column_node_js_1.ColumnNode.create)),
59
+ }),
60
+ });
61
+ }
62
+ /**
63
+ * Insert an arbitrary expression. For example the result of a select query.
64
+ *
65
+ * ### Examples
66
+ *
67
+ * ```ts
68
+ * db.insertInto('person')
69
+ * .columns(['first_name'])
70
+ * .expression((eb) => eb.selectFrom('pet').select('pet.name'))
71
+ * ```
72
+ *
73
+ * The generated SQL (PostgreSQL):
74
+ *
75
+ * ```sql
76
+ * insert into "person" ("first_name")
77
+ * select "pet"."name" from "pet"
78
+ * ```
79
+ */
80
+ expression(expression) {
81
+ return new InsertQueryBuilder({
82
+ ...this.#props,
83
+ queryNode: insert_query_node_js_1.InsertQueryNode.cloneWith(this.#props.queryNode, {
84
+ values: (0, complex_expression_parser_js_1.parseComplexExpression)(this.#props.parseContext, expression),
85
+ }),
86
+ });
87
+ }
88
+ onConflictDoNothing(target) {
89
+ return new InsertQueryBuilder({
90
+ ...this.#props,
91
+ queryNode: insert_query_node_js_1.InsertQueryNode.cloneWith(this.#props.queryNode, {
92
+ onConflict: (0, on_conflict_parser_js_1.parseOnConflictDoNothing)(target),
93
+ }),
94
+ });
95
+ }
96
+ /**
97
+ * Changes an `insert into` query to an `insert ignore into` query.
98
+ *
99
+ * If you use the ignore modifier, ignorable errors that occur while executing the
100
+ * insert statement are ignored. For example, without ignore, a row that duplicates
101
+ * an existing unique index or primary key value in the table causes a duplicate-key
102
+ * error and the statement is aborted. With ignore, the row is discarded and no error
103
+ * occurs.
104
+ *
105
+ * This is only supported on some dialects like MySQL. On most dialects you should
106
+ * use the {@link onConflictDoNothing} method.
107
+ *
108
+ * ### Examples
109
+ *
110
+ * ```ts
111
+ * await db.insertInto('person')
112
+ * .ignore()
113
+ * .values(values)
114
+ * .execute()
115
+ * ```
116
+ */
117
+ ignore() {
118
+ return new InsertQueryBuilder({
119
+ ...this.#props,
120
+ queryNode: insert_query_node_js_1.InsertQueryNode.cloneWith(this.#props.queryNode, {
121
+ ignore: true,
122
+ }),
123
+ });
124
+ }
125
+ onConflictUpdate(target, updates) {
126
+ return new InsertQueryBuilder({
127
+ ...this.#props,
128
+ queryNode: insert_query_node_js_1.InsertQueryNode.cloneWith(this.#props.queryNode, {
129
+ onConflict: (0, on_conflict_parser_js_1.parseOnConflictUpdate)(this.#props.parseContext, target, updates),
130
+ }),
131
+ });
132
+ }
133
+ /**
134
+ * Adds `on duplicate key update` to the query.
135
+ *
136
+ * If you specify `on duplicate key update`, and a row is inserted that would cause
137
+ * a duplicate value in a unique index or primary key, an update of the old row occurs.
138
+ *
139
+ * This is only implemented by some dialects like MySQL. On most dialects you should
140
+ * use {@link onConflictUpdate} instead.
141
+ *
142
+ * ### Examples
143
+ *
144
+ * ```ts
145
+ * await db
146
+ * .insertInto('person')
147
+ * .values(values)
148
+ * .onDuplicateKeyUpdate({ species: 'hamster' })
149
+ * ```
150
+ */
151
+ onDuplicateKeyUpdate(updates) {
152
+ return new InsertQueryBuilder({
153
+ ...this.#props,
154
+ queryNode: insert_query_node_js_1.InsertQueryNode.cloneWith(this.#props.queryNode, {
155
+ onDuplicateKey: on_duplicate_key_node_js_1.OnDuplicateKeyNode.create((0, update_set_parser_js_1.parseUpdateObject)(this.#props.parseContext, updates)),
156
+ }),
157
+ });
158
+ }
159
+ returning(selection) {
160
+ return new InsertQueryBuilder({
161
+ ...this.#props,
162
+ queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectExpressionOrList)(this.#props.parseContext, selection)),
163
+ });
164
+ }
165
+ returningAll() {
166
+ return new InsertQueryBuilder({
167
+ ...this.#props,
168
+ queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)()),
169
+ });
170
+ }
171
+ /**
172
+ * Simply calls the given function passing `this` as the only argument.
173
+ *
174
+ * This method can be useful when adding optional method calls:
175
+ *
176
+ * ### Examples
177
+ *
178
+ * ```ts
179
+ * db.insertInto('person')
180
+ * .selectAll()
181
+ * .call((qb) => {
182
+ * if (something) {
183
+ * return qb.onConflictDoNothing('something')
184
+ * } else {
185
+ * return qb.onConflictDoNothing('something_else')
186
+ * }
187
+ * })
188
+ * .execute()
189
+ * ```
190
+ */
191
+ call(func) {
192
+ return func(this);
193
+ }
194
+ /**
195
+ * Change the output type of the query.
196
+ *
197
+ * You should only use this method as the last resort if the types
198
+ * don't support your use case.
199
+ */
200
+ castTo() {
201
+ return new InsertQueryBuilder(this.#props);
202
+ }
203
+ withPlugin(plugin) {
204
+ return new InsertQueryBuilder({
205
+ ...this.#props,
206
+ executor: this.#props.executor.withPlugin(plugin),
207
+ });
208
+ }
209
+ toOperationNode() {
210
+ return this.#props.executor.transformQuery(this.#props.queryNode, this.#props.queryId);
211
+ }
212
+ compile() {
213
+ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
214
+ }
215
+ /**
216
+ * Executes the query and returns an array of rows.
217
+ *
218
+ * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
219
+ */
220
+ async execute() {
221
+ const compildQuery = this.compile();
222
+ const query = compildQuery.query;
223
+ const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
224
+ if (this.#props.parseContext.adapter.supportsReturning && query.returning) {
225
+ return result.rows;
226
+ }
227
+ else {
228
+ return [new insert_result_js_1.InsertResult(result.insertId)];
229
+ }
230
+ }
231
+ /**
232
+ * Executes the query and returns the first result or undefined if
233
+ * the query returned no result.
234
+ */
235
+ async executeTakeFirst() {
236
+ const [result] = await this.execute();
237
+ return result;
238
+ }
239
+ /**
240
+ * Executes the query and returns the first result or throws if
241
+ * the query returned no result.
242
+ *
243
+ * By default an instance of {@link NoResultError} is thrown, but you can
244
+ * provide a custom error class as the only argument to throw a different
245
+ * error.
246
+ */
247
+ async executeTakeFirstOrThrow(errorConstructor = no_result_error_js_1.NoResultError) {
248
+ const result = await this.executeTakeFirst();
249
+ if (result === undefined) {
250
+ throw new errorConstructor(this.toOperationNode());
251
+ }
252
+ return result;
253
+ }
254
+ }
255
+ exports.InsertQueryBuilder = InsertQueryBuilder;
256
+ (0, prevent_await_js_1.preventAwait)(InsertQueryBuilder, "don't await InsertQueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");
@@ -4,10 +4,11 @@
4
4
  * If the table has an auto incrementing primary key {@link insertId} will hold
5
5
  * the generated id on dialects that support it. For example PostgreSQL doesn't
6
6
  * return the id by default and {@link insertId} is undefined. On PostgreSQL you
7
- * need to use {@link QueryBuilder.returning} or {@link QueryBuilder.returningAll}
7
+ * need to use {@link ReturningInterface.returning} or {@link ReturningInterface.returningAll}
8
8
  * to get out the inserted id.
9
9
  *
10
- * @example
10
+ * ### Examples
11
+ *
11
12
  * ```ts
12
13
  * const result = await db
13
14
  * .insertInto('person')
@@ -7,10 +7,11 @@ exports.InsertResult = void 0;
7
7
  * If the table has an auto incrementing primary key {@link insertId} will hold
8
8
  * the generated id on dialects that support it. For example PostgreSQL doesn't
9
9
  * return the id by default and {@link insertId} is undefined. On PostgreSQL you
10
- * need to use {@link QueryBuilder.returning} or {@link QueryBuilder.returningAll}
10
+ * need to use {@link ReturningInterface.returning} or {@link ReturningInterface.returningAll}
11
11
  * to get out the inserted id.
12
12
  *
13
- * @example
13
+ * ### Examples
14
+ *
14
15
  * ```ts
15
16
  * const result = await db
16
17
  * .insertInto('person')
@@ -1,71 +1,70 @@
1
1
  import { JoinNode } from '../operation-node/join-node.js';
2
2
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
3
- import { ExistsExpression, FilterOperator } from '../parser/filter-parser.js';
3
+ import { ExistsExpression, FilterOperator, FilterValueExpressionOrList } from '../parser/filter-parser.js';
4
4
  import { ParseContext } from '../parser/parse-context.js';
5
5
  import { ReferenceExpression } from '../parser/reference-parser.js';
6
- import { ValueExpressionOrList } from '../parser/value-parser.js';
7
6
  import { AnyRawBuilder } from '../util/type-utils.js';
8
7
  export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNodeSource {
9
8
  #private;
10
9
  constructor(props: JoinBuilderProps);
11
10
  /**
12
- * Just like {@link QueryBuilder.where} but adds an item to the join's
11
+ * Just like {@link WhereInterface.where} but adds an item to the join's
13
12
  * `on` clause instead.
14
13
  *
15
- * See {@link QueryBuilder.where} for documentation and examples.
14
+ * See {@link WhereInterface.where} for documentation and examples.
16
15
  */
17
- on<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: ValueExpressionOrList<DB, TB, RE>): JoinBuilder<DB, TB>;
16
+ on<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): JoinBuilder<DB, TB>;
18
17
  on(grouper: (qb: JoinBuilder<DB, TB>) => JoinBuilder<DB, TB>): JoinBuilder<DB, TB>;
19
18
  on(raw: AnyRawBuilder): JoinBuilder<DB, TB>;
20
19
  /**
21
- * Just like {@link QueryBuilder.orWhere} but adds an item to the join's
20
+ * Just like {@link WhereInterface.orWhere} but adds an item to the join's
22
21
  * `on` clause instead.
23
22
  *
24
- * See {@link QueryBuilder.orWhere} for documentation and examples.
23
+ * See {@link WhereInterface.orWhere} for documentation and examples.
25
24
  */
26
- orOn<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: ValueExpressionOrList<DB, TB, RE>): JoinBuilder<DB, TB>;
25
+ orOn<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): JoinBuilder<DB, TB>;
27
26
  orOn(grouper: (qb: JoinBuilder<DB, TB>) => JoinBuilder<DB, TB>): JoinBuilder<DB, TB>;
28
27
  orOn(raw: AnyRawBuilder): JoinBuilder<DB, TB>;
29
28
  /**
30
- * Just like {@link QueryBuilder.whereRef} but adds an item to the join's
29
+ * Just like {@link WhereInterface.whereRef} but adds an item to the join's
31
30
  * `on` clause instead.
32
31
  *
33
- * See {@link QueryBuilder.whereRef} for documentation and examples.
32
+ * See {@link WhereInterface.whereRef} for documentation and examples.
34
33
  */
35
34
  onRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): JoinBuilder<DB, TB>;
36
35
  /**
37
- * Just like {@link QueryBuilder.orWhereRef} but adds an item to the join's
36
+ * Just like {@link WhereInterface.orWhereRef} but adds an item to the join's
38
37
  * `on` clause instead.
39
38
  *
40
- * See {@link QueryBuilder.orWhereRef} for documentation and examples.
39
+ * See {@link WhereInterface.orWhereRef} for documentation and examples.
41
40
  */
42
41
  orOnRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): JoinBuilder<DB, TB>;
43
42
  /**
44
- * Just like {@link QueryBuilder.whereExists} but adds an item to the join's
43
+ * Just like {@link WhereInterface.whereExists} but adds an item to the join's
45
44
  * `on` clause instead.
46
45
  *
47
- * See {@link QueryBuilder.whereExists} for documentation and examples.
46
+ * See {@link WhereInterface.whereExists} for documentation and examples.
48
47
  */
49
48
  onExists(arg: ExistsExpression<DB, TB>): JoinBuilder<DB, TB>;
50
49
  /**
51
- * Just like {@link QueryBuilder.whereNotExists} but adds an item to the join's
50
+ * Just like {@link WhereInterface.whereNotExists} but adds an item to the join's
52
51
  * `on` clause instead.
53
52
  *
54
- * See {@link QueryBuilder.whereNotExists} for documentation and examples.
53
+ * See {@link WhereInterface.whereNotExists} for documentation and examples.
55
54
  */
56
55
  onNotExists(arg: ExistsExpression<DB, TB>): JoinBuilder<DB, TB>;
57
56
  /**
58
- * Just like {@link QueryBuilder.orWhereExists} but adds an item to the join's
57
+ * Just like {@link WhereInterface.orWhereExists} but adds an item to the join's
59
58
  * `on` clause instead.
60
59
  *
61
- * See {@link QueryBuilder.orWhereExists} for documentation and examples.
60
+ * See {@link WhereInterface.orWhereExists} for documentation and examples.
62
61
  */
63
62
  orOnExists(arg: ExistsExpression<DB, TB>): JoinBuilder<DB, TB>;
64
63
  /**
65
- * Just like {@link QueryBuilder.orWhereNotExists} but adds an item to the join's
64
+ * Just like {@link WhereInterface.orWhereNotExists} but adds an item to the join's
66
65
  * `on` clause instead.
67
66
  *
68
- * See {@link QueryBuilder.orWhereNotExists} for documentation and examples.
67
+ * See {@link WhereInterface.orWhereNotExists} for documentation and examples.
69
68
  */
70
69
  orOnNotExists(arg: ExistsExpression<DB, TB>): JoinBuilder<DB, TB>;
71
70
  toOperationNode(): JoinNode;
@@ -23,10 +23,10 @@ class JoinBuilder {
23
23
  });
24
24
  }
25
25
  /**
26
- * Just like {@link QueryBuilder.whereRef} but adds an item to the join's
26
+ * Just like {@link WhereInterface.whereRef} but adds an item to the join's
27
27
  * `on` clause instead.
28
28
  *
29
- * See {@link QueryBuilder.whereRef} for documentation and examples.
29
+ * See {@link WhereInterface.whereRef} for documentation and examples.
30
30
  */
31
31
  onRef(lhs, op, rhs) {
32
32
  return new JoinBuilder({
@@ -35,10 +35,10 @@ class JoinBuilder {
35
35
  });
36
36
  }
37
37
  /**
38
- * Just like {@link QueryBuilder.orWhereRef} but adds an item to the join's
38
+ * Just like {@link WhereInterface.orWhereRef} but adds an item to the join's
39
39
  * `on` clause instead.
40
40
  *
41
- * See {@link QueryBuilder.orWhereRef} for documentation and examples.
41
+ * See {@link WhereInterface.orWhereRef} for documentation and examples.
42
42
  */
43
43
  orOnRef(lhs, op, rhs) {
44
44
  return new JoinBuilder({
@@ -47,10 +47,10 @@ class JoinBuilder {
47
47
  });
48
48
  }
49
49
  /**
50
- * Just like {@link QueryBuilder.whereExists} but adds an item to the join's
50
+ * Just like {@link WhereInterface.whereExists} but adds an item to the join's
51
51
  * `on` clause instead.
52
52
  *
53
- * See {@link QueryBuilder.whereExists} for documentation and examples.
53
+ * See {@link WhereInterface.whereExists} for documentation and examples.
54
54
  */
55
55
  onExists(arg) {
56
56
  return new JoinBuilder({
@@ -59,10 +59,10 @@ class JoinBuilder {
59
59
  });
60
60
  }
61
61
  /**
62
- * Just like {@link QueryBuilder.whereNotExists} but adds an item to the join's
62
+ * Just like {@link WhereInterface.whereNotExists} but adds an item to the join's
63
63
  * `on` clause instead.
64
64
  *
65
- * See {@link QueryBuilder.whereNotExists} for documentation and examples.
65
+ * See {@link WhereInterface.whereNotExists} for documentation and examples.
66
66
  */
67
67
  onNotExists(arg) {
68
68
  return new JoinBuilder({
@@ -71,10 +71,10 @@ class JoinBuilder {
71
71
  });
72
72
  }
73
73
  /**
74
- * Just like {@link QueryBuilder.orWhereExists} but adds an item to the join's
74
+ * Just like {@link WhereInterface.orWhereExists} but adds an item to the join's
75
75
  * `on` clause instead.
76
76
  *
77
- * See {@link QueryBuilder.orWhereExists} for documentation and examples.
77
+ * See {@link WhereInterface.orWhereExists} for documentation and examples.
78
78
  */
79
79
  orOnExists(arg) {
80
80
  return new JoinBuilder({
@@ -83,10 +83,10 @@ class JoinBuilder {
83
83
  });
84
84
  }
85
85
  /**
86
- * Just like {@link QueryBuilder.orWhereNotExists} but adds an item to the join's
86
+ * Just like {@link WhereInterface.orWhereNotExists} but adds an item to the join's
87
87
  * `on` clause instead.
88
88
  *
89
- * See {@link QueryBuilder.orWhereNotExists} for documentation and examples.
89
+ * See {@link WhereInterface.orWhereNotExists} for documentation and examples.
90
90
  */
91
91
  orOnNotExists(arg) {
92
92
  return new JoinBuilder({
@@ -0,0 +1,130 @@
1
+ import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
2
+ import { FullJoinTableExpressionDatabase, LeftJoinTableExpressionDatabase, RightJoinTableExpressionDatabase, TableExpression, TableExpressionDatabase, TableExpressionTables } from '../parser/table-parser.js';
3
+ export interface JoinInterface<DB, TB extends keyof DB> {
4
+ /**
5
+ * Joins another table to the query using an inner join.
6
+ *
7
+ * ### Examples
8
+ *
9
+ * Simple usage by providing a table name and two columns to join:
10
+ *
11
+ * ```ts
12
+ * const result = await db
13
+ * .selectFrom('person')
14
+ * .innerJoin('pet', 'pet.owner_id', 'person.id')
15
+ * // `select` needs to come after the call to `innerJoin` so
16
+ * // that you can select from the joined table.
17
+ * .select('person.id', 'pet.name')
18
+ * .execute()
19
+ *
20
+ * result[0].id
21
+ * result[0].name
22
+ * ```
23
+ *
24
+ * The generated SQL (PostgreSQL):
25
+ *
26
+ * ```sql
27
+ * select "person"."id", "pet"."name"
28
+ * from "person"
29
+ * inner join "pet"
30
+ * on "pet"."owner_id" = "person"."id"
31
+ * ```
32
+ *
33
+ * You can give an alias for the joined table like this:
34
+ *
35
+ * ```ts
36
+ * await db.selectFrom('person')
37
+ * .innerJoin('pet as p', 'p.owner_id', 'person.id')
38
+ * .where('p.name', '=', 'Doggo')
39
+ * .selectAll()
40
+ * .execute()
41
+ * ```
42
+ *
43
+ * The generated SQL (PostgreSQL):
44
+ *
45
+ * ```sql
46
+ * select *
47
+ * from "person"
48
+ * inner join "pet" as "p"
49
+ * on "p"."owner_id" = "person"."id"
50
+ * where "p".name" = $1
51
+ * ```
52
+ *
53
+ * You can provide a function as the second argument to get a join
54
+ * builder for creating more complex joins. The join builder has a
55
+ * bunch of `on*` methods for building the `on` clause of the join.
56
+ * There's basically an equivalent for every `where` method
57
+ * (`on`, `onRef`, `onExists` etc.). You can do all the same things
58
+ * with the `on` method that you can with the corresponding `where`
59
+ * method. See the `where` method documentation for more examples.
60
+ *
61
+ * ```ts
62
+ * await db.selectFrom('person')
63
+ * .innerJoin(
64
+ * 'pet',
65
+ * (join) => join
66
+ * .onRef('pet.owner_id', '=', 'person.id')
67
+ * .on('pet.name', '=', 'Doggo')
68
+ * )
69
+ * .selectAll()
70
+ * .execute()
71
+ * ```
72
+ *
73
+ * The generated SQL (PostgreSQL):
74
+ *
75
+ * ```sql
76
+ * select *
77
+ * from "person"
78
+ * inner join "pet"
79
+ * on "pet"."owner_id" = "person"."id"
80
+ * and "pet"."name" = $1
81
+ * ```
82
+ *
83
+ * You can join a subquery by providing a function as the first
84
+ * argument:
85
+ *
86
+ * ```ts
87
+ * await db.selectFrom('person')
88
+ * .innerJoin(
89
+ * (qb) => qb.selectFrom('pet')
90
+ * .select(['owner_id', 'name'])
91
+ * .where('name', '=', 'Doggo')
92
+ * .as('doggos'),
93
+ * 'doggos.owner_id',
94
+ * 'person.id',
95
+ * )
96
+ * .selectAll()
97
+ * .execute()
98
+ * ```
99
+ *
100
+ * The generated SQL (PostgreSQL):
101
+ *
102
+ * ```sql
103
+ * select *
104
+ * from "person"
105
+ * inner join (
106
+ * select "owner_id", "name"
107
+ * from "pet"
108
+ * where "name" = $1
109
+ * ) as "doggos"
110
+ * on "doggos"."owner_id" = "person"."id"
111
+ * ```
112
+ */
113
+ innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): JoinInterface<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>>;
114
+ innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): JoinInterface<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>>;
115
+ /**
116
+ * Just like {@link innerJoin} but adds a left join nstead of an inner join.
117
+ */
118
+ leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): JoinInterface<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>>;
119
+ leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): JoinInterface<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>>;
120
+ /**
121
+ * Just like {@link innerJoin} but adds a right join instead of an inner join.
122
+ */
123
+ rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): JoinInterface<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>>;
124
+ rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): JoinInterface<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>>;
125
+ /**
126
+ * Just like {@link innerJoin} but adds a full join instead of an inner join.
127
+ */
128
+ fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): JoinInterface<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>>;
129
+ fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): JoinInterface<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>>;
130
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,9 @@
1
+ import { QueryNode } from '../operation-node/query-node.js';
2
+ export declare type NoResultErrorConstructor = new (node: QueryNode) => Error;
3
+ export declare class NoResultError extends Error {
4
+ /**
5
+ * The operation node tree of the query that was executed.
6
+ */
7
+ readonly node: QueryNode;
8
+ constructor(node: QueryNode);
9
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoResultError = void 0;
4
+ class NoResultError extends Error {
5
+ /**
6
+ * The operation node tree of the query that was executed.
7
+ */
8
+ node;
9
+ constructor(node) {
10
+ super('no result');
11
+ this.node = node;
12
+ }
13
+ }
14
+ exports.NoResultError = NoResultError;