kysely 0.11.2 → 0.12.1

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