kysely 0.21.6 → 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 (380) hide show
  1. package/CONTRIBUTING.md +70 -0
  2. package/README.md +27 -4
  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 +17 -8
  16. package/dist/cjs/index.js +15 -4
  17. package/dist/cjs/kysely.d.ts +3 -3
  18. package/dist/cjs/kysely.js +3 -3
  19. package/dist/cjs/migration/file-migration-provider.js +11 -4
  20. package/dist/cjs/operation-node/aggregate-function-node.d.ts +25 -0
  21. package/dist/cjs/operation-node/aggregate-function-node.js +48 -0
  22. package/dist/cjs/operation-node/alias-node.d.ts +3 -10
  23. package/dist/cjs/operation-node/alter-column-node.d.ts +1 -2
  24. package/dist/cjs/operation-node/alter-table-node.d.ts +5 -7
  25. package/dist/cjs/operation-node/alter-table-node.js +9 -1
  26. package/dist/cjs/operation-node/and-node.d.ts +3 -4
  27. package/dist/cjs/operation-node/binary-operation-node.d.ts +14 -0
  28. package/dist/cjs/operation-node/binary-operation-node.js +20 -0
  29. package/dist/cjs/operation-node/check-constraint-node.d.ts +2 -3
  30. package/dist/cjs/operation-node/column-definition-node.d.ts +6 -5
  31. package/dist/cjs/operation-node/column-definition-node.js +16 -0
  32. package/dist/cjs/operation-node/column-update-node.d.ts +2 -3
  33. package/dist/cjs/operation-node/common-table-expression-node.d.ts +2 -4
  34. package/dist/cjs/operation-node/create-index-node.d.ts +1 -3
  35. package/dist/cjs/operation-node/create-table-node.d.ts +4 -5
  36. package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
  37. package/dist/cjs/operation-node/create-type-node.js +1 -2
  38. package/dist/cjs/operation-node/default-value-node.d.ts +2 -4
  39. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -2
  40. package/dist/cjs/operation-node/drop-type-node.d.ts +1 -1
  41. package/dist/cjs/operation-node/drop-type-node.js +1 -2
  42. package/dist/cjs/operation-node/explain-node.d.ts +2 -4
  43. package/dist/cjs/operation-node/explain-node.js +1 -1
  44. package/dist/cjs/operation-node/from-node.d.ts +3 -4
  45. package/dist/cjs/operation-node/generated-node.d.ts +2 -3
  46. package/dist/cjs/operation-node/group-by-item-node.d.ts +2 -3
  47. package/dist/cjs/operation-node/group-by-node.d.ts +1 -1
  48. package/dist/cjs/operation-node/group-by-node.js +3 -3
  49. package/dist/cjs/operation-node/having-node.d.ts +3 -4
  50. package/dist/cjs/operation-node/having-node.js +4 -4
  51. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -4
  52. package/dist/cjs/operation-node/join-node.d.ts +5 -9
  53. package/dist/cjs/operation-node/join-node.js +6 -6
  54. package/dist/cjs/operation-node/on-conflict-node.d.ts +5 -7
  55. package/dist/cjs/operation-node/on-conflict-node.js +12 -12
  56. package/dist/cjs/operation-node/on-node.d.ts +3 -4
  57. package/dist/cjs/operation-node/on-node.js +4 -4
  58. package/dist/cjs/operation-node/operation-node-transformer.d.ts +14 -4
  59. package/dist/cjs/operation-node/operation-node-transformer.js +60 -20
  60. package/dist/cjs/operation-node/operation-node-visitor.d.ts +14 -4
  61. package/dist/cjs/operation-node/operation-node-visitor.js +7 -2
  62. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  63. package/dist/cjs/operation-node/operator-node.d.ts +5 -3
  64. package/dist/cjs/operation-node/operator-node.js +3 -5
  65. package/dist/cjs/operation-node/or-node.d.ts +3 -4
  66. package/dist/cjs/operation-node/order-by-item-node.d.ts +3 -5
  67. package/dist/cjs/operation-node/over-node.d.ts +19 -0
  68. package/dist/cjs/operation-node/over-node.js +35 -0
  69. package/dist/cjs/operation-node/parens-node.d.ts +2 -3
  70. package/dist/cjs/operation-node/partition-by-item-node.d.ts +13 -0
  71. package/dist/cjs/operation-node/{filter-node.js → partition-by-item-node.js} +6 -8
  72. package/dist/cjs/operation-node/partition-by-node.d.ts +14 -0
  73. package/dist/cjs/operation-node/partition-by-node.js +24 -0
  74. package/dist/cjs/operation-node/query-node.d.ts +2 -3
  75. package/dist/cjs/operation-node/query-node.js +6 -6
  76. package/dist/cjs/operation-node/select-modifier-node.d.ts +2 -3
  77. package/dist/cjs/operation-node/select-modifier-node.js +1 -1
  78. package/dist/cjs/operation-node/select-query-node.d.ts +8 -9
  79. package/dist/cjs/operation-node/select-query-node.js +14 -14
  80. package/dist/cjs/operation-node/selection-node.d.ts +2 -3
  81. package/dist/cjs/operation-node/set-operation-node.d.ts +15 -0
  82. package/dist/cjs/operation-node/{union-node.js → set-operation-node.js} +7 -6
  83. package/dist/cjs/operation-node/simple-reference-expression-node.d.ts +3 -0
  84. package/dist/cjs/operation-node/{operation-node-utils.js → simple-reference-expression-node.js} +0 -0
  85. package/dist/cjs/operation-node/unary-operation-node.d.ts +13 -0
  86. package/dist/cjs/operation-node/unary-operation-node.js +19 -0
  87. package/dist/cjs/operation-node/update-query-node.d.ts +3 -4
  88. package/dist/cjs/operation-node/value-list-node.d.ts +2 -8
  89. package/dist/cjs/operation-node/where-node.d.ts +3 -4
  90. package/dist/cjs/operation-node/where-node.js +4 -4
  91. package/dist/cjs/parser/binary-operation-parser.d.ts +20 -0
  92. package/dist/cjs/parser/binary-operation-parser.js +99 -0
  93. package/dist/cjs/parser/coalesce-parser.d.ts +4 -0
  94. package/dist/cjs/parser/coalesce-parser.js +11 -0
  95. package/dist/cjs/parser/data-type-parser.d.ts +5 -5
  96. package/dist/cjs/parser/default-value-parser.d.ts +4 -5
  97. package/dist/cjs/parser/default-value-parser.js +2 -2
  98. package/dist/cjs/parser/expression-parser.d.ts +10 -0
  99. package/dist/cjs/parser/{complex-expression-parser.js → expression-parser.js} +9 -8
  100. package/dist/cjs/parser/group-by-parser.d.ts +1 -1
  101. package/dist/cjs/parser/group-by-parser.js +2 -2
  102. package/dist/cjs/parser/identifier-parser.d.ts +2 -0
  103. package/dist/cjs/parser/identifier-parser.js +23 -0
  104. package/dist/cjs/parser/insert-values-parser.d.ts +1 -1
  105. package/dist/cjs/parser/insert-values-parser.js +2 -2
  106. package/dist/cjs/parser/join-parser.js +2 -2
  107. package/dist/cjs/parser/order-by-parser.d.ts +2 -2
  108. package/dist/cjs/parser/parse-utils.d.ts +2 -0
  109. package/dist/cjs/parser/parse-utils.js +9 -1
  110. package/dist/cjs/parser/partition-by-parser.d.ts +6 -0
  111. package/dist/cjs/parser/partition-by-parser.js +9 -0
  112. package/dist/cjs/parser/reference-parser.d.ts +14 -13
  113. package/dist/cjs/parser/reference-parser.js +12 -9
  114. package/dist/cjs/parser/select-parser.d.ts +6 -6
  115. package/dist/cjs/parser/select-parser.js +2 -2
  116. package/dist/cjs/parser/set-operation-parser.d.ts +3 -0
  117. package/dist/cjs/parser/set-operation-parser.js +8 -0
  118. package/dist/cjs/parser/table-parser.d.ts +11 -12
  119. package/dist/cjs/parser/table-parser.js +2 -2
  120. package/dist/cjs/parser/unary-operation-parser.d.ts +5 -0
  121. package/dist/cjs/parser/unary-operation-parser.js +17 -0
  122. package/dist/cjs/parser/update-set-parser.d.ts +1 -1
  123. package/dist/cjs/parser/value-parser.d.ts +5 -8
  124. package/dist/cjs/parser/value-parser.js +4 -4
  125. package/dist/cjs/parser/with-parser.d.ts +3 -4
  126. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +1 -1
  127. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +348 -0
  128. package/dist/cjs/query-builder/aggregate-function-builder.js +298 -0
  129. package/dist/cjs/query-builder/delete-query-builder.d.ts +20 -20
  130. package/dist/cjs/query-builder/delete-query-builder.js +19 -16
  131. package/dist/cjs/query-builder/expression-builder.d.ts +3 -3
  132. package/dist/cjs/query-builder/expression-builder.js +3 -3
  133. package/dist/cjs/query-builder/function-module.d.ts +241 -0
  134. package/dist/cjs/query-builder/function-module.js +214 -0
  135. package/dist/cjs/query-builder/having-interface.d.ts +9 -8
  136. package/dist/cjs/query-builder/insert-query-builder.d.ts +7 -6
  137. package/dist/cjs/query-builder/insert-query-builder.js +11 -9
  138. package/dist/cjs/query-builder/insert-result.d.ts +8 -1
  139. package/dist/cjs/query-builder/insert-result.js +12 -1
  140. package/dist/cjs/query-builder/join-builder.d.ts +9 -8
  141. package/dist/cjs/query-builder/join-builder.js +10 -9
  142. package/dist/cjs/query-builder/on-conflict-builder.d.ts +25 -24
  143. package/dist/cjs/query-builder/on-conflict-builder.js +18 -17
  144. package/dist/cjs/query-builder/over-builder.d.ts +59 -0
  145. package/dist/cjs/query-builder/over-builder.js +50 -0
  146. package/dist/cjs/query-builder/select-query-builder.d.ts +138 -47
  147. package/dist/cjs/query-builder/select-query-builder.js +122 -40
  148. package/dist/cjs/query-builder/update-query-builder.d.ts +20 -20
  149. package/dist/cjs/query-builder/update-query-builder.js +19 -16
  150. package/dist/cjs/query-builder/where-interface.d.ts +12 -11
  151. package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
  152. package/dist/cjs/query-compiler/default-query-compiler.d.ts +15 -5
  153. package/dist/cjs/query-compiler/default-query-compiler.js +78 -47
  154. package/dist/cjs/query-executor/query-executor-base.js +16 -1
  155. package/dist/cjs/raw-builder/raw-builder.d.ts +49 -13
  156. package/dist/cjs/raw-builder/raw-builder.js +24 -14
  157. package/dist/cjs/raw-builder/sql.d.ts +15 -7
  158. package/dist/cjs/raw-builder/sql.js +6 -0
  159. package/dist/cjs/schema/alter-column-builder.d.ts +28 -0
  160. package/dist/cjs/schema/alter-column-builder.js +55 -0
  161. package/dist/cjs/schema/alter-table-builder.d.ts +39 -341
  162. package/dist/cjs/schema/alter-table-builder.js +65 -280
  163. package/dist/cjs/schema/column-definition-builder.d.ts +43 -155
  164. package/dist/cjs/schema/column-definition-builder.js +189 -0
  165. package/dist/cjs/schema/create-index-builder.d.ts +2 -2
  166. package/dist/cjs/schema/create-table-builder.d.ts +38 -5
  167. package/dist/cjs/schema/create-table-builder.js +36 -1
  168. package/dist/cjs/schema/create-view-builder.d.ts +3 -2
  169. package/dist/cjs/schema/schema.d.ts +2 -2
  170. package/dist/cjs/schema/schema.js +6 -5
  171. package/dist/cjs/util/compilable.d.ts +2 -2
  172. package/dist/cjs/util/explainable.d.ts +2 -2
  173. package/dist/cjs/util/infer-result.d.ts +46 -0
  174. package/dist/cjs/util/infer-result.js +2 -0
  175. package/dist/cjs/util/log-once.d.ts +5 -0
  176. package/dist/cjs/util/log-once.js +16 -0
  177. package/dist/cjs/util/object-utils.d.ts +1 -0
  178. package/dist/cjs/util/object-utils.js +5 -1
  179. package/dist/cjs/util/type-utils.d.ts +3 -13
  180. package/dist/esm/dialect/database-introspector.d.ts +4 -0
  181. package/dist/esm/dialect/mysql/mysql-driver.js +6 -3
  182. package/dist/esm/dialect/postgres/postgres-adapter.js +1 -1
  183. package/dist/esm/dialect/postgres/postgres-driver.js +7 -2
  184. package/dist/esm/dialect/postgres/postgres-introspector.js +8 -0
  185. package/dist/esm/dialect/sqlite/sqlite-driver.js +4 -3
  186. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
  187. package/dist/esm/driver/database-connection.d.ts +6 -2
  188. package/dist/esm/dynamic/dynamic-reference-builder.d.ts +2 -3
  189. package/dist/esm/dynamic/dynamic-reference-builder.js +2 -2
  190. package/dist/esm/expression/expression.d.ts +100 -0
  191. package/dist/esm/expression/expression.js +12 -0
  192. package/dist/esm/index.d.ts +17 -8
  193. package/dist/esm/index.js +13 -4
  194. package/dist/esm/kysely.d.ts +3 -3
  195. package/dist/esm/kysely.js +3 -3
  196. package/dist/esm/migration/file-migration-provider.js +11 -4
  197. package/dist/esm/operation-node/aggregate-function-node.d.ts +25 -0
  198. package/dist/esm/operation-node/aggregate-function-node.js +46 -0
  199. package/dist/esm/operation-node/alias-node.d.ts +3 -10
  200. package/dist/esm/operation-node/alter-column-node.d.ts +1 -2
  201. package/dist/esm/operation-node/alter-table-node.d.ts +5 -7
  202. package/dist/esm/operation-node/alter-table-node.js +9 -1
  203. package/dist/esm/operation-node/and-node.d.ts +3 -4
  204. package/dist/esm/operation-node/binary-operation-node.d.ts +14 -0
  205. package/dist/esm/operation-node/binary-operation-node.js +18 -0
  206. package/dist/esm/operation-node/check-constraint-node.d.ts +2 -3
  207. package/dist/esm/operation-node/column-definition-node.d.ts +6 -5
  208. package/dist/esm/operation-node/column-definition-node.js +16 -0
  209. package/dist/esm/operation-node/column-update-node.d.ts +2 -3
  210. package/dist/esm/operation-node/common-table-expression-node.d.ts +2 -4
  211. package/dist/esm/operation-node/create-index-node.d.ts +1 -3
  212. package/dist/esm/operation-node/create-table-node.d.ts +4 -5
  213. package/dist/esm/operation-node/create-type-node.d.ts +1 -1
  214. package/dist/esm/operation-node/create-type-node.js +1 -2
  215. package/dist/esm/operation-node/default-value-node.d.ts +2 -4
  216. package/dist/esm/operation-node/delete-query-node.d.ts +1 -2
  217. package/dist/esm/operation-node/drop-type-node.d.ts +1 -1
  218. package/dist/esm/operation-node/drop-type-node.js +1 -2
  219. package/dist/esm/operation-node/explain-node.d.ts +2 -4
  220. package/dist/esm/operation-node/explain-node.js +1 -1
  221. package/dist/esm/operation-node/from-node.d.ts +3 -4
  222. package/dist/esm/operation-node/generated-node.d.ts +2 -3
  223. package/dist/esm/operation-node/group-by-item-node.d.ts +2 -3
  224. package/dist/esm/operation-node/group-by-node.d.ts +1 -1
  225. package/dist/esm/operation-node/group-by-node.js +3 -3
  226. package/dist/esm/operation-node/having-node.d.ts +3 -4
  227. package/dist/esm/operation-node/having-node.js +4 -4
  228. package/dist/esm/operation-node/insert-query-node.d.ts +1 -4
  229. package/dist/esm/operation-node/join-node.d.ts +5 -9
  230. package/dist/esm/operation-node/join-node.js +6 -6
  231. package/dist/esm/operation-node/on-conflict-node.d.ts +5 -7
  232. package/dist/esm/operation-node/on-conflict-node.js +12 -12
  233. package/dist/esm/operation-node/on-node.d.ts +3 -4
  234. package/dist/esm/operation-node/on-node.js +4 -4
  235. package/dist/esm/operation-node/operation-node-transformer.d.ts +14 -4
  236. package/dist/esm/operation-node/operation-node-transformer.js +60 -20
  237. package/dist/esm/operation-node/operation-node-visitor.d.ts +14 -4
  238. package/dist/esm/operation-node/operation-node-visitor.js +7 -2
  239. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  240. package/dist/esm/operation-node/operator-node.d.ts +5 -3
  241. package/dist/esm/operation-node/operator-node.js +2 -4
  242. package/dist/esm/operation-node/or-node.d.ts +3 -4
  243. package/dist/esm/operation-node/order-by-item-node.d.ts +3 -5
  244. package/dist/esm/operation-node/over-node.d.ts +19 -0
  245. package/dist/esm/operation-node/over-node.js +33 -0
  246. package/dist/esm/operation-node/parens-node.d.ts +2 -3
  247. package/dist/esm/operation-node/partition-by-item-node.d.ts +13 -0
  248. package/dist/esm/operation-node/partition-by-item-node.js +16 -0
  249. package/dist/esm/operation-node/partition-by-node.d.ts +14 -0
  250. package/dist/esm/operation-node/partition-by-node.js +22 -0
  251. package/dist/esm/operation-node/query-node.d.ts +2 -3
  252. package/dist/esm/operation-node/query-node.js +6 -6
  253. package/dist/esm/operation-node/select-modifier-node.d.ts +2 -3
  254. package/dist/esm/operation-node/select-modifier-node.js +1 -1
  255. package/dist/esm/operation-node/select-query-node.d.ts +8 -9
  256. package/dist/esm/operation-node/select-query-node.js +14 -14
  257. package/dist/esm/operation-node/selection-node.d.ts +2 -3
  258. package/dist/esm/operation-node/set-operation-node.d.ts +15 -0
  259. package/dist/esm/operation-node/set-operation-node.js +18 -0
  260. package/dist/esm/operation-node/simple-reference-expression-node.d.ts +3 -0
  261. package/dist/esm/operation-node/simple-reference-expression-node.js +2 -0
  262. package/dist/esm/operation-node/unary-operation-node.d.ts +13 -0
  263. package/dist/esm/operation-node/unary-operation-node.js +17 -0
  264. package/dist/esm/operation-node/update-query-node.d.ts +3 -4
  265. package/dist/esm/operation-node/value-list-node.d.ts +2 -8
  266. package/dist/esm/operation-node/where-node.d.ts +3 -4
  267. package/dist/esm/operation-node/where-node.js +4 -4
  268. package/dist/esm/parser/binary-operation-parser.d.ts +20 -0
  269. package/dist/esm/parser/binary-operation-parser.js +92 -0
  270. package/dist/esm/parser/coalesce-parser.d.ts +4 -0
  271. package/dist/esm/parser/coalesce-parser.js +8 -0
  272. package/dist/esm/parser/data-type-parser.d.ts +5 -5
  273. package/dist/esm/parser/default-value-parser.d.ts +4 -5
  274. package/dist/esm/parser/default-value-parser.js +2 -2
  275. package/dist/esm/parser/expression-parser.d.ts +10 -0
  276. package/dist/esm/parser/{complex-expression-parser.js → expression-parser.js} +6 -5
  277. package/dist/esm/parser/group-by-parser.d.ts +1 -1
  278. package/dist/esm/parser/group-by-parser.js +2 -2
  279. package/dist/esm/parser/identifier-parser.d.ts +2 -0
  280. package/dist/esm/parser/identifier-parser.js +20 -0
  281. package/dist/esm/parser/insert-values-parser.d.ts +1 -1
  282. package/dist/esm/parser/insert-values-parser.js +2 -2
  283. package/dist/esm/parser/join-parser.js +2 -2
  284. package/dist/esm/parser/order-by-parser.d.ts +2 -2
  285. package/dist/esm/parser/parse-utils.d.ts +2 -0
  286. package/dist/esm/parser/parse-utils.js +7 -0
  287. package/dist/esm/parser/partition-by-parser.d.ts +6 -0
  288. package/dist/esm/parser/partition-by-parser.js +6 -0
  289. package/dist/esm/parser/reference-parser.d.ts +14 -13
  290. package/dist/esm/parser/reference-parser.js +10 -8
  291. package/dist/esm/parser/select-parser.d.ts +6 -6
  292. package/dist/esm/parser/select-parser.js +2 -2
  293. package/dist/esm/parser/set-operation-parser.d.ts +3 -0
  294. package/dist/esm/parser/set-operation-parser.js +5 -0
  295. package/dist/esm/parser/table-parser.d.ts +11 -12
  296. package/dist/esm/parser/table-parser.js +2 -2
  297. package/dist/esm/parser/unary-operation-parser.d.ts +5 -0
  298. package/dist/esm/parser/unary-operation-parser.js +13 -0
  299. package/dist/esm/parser/update-set-parser.d.ts +1 -1
  300. package/dist/esm/parser/value-parser.d.ts +5 -8
  301. package/dist/esm/parser/value-parser.js +4 -4
  302. package/dist/esm/parser/with-parser.d.ts +3 -4
  303. package/dist/esm/plugin/camel-case/camel-case-plugin.js +2 -2
  304. package/dist/esm/query-builder/aggregate-function-builder.d.ts +348 -0
  305. package/dist/esm/query-builder/aggregate-function-builder.js +294 -0
  306. package/dist/esm/query-builder/delete-query-builder.d.ts +20 -20
  307. package/dist/esm/query-builder/delete-query-builder.js +19 -16
  308. package/dist/esm/query-builder/expression-builder.d.ts +3 -3
  309. package/dist/esm/query-builder/expression-builder.js +3 -3
  310. package/dist/esm/query-builder/function-module.d.ts +241 -0
  311. package/dist/esm/query-builder/function-module.js +211 -0
  312. package/dist/esm/query-builder/having-interface.d.ts +9 -8
  313. package/dist/esm/query-builder/insert-query-builder.d.ts +7 -6
  314. package/dist/esm/query-builder/insert-query-builder.js +11 -9
  315. package/dist/esm/query-builder/insert-result.d.ts +8 -1
  316. package/dist/esm/query-builder/insert-result.js +12 -1
  317. package/dist/esm/query-builder/join-builder.d.ts +9 -8
  318. package/dist/esm/query-builder/join-builder.js +10 -9
  319. package/dist/esm/query-builder/on-conflict-builder.d.ts +25 -24
  320. package/dist/esm/query-builder/on-conflict-builder.js +18 -17
  321. package/dist/esm/query-builder/over-builder.d.ts +59 -0
  322. package/dist/esm/query-builder/over-builder.js +47 -0
  323. package/dist/esm/query-builder/select-query-builder.d.ts +138 -47
  324. package/dist/esm/query-builder/select-query-builder.js +120 -38
  325. package/dist/esm/query-builder/update-query-builder.d.ts +20 -20
  326. package/dist/esm/query-builder/update-query-builder.js +19 -16
  327. package/dist/esm/query-builder/where-interface.d.ts +12 -11
  328. package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
  329. package/dist/esm/query-compiler/default-query-compiler.d.ts +15 -5
  330. package/dist/esm/query-compiler/default-query-compiler.js +79 -48
  331. package/dist/esm/query-executor/query-executor-base.js +16 -1
  332. package/dist/esm/raw-builder/raw-builder.d.ts +49 -13
  333. package/dist/esm/raw-builder/raw-builder.js +23 -14
  334. package/dist/esm/raw-builder/sql.d.ts +15 -7
  335. package/dist/esm/raw-builder/sql.js +6 -0
  336. package/dist/esm/schema/alter-column-builder.d.ts +28 -0
  337. package/dist/esm/schema/alter-column-builder.js +51 -0
  338. package/dist/esm/schema/alter-table-builder.d.ts +39 -341
  339. package/dist/esm/schema/alter-table-builder.js +61 -274
  340. package/dist/esm/schema/column-definition-builder.d.ts +43 -155
  341. package/dist/esm/schema/column-definition-builder.js +189 -0
  342. package/dist/esm/schema/create-index-builder.d.ts +2 -2
  343. package/dist/esm/schema/create-table-builder.d.ts +38 -5
  344. package/dist/esm/schema/create-table-builder.js +36 -1
  345. package/dist/esm/schema/create-view-builder.d.ts +3 -2
  346. package/dist/esm/schema/schema.d.ts +2 -2
  347. package/dist/esm/schema/schema.js +6 -5
  348. package/dist/esm/util/compilable.d.ts +2 -2
  349. package/dist/esm/util/explainable.d.ts +2 -2
  350. package/dist/esm/util/infer-result.d.ts +46 -0
  351. package/dist/esm/util/infer-result.js +2 -0
  352. package/dist/esm/util/log-once.d.ts +5 -0
  353. package/dist/esm/util/log-once.js +13 -0
  354. package/dist/esm/util/object-utils.d.ts +1 -0
  355. package/dist/esm/util/object-utils.js +3 -0
  356. package/dist/esm/util/type-utils.d.ts +3 -13
  357. package/package.json +4 -1
  358. package/dist/cjs/operation-node/filter-node.d.ts +0 -18
  359. package/dist/cjs/operation-node/operation-node-utils.d.ts +0 -17
  360. package/dist/cjs/operation-node/union-node.d.ts +0 -16
  361. package/dist/cjs/parser/complex-expression-parser.d.ts +0 -10
  362. package/dist/cjs/parser/filter-parser.d.ts +0 -24
  363. package/dist/cjs/parser/filter-parser.js +0 -109
  364. package/dist/cjs/parser/union-parser.d.ts +0 -5
  365. package/dist/cjs/parser/union-parser.js +0 -8
  366. package/dist/cjs/query-builder/function-builder.d.ts +0 -133
  367. package/dist/cjs/query-builder/function-builder.js +0 -160
  368. package/dist/esm/operation-node/filter-node.d.ts +0 -18
  369. package/dist/esm/operation-node/filter-node.js +0 -18
  370. package/dist/esm/operation-node/operation-node-utils.d.ts +0 -17
  371. package/dist/esm/operation-node/operation-node-utils.js +0 -2
  372. package/dist/esm/operation-node/union-node.d.ts +0 -16
  373. package/dist/esm/operation-node/union-node.js +0 -17
  374. package/dist/esm/parser/complex-expression-parser.d.ts +0 -10
  375. package/dist/esm/parser/filter-parser.d.ts +0 -24
  376. package/dist/esm/parser/filter-parser.js +0 -100
  377. package/dist/esm/parser/union-parser.d.ts +0 -5
  378. package/dist/esm/parser/union-parser.js +0 -5
  379. package/dist/esm/query-builder/function-builder.d.ts +0 -133
  380. package/dist/esm/query-builder/function-builder.js +0 -157
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OverNode = void 0;
4
+ const object_utils_js_1 = require("../util/object-utils.js");
5
+ const order_by_node_js_1 = require("./order-by-node.js");
6
+ const partition_by_node_js_1 = require("./partition-by-node.js");
7
+ /**
8
+ * @internal
9
+ */
10
+ exports.OverNode = (0, object_utils_js_1.freeze)({
11
+ is(node) {
12
+ return node.kind === 'OverNode';
13
+ },
14
+ create() {
15
+ return (0, object_utils_js_1.freeze)({
16
+ kind: 'OverNode',
17
+ });
18
+ },
19
+ cloneWithOrderByItem(overNode, item) {
20
+ return (0, object_utils_js_1.freeze)({
21
+ ...overNode,
22
+ orderBy: overNode.orderBy
23
+ ? order_by_node_js_1.OrderByNode.cloneWithItem(overNode.orderBy, item)
24
+ : order_by_node_js_1.OrderByNode.create(item),
25
+ });
26
+ },
27
+ cloneWithPartitionByItems(overNode, items) {
28
+ return (0, object_utils_js_1.freeze)({
29
+ ...overNode,
30
+ partitionBy: overNode.partitionBy
31
+ ? partition_by_node_js_1.PartitionByNode.cloneWithItems(overNode.partitionBy, items)
32
+ : partition_by_node_js_1.PartitionByNode.create(items),
33
+ });
34
+ },
35
+ });
@@ -1,13 +1,12 @@
1
1
  import { OperationNode } from './operation-node.js';
