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
@@ -6,7 +6,6 @@ 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';
@@ -19,7 +18,7 @@ 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;
@@ -38,17 +37,17 @@ export interface SelectQueryNode extends OperationNode {
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;
49
+ cloneWithHaving(selectNode: SelectQueryNode, operation: OperationNode): SelectQueryNode;
50
+ cloneWithOrHaving(selectNode: SelectQueryNode, operation: OperationNode): SelectQueryNode;
52
51
  cloneWithSetOperation(selectNode: SelectQueryNode, setOperation: SetOperationNode): SelectQueryNode;
53
52
  cloneWithExplain(selectNode: SelectQueryNode, explain: ExplainNode): SelectQueryNode;
54
53
  }>;
@@ -26,12 +26,12 @@ export const SelectQueryNode = freeze({
26
26
  : freeze(selections),
27
27
  });
28
28
  },
29
- cloneWithDistinctOnSelections(select, selections) {
29
+ cloneWithDistinctOn(select, expressions) {
30
30
  return freeze({
31
31
  ...select,
32
- distinctOnSelections: select.distinctOnSelections
33
- ? freeze([...select.distinctOnSelections, ...selections])
34
- : freeze(selections),
32
+ distinctOn: select.distinctOn
33
+ ? freeze([...select.distinctOn, ...expressions])
34
+ : freeze(expressions),
35
35
  });
36
36
  },
37
37
  cloneWithFrontModifier(select, modifier) {
@@ -78,20 +78,20 @@ export const SelectQueryNode = freeze({
78
78
  offset,
79
79
  });
80
80
  },
81
- cloneWithHaving(selectNode, filter) {
81
+ cloneWithHaving(selectNode, operation) {
82
82
  return freeze({
83
83
  ...selectNode,
84
84
  having: selectNode.having
85
- ? HavingNode.cloneWithFilter(selectNode.having, 'And', filter)
86
- : HavingNode.create(filter),
85
+ ? HavingNode.cloneWithOperation(selectNode.having, 'And', operation)
86
+ : HavingNode.create(operation),
87
87
  });
88
88
  },
89
- cloneWithOrHaving(selectNode, filter) {
89
+ cloneWithOrHaving(selectNode, operation) {
90
90
  return freeze({
91
91
  ...selectNode,
92
92
  having: selectNode.having
93
- ? HavingNode.cloneWithFilter(selectNode.having, 'Or', filter)
94
- : HavingNode.create(filter),
93
+ ? HavingNode.cloneWithOperation(selectNode.having, 'Or', operation)
94
+ : HavingNode.create(operation),
95
95
  });
96
96
  },
97
97
  cloneWithSetOperation(selectNode, setOperation) {
@@ -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;
@@ -1,12 +1,9 @@
1
1
  import { OperationNode } from './operation-node.js';
2
- import { RawNode } from './raw-node.js';
3
- import { SelectQueryNode } from './select-query-node.js';
4
- export declare type SetOperationExpressionNode = SelectQueryNode | RawNode;
5
2
  export declare type SetOperator = 'union' | 'intersect' | 'except';
6
3
  export interface SetOperationNode extends OperationNode {
7
4
  kind: 'SetOperationNode';
8
5
  operator: SetOperator;
9
- expression: SetOperationExpressionNode;
6
+ expression: OperationNode;
10
7
  all: boolean;
11
8
  }
12
9
  /**
@@ -14,5 +11,5 @@ export interface SetOperationNode extends OperationNode {
14
11
  */
15
12
  export declare const SetOperationNode: Readonly<{
16
13
  is(node: OperationNode): node is SetOperationNode;
17
- create(operator: SetOperator, expression: SetOperationExpressionNode, all: boolean): SetOperationNode;
14
+ create(operator: SetOperator, expression: OperationNode, all: boolean): SetOperationNode;
18
15
  }>;
@@ -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,2 @@
1
+ /// <reference types="./simple-reference-expression-node.d.ts" />
2
+ export {};
@@ -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,17 @@
1
+ /// <reference types="./unary-operation-node.d.ts" />
2
+ import { freeze } from '../util/object-utils.js';
3
+ /**
4
+ * @internal
5
+ */
6
+ export const UnaryOperationNode = freeze({
7
+ is(node) {
8
+ return node.kind === 'UnaryOperationNode';
9
+ },
10
+ create(operator, operand) {
11
+ return freeze({
12
+ kind: 'UnaryOperationNode',
13
+ operator,
14
+ operand,
15
+ });
16
+ },
17
+ });
@@ -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,19 +1,12 @@
1
- import { AggregateFunctionNode } from './aggregate-function-node.js';
2
- import { DefaultInsertValueNode } from './default-insert-value-node.js';
3
1
  import { OperationNode } from './operation-node.js';
4
- import { RawNode } from './raw-node.js';
5
- import { ReferenceNode } from './reference-node.js';
6
- import { SelectQueryNode } from './select-query-node.js';
7
- import { ValueNode } from './value-node.js';
8
- export declare type ListNodeItem = ValueNode | ReferenceNode | DefaultInsertValueNode | SelectQueryNode | RawNode | AggregateFunctionNode;
9
2
  export interface ValueListNode extends OperationNode {
10
3
  readonly kind: 'ValueListNode';
11
- readonly values: ReadonlyArray<ListNodeItem>;
4
+ readonly values: ReadonlyArray<OperationNode>;
12
5
  }
13
6
  /**
14
7
  * @internal
15
8
  */
16
9
  export declare const ValueListNode: Readonly<{
17
10
  is(node: OperationNode): node is ValueListNode;
18
- create(values: ReadonlyArray<ListNodeItem>): ValueListNode;
11
+ create(values: ReadonlyArray<OperationNode>): ValueListNode;
19
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
  }>;
@@ -15,12 +15,12 @@ export const WhereNode = freeze({
15
15
  where: filter,
16
16
  });
17
17
  },
18
- cloneWithFilter(whereNode, op, filter) {
18
+ cloneWithOperation(whereNode, operator, operation) {
19
19
  return freeze({
20
20
  ...whereNode,
21
- where: op === 'And'
22
- ? AndNode.create(whereNode.where, filter)
23
- : OrNode.create(whereNode.where, filter),
21
+ where: operator === 'And'
22
+ ? AndNode.create(whereNode.where, operation)
23
+ : OrNode.create(whereNode.where, operation),
24
24
  });
25
25
  },
26
26
  });
@@ -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,92 @@
1
+ /// <reference types="./binary-operation-parser.d.ts" />
2
+ import { BinaryOperationNode } from '../operation-node/binary-operation-node.js';
3
+ import { freeze, isBoolean, isFunction, isNull, isString, } from '../util/object-utils.js';
4
+ import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
5
+ import { RawNode } from '../operation-node/raw-node.js';
6
+ import { OperatorNode, COMPARISON_OPERATORS, } from '../operation-node/operator-node.js';
7
+ import { ParensNode } from '../operation-node/parens-node.js';
8
+ import { parseReferenceExpression, } from './reference-parser.js';
9
+ import { parseValueExpressionOrList, } from './value-parser.js';
10
+ import { ValueNode } from '../operation-node/value-node.js';
11
+ import { createJoinBuilder, createSelectQueryBuilder } from './parse-utils.js';
12
+ export function parseWhere(args) {
13
+ return parseFilterExpression('where', args);
14
+ }
15
+ export function parseHaving(args) {
16
+ return parseFilterExpression('having', args);
17
+ }
18
+ export function parseOn(args) {
19
+ return parseFilterExpression('on', args);
20
+ }
21
+ export function parseReferentialFilter(leftOperand, operator, rightOperand) {
22
+ return BinaryOperationNode.create(parseReferenceExpression(leftOperand), parseComparisonOperatorExpression(operator), parseReferenceExpression(rightOperand));
23
+ }
24
+ export function parseFilterExpression(type, args) {
25
+ if (args.length === 3) {
26
+ return parseFilter(args[0], args[1], args[2]);
27
+ }
28
+ if (args.length === 1) {
29
+ return parseOneArgFilterExpression(type, args[0]);
30
+ }
31
+ throw createFilterExpressionError(type, args);
32
+ }
33
+ function parseFilter(leftOperand, operator, rightOperand) {
34
+ if ((operator === 'is' || operator === 'is not') &&
35
+ (isNull(rightOperand) || isBoolean(rightOperand))) {
36
+ return parseIs(leftOperand, operator, rightOperand);
37
+ }
38
+ return BinaryOperationNode.create(parseReferenceExpression(leftOperand), parseComparisonOperatorExpression(operator), parseValueExpressionOrList(rightOperand));
39
+ }
40
+ function parseIs(leftOperand, operator, rightOperand) {
41
+ return BinaryOperationNode.create(parseReferenceExpression(leftOperand), parseComparisonOperatorExpression(operator), ValueNode.createImmediate(rightOperand));
42
+ }
43
+ function parseComparisonOperatorExpression(operator) {
44
+ if (isString(operator) && COMPARISON_OPERATORS.includes(operator)) {
45
+ return OperatorNode.create(operator);
46
+ }
47
+ else if (isOperationNodeSource(operator)) {
48
+ return operator.toOperationNode();
49
+ }
50
+ throw new Error(`invalid comparison operator ${JSON.stringify(operator)} passed to a filter method`);
51
+ }
52
+ function parseOneArgFilterExpression(type, arg) {
53
+ if (isFunction(arg)) {
54
+ return GROUP_PARSERS[type](arg);
55
+ }
56
+ else if (isOperationNodeSource(arg)) {
57
+ const node = arg.toOperationNode();
58
+ if (RawNode.is(node)) {
59
+ return node;
60
+ }
61
+ }
62
+ throw createFilterExpressionError(type, arg);
63
+ }
64
+ function createFilterExpressionError(type, args) {
65
+ return new Error(`invalid arguments passed to a '${type}' method: ${JSON.stringify(args)}`);
66
+ }
67
+ const GROUP_PARSERS = freeze({
68
+ where(callback) {
69
+ const query = callback(createSelectQueryBuilder());
70
+ const queryNode = query.toOperationNode();
71
+ if (!queryNode.where) {
72
+ throw new Error('no `where` methods called inside a group callback');
73
+ }
74
+ return ParensNode.create(queryNode.where.where);
75
+ },
76
+ having(callback) {
77
+ const query = callback(createSelectQueryBuilder());
78
+ const queryNode = query.toOperationNode();
79
+ if (!queryNode.having) {
80
+ throw new Error('no `having` methods called inside a group callback');
81
+ }
82
+ return ParensNode.create(queryNode.having.having);
83
+ },
84
+ on(callback) {
85
+ const joinBuilder = callback(createJoinBuilder('InnerJoin', 'table'));
86
+ const joinNode = joinBuilder.toOperationNode();
87
+ if (!joinNode.on) {
88
+ throw new Error('no `on` methods called inside a group callback');
89
+ }
90
+ return ParensNode.create(joinNode.on.on);
91
+ },
92
+ });
@@ -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;
@@ -0,0 +1,8 @@
1
+ /// <reference types="./coalesce-parser.d.ts" />
2
+ import { RawNode } from '../operation-node/raw-node.js';
3
+ import { parseReferenceExpressionOrList, } from './reference-parser.js';
4
+ export function parseCoalesce(values) {
5
+ return RawNode.create(values.length > 1
6
+ ? ['coalesce(', ...new Array(values.length - 1).fill(', '), ')']
7
+ : ['coalesce(', ')'], parseReferenceExpressionOrList(values));
8
+ }
@@ -1,5 +1,5 @@
1
- import { ColumnDataType, DataTypeNode } from '../operation-node/data-type-node.js';
2
- import { RawNode } from '../operation-node/raw-node.js';
3
- import { AnyRawBuilder } from '../util/type-utils.js';
4
- export declare type DataTypeExpression = ColumnDataType | AnyRawBuilder;
5
- export declare function parseDataTypeExpression(dataType: DataTypeExpression): DataTypeNode | RawNode;
1
+ import { Expression } from '../expression/expression.js';
2
+ import { ColumnDataType } from '../operation-node/data-type-node.js';
3
+ import { OperationNode } from '../operation-node/operation-node.js';
4
+ export declare type DataTypeExpression = ColumnDataType | Expression<any>;
5
+ export declare function parseDataTypeExpression(dataType: DataTypeExpression): OperationNode;
@@ -1,5 +1,4 @@
1
- import { RawNode } from '../operation-node/raw-node.js';
2
- import { ValueNode } from '../operation-node/value-node.js';
3
- import { RawBuilder } from '../raw-builder/raw-builder.js';
4
- export declare type DefaultValueExpression = unknown | RawBuilder;
5
- export declare function parseDefaultValueExpression(value: DefaultValueExpression): ValueNode | RawNode;
1
+ import { Expression } from '../expression/expression.js';
2
+ import { OperationNode } from '../operation-node/operation-node.js';
3
+ export declare type DefaultValueExpression = unknown | Expression<unknown>;
4
+ export declare function parseDefaultValueExpression(value: DefaultValueExpression): OperationNode;
@@ -1,8 +1,8 @@
1
1
  /// <reference types="./default-value-parser.d.ts" />
2
+ import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
2
3
  import { ValueNode } from '../operation-node/value-node.js';
3
- import { RawBuilder } from '../raw-builder/raw-builder.js';
4
4
  export function parseDefaultValueExpression(value) {
5
- return value instanceof RawBuilder
5
+ return isOperationNodeSource(value)
6
6
  ? value.toOperationNode()
7
7
  : ValueNode.createImmediate(value);
8
8
  }
@@ -0,0 +1,10 @@
1
+ import { AliasedExpression, Expression } from '../expression/expression.js';
2
+ import { AliasNode } from '../operation-node/alias-node.js';
3
+ import { OperationNode } from '../operation-node/operation-node.js';
4
+ import { ExpressionBuilder } from '../query-builder/expression-builder.js';
5
+ import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
6
+ export declare type ExpressionOrFactory<DB, TB extends keyof DB, V> = SelectQueryBuilder<any, any, Record<string, V>> | ((eb: ExpressionBuilder<DB, TB>) => SelectQueryBuilder<any, any, Record<string, V>>) | Expression<V> | ((eb: ExpressionBuilder<DB, TB>) => Expression<V>);
7
+ export declare type AliasedExpressionOrFactory<DB, TB extends keyof DB> = AliasedExpression<any, any> | ((qb: ExpressionBuilder<DB, TB>) => AliasedExpression<any, any>);
8
+ export declare function parseExpression(exp: ExpressionOrFactory<any, any, any>): OperationNode;
9
+ export declare function parseAliasedExpression(exp: AliasedExpressionOrFactory<any, any>): AliasNode;
10
+ export declare function isExpressionOrFactory(obj: unknown): obj is ExpressionOrFactory<any, any, any>;
@@ -1,8 +1,9 @@
1
- /// <reference types="./complex-expression-parser.d.ts" />
1
+ /// <reference types="./expression-parser.d.ts" />
2
+ import { isExpression, } from '../expression/expression.js';
2
3
  import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
3
4
  import { isFunction } from '../util/object-utils.js';
4
5
  import { createExpressionBuilder } from './parse-utils.js';
5
- export function parseComplexExpression(exp) {
6
+ export function parseExpression(exp) {
6
7
  if (isOperationNodeSource(exp)) {
7
8
  return exp.toOperationNode();
8
9
  }
@@ -11,7 +12,7 @@ export function parseComplexExpression(exp) {
11
12
  }
12
13
  throw new Error(`invalid expression: ${JSON.stringify(exp)}`);
13
14
  }
14
- export function parseAliasedComplexExpression(exp) {
15
+ export function parseAliasedExpression(exp) {
15
16
  if (isOperationNodeSource(exp)) {
16
17
  return exp.toOperationNode();
17
18
  }
@@ -20,6 +21,6 @@ export function parseAliasedComplexExpression(exp) {
20
21
  }
21
22
  throw new Error(`invalid aliased expression: ${JSON.stringify(exp)}`);
22
23
  }
23
- export function isComplexExpression(obj) {
24
- return isOperationNodeSource(obj) || isFunction(obj);
24
+ export function isExpressionOrFactory(obj) {
25
+ return isExpression(obj) || isFunction(obj);
25
26
  }
@@ -0,0 +1,2 @@
1
+ import { SchemableIdentifierNode } from '../operation-node/schemable-identifier-node.js';
2
+ export declare function parseSchemableIdentifier(id: string): SchemableIdentifierNode;
@@ -0,0 +1,20 @@
1
+ /// <reference types="./identifier-parser.d.ts" />
2
+ import { SchemableIdentifierNode } from '../operation-node/schemable-identifier-node.js';
3
+ export function parseSchemableIdentifier(id) {
4
+ const SCHEMA_SEPARATOR = '.';
5
+ if (id.includes(SCHEMA_SEPARATOR)) {
6
+ const parts = id.split(SCHEMA_SEPARATOR).map(trim);
7
+ if (parts.length === 2) {
8
+ return SchemableIdentifierNode.createWithSchema(parts[0], parts[1]);
9
+ }
10
+ else {
11
+ throw new Error(`invalid schemable identifier ${id}`);
12
+ }
13
+ }
14
+ else {
15
+ return SchemableIdentifierNode.create(id);
16
+ }
17
+ }
18
+ function trim(str) {
19
+ return str.trim();
20
+ }
@@ -5,7 +5,7 @@ import { NonNullableInsertKeys, NullableInsertKeys, InsertType } from '../util/c
5
5
  export declare type InsertObject<DB, TB extends keyof DB> = {
6
6
  [C in NonNullableInsertKeys<DB[TB]>]: ValueExpression<DB, TB, InsertType<DB[TB][C]>>;
7
7
  } & {
8
- [C in NullableInsertKeys<DB[TB]>]?: ValueExpression<DB, TB, InsertType<DB[TB][C]>>;
8
+ [C in NullableInsertKeys<DB[TB]>]?: ValueExpression<DB, TB, InsertType<DB[TB][C]>> | undefined;
9
9
  };
10
10
  export declare type InsertObjectOrList<DB, TB extends keyof DB> = InsertObject<DB, TB> | ReadonlyArray<InsertObject<DB, TB>>;
11
11
  export declare function parseInsertObjectOrList(args: InsertObjectOrList<any, any>): [ReadonlyArray<ColumnNode>, ValuesNode];
@@ -5,7 +5,7 @@ import { ValueListNode } from '../operation-node/value-list-node.js';
5
5
  import { freeze, isUndefined } from '../util/object-utils.js';
6
6
  import { parseValueExpression } from './value-parser.js';
7
7
  import { ValuesNode } from '../operation-node/values-node.js';
8
- import { isComplexExpression } from './complex-expression-parser.js';
8
+ import { isExpressionOrFactory } from './expression-parser.js';
9
9
  import { DefaultInsertValueNode } from '../operation-node/default-insert-value-node.js';
10
10
  export function parseInsertObjectOrList(args) {
11
11
  return parseInsertColumnsAndValues(Array.isArray(args) ? args : [args]);
@@ -39,7 +39,7 @@ function parseRowValues(row, columns) {
39
39
  const columnIdx = columns.get(col);
40
40
  if (columnIdx !== undefined) {
41
41
  const value = row[col];
42
- if (isComplexExpression(value)) {
42
+ if (isExpressionOrFactory(value)) {
43
43
  complexColumn = true;
44
44
  }
45
45
  rowValues[columnIdx] = value;
@@ -1,7 +1,7 @@
1
1
  /// <reference types="./join-parser.d.ts" />
2
2
  import { JoinNode } from '../operation-node/join-node.js';
3
3
  import { parseTableExpression, } from './table-parser.js';
4
- import { parseReferenceFilter } from './filter-parser.js';
4
+ import { parseReferentialFilter } from './binary-operation-parser.js';
5
5
  import { createJoinBuilder } from './parse-utils.js';
6
6
  export function parseJoin(joinType, args) {
7
7
  if (args.length === 3) {
@@ -19,5 +19,5 @@ function parseCallbackJoin(joinType, from, callback) {
19
19
  return joinBuilder.toOperationNode();
20
20
  }
21
21
  function parseSingleOnJoin(joinType, from, lhsColumn, rhsColumn) {
22
- return JoinNode.createWithOn(joinType, parseTableExpression(from), parseReferenceFilter(lhsColumn, '=', rhsColumn));
22
+ return JoinNode.createWithOn(joinType, parseTableExpression(from), parseReferentialFilter(lhsColumn, '=', rhsColumn));
23
23
  }
@@ -1,7 +1,7 @@
1
+ import { Expression } from '../expression/expression.js';
1
2
  import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
2
- import { AnyRawBuilder } from '../util/type-utils.js';
3
3
  import { ReferenceExpression } from './reference-parser.js';
4
4
  export declare type OrderByDirection = 'asc' | 'desc';
5
5
  export declare type OrderByExpression<DB, TB extends keyof DB, O> = ReferenceExpression<DB, TB> | (keyof O & string);
6
- export declare type OrderByDirectionExpression = OrderByDirection | AnyRawBuilder;
6
+ export declare type OrderByDirectionExpression = OrderByDirection | Expression<any>;
7
7
  export declare function parseOrderBy(orderBy: OrderByExpression<any, any, any>, direction?: OrderByDirectionExpression): OrderByItemNode;
@@ -1,22 +1,22 @@
1
1
  import { AliasNode } from '../operation-node/alias-node.js';
2
2
  import { ColumnNode } from '../operation-node/column-node.js';
3
- import { ReferenceExpressionNode } from '../operation-node/operation-node-utils.js';
4
- import { ReferenceNode } from '../operation-node/reference-node.js';
5
3
  import { AnyColumn, AnyColumnWithTable, ExtractColumnType, ValueType } from '../util/type-utils.js';
6
- import { RawBuilder } from '../raw-builder/raw-builder.js';
7
4
  import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
8
- import { ComplexExpression } from './complex-expression-parser.js';
5
+ import { ExpressionOrFactory } from './expression-parser.js';
9
6
  import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
10
7
  import { SelectType } from '../util/column-type.js';
11
- import { AggregateFunctionBuilder } from '../query-builder/aggregate-function-builder.js';
12
- export declare type ReferenceExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | DynamicReferenceBuilder<any> | ComplexExpression<DB, TB>;
13
- export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
8
+ import { OperationNode } from '../operation-node/operation-node.js';
9
+ import { Expression } from '../expression/expression.js';
10
+ import { SimpleReferenceExpressionNode } from '../operation-node/simple-reference-expression-node.js';
14
11
  export declare type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
15
- export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? SelectType<ExtractTypeFromStringReference<DB, TB, RE>> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends SelectQueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => SelectQueryBuilder<any, any, infer O> ? ValueType<O> : RE extends AggregateFunctionBuilder<any, any, infer O> ? O : RE extends (qb: any) => AggregateFunctionBuilder<any, any, infer O> ? O : unknown;
16
- declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string> = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, RE> : unknown;
17
- export declare function parseReferenceExpressionOrList(arg: ReferenceExpressionOrList<any, any>): ReferenceExpressionNode[];
18
- export declare function parseReferenceExpression(exp: ReferenceExpression<any, any>): ReferenceExpressionNode;
19
- export declare function parseStringReference(ref: string): ColumnNode | ReferenceNode;
20
- export declare function parseAliasedStringReference(ref: string): ColumnNode | ReferenceNode | AliasNode;
12
+ export declare type SimpleReferenceExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | DynamicReferenceBuilder<any>;
13
+ export declare type ReferenceExpression<DB, TB extends keyof DB> = SimpleReferenceExpression<DB, TB> | ExpressionOrFactory<DB, TB, any>;
14
+ export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
15
+ export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE, DV = unknown> = RE extends string ? SelectType<ExtractTypeFromStringReference<DB, TB, RE>> : RE extends SelectQueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => SelectQueryBuilder<any, any, infer O> ? ValueType<O> : RE extends Expression<infer O> ? O : RE extends (qb: any) => Expression<infer O> ? O : DV;
16
+ export declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string, DV = unknown> = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, RE> : DV;
17
+ export declare function parseSimpleReferenceExpression(exp: SimpleReferenceExpression<any, any>): SimpleReferenceExpressionNode;
18
+ export declare function parseReferenceExpressionOrList(arg: ReferenceExpressionOrList<any, any>): OperationNode[];
19
+ export declare function parseReferenceExpression(exp: ReferenceExpression<any, any>): OperationNode;
20
+ export declare function parseStringReference(ref: string): SimpleReferenceExpressionNode;
21
+ export declare function parseAliasedStringReference(ref: string): SimpleReferenceExpressionNode | AliasNode;
21
22
  export declare function parseColumnName(column: AnyColumn<any, any>): ColumnNode;
22
- export {};
@@ -4,9 +4,14 @@ import { ColumnNode } from '../operation-node/column-node.js';
4
4
  import { ReferenceNode } from '../operation-node/reference-node.js';
5
5
  import { TableNode } from '../operation-node/table-node.js';
6
6
  import { isReadonlyArray, isString } from '../util/object-utils.js';
7
- import { parseComplexExpression, } from './complex-expression-parser.js';
8
- import { isDynamicReferenceBuilder, } from '../dynamic/dynamic-reference-builder.js';
7
+ import { parseExpression, isExpressionOrFactory, } from './expression-parser.js';
9
8
  import { IdentifierNode } from '../operation-node/identifier-node.js';
9
+ export function parseSimpleReferenceExpression(exp) {
10
+ if (isString(exp)) {
11
+ return parseStringReference(exp);
12
+ }
13
+ return exp.toOperationNode();
14
+ }
10
15
  export function parseReferenceExpressionOrList(arg) {
11
16
  if (isReadonlyArray(arg)) {
12
17
  return arg.map((it) => parseReferenceExpression(it));
@@ -16,13 +21,10 @@ export function parseReferenceExpressionOrList(arg) {
16
21
  }
17
22
  }
18
23
  export function parseReferenceExpression(exp) {
19
- if (isString(exp)) {
20
- return parseStringReference(exp);
21
- }
22
- else if (isDynamicReferenceBuilder(exp)) {
23
- return exp.toOperationNode();
24
+ if (isExpressionOrFactory(exp)) {
25
+ return parseExpression(exp);
24
26
  }
25
- return parseComplexExpression(exp);
27
+ return parseSimpleReferenceExpression(exp);
26
28
  }
27
29
  export function parseStringReference(ref) {
28
30
  const COLUMN_SEPARATOR = '.';