kysely 0.22.0 → 0.23.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 (326) hide show
  1. package/CONTRIBUTING.md +70 -0
  2. package/README.md +25 -2
  3. package/dist/cjs/dialect/database-introspector.d.ts +4 -0
  4. package/dist/cjs/dialect/mysql/mysql-driver.js +6 -3
  5. package/dist/cjs/dialect/postgres/postgres-adapter.js +1 -1
  6. package/dist/cjs/dialect/postgres/postgres-driver.js +7 -2
  7. package/dist/cjs/dialect/postgres/postgres-introspector.js +8 -0
  8. package/dist/cjs/dialect/sqlite/sqlite-driver.js +4 -3
  9. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
  10. package/dist/cjs/driver/database-connection.d.ts +6 -2
  11. package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +2 -3
  12. package/dist/cjs/dynamic/dynamic-reference-builder.js +1 -1
  13. package/dist/cjs/expression/expression.d.ts +100 -0
  14. package/dist/cjs/expression/expression.js +16 -0
  15. package/dist/cjs/index.d.ts +10 -6
  16. package/dist/cjs/index.js +8 -2
  17. package/dist/cjs/migration/file-migration-provider.js +5 -3
  18. package/dist/cjs/operation-node/aggregate-function-node.d.ts +7 -4
  19. package/dist/cjs/operation-node/aggregate-function-node.js +17 -0
  20. package/dist/cjs/operation-node/alias-node.d.ts +3 -11
  21. package/dist/cjs/operation-node/alter-column-node.d.ts +1 -2
  22. package/dist/cjs/operation-node/alter-table-node.d.ts +5 -7
  23. package/dist/cjs/operation-node/alter-table-node.js +9 -1
  24. package/dist/cjs/operation-node/and-node.d.ts +3 -4
  25. package/dist/cjs/operation-node/binary-operation-node.d.ts +14 -0
  26. package/dist/cjs/operation-node/binary-operation-node.js +20 -0
  27. package/dist/cjs/operation-node/check-constraint-node.d.ts +2 -3
  28. package/dist/cjs/operation-node/column-definition-node.d.ts +6 -5
  29. package/dist/cjs/operation-node/column-definition-node.js +16 -0
  30. package/dist/cjs/operation-node/column-update-node.d.ts +2 -3
  31. package/dist/cjs/operation-node/common-table-expression-node.d.ts +2 -4
  32. package/dist/cjs/operation-node/create-index-node.d.ts +1 -3
  33. package/dist/cjs/operation-node/create-table-node.d.ts +4 -5
  34. package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
  35. package/dist/cjs/operation-node/create-type-node.js +1 -2
  36. package/dist/cjs/operation-node/default-value-node.d.ts +2 -4
  37. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -2
  38. package/dist/cjs/operation-node/drop-type-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/drop-type-node.js +1 -2
  40. package/dist/cjs/operation-node/explain-node.d.ts +2 -4
  41. package/dist/cjs/operation-node/explain-node.js +1 -1
  42. package/dist/cjs/operation-node/from-node.d.ts +3 -4
  43. package/dist/cjs/operation-node/generated-node.d.ts +2 -3
  44. package/dist/cjs/operation-node/group-by-item-node.d.ts +2 -3
  45. package/dist/cjs/operation-node/having-node.d.ts +3 -4
  46. package/dist/cjs/operation-node/having-node.js +4 -4
  47. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -5
  48. package/dist/cjs/operation-node/join-node.d.ts +5 -9
  49. package/dist/cjs/operation-node/join-node.js +6 -6
  50. package/dist/cjs/operation-node/on-conflict-node.d.ts +5 -7
  51. package/dist/cjs/operation-node/on-conflict-node.js +12 -12
  52. package/dist/cjs/operation-node/on-node.d.ts +3 -4
  53. package/dist/cjs/operation-node/on-node.js +4 -4
  54. package/dist/cjs/operation-node/operation-node-transformer.d.ts +4 -2
  55. package/dist/cjs/operation-node/operation-node-transformer.js +22 -15
  56. package/dist/cjs/operation-node/operation-node-visitor.d.ts +4 -2
  57. package/dist/cjs/operation-node/operation-node-visitor.js +2 -1
  58. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  59. package/dist/cjs/operation-node/operator-node.d.ts +5 -3
  60. package/dist/cjs/operation-node/operator-node.js +3 -5
  61. package/dist/cjs/operation-node/or-node.d.ts +3 -4
  62. package/dist/cjs/operation-node/order-by-item-node.d.ts +3 -5
  63. package/dist/cjs/operation-node/parens-node.d.ts +2 -3
  64. package/dist/cjs/operation-node/partition-by-item-node.d.ts +3 -4
  65. package/dist/cjs/operation-node/query-node.d.ts +2 -3
  66. package/dist/cjs/operation-node/query-node.js +6 -6
  67. package/dist/cjs/operation-node/select-modifier-node.d.ts +2 -3
  68. package/dist/cjs/operation-node/select-modifier-node.js +1 -1
  69. package/dist/cjs/operation-node/select-query-node.d.ts +5 -6
  70. package/dist/cjs/operation-node/select-query-node.js +10 -10
  71. package/dist/cjs/operation-node/selection-node.d.ts +2 -3
  72. package/dist/cjs/operation-node/set-operation-node.d.ts +2 -5
  73. package/dist/cjs/operation-node/simple-reference-expression-node.d.ts +3 -0
  74. package/dist/cjs/operation-node/{operation-node-utils.js → simple-reference-expression-node.js} +0 -0
  75. package/dist/cjs/operation-node/unary-operation-node.d.ts +13 -0
  76. package/dist/cjs/operation-node/unary-operation-node.js +19 -0
  77. package/dist/cjs/operation-node/update-query-node.d.ts +3 -4
  78. package/dist/cjs/operation-node/value-list-node.d.ts +2 -9
  79. package/dist/cjs/operation-node/where-node.d.ts +3 -4
  80. package/dist/cjs/operation-node/where-node.js +4 -4
  81. package/dist/cjs/parser/binary-operation-parser.d.ts +20 -0
  82. package/dist/cjs/parser/binary-operation-parser.js +99 -0
  83. package/dist/cjs/parser/coalesce-parser.d.ts +4 -0
  84. package/dist/cjs/parser/coalesce-parser.js +11 -0
  85. package/dist/cjs/parser/data-type-parser.d.ts +5 -5
  86. package/dist/cjs/parser/default-value-parser.d.ts +4 -5
  87. package/dist/cjs/parser/default-value-parser.js +2 -2
  88. package/dist/cjs/parser/expression-parser.d.ts +10 -0
  89. package/dist/cjs/parser/{complex-expression-parser.js → expression-parser.js} +9 -8
  90. package/dist/cjs/parser/identifier-parser.d.ts +2 -0
  91. package/dist/cjs/parser/identifier-parser.js +23 -0
  92. package/dist/cjs/parser/insert-values-parser.d.ts +1 -1
  93. package/dist/cjs/parser/insert-values-parser.js +2 -2
  94. package/dist/cjs/parser/join-parser.js +2 -2
  95. package/dist/cjs/parser/order-by-parser.d.ts +2 -2
  96. package/dist/cjs/parser/reference-parser.d.ts +14 -14
  97. package/dist/cjs/parser/reference-parser.js +12 -9
  98. package/dist/cjs/parser/select-parser.d.ts +6 -7
  99. package/dist/cjs/parser/select-parser.js +2 -2
  100. package/dist/cjs/parser/set-operation-parser.d.ts +2 -4
  101. package/dist/cjs/parser/table-parser.d.ts +11 -12
  102. package/dist/cjs/parser/table-parser.js +2 -2
  103. package/dist/cjs/parser/unary-operation-parser.d.ts +5 -0
  104. package/dist/cjs/parser/unary-operation-parser.js +17 -0
  105. package/dist/cjs/parser/update-set-parser.d.ts +1 -1
  106. package/dist/cjs/parser/value-parser.d.ts +5 -9
  107. package/dist/cjs/parser/value-parser.js +4 -4
  108. package/dist/cjs/parser/with-parser.d.ts +3 -4
  109. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +1 -1
  110. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +245 -14
  111. package/dist/cjs/query-builder/aggregate-function-builder.js +164 -12
  112. package/dist/cjs/query-builder/delete-query-builder.d.ts +20 -20
  113. package/dist/cjs/query-builder/delete-query-builder.js +19 -16
  114. package/dist/cjs/query-builder/function-module.d.ts +123 -22
  115. package/dist/cjs/query-builder/function-module.js +91 -48
  116. package/dist/cjs/query-builder/having-interface.d.ts +9 -8
  117. package/dist/cjs/query-builder/insert-query-builder.d.ts +7 -6
  118. package/dist/cjs/query-builder/insert-query-builder.js +11 -9
  119. package/dist/cjs/query-builder/insert-result.d.ts +8 -1
  120. package/dist/cjs/query-builder/insert-result.js +12 -1
  121. package/dist/cjs/query-builder/join-builder.d.ts +9 -8
  122. package/dist/cjs/query-builder/join-builder.js +10 -9
  123. package/dist/cjs/query-builder/on-conflict-builder.d.ts +25 -24
  124. package/dist/cjs/query-builder/on-conflict-builder.js +18 -17
  125. package/dist/cjs/query-builder/select-query-builder.d.ts +82 -51
  126. package/dist/cjs/query-builder/select-query-builder.js +39 -37
  127. package/dist/cjs/query-builder/update-query-builder.d.ts +20 -20
  128. package/dist/cjs/query-builder/update-query-builder.js +19 -16
  129. package/dist/cjs/query-builder/where-interface.d.ts +12 -11
  130. package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
  131. package/dist/cjs/query-compiler/default-query-compiler.d.ts +5 -3
  132. package/dist/cjs/query-compiler/default-query-compiler.js +37 -33
  133. package/dist/cjs/query-executor/query-executor-base.js +16 -1
  134. package/dist/cjs/raw-builder/raw-builder.d.ts +49 -13
  135. package/dist/cjs/raw-builder/raw-builder.js +24 -14
  136. package/dist/cjs/raw-builder/sql.d.ts +4 -4
  137. package/dist/cjs/schema/alter-column-builder.d.ts +28 -0
  138. package/dist/cjs/schema/alter-column-builder.js +55 -0
  139. package/dist/cjs/schema/alter-table-builder.d.ts +39 -341
  140. package/dist/cjs/schema/alter-table-builder.js +65 -280
  141. package/dist/cjs/schema/column-definition-builder.d.ts +43 -155
  142. package/dist/cjs/schema/column-definition-builder.js +189 -0
  143. package/dist/cjs/schema/create-index-builder.d.ts +2 -2
  144. package/dist/cjs/schema/create-table-builder.d.ts +38 -5
  145. package/dist/cjs/schema/create-table-builder.js +36 -1
  146. package/dist/cjs/schema/create-view-builder.d.ts +3 -2
  147. package/dist/cjs/schema/schema.d.ts +2 -2
  148. package/dist/cjs/schema/schema.js +6 -5
  149. package/dist/cjs/util/compilable.d.ts +2 -2
  150. package/dist/cjs/util/explainable.d.ts +2 -2
  151. package/dist/cjs/util/infer-result.d.ts +46 -0
  152. package/dist/cjs/util/infer-result.js +2 -0
  153. package/dist/cjs/util/log-once.d.ts +5 -0
  154. package/dist/cjs/util/log-once.js +16 -0
  155. package/dist/cjs/util/object-utils.d.ts +1 -0
  156. package/dist/cjs/util/object-utils.js +5 -1
  157. package/dist/cjs/util/type-utils.d.ts +3 -17
  158. package/dist/esm/dialect/database-introspector.d.ts +4 -0
  159. package/dist/esm/dialect/mysql/mysql-driver.js +6 -3
  160. package/dist/esm/dialect/postgres/postgres-adapter.js +1 -1
  161. package/dist/esm/dialect/postgres/postgres-driver.js +7 -2
  162. package/dist/esm/dialect/postgres/postgres-introspector.js +8 -0
  163. package/dist/esm/dialect/sqlite/sqlite-driver.js +4 -3
  164. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
  165. package/dist/esm/driver/database-connection.d.ts +6 -2
  166. package/dist/esm/dynamic/dynamic-reference-builder.d.ts +2 -3
  167. package/dist/esm/dynamic/dynamic-reference-builder.js +2 -2
  168. package/dist/esm/expression/expression.d.ts +100 -0
  169. package/dist/esm/expression/expression.js +12 -0
  170. package/dist/esm/index.d.ts +10 -6
  171. package/dist/esm/index.js +6 -2
  172. package/dist/esm/migration/file-migration-provider.js +5 -3
  173. package/dist/esm/operation-node/aggregate-function-node.d.ts +7 -4
  174. package/dist/esm/operation-node/aggregate-function-node.js +17 -0
  175. package/dist/esm/operation-node/alias-node.d.ts +3 -11
  176. package/dist/esm/operation-node/alter-column-node.d.ts +1 -2
  177. package/dist/esm/operation-node/alter-table-node.d.ts +5 -7
  178. package/dist/esm/operation-node/alter-table-node.js +9 -1
  179. package/dist/esm/operation-node/and-node.d.ts +3 -4
  180. package/dist/esm/operation-node/binary-operation-node.d.ts +14 -0
  181. package/dist/esm/operation-node/binary-operation-node.js +18 -0
  182. package/dist/esm/operation-node/check-constraint-node.d.ts +2 -3
  183. package/dist/esm/operation-node/column-definition-node.d.ts +6 -5
  184. package/dist/esm/operation-node/column-definition-node.js +16 -0
  185. package/dist/esm/operation-node/column-update-node.d.ts +2 -3
  186. package/dist/esm/operation-node/common-table-expression-node.d.ts +2 -4
  187. package/dist/esm/operation-node/create-index-node.d.ts +1 -3
  188. package/dist/esm/operation-node/create-table-node.d.ts +4 -5
  189. package/dist/esm/operation-node/create-type-node.d.ts +1 -1
  190. package/dist/esm/operation-node/create-type-node.js +1 -2
  191. package/dist/esm/operation-node/default-value-node.d.ts +2 -4
  192. package/dist/esm/operation-node/delete-query-node.d.ts +1 -2
  193. package/dist/esm/operation-node/drop-type-node.d.ts +1 -1
  194. package/dist/esm/operation-node/drop-type-node.js +1 -2
  195. package/dist/esm/operation-node/explain-node.d.ts +2 -4
  196. package/dist/esm/operation-node/explain-node.js +1 -1
  197. package/dist/esm/operation-node/from-node.d.ts +3 -4
  198. package/dist/esm/operation-node/generated-node.d.ts +2 -3
  199. package/dist/esm/operation-node/group-by-item-node.d.ts +2 -3
  200. package/dist/esm/operation-node/having-node.d.ts +3 -4
  201. package/dist/esm/operation-node/having-node.js +4 -4
  202. package/dist/esm/operation-node/insert-query-node.d.ts +1 -5
  203. package/dist/esm/operation-node/join-node.d.ts +5 -9
  204. package/dist/esm/operation-node/join-node.js +6 -6
  205. package/dist/esm/operation-node/on-conflict-node.d.ts +5 -7
  206. package/dist/esm/operation-node/on-conflict-node.js +12 -12
  207. package/dist/esm/operation-node/on-node.d.ts +3 -4
  208. package/dist/esm/operation-node/on-node.js +4 -4
  209. package/dist/esm/operation-node/operation-node-transformer.d.ts +4 -2
  210. package/dist/esm/operation-node/operation-node-transformer.js +22 -15
  211. package/dist/esm/operation-node/operation-node-visitor.d.ts +4 -2
  212. package/dist/esm/operation-node/operation-node-visitor.js +2 -1
  213. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  214. package/dist/esm/operation-node/operator-node.d.ts +5 -3
  215. package/dist/esm/operation-node/operator-node.js +2 -4
  216. package/dist/esm/operation-node/or-node.d.ts +3 -4
  217. package/dist/esm/operation-node/order-by-item-node.d.ts +3 -5
  218. package/dist/esm/operation-node/parens-node.d.ts +2 -3
  219. package/dist/esm/operation-node/partition-by-item-node.d.ts +3 -4
  220. package/dist/esm/operation-node/query-node.d.ts +2 -3
  221. package/dist/esm/operation-node/query-node.js +6 -6
  222. package/dist/esm/operation-node/select-modifier-node.d.ts +2 -3
  223. package/dist/esm/operation-node/select-modifier-node.js +1 -1
  224. package/dist/esm/operation-node/select-query-node.d.ts +5 -6
  225. package/dist/esm/operation-node/select-query-node.js +10 -10
  226. package/dist/esm/operation-node/selection-node.d.ts +2 -3
  227. package/dist/esm/operation-node/set-operation-node.d.ts +2 -5
  228. package/dist/esm/operation-node/simple-reference-expression-node.d.ts +3 -0
  229. package/dist/esm/operation-node/simple-reference-expression-node.js +2 -0
  230. package/dist/esm/operation-node/unary-operation-node.d.ts +13 -0
  231. package/dist/esm/operation-node/unary-operation-node.js +17 -0
  232. package/dist/esm/operation-node/update-query-node.d.ts +3 -4
  233. package/dist/esm/operation-node/value-list-node.d.ts +2 -9
  234. package/dist/esm/operation-node/where-node.d.ts +3 -4
  235. package/dist/esm/operation-node/where-node.js +4 -4
  236. package/dist/esm/parser/binary-operation-parser.d.ts +20 -0
  237. package/dist/esm/parser/binary-operation-parser.js +92 -0
  238. package/dist/esm/parser/coalesce-parser.d.ts +4 -0
  239. package/dist/esm/parser/coalesce-parser.js +8 -0
  240. package/dist/esm/parser/data-type-parser.d.ts +5 -5
  241. package/dist/esm/parser/default-value-parser.d.ts +4 -5
  242. package/dist/esm/parser/default-value-parser.js +2 -2
  243. package/dist/esm/parser/expression-parser.d.ts +10 -0
  244. package/dist/esm/parser/{complex-expression-parser.js → expression-parser.js} +6 -5
  245. package/dist/esm/parser/identifier-parser.d.ts +2 -0
  246. package/dist/esm/parser/identifier-parser.js +20 -0
  247. package/dist/esm/parser/insert-values-parser.d.ts +1 -1
  248. package/dist/esm/parser/insert-values-parser.js +2 -2
  249. package/dist/esm/parser/join-parser.js +2 -2
  250. package/dist/esm/parser/order-by-parser.d.ts +2 -2
  251. package/dist/esm/parser/reference-parser.d.ts +14 -14
  252. package/dist/esm/parser/reference-parser.js +10 -8
  253. package/dist/esm/parser/select-parser.d.ts +6 -7
  254. package/dist/esm/parser/select-parser.js +2 -2
  255. package/dist/esm/parser/set-operation-parser.d.ts +2 -4
  256. package/dist/esm/parser/table-parser.d.ts +11 -12
  257. package/dist/esm/parser/table-parser.js +2 -2
  258. package/dist/esm/parser/unary-operation-parser.d.ts +5 -0
  259. package/dist/esm/parser/unary-operation-parser.js +13 -0
  260. package/dist/esm/parser/update-set-parser.d.ts +1 -1
  261. package/dist/esm/parser/value-parser.d.ts +5 -9
  262. package/dist/esm/parser/value-parser.js +4 -4
  263. package/dist/esm/parser/with-parser.d.ts +3 -4
  264. package/dist/esm/plugin/camel-case/camel-case-plugin.js +2 -2
  265. package/dist/esm/query-builder/aggregate-function-builder.d.ts +245 -14
  266. package/dist/esm/query-builder/aggregate-function-builder.js +164 -12
  267. package/dist/esm/query-builder/delete-query-builder.d.ts +20 -20
  268. package/dist/esm/query-builder/delete-query-builder.js +19 -16
  269. package/dist/esm/query-builder/function-module.d.ts +123 -22
  270. package/dist/esm/query-builder/function-module.js +92 -49
  271. package/dist/esm/query-builder/having-interface.d.ts +9 -8
  272. package/dist/esm/query-builder/insert-query-builder.d.ts +7 -6
  273. package/dist/esm/query-builder/insert-query-builder.js +11 -9
  274. package/dist/esm/query-builder/insert-result.d.ts +8 -1
  275. package/dist/esm/query-builder/insert-result.js +12 -1
  276. package/dist/esm/query-builder/join-builder.d.ts +9 -8
  277. package/dist/esm/query-builder/join-builder.js +10 -9
  278. package/dist/esm/query-builder/on-conflict-builder.d.ts +25 -24
  279. package/dist/esm/query-builder/on-conflict-builder.js +18 -17
  280. package/dist/esm/query-builder/select-query-builder.d.ts +82 -51
  281. package/dist/esm/query-builder/select-query-builder.js +38 -36
  282. package/dist/esm/query-builder/update-query-builder.d.ts +20 -20
  283. package/dist/esm/query-builder/update-query-builder.js +19 -16
  284. package/dist/esm/query-builder/where-interface.d.ts +12 -11
  285. package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
  286. package/dist/esm/query-compiler/default-query-compiler.d.ts +5 -3
  287. package/dist/esm/query-compiler/default-query-compiler.js +38 -34
  288. package/dist/esm/query-executor/query-executor-base.js +16 -1
  289. package/dist/esm/raw-builder/raw-builder.d.ts +49 -13
  290. package/dist/esm/raw-builder/raw-builder.js +23 -14
  291. package/dist/esm/raw-builder/sql.d.ts +4 -4
  292. package/dist/esm/schema/alter-column-builder.d.ts +28 -0
  293. package/dist/esm/schema/alter-column-builder.js +51 -0
  294. package/dist/esm/schema/alter-table-builder.d.ts +39 -341
  295. package/dist/esm/schema/alter-table-builder.js +61 -274
  296. package/dist/esm/schema/column-definition-builder.d.ts +43 -155
  297. package/dist/esm/schema/column-definition-builder.js +189 -0
  298. package/dist/esm/schema/create-index-builder.d.ts +2 -2
  299. package/dist/esm/schema/create-table-builder.d.ts +38 -5
  300. package/dist/esm/schema/create-table-builder.js +36 -1
  301. package/dist/esm/schema/create-view-builder.d.ts +3 -2
  302. package/dist/esm/schema/schema.d.ts +2 -2
  303. package/dist/esm/schema/schema.js +6 -5
  304. package/dist/esm/util/compilable.d.ts +2 -2
  305. package/dist/esm/util/explainable.d.ts +2 -2
  306. package/dist/esm/util/infer-result.d.ts +46 -0
  307. package/dist/esm/util/infer-result.js +2 -0
  308. package/dist/esm/util/log-once.d.ts +5 -0
  309. package/dist/esm/util/log-once.js +13 -0
  310. package/dist/esm/util/object-utils.d.ts +1 -0
  311. package/dist/esm/util/object-utils.js +3 -0
  312. package/dist/esm/util/type-utils.d.ts +3 -17
  313. package/package.json +1 -1
  314. package/dist/cjs/operation-node/filter-node.d.ts +0 -18
  315. package/dist/cjs/operation-node/filter-node.js +0 -20
  316. package/dist/cjs/operation-node/operation-node-utils.d.ts +0 -18
  317. package/dist/cjs/parser/complex-expression-parser.d.ts +0 -12
  318. package/dist/cjs/parser/filter-parser.d.ts +0 -24
  319. package/dist/cjs/parser/filter-parser.js +0 -109
  320. package/dist/esm/operation-node/filter-node.d.ts +0 -18
  321. package/dist/esm/operation-node/filter-node.js +0 -18
  322. package/dist/esm/operation-node/operation-node-utils.d.ts +0 -18
  323. package/dist/esm/operation-node/operation-node-utils.js +0 -2
  324. package/dist/esm/parser/complex-expression-parser.d.ts +0 -12
  325. package/dist/esm/parser/filter-parser.d.ts +0 -24
  326. package/dist/esm/parser/filter-parser.js +0 -100
