kysely 0.11.4 → 0.13.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 (262) hide show
  1. package/README.md +35 -11
  2. package/dist/cjs/dialect/dialect-adapter-base.d.ts +36 -0
  3. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +38 -2
  4. package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -1
  5. package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +16 -0
  6. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +29 -0
  7. package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +3 -0
  8. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +38 -2
  9. package/dist/cjs/dialect/postgres/postgres-adapter.js +2 -1
  10. package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +16 -0
  11. package/dist/cjs/dialect/postgres/postgres-driver.d.ts +29 -0
  12. package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +3 -0
  13. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +38 -2
  14. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +16 -0
  15. package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +29 -0
  16. package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +3 -0
  17. package/dist/cjs/driver/default-connection-provider.d.ts +4 -0
  18. package/dist/cjs/driver/runtime-driver.d.ts +29 -0
  19. package/dist/cjs/driver/single-connection-provider.d.ts +4 -0
  20. package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +1 -0
  21. package/dist/cjs/dynamic/dynamic-reference-builder.js +9 -1
  22. package/dist/cjs/dynamic/dynamic.d.ts +6 -7
  23. package/dist/cjs/dynamic/dynamic.js +6 -7
  24. package/dist/cjs/index.d.ts +15 -4
  25. package/dist/cjs/index.js +12 -1
  26. package/dist/cjs/kysely.d.ts +170 -11
  27. package/dist/cjs/kysely.js +69 -9
  28. package/dist/cjs/migration/migration.d.ts +156 -13
  29. package/dist/cjs/migration/migration.js +256 -135
  30. package/dist/cjs/operation-node/column-definition-node.d.ts +6 -5
  31. package/dist/cjs/operation-node/column-definition-node.js +0 -4
  32. package/dist/cjs/operation-node/common-table-expression-name-node.d.ts +15 -0
  33. package/dist/cjs/operation-node/common-table-expression-name-node.js +23 -0
  34. package/dist/cjs/operation-node/common-table-expression-node.d.ts +3 -3
  35. package/dist/cjs/operation-node/create-table-node.d.ts +6 -2
  36. package/dist/cjs/operation-node/create-table-node.js +6 -6
  37. package/dist/cjs/operation-node/create-view-node.d.ts +1 -0
  38. package/dist/cjs/operation-node/insert-query-node.d.ts +4 -4
  39. package/dist/cjs/operation-node/operation-node-transformer.d.ts +4 -0
  40. package/dist/cjs/operation-node/operation-node-transformer.js +22 -2
  41. package/dist/cjs/operation-node/operation-node-visitor.d.ts +4 -0
  42. package/dist/cjs/operation-node/operation-node-visitor.js +2 -0
  43. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  44. package/dist/cjs/operation-node/query-node.d.ts +0 -2
  45. package/dist/cjs/operation-node/query-node.js +0 -10
  46. package/dist/cjs/operation-node/values-node.d.ts +15 -0
  47. package/dist/cjs/operation-node/values-node.js +18 -0
  48. package/dist/cjs/operation-node/with-node.d.ts +3 -1
  49. package/dist/cjs/operation-node/with-node.js +2 -1
  50. package/dist/cjs/package.json +1 -3
  51. package/dist/cjs/parser/complex-expression-parser.d.ts +9 -0
  52. package/dist/cjs/parser/complex-expression-parser.js +25 -0
  53. package/dist/cjs/parser/filter-parser.d.ts +13 -4
  54. package/dist/cjs/parser/filter-parser.js +21 -24
  55. package/dist/cjs/parser/insert-values-parser.d.ts +5 -9
  56. package/dist/cjs/parser/insert-values-parser.js +27 -41
  57. package/dist/cjs/parser/order-by-parser.d.ts +1 -1
  58. package/dist/cjs/parser/parse-context.d.ts +22 -8
  59. package/dist/cjs/parser/parse-context.js +10 -10
  60. package/dist/cjs/parser/reference-parser.d.ts +8 -7
  61. package/dist/cjs/parser/reference-parser.js +8 -17
  62. package/dist/cjs/parser/returning-parser.d.ts +1 -5
  63. package/dist/cjs/parser/select-parser.d.ts +12 -14
  64. package/dist/cjs/parser/select-parser.js +5 -9
  65. package/dist/cjs/parser/table-parser.d.ts +9 -11
  66. package/dist/cjs/parser/table-parser.js +2 -8
  67. package/dist/cjs/parser/union-parser.d.ts +2 -2
  68. package/dist/cjs/parser/union-parser.js +1 -6
  69. package/dist/cjs/parser/update-set-parser.d.ts +2 -8
  70. package/dist/cjs/parser/update-set-parser.js +6 -26
  71. package/dist/cjs/parser/value-parser.d.ts +9 -6
  72. package/dist/cjs/parser/value-parser.js +7 -30
  73. package/dist/cjs/parser/with-parser.d.ts +36 -6
  74. package/dist/cjs/parser/with-parser.js +13 -2
  75. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +36 -2
  76. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.d.ts +34 -0
  77. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
  78. package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +34 -0
  79. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +8 -0
  80. package/dist/cjs/query-builder/delete-query-builder.d.ts +647 -0
  81. package/dist/cjs/query-builder/delete-query-builder.js +185 -0
  82. package/dist/cjs/query-builder/expression-builder.d.ts +8 -6
  83. package/dist/cjs/query-builder/expression-builder.js +3 -3
  84. package/dist/cjs/query-builder/function-builder.d.ts +2 -1
  85. package/dist/cjs/query-builder/function-builder.js +2 -1
  86. package/dist/cjs/query-builder/having-interface.d.ts +49 -0
  87. package/dist/cjs/query-builder/having-interface.js +2 -0
  88. package/dist/cjs/query-builder/insert-query-builder.d.ts +504 -0
  89. package/dist/cjs/query-builder/insert-query-builder.js +256 -0
  90. package/dist/cjs/query-builder/insert-result.d.ts +3 -2
  91. package/dist/cjs/query-builder/insert-result.js +3 -2
  92. package/dist/cjs/query-builder/join-builder.d.ts +19 -20
  93. package/dist/cjs/query-builder/join-builder.js +12 -12
  94. package/dist/cjs/query-builder/join-interface.d.ts +130 -0
  95. package/dist/cjs/query-builder/join-interface.js +2 -0
  96. package/dist/cjs/query-builder/no-result-error.d.ts +9 -0
  97. package/dist/cjs/query-builder/no-result-error.js +14 -0
  98. package/dist/cjs/query-builder/returning-interface.d.ts +73 -0
  99. package/dist/cjs/query-builder/returning-interface.js +2 -0
  100. package/dist/cjs/query-builder/{query-builder.d.ts → select-query-builder.d.ts} +145 -651
  101. package/dist/cjs/query-builder/select-query-builder.js +571 -0
  102. package/dist/cjs/query-builder/update-query-builder.d.ts +735 -0
  103. package/dist/cjs/query-builder/update-query-builder.js +279 -0
  104. package/dist/cjs/query-builder/where-interface.d.ts +378 -0
  105. package/dist/cjs/query-builder/where-interface.js +2 -0
  106. package/dist/cjs/query-compiler/default-query-compiler.d.ts +4 -0
  107. package/dist/cjs/query-compiler/default-query-compiler.js +37 -6
  108. package/dist/cjs/query-creator.d.ts +69 -43
  109. package/dist/cjs/query-creator.js +66 -29
  110. package/dist/cjs/query-executor/default-query-executor.d.ts +19 -0
  111. package/dist/cjs/query-executor/noop-query-executor.d.ts +19 -0
  112. package/dist/cjs/query-executor/query-executor.d.ts +1 -1
  113. package/dist/cjs/query-executor/query-executor.js +1 -1
  114. package/dist/cjs/raw-builder/raw-builder.d.ts +2 -0
  115. package/dist/cjs/raw-builder/raw-builder.js +7 -1
  116. package/dist/cjs/schema/alter-table-builder.d.ts +230 -2
  117. package/dist/cjs/schema/alter-table-builder.js +12 -0
  118. package/dist/cjs/schema/column-definition-builder.d.ts +147 -20
  119. package/dist/cjs/schema/column-definition-builder.js +4 -1
  120. package/dist/cjs/schema/create-index-builder.d.ts +2 -1
  121. package/dist/cjs/schema/create-index-builder.js +2 -1
  122. package/dist/cjs/schema/create-table-builder.d.ts +26 -9
  123. package/dist/cjs/schema/create-table-builder.js +42 -9
  124. package/dist/cjs/schema/create-view-builder.d.ts +17 -3
  125. package/dist/cjs/schema/create-view-builder.js +25 -16
  126. package/dist/cjs/schema/schema.d.ts +18 -11
  127. package/dist/cjs/schema/schema.js +18 -11
  128. package/dist/cjs/util/log.d.ts +3 -2
  129. package/dist/cjs/util/log.js +8 -15
  130. package/dist/cjs/util/type-utils.d.ts +7 -7
  131. package/dist/esm/dialect/dialect-adapter-base.d.ts +36 -0
  132. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +38 -2
  133. package/dist/esm/dialect/mysql/mysql-adapter.js +2 -1
  134. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +16 -0
  135. package/dist/esm/dialect/mysql/mysql-driver.d.ts +29 -0
  136. package/dist/esm/dialect/mysql/mysql-introspector.d.ts +3 -0
  137. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +38 -2
  138. package/dist/esm/dialect/postgres/postgres-adapter.js +2 -1
  139. package/dist/esm/dialect/postgres/postgres-dialect.d.ts +16 -0
  140. package/dist/esm/dialect/postgres/postgres-driver.d.ts +29 -0
  141. package/dist/esm/dialect/postgres/postgres-introspector.d.ts +3 -0
  142. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +38 -2
  143. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +16 -0
  144. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +29 -0
  145. package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +3 -0
  146. package/dist/esm/driver/default-connection-provider.d.ts +4 -0
  147. package/dist/esm/driver/runtime-driver.d.ts +29 -0
  148. package/dist/esm/driver/single-connection-provider.d.ts +4 -0
  149. package/dist/esm/dynamic/dynamic-reference-builder.d.ts +1 -0
  150. package/dist/esm/dynamic/dynamic-reference-builder.js +7 -0
  151. package/dist/esm/dynamic/dynamic.d.ts +6 -7
  152. package/dist/esm/dynamic/dynamic.js +6 -7
  153. package/dist/esm/index.d.ts +15 -4
  154. package/dist/esm/index.js +12 -1
  155. package/dist/esm/kysely.d.ts +170 -11
  156. package/dist/esm/kysely.js +69 -9
  157. package/dist/esm/migration/migration.d.ts +156 -13
  158. package/dist/esm/migration/migration.js +255 -134
  159. package/dist/esm/operation-node/column-definition-node.d.ts +6 -5
  160. package/dist/esm/operation-node/column-definition-node.js +0 -4
  161. package/dist/esm/operation-node/common-table-expression-name-node.d.ts +15 -0
  162. package/dist/esm/operation-node/common-table-expression-name-node.js +20 -0
  163. package/dist/esm/operation-node/common-table-expression-node.d.ts +3 -3
  164. package/dist/esm/operation-node/create-table-node.d.ts +6 -2
  165. package/dist/esm/operation-node/create-table-node.js +6 -6
  166. package/dist/esm/operation-node/create-view-node.d.ts +1 -0
  167. package/dist/esm/operation-node/insert-query-node.d.ts +4 -4
  168. package/dist/esm/operation-node/operation-node-transformer.d.ts +4 -0
  169. package/dist/esm/operation-node/operation-node-transformer.js +22 -2
  170. package/dist/esm/operation-node/operation-node-visitor.d.ts +4 -0
  171. package/dist/esm/operation-node/operation-node-visitor.js +2 -0
  172. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  173. package/dist/esm/operation-node/query-node.d.ts +0 -2
  174. package/dist/esm/operation-node/query-node.js +0 -10
  175. package/dist/esm/operation-node/values-node.d.ts +15 -0
  176. package/dist/esm/operation-node/values-node.js +15 -0
  177. package/dist/esm/operation-node/with-node.d.ts +3 -1
  178. package/dist/esm/operation-node/with-node.js +2 -1
  179. package/dist/esm/package.json +1 -3
  180. package/dist/esm/parser/complex-expression-parser.d.ts +9 -0
  181. package/dist/esm/parser/complex-expression-parser.js +20 -0
  182. package/dist/esm/parser/filter-parser.d.ts +13 -4
  183. package/dist/esm/parser/filter-parser.js +21 -24
  184. package/dist/esm/parser/insert-values-parser.d.ts +5 -9
  185. package/dist/esm/parser/insert-values-parser.js +27 -40
  186. package/dist/esm/parser/order-by-parser.d.ts +1 -1
  187. package/dist/esm/parser/parse-context.d.ts +22 -8
  188. package/dist/esm/parser/parse-context.js +10 -10
  189. package/dist/esm/parser/reference-parser.d.ts +8 -7
  190. package/dist/esm/parser/reference-parser.js +9 -18
  191. package/dist/esm/parser/returning-parser.d.ts +1 -5
  192. package/dist/esm/parser/select-parser.d.ts +12 -14
  193. package/dist/esm/parser/select-parser.js +6 -10
  194. package/dist/esm/parser/table-parser.d.ts +9 -11
  195. package/dist/esm/parser/table-parser.js +3 -9
  196. package/dist/esm/parser/union-parser.d.ts +2 -2
  197. package/dist/esm/parser/union-parser.js +1 -6
  198. package/dist/esm/parser/update-set-parser.d.ts +2 -8
  199. package/dist/esm/parser/update-set-parser.js +5 -24
  200. package/dist/esm/parser/value-parser.d.ts +9 -6
  201. package/dist/esm/parser/value-parser.js +8 -31
  202. package/dist/esm/parser/with-parser.d.ts +36 -6
  203. package/dist/esm/parser/with-parser.js +13 -2
  204. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +36 -2
  205. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.d.ts +34 -0
  206. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
  207. package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +34 -0
  208. package/dist/esm/plugin/with-schema/with-schema-transformer.js +8 -0
  209. package/dist/esm/query-builder/delete-query-builder.d.ts +647 -0
  210. package/dist/esm/query-builder/delete-query-builder.js +181 -0
  211. package/dist/esm/query-builder/expression-builder.d.ts +8 -6
  212. package/dist/esm/query-builder/expression-builder.js +3 -3
  213. package/dist/esm/query-builder/function-builder.d.ts +2 -1
  214. package/dist/esm/query-builder/function-builder.js +2 -1
  215. package/dist/esm/query-builder/having-interface.d.ts +49 -0
  216. package/dist/esm/query-builder/having-interface.js +1 -0
  217. package/dist/esm/query-builder/insert-query-builder.d.ts +504 -0
  218. package/dist/esm/query-builder/insert-query-builder.js +252 -0
  219. package/dist/esm/query-builder/insert-result.d.ts +3 -2
  220. package/dist/esm/query-builder/insert-result.js +3 -2
  221. package/dist/esm/query-builder/join-builder.d.ts +19 -20
  222. package/dist/esm/query-builder/join-builder.js +12 -12
  223. package/dist/esm/query-builder/join-interface.d.ts +130 -0
  224. package/dist/esm/query-builder/join-interface.js +1 -0
  225. package/dist/esm/query-builder/no-result-error.d.ts +9 -0
  226. package/dist/esm/query-builder/no-result-error.js +10 -0
  227. package/dist/esm/query-builder/returning-interface.d.ts +73 -0
  228. package/dist/esm/query-builder/returning-interface.js +1 -0
  229. package/dist/esm/query-builder/{query-builder.d.ts → select-query-builder.d.ts} +145 -651
  230. package/dist/esm/query-builder/select-query-builder.js +566 -0
  231. package/dist/esm/query-builder/update-query-builder.d.ts +735 -0
  232. package/dist/esm/query-builder/update-query-builder.js +275 -0
  233. package/dist/esm/query-builder/where-interface.d.ts +378 -0
  234. package/dist/esm/query-builder/where-interface.js +1 -0
  235. package/dist/esm/query-compiler/default-query-compiler.d.ts +4 -0
  236. package/dist/esm/query-compiler/default-query-compiler.js +37 -6
  237. package/dist/esm/query-creator.d.ts +69 -43
  238. package/dist/esm/query-creator.js +66 -29
  239. package/dist/esm/query-executor/default-query-executor.d.ts +19 -0
  240. package/dist/esm/query-executor/noop-query-executor.d.ts +19 -0
  241. package/dist/esm/query-executor/query-executor.d.ts +1 -1
  242. package/dist/esm/query-executor/query-executor.js +1 -1
  243. package/dist/esm/raw-builder/raw-builder.d.ts +2 -0
  244. package/dist/esm/raw-builder/raw-builder.js +7 -1
  245. package/dist/esm/schema/alter-table-builder.d.ts +230 -2
  246. package/dist/esm/schema/alter-table-builder.js +12 -0
  247. package/dist/esm/schema/column-definition-builder.d.ts +147 -20
  248. package/dist/esm/schema/column-definition-builder.js +4 -1
  249. package/dist/esm/schema/create-index-builder.d.ts +2 -1
  250. package/dist/esm/schema/create-index-builder.js +2 -1
  251. package/dist/esm/schema/create-table-builder.d.ts +26 -9
  252. package/dist/esm/schema/create-table-builder.js +43 -10
  253. package/dist/esm/schema/create-view-builder.d.ts +17 -3
  254. package/dist/esm/schema/create-view-builder.js +25 -16
  255. package/dist/esm/schema/schema.d.ts +18 -11
  256. package/dist/esm/schema/schema.js +18 -11
  257. package/dist/esm/util/log.d.ts +3 -2
  258. package/dist/esm/util/log.js +7 -14
  259. package/dist/esm/util/type-utils.d.ts +7 -7
  260. package/package.json +10 -8
  261. package/dist/cjs/query-builder/query-builder.js +0 -1067
  262. package/dist/esm/query-builder/query-builder.js +0 -1061