2
- import { FilterExpressionNode } from './operation-node-utils.js';
3
2
  export interface ParensNode extends OperationNode {
4
3
  readonly kind: 'ParensNode';
5
- readonly node: FilterExpressionNode;
4
+ readonly node: OperationNode;
6
5
  }
7
6
  /**
8
7
  * @internal
9
8
  */
10
9
  export declare const ParensNode: Readonly<{
11
10
  is(node: OperationNode): node is ParensNode;
12
- create(node: FilterExpressionNode): ParensNode;
11
+ create(node: OperationNode): ParensNode;
13
12
  }>;
@@ -0,0 +1,13 @@
1
+ import { OperationNode } from './operation-node.js';
2
+ import { SimpleReferenceExpressionNode } from './simple-reference-expression-node.js';
3
+ export interface PartitionByItemNode extends OperationNode {
4
+ readonly kind: 'PartitionByItemNode';
5
+ readonly partitionBy: SimpleReferenceExpressionNode;
6
+ }
7
+ /**
8
+ * @internal
9
+ */
10
+ export declare const PartitionByItemNode: Readonly<{
11
+ is(node: OperationNode): node is PartitionByItemNode;
12
+ create(partitionBy: SimpleReferenceExpressionNode): PartitionByItemNode;
13
+ }>;
@@ -1,20 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FilterNode = void 0;
3
+ exports.PartitionByItemNode = void 0;
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
5
  /**
6
6
  * @internal
7
7
  */