@@ -1,13 +1,11 @@
1
1
  import { AliasNode } from '../operation-node/alias-node.js';
2
- import { OperationNodeSource } from '../operation-node/operation-node-source.js';
3
2
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
4
3
  import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
5
4
  import { TableExpression } from '../parser/table-parser.js';
6
5
  import { SelectExpression, QueryBuilderWithSelection, SelectAllQueryBuilder } from '../parser/select-parser.js';
7
- import { ExistsExpression, FilterOperator, FilterValueExpressionOrList, WhereGrouper, HavingGrouper } from '../parser/filter-parser.js';
8
6
  import { ReferenceExpression } from '../parser/reference-parser.js';
9
7
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
10
- import { AnyRawBuilder, MergePartial, Nullable, SingleResultType } from '../util/type-utils.js';
8
+ import { MergePartial, Nullable, SingleResultType } from '../util/type-utils.js';
11
9
  import { OrderByDirectionExpression, OrderByExpression } from '../parser/order-by-parser.js';
12
10
  import { Compilable } from '../util/compilable.js';
13
11
  import { QueryExecutor } from '../query-executor/query-executor.js';
@@ -17,12 +15,31 @@ import { KyselyPlugin } from '../plugin/kysely-plugin.js';
17
15
  import { WhereInterface } from './where-interface.js';