@@ -0,0 +1,571 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AliasedQueryBuilder = exports.SelectQueryBuilder = void 0;
4
+ const alias_node_js_1 = require("../operation-node/alias-node.js");
5
+ const join_parser_js_1 = require("../parser/join-parser.js");
6
+ const select_parser_js_1 = require("../parser/select-parser.js");
7
+ const filter_parser_js_1 = require("../parser/filter-parser.js");
8
+ const select_query_node_js_1 = require("../operation-node/select-query-node.js");
9
+ const query_node_js_1 = require("../operation-node/query-node.js");
10
+ const order_by_parser_js_1 = require("../parser/order-by-parser.js");
11
+ const prevent_await_js_1 = require("../util/prevent-await.js");
12
+ const limit_node_js_1 = require("../operation-node/limit-node.js");
13
+ const offset_node_js_1 = require("../operation-node/offset-node.js");
14
+ const object_utils_js_1 = require("../util/object-utils.js");
15
+ const group_by_parser_js_1 = require("../parser/group-by-parser.js");
16
+ const union_parser_js_1 = require("../parser/union-parser.js");
17
+ const no_result_error_js_1 = require("./no-result-error.js");
18
+ class SelectQueryBuilder {
19
+ #props;
20
+ constructor(props) {
21
+ this.#props = (0, object_utils_js_1.freeze)(props);
22
+ }
23
+ where(...args) {
24
+ return new SelectQueryBuilder({
25
+ ...this.#props,
26
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
27
+ });
28
+ }
29
+ whereRef(lhs, op, rhs) {
30
+ return new SelectQueryBuilder({
31
+ ...this.#props,
32
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
33
+ });
34
+ }
35
+ orWhere(...args) {
36
+ return new SelectQueryBuilder({
37
+ ...this.#props,
38
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
39
+ });
40
+ }
41
+ orWhereRef(lhs, op, rhs) {
42
+ return new SelectQueryBuilder({
43
+ ...this.#props,
44
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
45
+ });
46
+ }
47
+ whereExists(arg) {
48
+ return new SelectQueryBuilder({
49
+ ...this.#props,
50
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
51
+ });
52
+ }
53
+ whereNotExists(arg) {
54
+ return new SelectQueryBuilder({
55
+ ...this.#props,
56
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
57
+ });
58
+ }
59
+ orWhereExists(arg) {
60
+ return new SelectQueryBuilder({
61
+ ...this.#props,
62
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
63
+ });
64
+ }
65
+ orWhereNotExists(arg) {
66
+ return new SelectQueryBuilder({
67
+ ...this.#props,
68
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
69
+ });
70
+ }
71
+ having(...args) {
72
+ return new SelectQueryBuilder({
73
+ ...this.#props,
74
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseHavingFilter)(this.#props.parseContext, args)),
75
+ });
76
+ }
77
+ havingRef(lhs, op, rhs) {
78
+ return new SelectQueryBuilder({
79
+ ...this.#props,
80
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
81
+ });
82
+ }
83
+ orHaving(...args) {
84
+ return new SelectQueryBuilder({
85
+ ...this.#props,
86
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseHavingFilter)(this.#props.parseContext, args)),
87
+ });
88
+ }
89
+ orHavingRef(lhs, op, rhs) {
90
+ return new SelectQueryBuilder({
91
+ ...this.#props,
92
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
93
+ });
94
+ }
95
+ havingExists(arg) {
96
+ return new SelectQueryBuilder({
97
+ ...this.#props,
98
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
99
+ });
100
+ }
101
+ havingNotExist(arg) {
102
+ return new SelectQueryBuilder({
103
+ ...this.#props,
104
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
105
+ });
106
+ }
107
+ orHavingExists(arg) {
108
+ return new SelectQueryBuilder({
109
+ ...this.#props,
110
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
111
+ });
112
+ }
113
+ orHavingNotExists(arg) {
114
+ return new SelectQueryBuilder({
115
+ ...this.#props,
116
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
117
+ });
118
+ }
119
+ select(selection) {
120
+ return new SelectQueryBuilder({
121
+ ...this.#props,
122
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSelections(this.#props.queryNode, (0, select_parser_js_1.parseSelectExpressionOrList)(this.#props.parseContext, selection)),
123
+ });
124
+ }
125
+ distinctOn(selection) {
126
+ return new SelectQueryBuilder({
127
+ ...this.#props,
128
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithDistinctOnSelections(this.#props.queryNode, (0, select_parser_js_1.parseSelectExpressionOrList)(this.#props.parseContext, selection)),
129
+ });
130
+ }
131
+ /**
132
+ * Makes the selection distinct.
133
+ *
134
+ * ### Examples
135
+ *
136
+ * ```ts
137
+ * await db.selectFrom('person')
138
+ * .select('first_name')
139
+ * .distinct()
140
+ * .execute()
141
+ * ```
142
+ *
143
+ * The generated SQL (PostgreSQL):
144
+ *
145
+ * ```sql
146
+ * select distinct "first_name" from "person"
147
+ * ```
148
+ */
149
+ distinct() {
150
+ return new SelectQueryBuilder({
151
+ ...this.#props,
152
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithDistinct(this.#props.queryNode),
153
+ });
154
+ }
155
+ /**
156
+ * Adds the `for update` option to a select query on supported databases.
157
+ */
158
+ forUpdate() {
159
+ return new SelectQueryBuilder({
160
+ ...this.#props,
161
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'ForUpdate'),
162
+ });
163
+ }
164
+ /**
165
+ * Adds the `for share` option to a select query on supported databases.
166
+ */
167
+ forShare() {
168
+ return new SelectQueryBuilder({
169
+ ...this.#props,
170
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'ForShare'),
171
+ });
172
+ }
173
+ /**
174
+ * Adds the `for key share` option to a select query on supported databases.
175
+ */
176
+ forKeyShare() {
177
+ return new SelectQueryBuilder({
178
+ ...this.#props,
179
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'ForKeyShare'),
180
+ });
181
+ }
182
+ /**
183
+ * Adds the `for no key update` option to a select query on supported databases.
184
+ */
185
+ forNoKeyUpdate() {
186
+ return new SelectQueryBuilder({
187
+ ...this.#props,
188
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'ForNoKeyUpdate'),
189
+ });
190
+ }
191
+ /**
192
+ * Adds the `skip locked` option to a select query on supported databases.
193
+ */
194
+ skipLocked() {
195
+ return new SelectQueryBuilder({
196
+ ...this.#props,
197
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'SkipLocked'),
198
+ });
199
+ }
200
+ /**
201
+ * Adds the `nowait` option to a select query on supported databases.
202
+ */
203
+ noWait() {
204
+ return new SelectQueryBuilder({
205
+ ...this.#props,
206
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'NoWait'),
207
+ });
208
+ }
209
+ selectAll(table) {
210
+ return new SelectQueryBuilder({
211
+ ...this.#props,
212
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSelections(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)(table)),
213
+ });
214
+ }
215
+ innerJoin(...args) {
216
+ return new SelectQueryBuilder({
217
+ ...this.#props,
218
+ queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'InnerJoin', args)),
219
+ });
220
+ }
221
+ leftJoin(...args) {
222
+ return new SelectQueryBuilder({
223
+ ...this.#props,
224
+ queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'LeftJoin', args)),
225
+ });
226
+ }
227
+ rightJoin(...args) {
228
+ return new SelectQueryBuilder({
229
+ ...this.#props,
230
+ queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'RightJoin', args)),
231
+ });
232
+ }
233
+ fullJoin(...args) {
234
+ return new SelectQueryBuilder({
235
+ ...this.#props,
236
+ queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'FullJoin', args)),
237
+ });
238
+ }
239
+ /**
240
+ * Adds an `order by` clause to the query.
241
+ *
242
+ * `orderBy` calls are additive. To order by multiple columns, call `orderBy`
243
+ * multiple times.
244
+ *
245
+ * The first argument is the expression to order by and the second is the
246
+ * order (`asc` or `desc`).
247
+ *
248
+ * ### Examples
249
+ *
250
+ * ```ts
251
+ * await db
252
+ * .selectFrom('person')
253
+ * .select('person.first_name as fn')
254
+ * .orderBy('id')
255
+ * .orderBy('fn', 'desc')
256
+ * .execute()
257
+ * ```
258
+ *
259
+ * The generated SQL (PostgreSQL):
260
+ *
261
+ * ```sql
262
+ * select "person"."first_name" as "fn"
263
+ * from "person"
264
+ * order by "id" asc, "fn" desc
265
+ * ```
266
+ *
267
+ * The order by expression can also be a `raw` expression or a subquery
268
+ * in addition to column references:
269
+ *
270
+ * ```ts
271
+ * await db
272
+ * .selectFrom('person')
273
+ * .selectAll()
274
+ * .orderBy((qb) => qb.selectFrom('pet')
275
+ * .select('pet.name')
276
+ * .whereRef('pet.owner_id', '=', 'person.id')
277
+ * .limit(1)
278
+ * )
279
+ * .orderBy(
280
+ * db.raw('concat(first_name, last_name)')
281
+ * )
282
+ * .execute()
283
+ * ```
284
+ *
285
+ * The generated SQL (PostgreSQL):
286
+ *
287
+ * ```sql
288
+ * select *
289
+ * from "person"
290
+ * order by
291
+ * ( select "pet"."name"
292
+ * from "pet"
293
+ * where "pet"."owner_id" = "person"."id"
294
+ * limit 1
295
+ * ) asc,
296
+ * concat(first_name, last_name) asc
297
+ * ```
298
+ *
299
+ * `dynamic.ref` can be used to refer to columns not known at
300
+ * compile time:
301
+ *
302
+ * ```ts
303
+ * async function someQuery(orderBy: string) {
304
+ * const { ref } = db.dynamic
305
+ *
306
+ * return await db
307
+ * .selectFrom('person')
308
+ * .select('person.first_name as fn')
309
+ * .orderBy(ref(orderBy))
310
+ * .execute()
311
+ * }
312
+ *
313
+ * someQuery('fn')
314
+ * ```
315
+ *
316
+ * The generated SQL (PostgreSQL):
317
+ *
318
+ * ```sql
319
+ * select "person"."first_name" as "fn"
320
+ * from "person"
321
+ * order by "fn" asc
322
+ * ```
323
+ */
324
+ orderBy(orderBy, direction) {
325
+ return new SelectQueryBuilder({
326
+ ...this.#props,
327
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, (0, order_by_parser_js_1.parseOrderBy)(this.#props.parseContext, orderBy, direction)),
328
+ });
329
+ }
330
+ groupBy(groupBy) {
331
+ return new SelectQueryBuilder({
332
+ ...this.#props,
333
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, (0, group_by_parser_js_1.parseGroupBy)(this.#props.parseContext, groupBy)),
334
+ });
335
+ }
336
+ /**
337
+ * Adds a limit clause to the query.
338
+ *
339
+ * ### Examples
340
+ *
341
+ * Select the first 10 rows of the result:
342
+ *
343
+ * ```ts
344
+ * return await db
345
+ * .selectFrom('person')
346
+ * .select('first_name')
347
+ * .limit(10)
348
+ * ```
349
+ *
350
+ * Select rows from index 10 to index 19 of the result:
351
+ *
352
+ * ```ts
353
+ * return await db
354
+ * .selectFrom('person')
355
+ * .select('first_name')
356
+ * .offset(10)
357
+ * .limit(10)
358
+ * ```
359
+ */
360
+ limit(limit) {
361
+ return new SelectQueryBuilder({
362
+ ...this.#props,
363
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithLimit(this.#props.queryNode, limit_node_js_1.LimitNode.create(limit)),
364
+ });
365
+ }
366
+ /**
367
+ * Adds an offset clause to the query.
368
+ *
369
+ * ### Examples
370
+ *
371
+ * Select rows from index 10 to index 19 of the result:
372
+ *
373
+ * ```ts
374
+ * return await db
375
+ * .selectFrom('person')
376
+ * .select('first_name')
377
+ * .offset(10)
378
+ * .limit(10)
379
+ * ```
380
+ */
381
+ offset(offset) {
382
+ return new SelectQueryBuilder({
383
+ ...this.#props,
384
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOffset(this.#props.queryNode, offset_node_js_1.OffsetNode.create(offset)),
385
+ });
386
+ }
387
+ /**
388
+ * Combines another select query or raw expression to this query using `union`.
389
+ *
390
+ * The output row type of the combined query must match `this` query.
391
+ *
392
+ * ### Examples
393
+ *
394
+ * ```ts
395
+ * db.selectFrom('person')
396
+ * .select(['id', 'first_name as name'])
397
+ * .union(db.selectFrom('pet').select(['id', 'name']))
398
+ * .orderBy('name')
399
+ * ```
400
+ */
401
+ union(expression) {
402
+ return new SelectQueryBuilder({
403
+ ...this.#props,
404
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithUnion(this.#props.queryNode, (0, union_parser_js_1.parseUnion)(expression, false)),
405
+ });
406
+ }
407
+ /**
408
+ * Combines another select query or raw expression to this query using `union all`.
409
+ *
410
+ * The output row type of the combined query must match `this` query.
411
+ *
412
+ * ### Examples
413
+ *
414
+ * ```ts
415
+ * db.selectFrom('person')
416
+ * .select(['id', 'first_name as name'])
417
+ * .unionAll(db.selectFrom('pet').select(['id', 'name']))
418
+ * .orderBy('name')
419
+ * ```
420
+ */
421
+ unionAll(expression) {
422
+ return new SelectQueryBuilder({
423
+ ...this.#props,
424
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithUnion(this.#props.queryNode, (0, union_parser_js_1.parseUnion)(expression, true)),
425
+ });
426
+ }
427
+ /**
428
+ * Simply calls the given function passing `this` as the only argument.
429
+ *
430
+ * This method can be useful when adding optional method calls:
431
+ *
432
+ * ### Examples
433
+ *
434
+ * ```ts
435
+ * db.selectFrom('person')
436
+ * .selectAll()
437
+ * .call((qb) => {
438
+ * if (something) {
439
+ * return qb.where('something', '=', something)
440
+ * } else {
441
+ * return qb.where('somethingElse', '=', somethingElse)
442
+ * }
443
+ * })
444
+ * .execute()
445
+ * ```
446
+ *
447
+ * The next example uses a helper funtion `log` to log a query:
448
+ *
449
+ * ```ts
450
+ * function log<T extends AnyQueryBuilder>(qb: T): T {
451
+ * console.log(qb.compile())
452
+ * return qb
453
+ * }
454
+ *
455
+ * db.selectFrom('person')
456
+ * .selectAll()
457
+ * .call(log)
458
+ * .execute()
459
+ * ```
460
+ */
461
+ call(func) {
462
+ return func(this);
463
+ }
464
+ /**
465
+ * Gives an alias for the query. This method is only useful for sub queries.
466
+ *
467
+ * ### Examples
468
+ *
469
+ * ```ts
470
+ * await db.selectFrom('pet')
471
+ * .selectAll('pet')
472
+ * .select(
473
+ * (qb) => qb.selectFrom('person')
474
+ * .select('first_name')
475
+ * .whereRef('pet.owner_id', '=', 'person.id')
476
+ * .as('owner_first_name')
477
+ * )
478
+ * .execute()
479
+ * ```
480
+ */
481
+ as(alias) {
482
+ return new AliasedQueryBuilder(this, alias);
483
+ }
484
+ /**
485
+ * Change the output type of the query.
486
+ *
487
+ * You should only use this method as the last resort if the types
488
+ * don't support your use case.
489
+ */
490
+ castTo() {
491
+ return new SelectQueryBuilder(this.#props);
492
+ }
493
+ withPlugin(plugin) {
494
+ return new SelectQueryBuilder({
495
+ ...this.#props,
496
+ executor: this.#props.executor.withPlugin(plugin),
497
+ });
498
+ }
499
+ toOperationNode() {
500
+ return this.#props.executor.transformQuery(this.#props.queryNode, this.#props.queryId);
501
+ }
502
+ compile() {
503
+ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
504
+ }
505
+ /**
506
+ * Executes the query and returns an array of rows.
507
+ *
508
+ * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
509
+ */
510
+ async execute() {
511
+ const compildQuery = this.compile();
512
+ const query = compildQuery.query;
513
+ const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
514
+ return result.rows;
515
+ }
516
+ /**
517
+ * Executes the query and returns the first result or undefined if
518
+ * the query returned no result.
519
+ */
520
+ async executeTakeFirst() {
521
+ const [result] = await this.execute();
522
+ return result;
523
+ }
524
+ /**
525
+ * Executes the query and returns the first result or throws if
526
+ * the query returned no result.
527
+ *
528
+ * By default an instance of {@link NoResultError} is thrown, but you can
529
+ * provide a custom error class as the only argument to throw a different
530
+ * error.
531
+ */
532
+ async executeTakeFirstOrThrow(errorConstructor = no_result_error_js_1.NoResultError) {
533
+ const result = await this.executeTakeFirst();
534
+ if (result === undefined) {
535
+ throw new errorConstructor(this.toOperationNode());
536
+ }
537
+ return result;
538
+ }
539
+ }
540
+ exports.SelectQueryBuilder = SelectQueryBuilder;
541
+ (0, prevent_await_js_1.preventAwait)(SelectQueryBuilder, "don't await SelectQueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");
542
+ /**
543
+ * {@link SelectQueryBuilder} with an alias. The result of calling {@link SelectQueryBuilder.as}.
544
+ */
545
+ class AliasedQueryBuilder {
546
+ #queryBuilder;
547
+ #alias;
548
+ constructor(queryBuilder, alias) {
549
+ this.#queryBuilder = queryBuilder;
550
+ this.#alias = alias;
551
+ }
552
+ /**
553
+ * @private
554
+ *
555
+ * This needs to be here just so that the typings work. Without this
556
+ * the generated .d.ts file contains no reference to the type param A
557
+ * which causes this type to be equal to AliasedQueryBuilder with any A
558
+ * as long as D, TB and O are the same.
559
+ */
560
+ get alias() {
561
+ return this.#alias;
562
+ }
563
+ toOperationNode() {
564
+ const node = this.#queryBuilder.toOperationNode();
565
+ if (select_query_node_js_1.SelectQueryNode.is(node)) {
566
+ return alias_node_js_1.AliasNode.create(node, this.#alias);
567
+ }
568
+ throw new Error('only select queries can be aliased');
569
+ }
570
+ }
571
+ exports.AliasedQueryBuilder = AliasedQueryBuilder;