8
- exports.FilterNode = (0, object_utils_js_1.freeze)({
8
+ exports.PartitionByItemNode = (0, object_utils_js_1.freeze)({
9
9
  is(node) {
10
- return node.kind === 'FilterNode';
10
+ return node.kind === 'PartitionByItemNode';
11
11
  },
12
- create(left, op, right) {
12
+ create(partitionBy) {
13
13
  return (0, object_utils_js_1.freeze)({
14
- kind: 'FilterNode',
15
- left,
16
- op,
17
- right,
14
+ kind: 'PartitionByItemNode',
15
+ partitionBy,
18
16
  });
19
17
  },
20
18
  });
@@ -0,0 +1,14 @@
1
+ import { PartitionByItemNode } from './partition-by-item-node.js';
2
+ import { OperationNode } from './operation-node.js';
3
+ export interface PartitionByNode extends OperationNode {
4
+ readonly kind: 'PartitionByNode';
5
+ readonly items: ReadonlyArray<PartitionByItemNode>;
6
+ }
7
+ /**
8
+ * @internal
9
+ */
10
+ export declare const PartitionByNode: Readonly<{
11
+ is(node: OperationNode): node is PartitionByNode;
12
+ create(items: ReadonlyArray<PartitionByItemNode>): PartitionByNode;
13
+ cloneWithItems(partitionBy: PartitionByNode, items: ReadonlyArray<PartitionByItemNode>): PartitionByNode;
14
+ }>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PartitionByNode = void 0;
4
+ const object_utils_js_1 = require("../util/object-utils.js");
5
+ /**
6
+ * @internal
7
+ */
8
+ exports.PartitionByNode = (0, object_utils_js_1.freeze)({
9
+ is(node) {
10
+ return node.kind === 'PartitionByNode';
11
+ },
12
+ create(items) {
13
+ return (0, object_utils_js_1.freeze)({
14
+ kind: 'PartitionByNode',
15
+ items: (0, object_utils_js_1.freeze)(items),
16
+ });
17
+ },
18
+ cloneWithItems(partitionBy, items) {
19
+ return (0, object_utils_js_1.freeze)({
20
+ ...partitionBy,
21
+ items: (0, object_utils_js_1.freeze)([...partitionBy.items, ...items]),
22
+ });
23
+ },
24
+ });
@@ -5,7 +5,6 @@ import { DeleteQueryNode } from './delete-query-node.js';
5
5
  import { JoinNode } from './join-node.js';
6
6
  import { SelectionNode } from './selection-node.js';
7
7
  import { OperationNode } from './operation-node.js';
8
- import { FilterExpressionNode } from './operation-node-utils.js';
9
8
  export declare type QueryNode = SelectQueryNode | DeleteQueryNode | InsertQueryNode | UpdateQueryNode;
10
9
  export declare type MutatingQueryNode = DeleteQueryNode | InsertQueryNode | UpdateQueryNode;
11
10
  export declare type FilterableQueryNode = SelectQueryNode | DeleteQueryNode | UpdateQueryNode;
@@ -14,8 +13,8 @@ export declare type FilterableQueryNode = SelectQueryNode | DeleteQueryNode | Up
14
13
  */
15
14
  export declare const QueryNode: Readonly<{
16
15
  is(node: OperationNode): node is QueryNode;
17
- cloneWithWhere<T extends FilterableQueryNode>(node: T, filter: FilterExpressionNode): T;
18
- cloneWithOrWhere<T_1 extends FilterableQueryNode>(node: T_1, filter: FilterExpressionNode): T_1;
16
+ cloneWithWhere<T extends FilterableQueryNode>(node: T, operation: OperationNode): T;
17
+ cloneWithOrWhere<T_1 extends FilterableQueryNode>(node: T_1, operation: OperationNode): T_1;
19
18
  cloneWithJoin<T_2 extends FilterableQueryNode>(node: T_2, join: JoinNode): T_2;
20
19
  cloneWithReturning<T_3 extends MutatingQueryNode>(node: T_3, selections: ReadonlyArray<SelectionNode>): T_3;
21
20
  }>;
@@ -18,20 +18,20 @@ exports.QueryNode = (0, object_utils_js_1.freeze)({
18
18
  update_query_node_js_1.UpdateQueryNode.is(node) ||
19
19
  select_query_node_js_1.SelectQueryNode.is(node));
20
20
  },
21
- cloneWithWhere(node, filter) {
21
+ cloneWithWhere(node, operation) {
22
22
  return (0, object_utils_js_1.freeze)({
23
23
  ...node,
24
24
  where: node.where
25
- ? where_node_js_1.WhereNode.cloneWithFilter(node.where, 'And', filter)
26
- : where_node_js_1.WhereNode.create(filter),
25
+ ? where_node_js_1.WhereNode.cloneWithOperation(node.where, 'And', operation)
26
+ : where_node_js_1.WhereNode.create(operation),
27
27
  });
28
28
  },
29
- cloneWithOrWhere(node, filter) {
29
+ cloneWithOrWhere(node, operation) {
30
30
  return (0, object_utils_js_1.freeze)({
31
31
  ...node,
32
32
  where: node.where
33
- ? where_node_js_1.WhereNode.cloneWithFilter(node.where, 'Or', filter)
34
- : where_node_js_1.WhereNode.create(filter),
33
+ ? where_node_js_1.WhereNode.cloneWithOperation(node.where, 'Or', operation)
34
+ : where_node_js_1.WhereNode.create(operation),
35
35
  });
36
36
  },
37
37
  cloneWithJoin(node, join) {
@@ -1,10 +1,9 @@
1
1
  import { OperationNode } from './operation-node.js';
2
- import { RawNode } from './raw-node.js';
3
2
  export declare type SelectModifier = 'ForUpdate' | 'ForNoKeyUpdate' | 'ForShare' | 'ForKeyShare' | 'NoWait' | 'SkipLocked' | 'Distinct';
4
3
  export interface SelectModifierNode extends OperationNode {
5
4
  readonly kind: 'SelectModifierNode';
6
5
  readonly modifier?: SelectModifier;
7
- readonly rawModifier?: RawNode;
6
+ readonly rawModifier?: OperationNode;
8
7
  }
9
8
  /**
10
9
  * @internal
@@ -12,5 +11,5 @@ export interface SelectModifierNode extends OperationNode {
12
11
  export declare const SelectModifierNode: Readonly<{
13
12
  is(node: OperationNode): node is SelectModifierNode;
14
13
  create(modifier: SelectModifier): SelectModifierNode;
15
- createWithRaw(modifier: RawNode): SelectModifierNode;
14
+ createWithExpression(modifier: OperationNode): SelectModifierNode;
16
15
  }>;
@@ -15,7 +15,7 @@ exports.SelectModifierNode = (0, object_utils_js_1.freeze)({
15
15
  modifier,
16
16
  });
17
17
  },
18
- createWithRaw(modifier) {
18
+ createWithExpression(modifier) {
19
19
  return (0, object_utils_js_1.freeze)({
20
20
  kind: 'SelectModifierNode',
21
21
  rawModifier: modifier,
@@ -6,20 +6,19 @@ import { JoinNode } from './join-node.js';
6
6
  import { LimitNode } from './limit-node.js';
7
7
  import { OffsetNode } from './offset-node.js';
8
8
  import { OperationNode } from './operation-node.js';
9
- import { FilterExpressionNode, TableExpressionNode } from './operation-node-utils.js';
10
9
  import { OrderByItemNode } from './order-by-item-node.js';
11
10
  import { OrderByNode } from './order-by-node.js';
12
11
  import { SelectionNode } from './selection-node.js';
13
12
  import { WhereNode } from './where-node.js';
14
13
  import { WithNode } from './with-node.js';
15
- import { UnionNode } from './union-node.js';
16
14
  import { SelectModifierNode } from './select-modifier-node.js';
17
15
  import { ExplainNode } from './explain-node.js';
16
+ import { SetOperationNode } from './set-operation-node.js';
18
17
  export interface SelectQueryNode extends OperationNode {
19
18
  readonly kind: 'SelectQueryNode';
20
19
  readonly from: FromNode;
21
20
  readonly selections?: ReadonlyArray<SelectionNode>;
22
- readonly distinctOnSelections?: ReadonlyArray<SelectionNode>;
21
+ readonly distinctOn?: ReadonlyArray<OperationNode>;
23
22
  readonly joins?: ReadonlyArray<JoinNode>;
24
23
  readonly groupBy?: GroupByNode;
25
24
  readonly orderBy?: OrderByNode;
@@ -30,25 +29,25 @@ export interface SelectQueryNode extends OperationNode {
30
29
  readonly offset?: OffsetNode;
31
30
  readonly with?: WithNode;
32
31
  readonly having?: HavingNode;
33
- readonly union?: ReadonlyArray<UnionNode>;
34
32
  readonly explain?: ExplainNode;
33
+ readonly setOperations?: ReadonlyArray<SetOperationNode>;
35
34
  }
36
35
  /**
37
36
  * @internal
38
37
  */
39
38
  export declare const SelectQueryNode: Readonly<{
40
39
  is(node: OperationNode): node is SelectQueryNode;
41
- create(fromItems: ReadonlyArray<TableExpressionNode>, withNode?: WithNode): SelectQueryNode;
40
+ create(fromItems: ReadonlyArray<OperationNode>, withNode?: WithNode): SelectQueryNode;
42
41
  cloneWithSelections(select: SelectQueryNode, selections: ReadonlyArray<SelectionNode>): SelectQueryNode;
43
- cloneWithDistinctOnSelections(select: SelectQueryNode, selections: ReadonlyArray<SelectionNode>): SelectQueryNode;
42
+ cloneWithDistinctOn(select: SelectQueryNode, expressions: ReadonlyArray<OperationNode>): SelectQueryNode;
44
43
  cloneWithFrontModifier(select: SelectQueryNode, modifier: SelectModifierNode): SelectQueryNode;
45
44
  cloneWithEndModifier(select: SelectQueryNode, modifier: SelectModifierNode): SelectQueryNode;
46
45
  cloneWithOrderByItem(selectNode: SelectQueryNode, item: OrderByItemNode): SelectQueryNode;
47
46
  cloneWithGroupByItems(selectNode: SelectQueryNode, items: ReadonlyArray<GroupByItemNode>): SelectQueryNode;
48
47
  cloneWithLimit(selectNode: SelectQueryNode, limit: LimitNode): SelectQueryNode;
49
48
  cloneWithOffset(selectNode: SelectQueryNode, offset: OffsetNode): SelectQueryNode;
50
- cloneWithHaving(selectNode: SelectQueryNode, filter: FilterExpressionNode): SelectQueryNode;
51
- cloneWithOrHaving(selectNode: SelectQueryNode, filter: FilterExpressionNode): SelectQueryNode;
52
- cloneWithUnion(selectNode: SelectQueryNode, union: UnionNode): SelectQueryNode;
49
+ cloneWithHaving(selectNode: SelectQueryNode, operation: OperationNode): SelectQueryNode;
50
+ cloneWithOrHaving(selectNode: SelectQueryNode, operation: OperationNode): SelectQueryNode;
51
+ cloneWithSetOperation(selectNode: SelectQueryNode, setOperation: SetOperationNode): SelectQueryNode;
53
52
  cloneWithExplain(selectNode: SelectQueryNode, explain: ExplainNode): SelectQueryNode;
54
53
  }>;
@@ -28,12 +28,12 @@ exports.SelectQueryNode = (0, object_utils_js_1.freeze)({
28
28
  : (0, object_utils_js_1.freeze)(selections),
29
29
  });
30
30
  },
31
- cloneWithDistinctOnSelections(select, selections) {
31
+ cloneWithDistinctOn(select, expressions) {
32
32
  return (0, object_utils_js_1.freeze)({
33
33
  ...select,
34
- distinctOnSelections: select.distinctOnSelections
35
- ? (0, object_utils_js_1.freeze)([...select.distinctOnSelections, ...selections])
36
- : (0, object_utils_js_1.freeze)(selections),
34
+ distinctOn: select.distinctOn
35
+ ? (0, object_utils_js_1.freeze)([...select.distinctOn, ...expressions])
36
+ : (0, object_utils_js_1.freeze)(expressions),
37
37
  });
38
38
  },
39
39
  cloneWithFrontModifier(select, modifier) {
@@ -80,28 +80,28 @@ exports.SelectQueryNode = (0, object_utils_js_1.freeze)({
80
80
  offset,
81
81
  });
82
82
  },
83
- cloneWithHaving(selectNode, filter) {
83
+ cloneWithHaving(selectNode, operation) {
84
84
  return (0, object_utils_js_1.freeze)({
85
85
  ...selectNode,
86
86
  having: selectNode.having
87
- ? having_node_js_1.HavingNode.cloneWithFilter(selectNode.having, 'And', filter)
88
- : having_node_js_1.HavingNode.create(filter),
87
+ ? having_node_js_1.HavingNode.cloneWithOperation(selectNode.having, 'And', operation)
88
+ : having_node_js_1.HavingNode.create(operation),
89
89
  });
90
90
  },
91
- cloneWithOrHaving(selectNode, filter) {
91
+ cloneWithOrHaving(selectNode, operation) {
92
92
  return (0, object_utils_js_1.freeze)({
93
93
  ...selectNode,
94
94
  having: selectNode.having
95
- ? having_node_js_1.HavingNode.cloneWithFilter(selectNode.having, 'Or', filter)
96
- : having_node_js_1.HavingNode.create(filter),
95
+ ? having_node_js_1.HavingNode.cloneWithOperation(selectNode.having, 'Or', operation)
96
+ : having_node_js_1.HavingNode.create(operation),
97
97
  });
98
98
  },
99
- cloneWithUnion(selectNode, union) {
99
+ cloneWithSetOperation(selectNode, setOperation) {
100
100
  return (0, object_utils_js_1.freeze)({
101
101
  ...selectNode,
102
- union: selectNode.union
103
- ? (0, object_utils_js_1.freeze)([...selectNode.union, union])
104
- : (0, object_utils_js_1.freeze)([union]),
102
+ setOperations: selectNode.setOperations
103
+ ? (0, object_utils_js_1.freeze)([...selectNode.setOperations, setOperation])
104
+ : (0, object_utils_js_1.freeze)([setOperation]),
105
105
  });
106
106
  },
107
107
  cloneWithExplain(selectNode, explain) {
@@ -1,10 +1,9 @@
1
1
  import { AliasNode } from './alias-node.js';
2
- import { ColumnNode } from './column-node.js';
3
2
  import { OperationNode } from './operation-node.js';
4
- import { ReferenceNode } from './reference-node.js';
5
3
  import { SelectAllNode } from './select-all-node.js';
4
+ import { SimpleReferenceExpressionNode } from './simple-reference-expression-node.js';
6
5
  import { TableNode } from './table-node.js';
7
- declare type SelectionNodeChild = ColumnNode | ReferenceNode | AliasNode | SelectAllNode;
6
+ declare type SelectionNodeChild = SimpleReferenceExpressionNode | AliasNode | SelectAllNode;
8
7
  export interface SelectionNode extends OperationNode {
9
8
  readonly kind: 'SelectionNode';
10
9
  readonly selection: SelectionNodeChild;
@@ -0,0 +1,15 @@
1
+ import { OperationNode } from './operation-node.js';
2
+ export declare type SetOperator = 'union' | 'intersect' | 'except';
3
+ export interface SetOperationNode extends OperationNode {
4
+ kind: 'SetOperationNode';
5
+ operator: SetOperator;
6
+ expression: OperationNode;
7
+ all: boolean;
8
+ }
9
+ /**
10
+ * @internal
11
+ */
12
+ export declare const SetOperationNode: Readonly<{
13
+ is(node: OperationNode): node is SetOperationNode;
14
+ create(operator: SetOperator, expression: OperationNode, all: boolean): SetOperationNode;
15
+ }>;
@@ -1,18 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UnionNode = void 0;
3
+ exports.SetOperationNode = void 0;
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
5
  /**
6
6
  * @internal
7
7
  */
8
- exports.UnionNode = (0, object_utils_js_1.freeze)({
8
+ exports.SetOperationNode = (0, object_utils_js_1.freeze)({
9
9
  is(node) {
10
- return node.kind === 'UnionNode';
10
+ return node.kind === 'SetOperationNode';
11
11
  },
12
- create(union, all) {
12
+ create(operator, expression, all) {
13
13
  return (0, object_utils_js_1.freeze)({
14
- kind: 'UnionNode',
15
- union,
14
+ kind: 'SetOperationNode',
15
+ operator,
16
+ expression,
16
17
  all,
17
18
  });
18
19
  },
@@ -0,0 +1,3 @@
1
+ import { ColumnNode } from './column-node.js';
2
+ import { ReferenceNode } from './reference-node.js';
3
+ export declare type SimpleReferenceExpressionNode = ColumnNode | ReferenceNode;
@@ -0,0 +1,13 @@
1
+ import { OperationNode } from './operation-node.js';
2
+ export interface UnaryOperationNode extends OperationNode {
3
+ readonly kind: 'UnaryOperationNode';
4
+ readonly operator: OperationNode;
5
+ readonly operand: OperationNode;
6
+ }
7
+ /**
8
+ * @internal
9
+ */
10
+ export declare const UnaryOperationNode: Readonly<{
11
+ is(node: OperationNode): node is UnaryOperationNode;
12
+ create(operator: OperationNode, operand: OperationNode): UnaryOperationNode;
13
+ }>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnaryOperationNode = void 0;
4
+ const object_utils_js_1 = require("../util/object-utils.js");
5
+ /**
6
+ * @internal
7
+ */
8
+ exports.UnaryOperationNode = (0, object_utils_js_1.freeze)({
9
+ is(node) {
10
+ return node.kind === 'UnaryOperationNode';
11
+ },
12
+ create(operator, operand) {
13
+ return (0, object_utils_js_1.freeze)({
14
+ kind: 'UnaryOperationNode',
15
+ operator,
16
+ operand,
17
+ });
18
+ },
19
+ });
@@ -1,7 +1,6 @@
1
1
  import { ColumnUpdateNode } from './column-update-node.js';
2
2
  import { JoinNode } from './join-node.js';
3
3
  import { OperationNode } from './operation-node.js';
4
- import { TableExpressionNode } from './operation-node-utils.js';
5
4
  import { PrimitiveValueListNode } from './primitive-value-list-node.js';
6
5
  import { ReturningNode } from './returning-node.js';
7
6
  import { ValueListNode } from './value-list-node.js';
@@ -12,7 +11,7 @@ import { ExplainNode } from './explain-node.js';
12
11
  export declare type UpdateValuesNode = ValueListNode | PrimitiveValueListNode;
13
12
  export interface UpdateQueryNode extends OperationNode {
14
13
  readonly kind: 'UpdateQueryNode';
15
- readonly table: TableExpressionNode;
14
+ readonly table: OperationNode;
16
15
  readonly from?: FromNode;
17
16
  readonly joins?: ReadonlyArray<JoinNode>;
18
17
  readonly where?: WhereNode;
@@ -26,8 +25,8 @@ export interface UpdateQueryNode extends OperationNode {
26
25
  */
27
26
  export declare const UpdateQueryNode: Readonly<{
28
27
  is(node: OperationNode): node is UpdateQueryNode;
29
- create(table: TableExpressionNode, withNode?: WithNode): UpdateQueryNode;
30
- cloneWithFromItems(updateQuery: UpdateQueryNode, fromItems: ReadonlyArray<TableExpressionNode>): UpdateQueryNode;
28
+ create(table: OperationNode, withNode?: WithNode): UpdateQueryNode;
29
+ cloneWithFromItems(updateQuery: UpdateQueryNode, fromItems: ReadonlyArray<OperationNode>): UpdateQueryNode;
31
30
  cloneWithUpdates(updateQuery: UpdateQueryNode, updates: ReadonlyArray<ColumnUpdateNode>): UpdateQueryNode;
32
31
  cloneWithExplain(updateQuery: UpdateQueryNode, explain: ExplainNode): UpdateQueryNode;
33
32
  }>;
@@ -1,18 +1,12 @@
1
- import { DefaultInsertValueNode } from './default-insert-value-node.js';
2
1
  import { OperationNode } from './operation-node.js';
3
- import { RawNode } from './raw-node.js';
4
- import { ReferenceNode } from './reference-node.js';
5
- import { SelectQueryNode } from './select-query-node.js';
6
- import { ValueNode } from './value-node.js';
7
- export declare type ListNodeItem = ValueNode | ReferenceNode | DefaultInsertValueNode | SelectQueryNode | RawNode;
8
2
  export interface ValueListNode extends OperationNode {
9
3
  readonly kind: 'ValueListNode';
10
- readonly values: ReadonlyArray<ListNodeItem>;
4
+ readonly values: ReadonlyArray<OperationNode>;
11
5
  }
12
6
  /**
13
7
  * @internal
14
8
  */
15
9
  export declare const ValueListNode: Readonly<{
16
10
  is(node: OperationNode): node is ValueListNode;
17
- create(values: ReadonlyArray<ListNodeItem>): ValueListNode;
11
+ create(values: ReadonlyArray<OperationNode>): ValueListNode;
18
12
  }>;
@@ -1,14 +1,13 @@
1
- import { FilterExpressionNode } from './operation-node-utils.js';
2
1
  import { OperationNode } from './operation-node.js';
3
2
  export interface WhereNode extends OperationNode {
4
3
  readonly kind: 'WhereNode';
5
- readonly where: FilterExpressionNode;
4
+ readonly where: OperationNode;
6
5
  }
7
6
  /**
8
7
  * @internal
9
8
  */
10
9
  export declare const WhereNode: Readonly<{
11
10
  is(node: OperationNode): node is WhereNode;
12
- create(filter: FilterExpressionNode): WhereNode;
13
- cloneWithFilter(whereNode: WhereNode, op: 'And' | 'Or', filter: FilterExpressionNode): WhereNode;
11
+ create(filter: OperationNode): WhereNode;
12
+ cloneWithOperation(whereNode: WhereNode, operator: 'And' | 'Or', operation: OperationNode): WhereNode;
14
13
  }>;
@@ -17,12 +17,12 @@ exports.WhereNode = (0, object_utils_js_1.freeze)({
17
17
  where: filter,
18
18
  });
19
19
  },
20
- cloneWithFilter(whereNode, op, filter) {
20
+ cloneWithOperation(whereNode, operator, operation) {
21
21
  return (0, object_utils_js_1.freeze)({
22
22
  ...whereNode,
23
- where: op === 'And'
24
- ? and_node_js_1.AndNode.create(whereNode.where, filter)
25
- : or_node_js_1.OrNode.create(whereNode.where, filter),
23
+ where: operator === 'And'
24
+ ? and_node_js_1.AndNode.create(whereNode.where, operation)
25
+ : or_node_js_1.OrNode.create(whereNode.where, operation),
26
26
  });
27
27
  },
28
28
  });
@@ -0,0 +1,20 @@
1
+ import { BinaryOperationNode } from '../operation-node/binary-operation-node.js';
2
+ import { ComparisonOperator } from '../operation-node/operator-node.js';
3
+ import { ExtractTypeFromReferenceExpression, ReferenceExpression } from './reference-parser.js';
4
+ import { ValueExpression, ValueExpressionOrList } from './value-parser.js';
5
+ import { WhereInterface } from '../query-builder/where-interface.js';
6
+ import { HavingInterface } from '../query-builder/having-interface.js';
7
+ import { OperationNode } from '../operation-node/operation-node.js';
8
+ import { Expression } from '../expression/expression.js';
9
+ export declare type OperandValueExpression<DB, TB extends keyof DB, RE> = ValueExpression<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
10
+ export declare type OperandValueExpressionOrList<DB, TB extends keyof DB, RE> = ValueExpressionOrList<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
11
+ export declare type WhereGrouper<DB, TB extends keyof DB> = (qb: WhereInterface<DB, TB>) => WhereInterface<DB, TB>;
12
+ export declare type HavingGrouper<DB, TB extends keyof DB> = (qb: HavingInterface<DB, TB>) => HavingInterface<DB, TB>;
13
+ export declare type ComparisonOperatorExpression = ComparisonOperator | Expression<any>;
14
+ declare type FilterExpressionType = 'where' | 'having' | 'on';
15
+ export declare function parseWhere(args: any[]): OperationNode;
16
+ export declare function parseHaving(args: any[]): OperationNode;
17
+ export declare function parseOn(args: any[]): OperationNode;
18
+ export declare function parseReferentialFilter(leftOperand: ReferenceExpression<any, any>, operator: ComparisonOperatorExpression, rightOperand: ReferenceExpression<any, any>): BinaryOperationNode;
19
+ export declare function parseFilterExpression(type: FilterExpressionType, args: any[]): OperationNode;
20
+ export {};
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseFilterExpression = exports.parseReferentialFilter = exports.parseOn = exports.parseHaving = exports.parseWhere = void 0;
4
+ const binary_operation_node_js_1 = require("../operation-node/binary-operation-node.js");
5
+ const object_utils_js_1 = require("../util/object-utils.js");
6
+ const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
7
+ const raw_node_js_1 = require("../operation-node/raw-node.js");
8
+ const operator_node_js_1 = require("../operation-node/operator-node.js");
9
+ const parens_node_js_1 = require("../operation-node/parens-node.js");
10
+ const reference_parser_js_1 = require("./reference-parser.js");
11
+ const value_parser_js_1 = require("./value-parser.js");
12
+ const value_node_js_1 = require("../operation-node/value-node.js");
13
+ const parse_utils_js_1 = require("./parse-utils.js");
14
+ function parseWhere(args) {
15
+ return parseFilterExpression('where', args);
16
+ }
17
+ exports.parseWhere = parseWhere;
18
+ function parseHaving(args) {
19
+ return parseFilterExpression('having', args);
20
+ }
21
+ exports.parseHaving = parseHaving;
22
+ function parseOn(args) {
23
+ return parseFilterExpression('on', args);
24
+ }
25
+ exports.parseOn = parseOn;
26
+ function parseReferentialFilter(leftOperand, operator, rightOperand) {
27
+ return binary_operation_node_js_1.BinaryOperationNode.create((0, reference_parser_js_1.parseReferenceExpression)(leftOperand), parseComparisonOperatorExpression(operator), (0, reference_parser_js_1.parseReferenceExpression)(rightOperand));
28
+ }
29
+ exports.parseReferentialFilter = parseReferentialFilter;
30
+ function parseFilterExpression(type, args) {
31
+ if (args.length === 3) {
32
+ return parseFilter(args[0], args[1], args[2]);
33
+ }
34
+ if (args.length === 1) {
35
+ return parseOneArgFilterExpression(type, args[0]);
36
+ }
37
+ throw createFilterExpressionError(type, args);
38
+ }
39
+ exports.parseFilterExpression = parseFilterExpression;
40
+ function parseFilter(leftOperand, operator, rightOperand) {
41
+ if ((operator === 'is' || operator === 'is not') &&
42
+ ((0, object_utils_js_1.isNull)(rightOperand) || (0, object_utils_js_1.isBoolean)(rightOperand))) {
43
+ return parseIs(leftOperand, operator, rightOperand);
44
+ }
45
+ return binary_operation_node_js_1.BinaryOperationNode.create((0, reference_parser_js_1.parseReferenceExpression)(leftOperand), parseComparisonOperatorExpression(operator), (0, value_parser_js_1.parseValueExpressionOrList)(rightOperand));
46
+ }
47
+ function parseIs(leftOperand, operator, rightOperand) {
48
+ return binary_operation_node_js_1.BinaryOperationNode.create((0, reference_parser_js_1.parseReferenceExpression)(leftOperand), parseComparisonOperatorExpression(operator), value_node_js_1.ValueNode.createImmediate(rightOperand));
49
+ }
50
+ function parseComparisonOperatorExpression(operator) {
51
+ if ((0, object_utils_js_1.isString)(operator) && operator_node_js_1.COMPARISON_OPERATORS.includes(operator)) {
52
+ return operator_node_js_1.OperatorNode.create(operator);
53
+ }
54
+ else if ((0, operation_node_source_js_1.isOperationNodeSource)(operator)) {
55
+ return operator.toOperationNode();
56
+ }
57
+ throw new Error(`invalid comparison operator ${JSON.stringify(operator)} passed to a filter method`);
58
+ }
59
+ function parseOneArgFilterExpression(type, arg) {
60
+ if ((0, object_utils_js_1.isFunction)(arg)) {
61
+ return GROUP_PARSERS[type](arg);
62
+ }
63
+ else if ((0, operation_node_source_js_1.isOperationNodeSource)(arg)) {
64
+ const node = arg.toOperationNode();
65
+ if (raw_node_js_1.RawNode.is(node)) {
66
+ return node;
67
+ }
68
+ }
69
+ throw createFilterExpressionError(type, arg);
70
+ }
71
+ function createFilterExpressionError(type, args) {
72
+ return new Error(`invalid arguments passed to a '${type}' method: ${JSON.stringify(args)}`);
73
+ }
74
+ const GROUP_PARSERS = (0, object_utils_js_1.freeze)({
75
+ where(callback) {
76
+ const query = callback((0, parse_utils_js_1.createSelectQueryBuilder)());
77
+ const queryNode = query.toOperationNode();
78
+ if (!queryNode.where) {
79
+ throw new Error('no `where` methods called inside a group callback');
80
+ }
81
+ return parens_node_js_1.ParensNode.create(queryNode.where.where);
82
+ },
83
+ having(callback) {
84
+ const query = callback((0, parse_utils_js_1.createSelectQueryBuilder)());
85
+ const queryNode = query.toOperationNode();
86
+ if (!queryNode.having) {
87
+ throw new Error('no `having` methods called inside a group callback');
88
+ }
89
+ return parens_node_js_1.ParensNode.create(queryNode.having.having);
90
+ },
91
+ on(callback) {
92
+ const joinBuilder = callback((0, parse_utils_js_1.createJoinBuilder)('InnerJoin', 'table'));
93
+ const joinNode = joinBuilder.toOperationNode();
94
+ if (!joinNode.on) {
95
+ throw new Error('no `on` methods called inside a group callback');
96
+ }
97
+ return parens_node_js_1.ParensNode.create(joinNode.on.on);
98
+ },
99
+ });
@@ -0,0 +1,4 @@
1
+ import { RawNode } from '../operation-node/raw-node.js';
2
+ import { ExtractTypeFromReferenceExpression, ReferenceExpression } from './reference-parser.js';
3
+ export declare type CoalesceReferenceExpressionList<DB, TB extends keyof DB, RE extends unknown[], O = never> = RE extends [] ? O : RE extends [infer L, ...infer R] ? L extends ReferenceExpression<any, any> ? null extends ExtractTypeFromReferenceExpression<DB, TB, L> ? CoalesceReferenceExpressionList<DB, TB, R extends ReferenceExpression<any, any>[] ? R : never, O | ExtractTypeFromReferenceExpression<DB, TB, L>> : Exclude<O, null> | ExtractTypeFromReferenceExpression<DB, TB, L> : never : never;
4
+ export declare function parseCoalesce(values: ReferenceExpression<any, any>[]): RawNode;