18
16
  import { NoResultErrorConstructor } from './no-result-error.js';
19
17
  import { HavingInterface } from './having-interface.js';
20
- import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
21
18
  import { Explainable, ExplainFormat } from '../util/explainable.js';
22
- import { SetOperationExpression } from '../parser/set-operation-parser.js';
23
- export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, HavingInterface<DB, TB>, OperationNodeSource, Compilable, Explainable {
19
+ import { AliasedExpression, Expression } from '../expression/expression.js';
20
+ import { ComparisonOperatorExpression, HavingGrouper, OperandValueExpressionOrList, WhereGrouper } from '../parser/binary-operation-parser.js';
21
+ import { ExistsExpression } from '../parser/unary-operation-parser.js';
22
+ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, HavingInterface<DB, TB>, Expression<O>, Compilable<O>, Explainable {
24
23
  #private;
25
24
  constructor(props: SelectQueryBuilderProps);
25
+ /** @private */
26
+ /**
27
+ * All expressions need to have this getter for complicated type-related reasons.
28
+ * Simply add this getter for your expression and always return `undefined` from it:
29
+ *
30
+ * ```ts
31
+ * class SomeExpression<T> implements Expression<T> {
32
+ * get expressionType(): T | undefined {
33
+ * return undefined
34
+ * }
35
+ * }
36
+ * ```
37
+ *
38
+ * The getter is needed to make the expression assignable to another expression only
39
+ * if the types `T` are assignable. Without this property (or some other property
40
+ * that references `T`), you could assing `Expression<string>` to `Expression<number>`.
41
+ */
42
+ get expressionType(): O | undefined;
26
43
  /**
27
44
  * Adds a `where` clause to the query.
28
45
  *
@@ -207,16 +224,16 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
207
224
  * .execute()
208
225
  * ```
209
226
  */
210
- where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
227
+ where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
211
228
  where(grouper: WhereGrouper<DB, TB>): SelectQueryBuilder<DB, TB, O>;
212
- where(raw: AnyRawBuilder): SelectQueryBuilder<DB, TB, O>;
229
+ where(expression: Expression<any>): SelectQueryBuilder<DB, TB, O>;
213
230
  /**
214
231
  * Adds a `where` clause where both sides of the operator are references
215
232
  * to columns.
216
233
  *
217
234
  * The normal `where` method treats the right hand side argument as a
218
235
  * value by default. `whereRef` treats it as a column reference. This method is
219
- * expecially useful with joins and correclated subqueries.
236
+ * expecially useful with joins and correlated subqueries.
220
237
  *
221
238
  * ### Examples
222
239
  *
@@ -261,7 +278,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
261
278
  * ) as "pet_name"
262
279
  * from "person"
263
280
  */
264
- whereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
281
+ whereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
265
282
  /**
266
283
  * Adds an `or where` clause to the query. Otherwise works just like {@link where}.
267
284
  *
@@ -325,15 +342,15 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
325
342
  * select * from "person" (where "id" = 1 or "id" = 2)
326
343
  * ```
327
344
  */
328
- orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
345
+ orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
329
346
  orWhere(grouper: WhereGrouper<DB, TB>): SelectQueryBuilder<DB, TB, O>;
330
- orWhere(raw: AnyRawBuilder): SelectQueryBuilder<DB, TB, O>;
347
+ orWhere(expression: Expression<any>): SelectQueryBuilder<DB, TB, O>;
331
348
  /**
332
349
  * Adds an `or where` clause to the query. Otherwise works just like {@link whereRef}.
333
350
  *
334
351
  * Also see {@link orWhere} and {@link where}.
335
352
  */
336
- orWhereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
353
+ orWhereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
337
354
  /**
338
355
  * Adds a `where exists` clause to the query.
339
356
  *
@@ -400,37 +417,37 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
400
417
  */
401
418
  whereNotExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
402
419
  /**
403
- * Just like {@link whereExists} but creates a `or exists` clause.
420
+ * Just like {@link whereExists} but creates an `or exists` clause.
404
421
  */
405
422
  orWhereExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
406
423
  /**
407
- * Just like {@link whereExists} but creates a `or not exists` clause.
424
+ * Just like {@link whereExists} but creates an `or not exists` clause.
408
425
  */
409
426
  orWhereNotExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
410
427
  /**
411
428
  * Just like {@link WhereInterface.where | where} but adds a `having` statement
412
429
  * instead of a `where` statement.
413
430
  */
414
- having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
431
+ having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
415
432
  having(grouper: HavingGrouper<DB, TB>): SelectQueryBuilder<DB, TB, O>;
416
- having(raw: AnyRawBuilder): SelectQueryBuilder<DB, TB, O>;
433
+ having(expression: Expression<any>): SelectQueryBuilder<DB, TB, O>;
417
434
  /**
418
435
  * Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
419
436
  * instead of a `where` statement.
420
437
  */
421
- havingRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
438
+ havingRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
422
439
  /**
423
440
  * Just like {@link WhereInterface.orWhere | orWhere} but adds a `having` statement
424
441
  * instead of a `where` statement.
425
442
  */
426
- orHaving<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
443
+ orHaving<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
427
444
  orHaving(grouper: HavingGrouper<DB, TB>): SelectQueryBuilder<DB, TB, O>;
428
- orHaving(raw: AnyRawBuilder): SelectQueryBuilder<DB, TB, O>;
445
+ orHaving(expression: Expression<any>): SelectQueryBuilder<DB, TB, O>;
429
446
  /**
430
447
  * Just like {@link WhereInterface.orWhereRef | orWhereRef} but adds a `having` statement
431
448
  * instead of a `where` statement.
432
449
  */
433
- orHavingRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
450
+ orHavingRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
434
451
  /**
435
452
  * Just like {@link WhereInterface.whereExists | whereExists} but adds a `having` statement
436
453
  * instead of a `where` statement.
@@ -627,11 +644,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
627
644
  select<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): QueryBuilderWithSelection<DB, TB, O, SE>;
628
645
  select<SE extends SelectExpression<DB, TB>>(selection: SE): QueryBuilderWithSelection<DB, TB, O, SE>;
629
646
  /**
630
- * Adds `distinct on` selections to the select clause.
631
- *
632
- * Takes the same inputs as the {@link SelectQueryBuilder.select | select} method.
633
- * See the {@link SelectQueryBuilder.select | select} method's documentation for
634
- * more examples.
647
+ * Adds `distinct on` expressions to the select clause.
635
648
  *
636
649
  * ### Examples
637
650
  *
@@ -653,8 +666,8 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
653
666
  * where "pet"."name" = $1
654
667
  * ```
655
668
  */
656
- distinctOn<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): SelectQueryBuilder<DB, TB, O>;
657
- distinctOn<SE extends SelectExpression<DB, TB>>(selection: SE): SelectQueryBuilder<DB, TB, O>;
669
+ distinctOn<RE extends ReferenceExpression<DB, TB>>(selections: ReadonlyArray<RE>): SelectQueryBuilder<DB, TB, O>;
670
+ distinctOn<RE extends ReferenceExpression<DB, TB>>(selection: RE): SelectQueryBuilder<DB, TB, O>;
658
671
  /**
659
672
  * This can be used to add any additional SQL to the front of the query __after__ the `select` keyword.
660
673
  *
@@ -674,7 +687,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
674
687
  * from `person`
675
688
  * ```
676
689
  */
677
- modifyFront(modifier: AnyRawBuilder): SelectQueryBuilder<DB, TB, O>;
690
+ modifyFront(modifier: Expression<any>): SelectQueryBuilder<DB, TB, O>;
678
691
  /**
679
692
  * This can be used to add any additional SQL to the end of the query.
680
693
  *
@@ -698,7 +711,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
698
711
  * for update
699
712
  * ```
700
713
  */
701
- modifyEnd(modifier: AnyRawBuilder): SelectQueryBuilder<DB, TB, O>;
714
+ modifyEnd(modifier: Expression<any>): SelectQueryBuilder<DB, TB, O>;
702
715
  /**
703
716
  * Makes the selection distinct.
704
717
  *
@@ -1202,7 +1215,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1202
1215
  * .orderBy('name')
1203
1216
  * ```
1204
1217
  */
1205
- union(expression: SetOperationExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1218
+ union(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1206
1219
  /**
1207
1220
  * Combines another select query or raw expression to this query using `union all`.
1208
1221
  *
@@ -1217,7 +1230,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1217
1230
  * .orderBy('name')
1218
1231
  * ```
1219
1232
  */
1220
- unionAll(expression: SetOperationExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1233
+ unionAll(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1221
1234
  /**
1222
1235
  * Combines another select query or raw expression to this query using `intersect`.
1223
1236
  *
@@ -1232,7 +1245,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1232
1245
  * .orderBy('name')
1233
1246
  * ```
1234
1247
  */
1235
- intersect(expression: SetOperationExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1248
+ intersect(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1236
1249
  /**
1237
1250
  * Combines another select query or raw expression to this query using `intersect all`.
1238
1251
  *
@@ -1247,7 +1260,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1247
1260
  * .orderBy('name')
1248
1261
  * ```
1249
1262
  */
1250
- intersectAll(expression: SetOperationExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1263
+ intersectAll(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1251
1264
  /**
1252
1265
  * Combines another select query or raw expression to this query using `except`.
1253
1266
  *
@@ -1262,7 +1275,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1262
1275
  * .orderBy('name')
1263
1276
  * ```
1264
1277
  */
1265
- except(expression: SetOperationExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1278
+ except(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1266
1279
  /**
1267
1280
  * Combines another select query or raw expression to this query using `except all`.
1268
1281
  *
@@ -1277,7 +1290,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1277
1290
  * .orderBy('name')
1278
1291
  * ```
1279
1292
  */
1280
- exceptAll(expression: SetOperationExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1293
+ exceptAll(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1281
1294
  /**
1282
1295
  * Simply calls the given function passing `this` as the only argument.
1283
1296
  *
@@ -1371,7 +1384,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1371
1384
  * pets[0].owner_first_name
1372
1385
  * ```
1373
1386
  */
1374
- as<A extends string>(alias: A): AliasedQueryBuilder<DB, TB, O, A>;
1387
+ as<A extends string>(alias: A): AliasedSelectQueryBuilder<DB, TB, O, A>;
1375
1388
  /**
1376
1389
  * Change the output type of the query.
1377
1390
  *
@@ -1383,8 +1396,22 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1383
1396
  * Returns a copy of this SelectQueryBuilder instance with the given plugin installed.
1384
1397
  */
1385
1398
  withPlugin(plugin: KyselyPlugin): SelectQueryBuilder<DB, TB, O>;
1399
+ /**
1400
+ * Creates the OperationNode that describes how to compile this expression into SQL.
1401
+ *
1402
+ * If you are creating a custom expression, it's often easiest to use the {@link sql}
1403
+ * template tag to build the node:
1404
+ *
1405
+ * ```ts
1406
+ * class SomeExpression<T> implements Expression<T> {
1407
+ * toOperationNode(): OperationNode {
1408
+ * return sql`some sql here`.toOperationNode()
1409
+ * }
1410
+ * }
1411
+ * ```
1412
+ */
1386
1413
  toOperationNode(): SelectQueryNode;
1387
- compile(): CompiledQuery;
1414
+ compile(): CompiledQuery<O>;
1388
1415
  /**
1389
1416
  * Executes the query and returns an array of rows.
1390
1417
  *
@@ -1467,7 +1494,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1467
1494
  * explain (analyze, format json) select * from "person" where "gender" = $1
1468
1495
  * ```
1469
1496
  */
1470
- explain<ER extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?: AnyRawBuilder): Promise<ER[]>;
1497
+ explain<ER extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?: Expression<any>): Promise<ER[]>;
1471
1498
  }
1472
1499
  export interface SelectQueryBuilderProps {
1473
1500
  readonly queryId: QueryId;
@@ -1477,36 +1504,40 @@ export interface SelectQueryBuilderProps {
1477
1504
  /**
1478
1505
  * {@link SelectQueryBuilder} with an alias. The result of calling {@link SelectQueryBuilder.as}.
1479
1506
  */
1480
- export declare class AliasedQueryBuilder<DB, TB extends keyof DB, O = undefined, A extends string = never> {
1507
+ export declare class AliasedSelectQueryBuilder<DB, TB extends keyof DB, O = undefined, A extends string = never> implements AliasedExpression<O, A> {
1481
1508
  #private;
1482
1509
  constructor(queryBuilder: SelectQueryBuilder<DB, TB, O>, alias: A);
1510
+ /** @private */
1483
1511
  /**
1484
- * @private
1485
- *
1486
- * This needs to be here just so that the typings work. Without this
1487
- * the generated .d.ts file contains no reference to the type param A
1488
- * which causes this type to be equal to AliasedQueryBuilder with any A
1489
- * as long as D, TB and O are the same.
1512
+ * Returns the aliased expression.
1513
+ */
1514
+ get expression(): Expression<O>;
1515
+ /** @private */
1516
+ /**
1517
+ * Returns the alias.
1518
+ */
1519
+ get alias(): A;
1520
+ /**
1521
+ * Creates the OperationNode that describes how to compile this expression into SQL.
1490
1522
  */
1491
- protected get alias(): A;
1492
1523
  toOperationNode(): AliasNode;
1493
1524
  }
1494
- export declare type SelectQueryBuilderWithInnerJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? InnerJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? SelectQueryBuilder<DB, TB | TE, O> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? InnerJoinedBuilder<DB, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? InnerJoinedBuilder<DB, TB, O, RA, RO> : never;
1525
+ export declare type SelectQueryBuilderWithInnerJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? InnerJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? SelectQueryBuilder<DB, TB | TE, O> : TE extends AliasedExpression<infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedExpression<infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : never;
1495
1526
  declare type InnerJoinedBuilder<DB, TB extends keyof DB, O, A extends string, R> = A extends keyof DB ? SelectQueryBuilder<InnerJoinedDB<DB, A, R>, TB | A, O> : SelectQueryBuilder<DB & Record<A, R>, TB | A, O>;
1496
1527
  declare type InnerJoinedDB<DB, A extends string, R> = {
1497
1528
  [C in keyof DB | A]: C extends A ? R : C extends keyof DB ? DB[C] : never;
1498
1529
  };
1499
- export declare type SelectQueryBuilderWithLeftJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? LeftJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? LeftJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? LeftJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? LeftJoinedBuilder<DB, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? LeftJoinedBuilder<DB, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? LeftJoinedBuilder<DB, TB, O, RA, RO> : never;
1530
+ export declare type SelectQueryBuilderWithLeftJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? LeftJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? LeftJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedExpression<infer QO, infer QA> ? LeftJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedExpression<infer QO, infer QA> ? LeftJoinedBuilder<DB, TB, O, QA, QO> : never;
1500
1531
  declare type LeftJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = A extends keyof DB ? SelectQueryBuilder<LeftJoinedDB<DB, A, R>, TB | A, O> : SelectQueryBuilder<DB & Record<A, Nullable<R>>, TB | A, O>;
1501
1532
  declare type LeftJoinedDB<DB, A extends keyof any, R> = {
1502
1533
  [C in keyof DB | A]: C extends A ? Nullable<R> : C extends keyof DB ? DB[C] : never;
1503
1534
  };
1504
- export declare type SelectQueryBuilderWithRightJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? RightJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? RightJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? RightJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? RightJoinedBuilder<DB, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? RightJoinedBuilder<DB, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? RightJoinedBuilder<DB, TB, O, RA, RO> : never;
1535
+ export declare type SelectQueryBuilderWithRightJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? RightJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? RightJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedExpression<infer QO, infer QA> ? RightJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedExpression<infer QO, infer QA> ? RightJoinedBuilder<DB, TB, O, QA, QO> : never;
1505
1536
  declare type RightJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = SelectQueryBuilder<RightJoinedDB<DB, TB, A, R>, TB | A, O>;
1506
1537
  declare type RightJoinedDB<DB, TB extends keyof DB, A extends keyof any, R> = {
1507
1538
  [C in keyof DB | A]: C extends A ? R : C extends TB ? Nullable<DB[C]> : C extends keyof DB ? DB[C] : never;
1508
1539
  };
1509
- export declare type SelectQueryBuilderWithFullJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? OuterJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? OuterJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? OuterJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? OuterJoinedBuilder<DB, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? OuterJoinedBuilder<DB, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? OuterJoinedBuilder<DB, TB, O, RA, RO> : never;
1540
+ export declare type SelectQueryBuilderWithFullJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? OuterJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? OuterJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedExpression<infer QO, infer QA> ? OuterJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedExpression<infer QO, infer QA> ? OuterJoinedBuilder<DB, TB, O, QA, QO> : never;
1510
1541
  declare type OuterJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = SelectQueryBuilder<OuterJoinedBuilderDB<DB, TB, A, R>, TB | A, O>;
1511
1542
  declare type OuterJoinedBuilderDB<DB, TB extends keyof DB, A extends keyof any, R> = {
1512
1543
  [C in keyof DB | A]: C extends A ? Nullable<R> : C extends TB ? Nullable<DB[C]> : C extends keyof DB ? DB[C] : never;
@@ -3,7 +3,7 @@ import { AliasNode } from '../operation-node/alias-node.js';
3
3
  import { SelectModifierNode } from '../operation-node/select-modifier-node.js';
4
4
  import { parseJoin, } from '../parser/join-parser.js';
5
5
  import { parseSelectExpressionOrList, parseSelectAll, } from '../parser/select-parser.js';
6
- import { parseExistFilter, parseReferenceFilter, parseWhereFilter, parseHavingFilter, parseNotExistFilter, } from '../parser/filter-parser.js';
6
+ import { parseReferenceExpressionOrList, } from '../parser/reference-parser.js';
7
7
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
8
8
  import { QueryNode } from '../operation-node/query-node.js';
9
9
  import { parseOrderBy, } from '../parser/order-by-parser.js';
@@ -15,106 +15,112 @@ import { parseGroupBy, } from '../parser/group-by-parser.js';
15
15
  import { NoResultError } from './no-result-error.js';
16
16
  import { IdentifierNode } from '../operation-node/identifier-node.js';
17
17
  import { ExplainNode } from '../operation-node/explain-node.js';
18
- import { parseSetOperation, } from '../parser/set-operation-parser.js';
18
+ import { parseSetOperation } from '../parser/set-operation-parser.js';
19
+ import { parseHaving, parseReferentialFilter, parseWhere, } from '../parser/binary-operation-parser.js';
20
+ import { parseExists, parseNotExists, } from '../parser/unary-operation-parser.js';
19
21
  export class SelectQueryBuilder {
20
22
  #props;
21
23
  constructor(props) {
22
24
  this.#props = freeze(props);
23
25
  }
26
+ /** @private */
27
+ get expressionType() {
28
+ return undefined;
29
+ }
24
30
  where(...args) {
25
31
  return new SelectQueryBuilder({
26
32
  ...this.#props,
27
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(args)),
33
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhere(args)),
28
34
  });
29
35
  }
30
36
  whereRef(lhs, op, rhs) {
31
37
  return new SelectQueryBuilder({
32
38
  ...this.#props,
33
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
39
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferentialFilter(lhs, op, rhs)),
34
40
  });
35
41
  }
36
42
  orWhere(...args) {
37
43
  return new SelectQueryBuilder({
38
44
  ...this.#props,
39
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(args)),
45
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhere(args)),
40
46
  });
41
47
  }
42
48
  orWhereRef(lhs, op, rhs) {
43
49
  return new SelectQueryBuilder({
44
50
  ...this.#props,
45
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
51
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferentialFilter(lhs, op, rhs)),
46
52
  });
47
53
  }
48
54
  whereExists(arg) {
49
55
  return new SelectQueryBuilder({
50
56
  ...this.#props,
51
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(arg)),
57
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExists(arg)),
52
58
  });
53
59
  }
54
60
  whereNotExists(arg) {
55
61
  return new SelectQueryBuilder({
56
62
  ...this.#props,
57
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(arg)),
63
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExists(arg)),
58
64
  });
59
65
  }
60
66
  orWhereExists(arg) {
61
67
  return new SelectQueryBuilder({
62
68
  ...this.#props,
63
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(arg)),
69
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExists(arg)),
64
70
  });
65
71
  }
66
72
  orWhereNotExists(arg) {
67
73
  return new SelectQueryBuilder({
68
74
  ...this.#props,
69
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(arg)),
75
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExists(arg)),
70
76
  });
71
77
  }
72
78
  having(...args) {
73
79
  return new SelectQueryBuilder({
74
80
  ...this.#props,
75
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseHavingFilter(args)),
81
+ queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseHaving(args)),
76
82
  });
77
83
  }
78
84
  havingRef(lhs, op, rhs) {
79
85
  return new SelectQueryBuilder({
80
86
  ...this.#props,
81
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
87
+ queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseReferentialFilter(lhs, op, rhs)),
82
88
  });
83
89
  }
84
90
  orHaving(...args) {
85
91
  return new SelectQueryBuilder({
86
92
  ...this.#props,
87
- queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseHavingFilter(args)),
93
+ queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseHaving(args)),
88
94
  });
89
95
  }
90
96
  orHavingRef(lhs, op, rhs) {
91
97
  return new SelectQueryBuilder({
92
98
  ...this.#props,
93
- queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
99
+ queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseReferentialFilter(lhs, op, rhs)),
94
100
  });
95
101
  }
96
102
  havingExists(arg) {
97
103
  return new SelectQueryBuilder({
98
104
  ...this.#props,
99
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseExistFilter(arg)),
105
+ queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseExists(arg)),
100
106
  });
101
107
  }
102
108
  havingNotExist(arg) {
103
109
  return new SelectQueryBuilder({
104
110
  ...this.#props,
105
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseNotExistFilter(arg)),
111
+ queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseNotExists(arg)),
106
112
  });
107
113
  }
108
114
  orHavingExists(arg) {
109
115
  return new SelectQueryBuilder({
110
116
  ...this.#props,
111
- queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseExistFilter(arg)),
117
+ queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseExists(arg)),
112
118
  });
113
119
  }
114
120
  orHavingNotExists(arg) {
115
121
  return new SelectQueryBuilder({
116
122
  ...this.#props,
117
- queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseNotExistFilter(arg)),
123
+ queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseNotExists(arg)),
118
124
  });
119
125
  }
120
126
  select(selection) {
@@ -126,7 +132,7 @@ export class SelectQueryBuilder {
126
132
  distinctOn(selection) {
127
133
  return new SelectQueryBuilder({
128
134
  ...this.#props,
129
- queryNode: SelectQueryNode.cloneWithDistinctOnSelections(this.#props.queryNode, parseSelectExpressionOrList(selection)),
135
+ queryNode: SelectQueryNode.cloneWithDistinctOn(this.#props.queryNode, parseReferenceExpressionOrList(selection)),
130
136
  });
131
137
  }
132
138
  /**
@@ -151,7 +157,7 @@ export class SelectQueryBuilder {
151
157
  modifyFront(modifier) {
152
158
  return new SelectQueryBuilder({
153
159
  ...this.#props,
154
- queryNode: SelectQueryNode.cloneWithFrontModifier(this.#props.queryNode, SelectModifierNode.createWithRaw(modifier.toOperationNode())),
160
+ queryNode: SelectQueryNode.cloneWithFrontModifier(this.#props.queryNode, SelectModifierNode.createWithExpression(modifier.toOperationNode())),
155
161
  });
156
162
  }
157
163
  /**
@@ -180,7 +186,7 @@ export class SelectQueryBuilder {
180
186
  modifyEnd(modifier) {
181
187
  return new SelectQueryBuilder({
182
188
  ...this.#props,
183
- queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.createWithRaw(modifier.toOperationNode())),
189
+ queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.createWithExpression(modifier.toOperationNode())),
184
190
  });
185
191
  }
186
192
  /**
@@ -676,7 +682,7 @@ export class SelectQueryBuilder {
676
682
  * ```
677
683
  */
678
684
  as(alias) {
679
- return new AliasedQueryBuilder(this, alias);
685
+ return new AliasedSelectQueryBuilder(this, alias);
680
686
  }
681
687
  /**
682
688
  * Change the output type of the query.
@@ -762,8 +768,8 @@ export class SelectQueryBuilder {
762
768
  * ```
763
769
  */
764
770
  async *stream(chunkSize = 100) {
765
- const compildQuery = this.compile();
766
- const stream = this.#props.executor.stream(compildQuery, chunkSize, this.#props.queryId);
771
+ const compiledQuery = this.compile();
772
+ const stream = this.#props.executor.stream(compiledQuery, chunkSize, this.#props.queryId);
767
773
  for await (const item of stream) {
768
774
  yield* item.rows;
769
775
  }
@@ -806,7 +812,7 @@ export class SelectQueryBuilder {
806
812
  async explain(format, options) {
807
813
  const builder = new SelectQueryBuilder({
808
814
  ...this.#props,
809
- queryNode: SelectQueryNode.cloneWithExplain(this.#props.queryNode, ExplainNode.create(format, options)),
815
+ queryNode: SelectQueryNode.cloneWithExplain(this.#props.queryNode, ExplainNode.create(format, options?.toOperationNode())),
810
816
  });
811
817
  return await builder.execute();
812
818
  }
@@ -815,26 +821,22 @@ preventAwait(SelectQueryBuilder, "don't await SelectQueryBuilder instances direc
815
821
  /**
816
822
  * {@link SelectQueryBuilder} with an alias. The result of calling {@link SelectQueryBuilder.as}.
817
823
  */
818
- export class AliasedQueryBuilder {
824
+ export class AliasedSelectQueryBuilder {
819
825
  #queryBuilder;
820
826
  #alias;
821
827
  constructor(queryBuilder, alias) {
822
828
  this.#queryBuilder = queryBuilder;
823
829
  this.#alias = alias;
824
830
  }
825
- /**
826
- * @private
827
- *
828
- * This needs to be here just so that the typings work. Without this
829
- * the generated .d.ts file contains no reference to the type param A
830
- * which causes this type to be equal to AliasedQueryBuilder with any A
831
- * as long as D, TB and O are the same.
832
- */
831
+ /** @private */
832
+ get expression() {
833
+ return this.#queryBuilder;
834
+ }
835
+ /** @private */
833
836
  get alias() {
834
837
  return this.#alias;
835
838
  }
836
839
  toOperationNode() {
837
- const node = this.#queryBuilder.toOperationNode();
838
- return AliasNode.create(node, IdentifierNode.create(this.#alias));
840
+ return AliasNode.create(this.#queryBuilder.toOperationNode(), IdentifierNode.create(this.#alias));
839
841
  }
840
842
  }