@uwdata/mosaic-sql 0.16.2 → 0.18.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 (469) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +0 -2
  3. package/dist/src/ast/aggregate.d.ts +82 -0
  4. package/dist/src/ast/aggregate.d.ts.map +1 -0
  5. package/dist/src/ast/aggregate.js +180 -0
  6. package/dist/src/ast/aggregate.js.map +1 -0
  7. package/dist/src/ast/between-op.d.ts +46 -0
  8. package/dist/src/ast/between-op.d.ts.map +1 -0
  9. package/dist/src/ast/between-op.js +60 -0
  10. package/dist/src/ast/between-op.js.map +1 -0
  11. package/dist/src/ast/binary-op.d.ts +21 -0
  12. package/dist/src/ast/binary-op.d.ts.map +1 -0
  13. package/dist/src/ast/binary-op.js +29 -0
  14. package/dist/src/ast/binary-op.js.map +1 -0
  15. package/dist/src/ast/case.d.ts +53 -0
  16. package/dist/src/ast/case.d.ts.map +1 -0
  17. package/dist/src/ast/case.js +75 -0
  18. package/dist/src/ast/case.js.map +1 -0
  19. package/dist/src/ast/cast.d.ts +18 -0
  20. package/dist/src/ast/cast.d.ts.map +1 -0
  21. package/dist/src/ast/cast.js +26 -0
  22. package/dist/src/ast/cast.js.map +1 -0
  23. package/dist/src/ast/collate.d.ts +18 -0
  24. package/dist/src/ast/collate.d.ts.map +1 -0
  25. package/dist/src/ast/collate.js +25 -0
  26. package/dist/src/ast/collate.js.map +1 -0
  27. package/dist/src/ast/column-param.d.ts +23 -0
  28. package/dist/src/ast/column-param.d.ts.map +1 -0
  29. package/dist/src/ast/column-param.js +29 -0
  30. package/dist/src/ast/column-param.js.map +1 -0
  31. package/dist/src/ast/column-ref.d.ts +40 -0
  32. package/dist/src/ast/column-ref.d.ts.map +1 -0
  33. package/dist/src/ast/column-ref.js +58 -0
  34. package/dist/src/ast/column-ref.js.map +1 -0
  35. package/dist/src/ast/fragment.d.ts +20 -0
  36. package/dist/src/ast/fragment.d.ts.map +1 -0
  37. package/dist/src/ast/fragment.js +26 -0
  38. package/dist/src/ast/fragment.js.map +1 -0
  39. package/dist/src/ast/from.d.ts +22 -0
  40. package/dist/src/ast/from.d.ts.map +1 -0
  41. package/dist/src/ast/from.js +37 -0
  42. package/dist/src/ast/from.js.map +1 -0
  43. package/dist/src/ast/function.d.ts +18 -0
  44. package/dist/src/ast/function.d.ts.map +1 -0
  45. package/dist/src/ast/function.js +26 -0
  46. package/dist/src/ast/function.js.map +1 -0
  47. package/dist/src/ast/in-op.d.ts +18 -0
  48. package/dist/src/ast/in-op.d.ts.map +1 -0
  49. package/dist/src/ast/in-op.js +25 -0
  50. package/dist/src/ast/in-op.js.map +1 -0
  51. package/dist/src/ast/interval.d.ts +18 -0
  52. package/dist/src/ast/interval.d.ts.map +1 -0
  53. package/dist/src/ast/interval.js +25 -0
  54. package/dist/src/ast/interval.js.map +1 -0
  55. package/dist/src/ast/literal.d.ts +16 -0
  56. package/dist/src/ast/literal.d.ts.map +1 -0
  57. package/dist/src/ast/literal.js +53 -0
  58. package/dist/src/ast/literal.js.map +1 -0
  59. package/dist/src/ast/logical-op.d.ts +32 -0
  60. package/dist/src/ast/logical-op.d.ts.map +1 -0
  61. package/dist/src/ast/logical-op.js +46 -0
  62. package/dist/src/ast/logical-op.js.map +1 -0
  63. package/dist/src/ast/node.d.ts +25 -0
  64. package/dist/src/ast/node.d.ts.map +1 -0
  65. package/dist/src/ast/node.js +36 -0
  66. package/dist/src/ast/node.js.map +1 -0
  67. package/dist/src/ast/order-by.d.ts +21 -0
  68. package/dist/src/ast/order-by.d.ts.map +1 -0
  69. package/dist/src/ast/order-by.js +36 -0
  70. package/dist/src/ast/order-by.js.map +1 -0
  71. package/dist/{types → src}/ast/param.d.ts +11 -11
  72. package/dist/src/ast/param.d.ts.map +1 -0
  73. package/dist/src/ast/param.js +28 -0
  74. package/dist/src/ast/param.js.map +1 -0
  75. package/dist/src/ast/query.d.ts +294 -0
  76. package/dist/src/ast/query.d.ts.map +1 -0
  77. package/dist/src/ast/query.js +584 -0
  78. package/dist/src/ast/query.js.map +1 -0
  79. package/dist/src/ast/sample.d.ts +27 -0
  80. package/dist/src/ast/sample.d.ts.map +1 -0
  81. package/dist/src/ast/sample.js +38 -0
  82. package/dist/src/ast/sample.js.map +1 -0
  83. package/dist/src/ast/select.d.ts +19 -0
  84. package/dist/src/ast/select.d.ts.map +1 -0
  85. package/dist/src/ast/select.js +35 -0
  86. package/dist/src/ast/select.js.map +1 -0
  87. package/dist/src/ast/subquery.d.ts +16 -0
  88. package/dist/src/ast/subquery.d.ts.map +1 -0
  89. package/dist/src/ast/subquery.js +21 -0
  90. package/dist/src/ast/subquery.js.map +1 -0
  91. package/dist/src/ast/table-ref.d.ts +24 -0
  92. package/dist/src/ast/table-ref.d.ts.map +1 -0
  93. package/dist/src/ast/table-ref.js +35 -0
  94. package/dist/src/ast/table-ref.js.map +1 -0
  95. package/dist/src/ast/unary-op.d.ts +40 -0
  96. package/dist/src/ast/unary-op.d.ts.map +1 -0
  97. package/dist/src/ast/unary-op.js +52 -0
  98. package/dist/src/ast/unary-op.js.map +1 -0
  99. package/dist/src/ast/verbatim.d.ts +18 -0
  100. package/dist/src/ast/verbatim.d.ts.map +1 -0
  101. package/dist/src/ast/verbatim.js +25 -0
  102. package/dist/src/ast/verbatim.js.map +1 -0
  103. package/dist/src/ast/window-frame.d.ts +54 -0
  104. package/dist/src/ast/window-frame.d.ts.map +1 -0
  105. package/dist/src/ast/window-frame.js +79 -0
  106. package/dist/src/ast/window-frame.js.map +1 -0
  107. package/dist/src/ast/window.d.ts +128 -0
  108. package/dist/src/ast/window.d.ts.map +1 -0
  109. package/dist/src/ast/window.js +194 -0
  110. package/dist/src/ast/window.js.map +1 -0
  111. package/dist/{types → src}/ast/with.d.ts +15 -22
  112. package/dist/src/ast/with.d.ts.map +1 -0
  113. package/dist/src/ast/with.js +36 -0
  114. package/dist/src/ast/with.js.map +1 -0
  115. package/dist/src/constants.d.ts +38 -0
  116. package/dist/src/constants.d.ts.map +1 -0
  117. package/dist/src/constants.js +38 -0
  118. package/dist/src/constants.js.map +1 -0
  119. package/dist/src/functions/aggregate.d.ts +236 -0
  120. package/dist/src/functions/aggregate.d.ts.map +1 -0
  121. package/dist/src/functions/aggregate.js +308 -0
  122. package/dist/src/functions/aggregate.js.map +1 -0
  123. package/dist/{types → src}/functions/case.d.ts +7 -7
  124. package/dist/src/functions/case.d.ts.map +1 -0
  125. package/dist/src/functions/case.js +17 -0
  126. package/dist/src/functions/case.js.map +1 -0
  127. package/dist/src/functions/cast.d.ts +23 -0
  128. package/dist/src/functions/cast.d.ts.map +1 -0
  129. package/dist/src/functions/cast.js +32 -0
  130. package/dist/src/functions/cast.js.map +1 -0
  131. package/dist/src/functions/collate.d.ts +10 -0
  132. package/dist/src/functions/collate.d.ts.map +1 -0
  133. package/dist/src/functions/collate.js +12 -0
  134. package/dist/src/functions/collate.js.map +1 -0
  135. package/dist/src/functions/column.d.ts +10 -0
  136. package/dist/src/functions/column.d.ts.map +1 -0
  137. package/dist/src/functions/column.js +17 -0
  138. package/dist/src/functions/column.js.map +1 -0
  139. package/dist/{types → src}/functions/cte.d.ts +7 -7
  140. package/dist/src/functions/cte.d.ts.map +1 -0
  141. package/dist/src/functions/cte.js +14 -0
  142. package/dist/src/functions/cte.js.map +1 -0
  143. package/dist/src/functions/datetime.d.ts +32 -0
  144. package/dist/src/functions/datetime.d.ts.map +1 -0
  145. package/dist/src/functions/datetime.js +45 -0
  146. package/dist/src/functions/datetime.js.map +1 -0
  147. package/dist/src/functions/interval.d.ts +48 -0
  148. package/dist/src/functions/interval.d.ts.map +1 -0
  149. package/dist/src/functions/interval.js +66 -0
  150. package/dist/src/functions/interval.js.map +1 -0
  151. package/dist/{types → src}/functions/literal.d.ts +8 -8
  152. package/dist/src/functions/literal.d.ts.map +1 -0
  153. package/dist/src/functions/literal.js +20 -0
  154. package/dist/src/functions/literal.js.map +1 -0
  155. package/dist/src/functions/numeric.d.ts +80 -0
  156. package/dist/src/functions/numeric.d.ts.map +1 -0
  157. package/dist/src/functions/numeric.js +110 -0
  158. package/dist/src/functions/numeric.js.map +1 -0
  159. package/dist/src/functions/operators.d.ts +169 -0
  160. package/dist/src/functions/operators.d.ts.map +1 -0
  161. package/dist/src/functions/operators.js +235 -0
  162. package/dist/src/functions/operators.js.map +1 -0
  163. package/dist/src/functions/order-by.d.ts +15 -0
  164. package/dist/src/functions/order-by.d.ts.map +1 -0
  165. package/dist/src/functions/order-by.js +19 -0
  166. package/dist/src/functions/order-by.js.map +1 -0
  167. package/dist/src/functions/spatial.d.ts +32 -0
  168. package/dist/src/functions/spatial.d.ts.map +1 -0
  169. package/dist/src/functions/spatial.js +44 -0
  170. package/dist/src/functions/spatial.js.map +1 -0
  171. package/dist/{types → src}/functions/sql-template-tag.d.ts +8 -10
  172. package/dist/src/functions/sql-template-tag.d.ts.map +1 -0
  173. package/dist/src/functions/sql-template-tag.js +44 -0
  174. package/dist/src/functions/sql-template-tag.js.map +1 -0
  175. package/dist/src/functions/string.d.ts +49 -0
  176. package/dist/src/functions/string.d.ts.map +1 -0
  177. package/dist/src/functions/string.js +67 -0
  178. package/dist/src/functions/string.js.map +1 -0
  179. package/dist/src/functions/table-ref.d.ts +10 -0
  180. package/dist/src/functions/table-ref.d.ts.map +1 -0
  181. package/dist/src/functions/table-ref.js +13 -0
  182. package/dist/src/functions/table-ref.js.map +1 -0
  183. package/dist/src/functions/util.d.ts +7 -0
  184. package/dist/src/functions/util.d.ts.map +1 -0
  185. package/dist/src/functions/util.js +9 -0
  186. package/dist/src/functions/util.js.map +1 -0
  187. package/dist/src/functions/window-frame.d.ts +41 -0
  188. package/dist/src/functions/window-frame.d.ts.map +1 -0
  189. package/dist/src/functions/window-frame.js +52 -0
  190. package/dist/src/functions/window-frame.js.map +1 -0
  191. package/dist/{types → src}/functions/window.d.ts +24 -39
  192. package/dist/src/functions/window.d.ts.map +1 -0
  193. package/dist/src/functions/window.js +96 -0
  194. package/dist/src/functions/window.js.map +1 -0
  195. package/dist/src/index.d.ts +69 -0
  196. package/dist/src/index.d.ts.map +1 -0
  197. package/{src → dist/src}/index.js +16 -12
  198. package/dist/src/index.js.map +1 -0
  199. package/dist/src/load/create.d.ts +10 -0
  200. package/dist/src/load/create.d.ts.map +1 -0
  201. package/dist/src/load/create.js +14 -0
  202. package/dist/src/load/create.js.map +1 -0
  203. package/dist/src/load/extension.d.ts +2 -0
  204. package/dist/src/load/extension.d.ts.map +1 -0
  205. package/dist/src/load/extension.js +4 -0
  206. package/dist/src/load/extension.js.map +1 -0
  207. package/dist/src/load/load.d.ts +18 -0
  208. package/dist/src/load/load.d.ts.map +1 -0
  209. package/dist/src/load/load.js +80 -0
  210. package/dist/src/load/load.js.map +1 -0
  211. package/dist/src/load/sql-from.d.ts +14 -0
  212. package/dist/src/load/sql-from.d.ts.map +1 -0
  213. package/dist/src/load/sql-from.js +29 -0
  214. package/dist/src/load/sql-from.js.map +1 -0
  215. package/dist/src/transforms/bin-1d.d.ts +16 -0
  216. package/dist/src/transforms/bin-1d.d.ts.map +1 -0
  217. package/dist/src/transforms/bin-1d.js +21 -0
  218. package/dist/src/transforms/bin-1d.js.map +1 -0
  219. package/dist/src/transforms/bin-2d.d.ts +19 -0
  220. package/dist/src/transforms/bin-2d.d.ts.map +1 -0
  221. package/dist/src/transforms/bin-2d.js +27 -0
  222. package/dist/src/transforms/bin-2d.js.map +1 -0
  223. package/dist/src/transforms/bin-date.d.ts +31 -0
  224. package/dist/src/transforms/bin-date.d.ts.map +1 -0
  225. package/dist/src/transforms/bin-date.js +20 -0
  226. package/dist/src/transforms/bin-date.js.map +1 -0
  227. package/dist/src/transforms/bin-histogram.d.ts +37 -0
  228. package/dist/src/transforms/bin-histogram.d.ts.map +1 -0
  229. package/dist/src/transforms/bin-histogram.js +32 -0
  230. package/dist/src/transforms/bin-histogram.js.map +1 -0
  231. package/dist/src/transforms/bin-linear-1d.d.ts +11 -0
  232. package/dist/src/transforms/bin-linear-1d.d.ts.map +1 -0
  233. package/dist/src/transforms/bin-linear-1d.js +25 -0
  234. package/dist/src/transforms/bin-linear-1d.js.map +1 -0
  235. package/dist/src/transforms/bin-linear-2d.d.ts +20 -0
  236. package/dist/src/transforms/bin-linear-2d.d.ts.map +1 -0
  237. package/dist/src/transforms/bin-linear-2d.js +49 -0
  238. package/dist/src/transforms/bin-linear-2d.js.map +1 -0
  239. package/dist/src/transforms/filter-query.d.ts +12 -0
  240. package/dist/src/transforms/filter-query.d.ts.map +1 -0
  241. package/dist/src/transforms/filter-query.js +39 -0
  242. package/dist/src/transforms/filter-query.js.map +1 -0
  243. package/dist/src/transforms/line-density.d.ts +24 -0
  244. package/dist/src/transforms/line-density.d.ts.map +1 -0
  245. package/dist/src/transforms/line-density.js +98 -0
  246. package/dist/src/transforms/line-density.js.map +1 -0
  247. package/dist/src/transforms/m4.d.ts +19 -0
  248. package/dist/src/transforms/m4.d.ts.map +1 -0
  249. package/dist/src/transforms/m4.js +38 -0
  250. package/dist/src/transforms/m4.js.map +1 -0
  251. package/dist/src/transforms/scales.d.ts +30 -0
  252. package/dist/src/transforms/scales.d.ts.map +1 -0
  253. package/dist/src/transforms/scales.js +103 -0
  254. package/dist/src/transforms/scales.js.map +1 -0
  255. package/dist/src/transforms/util/bin-step.d.ts +50 -0
  256. package/dist/src/transforms/util/bin-step.d.ts.map +1 -0
  257. package/dist/src/transforms/util/bin-step.js +53 -0
  258. package/dist/src/transforms/util/bin-step.js.map +1 -0
  259. package/dist/src/transforms/util/time-interval.d.ts +14 -0
  260. package/dist/src/transforms/util/time-interval.d.ts.map +1 -0
  261. package/dist/src/transforms/util/time-interval.js +88 -0
  262. package/dist/src/transforms/util/time-interval.js.map +1 -0
  263. package/dist/{types → src}/types.d.ts +6 -19
  264. package/dist/src/types.d.ts.map +1 -0
  265. package/dist/src/types.js +2 -0
  266. package/dist/src/types.js.map +1 -0
  267. package/dist/{types → src}/util/ast.d.ts +26 -25
  268. package/dist/src/util/ast.d.ts.map +1 -0
  269. package/{src → dist/src}/util/ast.js +36 -41
  270. package/dist/src/util/ast.js.map +1 -0
  271. package/dist/src/util/function.d.ts +56 -0
  272. package/dist/src/util/function.d.ts.map +1 -0
  273. package/dist/src/util/function.js +73 -0
  274. package/dist/src/util/function.js.map +1 -0
  275. package/dist/src/util/identity.d.ts +6 -0
  276. package/dist/src/util/identity.d.ts.map +1 -0
  277. package/dist/src/util/identity.js +8 -0
  278. package/dist/src/util/identity.js.map +1 -0
  279. package/dist/src/util/string.d.ts +4 -0
  280. package/dist/src/util/string.d.ts.map +1 -0
  281. package/dist/src/util/string.js +14 -0
  282. package/dist/src/util/string.js.map +1 -0
  283. package/dist/src/util/type-check.d.ts +17 -0
  284. package/dist/src/util/type-check.d.ts.map +1 -0
  285. package/dist/src/util/type-check.js +28 -0
  286. package/dist/src/util/type-check.js.map +1 -0
  287. package/dist/src/visit/clone.d.ts +7 -0
  288. package/dist/src/visit/clone.d.ts.map +1 -0
  289. package/dist/src/visit/clone.js +52 -0
  290. package/dist/src/visit/clone.js.map +1 -0
  291. package/dist/src/visit/recurse.d.ts +2 -0
  292. package/dist/src/visit/recurse.d.ts.map +1 -0
  293. package/dist/src/visit/recurse.js +36 -0
  294. package/dist/src/visit/recurse.js.map +1 -0
  295. package/dist/src/visit/rewrite.d.ts +9 -0
  296. package/dist/src/visit/rewrite.d.ts.map +1 -0
  297. package/dist/src/visit/rewrite.js +39 -0
  298. package/dist/src/visit/rewrite.js.map +1 -0
  299. package/dist/{types → src}/visit/visitors.d.ts +14 -16
  300. package/dist/src/visit/visitors.d.ts.map +1 -0
  301. package/dist/src/visit/visitors.js +95 -0
  302. package/dist/src/visit/visitors.js.map +1 -0
  303. package/dist/src/visit/walk.d.ts +21 -0
  304. package/dist/src/visit/walk.d.ts.map +1 -0
  305. package/dist/src/visit/walk.js +32 -0
  306. package/dist/src/visit/walk.js.map +1 -0
  307. package/package.json +12 -10
  308. package/src/ast/aggregate.ts +198 -0
  309. package/src/ast/{between-op.js → between-op.ts} +19 -26
  310. package/src/ast/binary-op.ts +31 -0
  311. package/src/ast/{case.js → case.ts} +29 -44
  312. package/src/ast/{cast.js → cast.ts} +8 -14
  313. package/src/ast/collate.ts +27 -0
  314. package/src/ast/column-param.ts +34 -0
  315. package/src/ast/{column-ref.js → column-ref.ts} +16 -25
  316. package/src/ast/fragment.ts +28 -0
  317. package/src/ast/from.ts +40 -0
  318. package/src/ast/{function.js → function.ts} +8 -14
  319. package/src/ast/{in-op.js → in-op.ts} +8 -14
  320. package/src/ast/{interval.js → interval.ts} +8 -14
  321. package/src/ast/{literal.js → literal.ts} +6 -9
  322. package/src/ast/logical-op.ts +50 -0
  323. package/src/ast/node.ts +39 -0
  324. package/src/ast/order-by.ts +38 -0
  325. package/src/ast/{param.js → param.ts} +6 -12
  326. package/src/ast/{query.js → query.ts} +193 -205
  327. package/src/ast/sample.ts +47 -0
  328. package/src/ast/{select.js → select.ts} +10 -16
  329. package/src/ast/subquery.ts +24 -0
  330. package/src/ast/{table-ref.js → table-ref.ts} +7 -12
  331. package/src/ast/{unary-op.js → unary-op.ts} +16 -23
  332. package/src/ast/{verbatim.js → verbatim.ts} +9 -8
  333. package/src/ast/window-frame.ts +97 -0
  334. package/src/ast/window.ts +246 -0
  335. package/src/ast/{with.js → with.ts} +19 -20
  336. package/src/{constants.js → constants.ts} +5 -6
  337. package/src/functions/aggregate.ts +344 -0
  338. package/src/functions/{case.js → case.ts} +5 -8
  339. package/src/functions/{cast.js → cast.ts} +9 -13
  340. package/src/functions/collate.ts +13 -0
  341. package/src/functions/{column.js → column.ts} +9 -10
  342. package/src/functions/{cte.js → cte.ts} +9 -6
  343. package/src/functions/datetime.ts +50 -0
  344. package/src/functions/interval.ts +74 -0
  345. package/src/functions/{literal.js → literal.ts} +6 -7
  346. package/src/functions/numeric.ts +125 -0
  347. package/src/functions/operators.ts +272 -0
  348. package/src/functions/order-by.ts +21 -0
  349. package/src/functions/spatial.ts +50 -0
  350. package/src/functions/{sql-template-tag.js → sql-template-tag.ts} +16 -13
  351. package/src/functions/string.ts +79 -0
  352. package/src/functions/{table-ref.js → table-ref.ts} +4 -4
  353. package/src/functions/util.ts +10 -0
  354. package/src/functions/window-frame.ts +58 -0
  355. package/src/functions/{window.js → window.ts} +18 -35
  356. package/src/index.ts +75 -0
  357. package/src/load/{create.js → create.ts} +9 -3
  358. package/src/load/extension.ts +3 -0
  359. package/src/load/{load.js → load.ts} +26 -11
  360. package/src/load/{sql-from.js → sql-from.ts} +14 -7
  361. package/src/transforms/{bin-1d.js → bin-1d.ts} +13 -9
  362. package/src/transforms/{bin-2d.js → bin-2d.ts} +17 -13
  363. package/src/transforms/bin-date.ts +48 -0
  364. package/src/transforms/bin-histogram.ts +61 -0
  365. package/src/transforms/{bin-linear-1d.js → bin-linear-1d.ts} +16 -11
  366. package/src/transforms/{bin-linear-2d.js → bin-linear-2d.ts} +23 -35
  367. package/src/transforms/filter-query.ts +40 -0
  368. package/src/transforms/{line-density.js → line-density.ts} +19 -17
  369. package/src/transforms/{m4.js → m4.ts} +17 -14
  370. package/src/transforms/{scales.js → scales.ts} +57 -14
  371. package/src/transforms/util/bin-step.ts +100 -0
  372. package/src/transforms/util/{time-interval.js → time-interval.ts} +32 -21
  373. package/src/types.ts +5 -30
  374. package/src/util/ast.ts +104 -0
  375. package/src/util/{function.js → function.ts} +40 -31
  376. package/src/util/identity.ts +7 -0
  377. package/src/util/{string.js → string.ts} +4 -4
  378. package/src/util/type-check.ts +31 -0
  379. package/src/visit/clone.ts +53 -0
  380. package/src/visit/{recurse.js → recurse.ts} +18 -6
  381. package/src/visit/{rewrite.js → rewrite.ts} +10 -18
  382. package/src/visit/{visitors.js → visitors.ts} +22 -30
  383. package/src/visit/walk.ts +46 -0
  384. package/dist/types/ast/aggregate.d.ts +0 -71
  385. package/dist/types/ast/between-op.d.ts +0 -46
  386. package/dist/types/ast/binary-op.d.ts +0 -28
  387. package/dist/types/ast/case.d.ts +0 -67
  388. package/dist/types/ast/cast.d.ts +0 -21
  389. package/dist/types/ast/column-param.d.ts +0 -23
  390. package/dist/types/ast/column-ref.d.ts +0 -40
  391. package/dist/types/ast/fragment.d.ts +0 -14
  392. package/dist/types/ast/from.d.ts +0 -21
  393. package/dist/types/ast/function.d.ts +0 -21
  394. package/dist/types/ast/in-op.d.ts +0 -21
  395. package/dist/types/ast/interval.d.ts +0 -21
  396. package/dist/types/ast/literal.d.ts +0 -15
  397. package/dist/types/ast/logical-op.d.ts +0 -46
  398. package/dist/types/ast/node.d.ts +0 -24
  399. package/dist/types/ast/order-by.d.ts +0 -29
  400. package/dist/types/ast/query.d.ts +0 -320
  401. package/dist/types/ast/sample.d.ts +0 -42
  402. package/dist/types/ast/select.d.ts +0 -22
  403. package/dist/types/ast/table-ref.d.ts +0 -25
  404. package/dist/types/ast/unary-op.d.ts +0 -39
  405. package/dist/types/ast/verbatim.d.ts +0 -9
  406. package/dist/types/ast/window.d.ts +0 -180
  407. package/dist/types/constants.d.ts +0 -38
  408. package/dist/types/functions/aggregate.d.ts +0 -236
  409. package/dist/types/functions/cast.d.ts +0 -26
  410. package/dist/types/functions/column.d.ts +0 -11
  411. package/dist/types/functions/datetime.d.ts +0 -45
  412. package/dist/types/functions/numeric.d.ts +0 -95
  413. package/dist/types/functions/operators.d.ts +0 -200
  414. package/dist/types/functions/order-by.d.ts +0 -18
  415. package/dist/types/functions/spatial.d.ts +0 -38
  416. package/dist/types/functions/string.d.ts +0 -57
  417. package/dist/types/functions/table-ref.d.ts +0 -9
  418. package/dist/types/functions/util.d.ts +0 -8
  419. package/dist/types/index-types.d.ts +0 -2
  420. package/dist/types/index.d.ts +0 -59
  421. package/dist/types/load/create.d.ts +0 -8
  422. package/dist/types/load/extension.d.ts +0 -1
  423. package/dist/types/load/load.d.ts +0 -12
  424. package/dist/types/load/sql-from.d.ts +0 -11
  425. package/dist/types/transforms/bin-1d.d.ts +0 -15
  426. package/dist/types/transforms/bin-2d.d.ts +0 -19
  427. package/dist/types/transforms/bin-date.d.ts +0 -44
  428. package/dist/types/transforms/bin-histogram.d.ts +0 -51
  429. package/dist/types/transforms/bin-linear-1d.d.ts +0 -12
  430. package/dist/types/transforms/bin-linear-2d.d.ts +0 -19
  431. package/dist/types/transforms/line-density.d.ts +0 -24
  432. package/dist/types/transforms/m4.d.ts +0 -21
  433. package/dist/types/transforms/scales.d.ts +0 -1
  434. package/dist/types/transforms/util/bin-step.d.ts +0 -61
  435. package/dist/types/transforms/util/time-interval.d.ts +0 -13
  436. package/dist/types/util/function.d.ts +0 -56
  437. package/dist/types/util/string.d.ts +0 -3
  438. package/dist/types/util/type-check.d.ts +0 -22
  439. package/dist/types/visit/recurse.d.ts +0 -28
  440. package/dist/types/visit/rewrite.d.ts +0 -10
  441. package/dist/types/visit/walk.d.ts +0 -10
  442. package/jsconfig.json +0 -11
  443. package/src/ast/aggregate.js +0 -167
  444. package/src/ast/binary-op.js +0 -40
  445. package/src/ast/column-param.js +0 -40
  446. package/src/ast/fragment.js +0 -26
  447. package/src/ast/from.js +0 -40
  448. package/src/ast/logical-op.js +0 -67
  449. package/src/ast/node.js +0 -29
  450. package/src/ast/order-by.js +0 -48
  451. package/src/ast/sample.js +0 -53
  452. package/src/ast/window.js +0 -294
  453. package/src/functions/aggregate.js +0 -347
  454. package/src/functions/datetime.js +0 -68
  455. package/src/functions/numeric.js +0 -143
  456. package/src/functions/operators.js +0 -301
  457. package/src/functions/order-by.js +0 -27
  458. package/src/functions/spatial.js +0 -59
  459. package/src/functions/string.js +0 -85
  460. package/src/functions/util.js +0 -14
  461. package/src/index-types.ts +0 -2
  462. package/src/load/extension.js +0 -3
  463. package/src/transforms/bin-date.js +0 -37
  464. package/src/transforms/bin-histogram.js +0 -52
  465. package/src/transforms/util/bin-step.js +0 -79
  466. package/src/util/type-check.js +0 -33
  467. package/src/visit/walk.js +0 -35
  468. package/tsconfig.json +0 -12
  469. package/vitest.config.ts +0 -3
@@ -1,10 +1,8 @@
1
- /**
2
- * @import { FilterExpr, FromExpr, GroupByExpr, OrderByExpr, SelectExpr, WithExpr } from '../types.js'
3
- * @import { SampleMethod } from './sample.js'
4
- */
1
+ import type { FilterExpr, FromExpr, GroupByExpr, MaybeArray, OrderByExpr, SelectExpr, WithExpr } from '../types.js';
2
+ import type { SampleMethod } from './sample.js';
5
3
  import { DESCRIBE_QUERY, SELECT_QUERY, SET_OPERATION } from '../constants.js';
6
- import { asNode, asTableRef, asVerbatim } from '../util/ast.js';
7
- import { exprList } from '../util/function.js';
4
+ import { asNode, asVerbatim, maybeTableRef } from '../util/ast.js';
5
+ import { exprList, nodeList } from '../util/function.js';
8
6
  import { unquote } from '../util/string.js';
9
7
  import { isArray, isString } from '../util/type-check.js';
10
8
  import { isColumnRef } from './column-ref.js';
@@ -13,153 +11,143 @@ import { ExprNode, SQLNode, isNode } from './node.js';
13
11
  import { SampleClauseNode } from './sample.js';
14
12
  import { SelectClauseNode } from './select.js';
15
13
  import { isTableRef } from './table-ref.js';
16
- import { WindowClauseNode } from './window.js';
14
+ import { WindowClauseNode, type WindowDefNode } from './window.js';
17
15
  import { WithClauseNode } from './with.js';
18
16
 
19
17
  /**
20
18
  * Check if a value is a selection query or set operation.
21
- * @param {*} value The value to check.
22
- * @returns {value is Query}
19
+ * @param value The value to check.
23
20
  */
24
- export function isQuery(value) {
21
+ export function isQuery(value: unknown): value is Query {
25
22
  return value instanceof Query;
26
23
  }
27
24
 
28
25
  /**
29
26
  * Check if a value is a selection query.
30
- * @param {*} value The value to check.
31
- * @returns {value is SelectQuery}
27
+ * @param value The value to check.
32
28
  */
33
- export function isSelectQuery(value) {
29
+ export function isSelectQuery(value: unknown): value is SelectQuery {
34
30
  return value instanceof SelectQuery;
35
31
  }
36
32
 
37
33
  /**
38
34
  * Check if a value is a describe query.
39
- * @param {*} value The value to check.
40
- * @returns {value is DescribeQuery}
35
+ * @param value The value to check.
41
36
  */
42
- export function isDescribeQuery(value) {
37
+ export function isDescribeQuery(value: unknown): value is DescribeQuery {
43
38
  return value instanceof DescribeQuery;
44
39
  }
45
40
 
46
41
  export class Query extends ExprNode {
47
42
  /**
48
43
  * Create a new WITH clause with the given CTE queries.
49
- * @param {...WithExpr} expr The WITH CTE queries.
50
- * @returns {WithClause}
44
+ * @param expr The WITH CTE queries.
51
45
  */
52
- static with(...expr) {
46
+ static with(...expr: WithExpr[]) {
53
47
  return new WithClause(...expr);
54
48
  }
55
49
 
56
50
  /**
57
51
  * Create a new select query with the given SELECT expressions.
58
- * @param {...SelectExpr} expr The SELECT expressions.
59
- * @returns {SelectQuery}
52
+ * @param expr The SELECT expressions.
60
53
  */
61
- static select(...expr) {
54
+ static select(...expr: SelectExpr[]) {
62
55
  return new SelectQuery().select(...expr);
63
56
  }
64
57
 
65
58
  /**
66
59
  * Create a new select query with the given FROM expressions.
67
- * @param {...FromExpr} expr The FROM expressions.
68
- * @returns {SelectQuery}
60
+ * @param expr The FROM expressions.
69
61
  */
70
- static from(...expr) {
62
+ static from(...expr: FromExpr[]) {
71
63
  return new SelectQuery().from(...expr);
72
64
  }
73
65
 
74
66
  /**
75
67
  * Create a new UNION set operation over the given queries.
76
- * @param {...Query} queries The queries.
77
- * @returns {SetOperation}
68
+ * @param queries The queries.
78
69
  */
79
- static union(...queries) {
70
+ static union(...queries: MaybeArray<Query>[]) {
80
71
  return new SetOperation('UNION', queries.flat());
81
72
  }
82
73
 
83
74
  /**
84
75
  * Create a new UNION ALL set operation over the given queries.
85
- * @param {...Query} queries The queries.
86
- * @returns {SetOperation}
76
+ * @param queries The queries.
87
77
  */
88
- static unionAll(...queries) {
78
+ static unionAll(...queries: MaybeArray<Query>[]) {
89
79
  return new SetOperation('UNION ALL', queries.flat());
90
80
  }
91
81
 
92
82
  /**
93
83
  * Create a new INTERSECT set operation over the given queries.
94
- * @param {...Query} queries The queries.
95
- * @returns {SetOperation}
84
+ * @param queries The queries.
96
85
  */
97
- static intersect(...queries) {
86
+ static intersect(...queries: MaybeArray<Query>[]) {
98
87
  return new SetOperation('INTERSECT', queries.flat());
99
88
  }
100
89
 
101
90
  /**
102
91
  * Create a new EXCEPT set operation over the given queries.
103
- * @param {...Query} queries The queries.
104
- * @returns {SetOperation}
92
+ * @param queries The queries.
105
93
  */
106
- static except(...queries) {
94
+ static except(...queries: MaybeArray<Query>[]) {
107
95
  return new SetOperation('EXCEPT', queries.flat());
108
96
  }
109
97
 
110
98
  /**
111
99
  * Create a new describe query for the given input query.
112
- * @param {Query} query The query to describe.
113
- * @returns {DescribeQuery}
100
+ * @param query The query to describe.
114
101
  */
115
- static describe(query) {
102
+ static describe(query: Query) {
116
103
  return new DescribeQuery(query);
117
104
  }
118
105
 
106
+ _with: WithClauseNode[] = [];
107
+ _orderby: ExprNode[] = [];
108
+ _limitPerc: boolean = false;
109
+ _limit?: ExprNode;
110
+ _offset?: ExprNode;
111
+ cteFor?: Query | null = null;
112
+
119
113
  /**
120
114
  * Instantiate a new query.
121
115
  */
122
- constructor(type) {
116
+ constructor(type: string) {
123
117
  super(type);
124
- /** @type {WithClauseNode[]} */
125
- this._with = [];
126
- /** @type {ExprNode[]} */
127
- this._orderby = [];
128
- /** @type {number} */
129
- this._limit = undefined;
130
- /** @type {number} */
131
- this._offset = undefined;
132
- /** @type {Query | null} */
133
- this.cteFor = null;
134
118
  }
135
119
 
136
120
  /**
137
121
  * Return a list of subqueries.
138
- * @returns {Query[]}
139
122
  */
140
- get subqueries() {
123
+ get subqueries(): Query[] {
141
124
  return [];
142
125
  }
143
126
 
144
127
  /**
145
128
  * Clone this query.
146
- * @returns {Query}
147
129
  */
148
- clone() {
130
+ clone(): this {
149
131
  return this;
150
132
  }
151
133
 
134
+ /**
135
+ * Add a pointer to the query for which this query is a CTE.
136
+ * @param query The query for which this query is a CTE.
137
+ */
138
+ setCteFor(query: Query | null): void {
139
+ this.cteFor = query;
140
+ }
141
+
152
142
  /**
153
143
  * Add WITH common table expressions (CTEs).
154
- * @param {...WithExpr} expr Expressions to add.
155
- * @returns {this}
144
+ * @param expr Expressions to add.
156
145
  */
157
- with(...expr) {
158
- /** @type {WithClauseNode[]} */
159
- const list = [];
160
- const add = (name, q) => {
146
+ with(...expr: WithExpr[]): this {
147
+ const list: WithClauseNode[] = [];
148
+ const add = (name: string, q: Query) => {
161
149
  const query = q.clone();
162
- query.cteFor = this;
150
+ query.setCteFor(this);
163
151
  list.push(new WithClauseNode(name, query));
164
152
  };
165
153
  expr.flat().forEach(e => {
@@ -172,72 +160,76 @@ export class Query extends ExprNode {
172
160
 
173
161
  /**
174
162
  * Add ORDER BY expressions.
175
- * @param {...OrderByExpr} expr Expressions to add.
176
- * @returns
163
+ * @param expr Expressions to add.
177
164
  */
178
- orderby(...expr) {
179
- this._orderby = this._orderby.concat(exprList(expr));
165
+ orderby(...expr: OrderByExpr[]): this {
166
+ this._orderby = this._orderby.concat(nodeList(expr));
167
+ return this;
168
+ }
169
+
170
+ /**
171
+ * Set the query result LIMIT as a percentage value.
172
+ * @param value The limit percentage value.
173
+ */
174
+ limitPercent(value: number | ExprNode): this {
175
+ this._limitPerc = true;
176
+ this._limit = asNode(value);
180
177
  return this;
181
178
  }
182
179
 
183
180
  /**
184
181
  * Set the query result LIMIT.
185
- * @param {number} value The limit value.
186
- * @returns {this}
182
+ * @param value The limit value.
187
183
  */
188
- limit(value) {
189
- this._limit = Number.isFinite(value) ? value : undefined;
184
+ limit(value: number | ExprNode): this {
185
+ this._limitPerc = false;
186
+ this._limit = asNode(value);
190
187
  return this;
191
188
  }
192
189
 
193
190
  /**
194
191
  * Set the query result OFFSET.
195
- * @param {number} value The offset value.
196
- * @returns {this}
192
+ * @param value The offset value.
197
193
  */
198
- offset(value) {
199
- this._offset = Number.isFinite(value) ? value : undefined;
194
+ offset(value: number | ExprNode): this {
195
+ this._offset = asNode(value);
200
196
  return this;
201
197
  }
202
198
  }
203
199
 
204
200
  export class SelectQuery extends Query {
201
+ _select: SelectClauseNode[] = [];
202
+ _from: FromClauseNode[] = [];
203
+ _where: ExprNode[] = [];
204
+ _sample?: SampleClauseNode;
205
+ _groupby: ExprNode[] = [];
206
+ _having: ExprNode[] = [];
207
+ _window: WindowClauseNode[] = [];
208
+ _qualify: ExprNode[] = [];
209
+ _distinct: boolean = false;
210
+
205
211
  /**
206
212
  * Instantiate a new select query.
207
213
  */
208
214
  constructor() {
209
215
  super(SELECT_QUERY);
210
- /** @type {SelectClauseNode[]} */
211
- this._select = [];
212
- /** @type {FromClauseNode[]} */
213
- this._from = [];
214
- /** @type {ExprNode[]} */
215
- this._where = [];
216
- /** @type {SampleClauseNode} */
217
- this._sample = undefined;
218
- /** @type {ExprNode[]} */
219
- this._groupby = [];
220
- /** @type {ExprNode[]} */
221
- this._having = [];
222
- /** @type {WindowClauseNode[]} */
223
- this._window = [];
224
- /** @type {ExprNode[]} */
225
- this._qualify = [];
226
216
  }
227
217
 
228
218
  /**
229
219
  * Return a list of subqueries.
230
- * @returns {Query[]}
231
220
  */
232
- get subqueries() {
221
+ get subqueries(): Query[] {
233
222
  // build map of ctes within base query WITH clause
234
223
  const q = this.cteFor || this;
235
224
  const w = q instanceof SelectQuery ? q._with : [];
236
- const cte = w.reduce((obj, c) => (obj[c.name] = c.query, obj), {});
225
+ const cte = w.reduce(
226
+ (obj, c) => (obj[c.name] = c.query, obj),
227
+ {} as Record<string, Query>
228
+ );
237
229
 
238
230
  // extract subqueries in FROM clause
239
231
  // unused CTEs will be ignored
240
- const queries = [];
232
+ const queries: Query[] = [];
241
233
  this._from.forEach(({ expr }) => {
242
234
  if (isQuery(expr)) {
243
235
  queries.push(expr);
@@ -251,68 +243,70 @@ export class SelectQuery extends Query {
251
243
 
252
244
  /**
253
245
  * Clone this query.
254
- * @returns {SelectQuery}
255
246
  */
256
- clone() {
247
+ clone(): this {
257
248
  return Object.assign(new SelectQuery(), this);
258
249
  }
259
250
 
260
251
  /**
261
252
  * Add SELECT expressions.
262
- * @param {...SelectExpr} expr Expressions to add.
263
- * @returns {this}
264
- */
265
- select(...expr) {
266
- /** @type {SelectClauseNode[]} */
267
- const list = [];
268
- const add = (v, as) => list.push(
269
- new SelectClauseNode(v == null ? v : asNode(v), unquote(as))
270
- );
253
+ * @param expr Expressions to add.
254
+ */
255
+ select(...expr: SelectExpr[]): this {
256
+ const keys: Set<string> = new Set;
257
+ const list: SelectClauseNode[] = [];
258
+
259
+ const add = (v: unknown, as: string) => {
260
+ const key = unquote(as)!;
261
+ keys.add(key);
262
+ if (v) list.push(new SelectClauseNode(asNode(v), key));
263
+ };
264
+
271
265
  expr.flat().forEach(e => {
272
266
  if (e == null) return;
273
267
  else if (isString(e)) add(e, e);
274
268
  else if (isColumnRef(e)) add(e, e.column);
275
269
  else if (isArray(e)) add(e[1], e[0]);
270
+ else if (isNode(e)) add(e, `${e}`);
276
271
  else for (const alias in e) add(e[alias], alias);
277
272
  });
278
273
 
279
- const keys = new Set(list.map(x => x.alias));
280
- this._select = this._select
281
- .filter(x => !keys.has(x.alias))
282
- .concat(list.filter(x => x.expr));
274
+ this._select = this._select.filter(x => !keys.has(x.alias)).concat(list);
283
275
  return this;
284
276
  }
285
277
 
286
278
  /**
287
279
  * Set SELECT expressions, replacing any prior expressions.
288
- * @param {...SelectExpr} expr Expressions to add.
289
- * @returns {this}
280
+ * @param expr Expressions to add.
290
281
  */
291
- setSelect(...expr) {
282
+ setSelect(...expr: SelectExpr[]): this {
292
283
  this._select = [];
293
284
  return this.select(...expr);
294
285
  }
295
286
 
296
287
  /**
297
288
  * Indicate if this query should retrieve distinct values only.
298
- * @param {boolean} value The distinct flag
299
- * @returns {this}
289
+ * @param value The distinct flag
300
290
  */
301
- distinct(value = true) {
291
+ distinct(value: boolean = true): this {
302
292
  this._distinct = !!value;
303
293
  return this;
304
294
  }
305
295
 
306
296
  /**
307
297
  * Add table FROM expressions.
308
- * @param {...FromExpr} expr Expressions to add.
309
- * @returns {this}
298
+ * @param expr Expressions to add.
310
299
  */
311
- from(...expr) {
312
- const list = [];
313
- const add = (v, as) => list.push(new FromClauseNode(asTableRef(v), unquote(as)));
300
+ from(...expr: FromExpr[]): this {
301
+ const list: FromClauseNode[] = [];
302
+
303
+ const add = (v: string | string[] | SQLNode, as?: string) => {
304
+ list.push(new FromClauseNode(maybeTableRef(v), unquote(as)));
305
+ };
306
+
314
307
  expr.flat().forEach(e => {
315
308
  if (e == null) return;
309
+ else if (e instanceof FromClauseNode) list.push(e);
316
310
  else if (isString(e)) add(e, e);
317
311
  else if (isTableRef(e)) add(e, e.name);
318
312
  else if (isNode(e)) add(e);
@@ -325,24 +319,25 @@ export class SelectQuery extends Query {
325
319
 
326
320
  /**
327
321
  * Set FROM expressions, replacing any prior expressions.
328
- * @param {...FromExpr} expr Expressions to add.
329
- * @returns {this}
322
+ * @param expr Expressions to add.
330
323
  */
331
- setFrom(...expr) {
324
+ setFrom(...expr: FromExpr[]): this {
332
325
  this._from = [];
333
326
  return this.from(...expr);
334
327
  }
335
328
 
336
329
  /**
337
330
  * Set SAMPLE settings.
338
- * @param {number | SampleClauseNode} value Either a sample clause node
339
- * or the sample size as either a row count or percentage.
340
- * @param {SampleMethod} [method] The sampling method
341
- * to use.
342
- * @param {number} [seed] The random seed.
343
- * @returns {this}
344
- */
345
- sample(value, method, seed) {
331
+ * @param value Either a sample clause node or the sample size as either
332
+ * a row count or percentage.
333
+ * @param method The sampling method to use.
334
+ * @param seed The random seed.
335
+ */
336
+ sample(
337
+ value: number | SampleClauseNode,
338
+ method?: SampleMethod,
339
+ seed?: number
340
+ ): this {
346
341
  let clause;
347
342
  if (typeof value === 'number') {
348
343
  const perc = value > 0 && value < 1;
@@ -357,64 +352,58 @@ export class SelectQuery extends Query {
357
352
 
358
353
  /**
359
354
  * Add WHERE expressions.
360
- * @param {...FilterExpr} expr Expressions to add.
361
- * @returns {this}
355
+ * @param expr Expressions to add.
362
356
  */
363
- where(...expr) {
357
+ where(...expr: FilterExpr[]): this {
364
358
  this._where = this._where.concat(exprList(expr, asVerbatim));
365
359
  return this;
366
360
  }
367
361
 
368
362
  /**
369
363
  * Set WHERE expressions, replacing any prior expressions.
370
- * @param {...FilterExpr} expr Expressions to add.
371
- * @returns {this}
364
+ * @param expr Expressions to add.
372
365
  */
373
- setWhere(...expr) {
366
+ setWhere(...expr: FilterExpr[]): this {
374
367
  this._where = [];
375
368
  return this.where(...expr);
376
369
  }
377
370
 
378
371
  /**
379
372
  * Add GROUP BY expressions.
380
- * @param {...GroupByExpr} expr Expressions to add.
381
- * @returns {this}
373
+ * @param expr Expressions to add.
382
374
  */
383
- groupby(...expr) {
384
- this._groupby = this._groupby.concat(exprList(expr));
375
+ groupby(...expr: GroupByExpr[]): this {
376
+ this._groupby = this._groupby.concat(nodeList(expr));
385
377
  return this;
386
378
  }
387
379
 
388
380
  /**
389
381
  * Set GROUP BY expressions, replacing any prior expressions.
390
- * @param {...GroupByExpr} expr Expressions to add.
391
- * @returns {this}
382
+ * @param expr Expressions to add.
392
383
  */
393
- setGroupby(...expr) {
384
+ setGroupby(...expr: GroupByExpr[]): this {
394
385
  this._groupby = [];
395
386
  return this.groupby(...expr);
396
387
  }
397
388
 
398
389
  /**
399
390
  * Add HAVING expressions.
400
- * @param {...FilterExpr} expr Expressions to add.
401
- * @returns {this}
391
+ * @param expr Expressions to add.
402
392
  */
403
- having(...expr) {
393
+ having(...expr: FilterExpr[]): this {
404
394
  this._having = this._having.concat(exprList(expr, asVerbatim));
405
395
  return this;
406
396
  }
407
397
 
408
398
  /**
409
399
  * Add WINDOW definitions.
410
- * @param {...any} expr Expressions to add.
411
- * @returns {this}
400
+ * @param expr Window definitions to add.
412
401
  */
413
- window(...expr) {
414
- const list = [];
402
+ window(...expr: (Record<string, WindowDefNode> | null)[]): this {
403
+ const list: WindowClauseNode[] = [];
415
404
  expr.flat().forEach(e => {
416
405
  if (e != null) for (const name in e) {
417
- list.push(new WindowClauseNode(unquote(name), e[name]));
406
+ list.push(new WindowClauseNode(unquote(name)!, e[name]));
418
407
  }
419
408
  });
420
409
  this._window = this._window.concat(list);
@@ -423,22 +412,20 @@ export class SelectQuery extends Query {
423
412
 
424
413
  /**
425
414
  * Add QUALIFY expressions.
426
- * @param {...FilterExpr} expr Expressions to add.
427
- * @returns {this}
415
+ * @param expr Expressions to add.
428
416
  */
429
- qualify(...expr) {
417
+ qualify(...expr: FilterExpr[]): this {
430
418
  this._qualify = this._qualify.concat(exprList(expr, asVerbatim));
431
419
  return this;
432
420
  }
433
421
 
434
422
  /**
435
423
  * Generate a SQL query string.
436
- * @returns {string}
437
424
  */
438
425
  toString() {
439
426
  const {
440
427
  _with, _select, _distinct, _from, _sample, _where, _groupby,
441
- _having, _window, _qualify, _orderby, _limit, _offset
428
+ _having, _window, _qualify, _orderby, _limitPerc, _limit, _offset
442
429
  } = this;
443
430
  const sql = [];
444
431
 
@@ -484,35 +471,37 @@ export class SelectQuery extends Query {
484
471
  if (_orderby.length) sql.push(`ORDER BY ${_orderby.join(', ')}`);
485
472
 
486
473
  // LIMIT
487
- if (Number.isFinite(_limit)) sql.push(`LIMIT ${_limit}`);
474
+ if (_limit) sql.push(`LIMIT ${_limit}${_limitPerc ? '%' : ''}`);
488
475
 
489
476
  // OFFSET
490
- if (Number.isFinite(_offset)) sql.push(`OFFSET ${_offset}`);
477
+ if (_offset) sql.push(`OFFSET ${_offset}`);
491
478
 
492
479
  return sql.join(' ');
493
480
  }
494
481
  }
495
482
 
496
483
  export class DescribeQuery extends SQLNode {
484
+ readonly query: Query;
485
+
497
486
  /**
498
487
  * Instantiate a describe query.
488
+ * @param query The query to describe.
499
489
  */
500
- constructor(query) {
490
+ constructor(query: Query) {
501
491
  super(DESCRIBE_QUERY);
502
492
  this.query = query;
503
493
  }
504
494
 
505
495
  /**
506
496
  * Clone this describe query.
507
- * @returns {DescribeQuery}
508
497
  */
509
- clone() {
498
+ clone(): this {
499
+ // @ts-expect-error creates describe query
510
500
  return new DescribeQuery(this.query.clone());
511
501
  }
512
502
 
513
503
  /**
514
504
  * Generate a SQL query string.
515
- * @returns {string}
516
505
  */
517
506
  toString() {
518
507
  return `DESCRIBE ${this.query}`;
@@ -520,51 +509,53 @@ export class DescribeQuery extends SQLNode {
520
509
  }
521
510
 
522
511
  export class SetOperation extends Query {
512
+ /** The set operation to perform. */
513
+ readonly op: string;
514
+ /** The input queries to the set operation. */
515
+ readonly queries: Query[];
516
+
523
517
  /**
524
518
  * Instantiate a new set operation instance.
525
- * @param {string} op The set operation.
526
- * @param {Query[]} queries The subqueries.
519
+ * @param op The set operation.
520
+ * @param queries The subqueries.
527
521
  */
528
- constructor(op, queries) {
522
+ constructor(op: string, queries: Query[]) {
529
523
  super(SET_OPERATION);
530
- /**
531
- * @type {string}
532
- * @readonly
533
- */
534
524
  this.op = op;
535
- /**
536
- * @type {Query[]}
537
- * @readonly
538
- */
539
525
  this.queries = queries;
540
526
  }
541
527
 
528
+ /**
529
+ * Add a pointer to the query for which this query is a CTE.
530
+ * @param query The query for which this query is a CTE.
531
+ */
532
+ setCteFor(query: Query | null) {
533
+ super.setCteFor(query);
534
+ const { queries, cteFor } = this;
535
+ if (cteFor) queries.forEach(q => q.setCteFor(cteFor));
536
+ }
537
+
542
538
  /**
543
539
  * Return a list of subqueries.
544
- * @returns {Query[]}
545
540
  */
546
541
  get subqueries() {
547
- const { queries, cteFor } = this;
548
- // TODO: revisit this?
549
- if (cteFor) queries.forEach(q => q.cteFor = cteFor);
550
- return queries;
542
+ return this.queries;
551
543
  }
552
544
 
553
545
  /**
554
546
  * Clone this set operation.
555
- * @returns {SetOperation}
556
547
  */
557
- clone() {
548
+ clone(): this {
558
549
  const { op, queries, ...rest } = this;
550
+ // @ts-expect-error creates set operation
559
551
  return Object.assign(new SetOperation(op, queries), rest);
560
552
  }
561
553
 
562
554
  /**
563
555
  * Generate a SQL query string.
564
- * @returns {string}
565
556
  */
566
557
  toString() {
567
- const { op, queries, _with, _orderby, _limit, _offset } = this;
558
+ const { op, queries, _with, _orderby, _limitPerc, _limit, _offset } = this;
568
559
  const sql = [];
569
560
 
570
561
  // WITH
@@ -577,75 +568,72 @@ export class SetOperation extends Query {
577
568
  if (_orderby.length) sql.push(`ORDER BY ${_orderby.join(', ')}`);
578
569
 
579
570
  // LIMIT
580
- if (Number.isFinite(_limit)) sql.push(`LIMIT ${_limit}`);
571
+ if (_limit) sql.push(`LIMIT ${_limit}${_limitPerc ? '%' : ''}`);
581
572
 
582
573
  // OFFSET
583
- if (Number.isFinite(_offset)) sql.push(`OFFSET ${_offset}`);
574
+ if (_offset) sql.push(`OFFSET ${_offset}`);
584
575
 
585
576
  return sql.join(' ');
586
577
  }
587
578
  }
588
579
 
589
580
  class WithClause {
581
+ /** The common table expressions (CTE). */
582
+ readonly _with: WithExpr[];
583
+
590
584
  /**
591
585
  * Instantiate a new WITH clause instance.
592
- * @param {...WithExpr} expr The WITH CTE queries.
586
+ * @param expr The WITH CTE queries.
593
587
  */
594
- constructor(...expr) {
588
+ constructor(...expr: WithExpr[]) {
595
589
  this._with = expr;
596
590
  }
597
591
 
598
592
  /**
599
593
  * Create a new select query with the given SELECT expressions.
600
- * @param {...SelectExpr} expr The SELECT expressions.
601
- * @returns {SelectQuery}
594
+ * @param expr The SELECT expressions.
602
595
  */
603
- select(...expr) {
596
+ select(...expr: SelectExpr[]) {
604
597
  return Query.select(...expr).with(...this._with);
605
598
  }
606
599
 
607
600
  /**
608
601
  * Create a new select query with the given FROM expressions.
609
- * @param {...FromExpr} expr The FROM expressions.
610
- * @returns {SelectQuery}
602
+ * @param expr The FROM expressions.
611
603
  */
612
- from(...expr) {
604
+ from(...expr: FromExpr[]) {
613
605
  return Query.from(...expr).with(...this._with);
614
606
  }
615
607
 
616
608
  /**
617
609
  * Create a new UNION set operation over the given queries.
618
- * @param {...Query} queries The queries.
619
- * @returns {SetOperation}
610
+ * @param queries The queries.
620
611
  */
621
- union(...queries) {
612
+ union(...queries: Query[]) {
622
613
  return Query.union(...queries).with(...this._with);
623
614
  }
624
615
 
625
616
  /**
626
617
  * Create a new UNION ALL set operation over the given queries.
627
- * @param {...Query} queries The queries.
628
- * @returns {SetOperation}
618
+ * @param queries The queries.
629
619
  */
630
- unionAll(...queries) {
620
+ unionAll(...queries: Query[]) {
631
621
  return Query.unionAll(...queries).with(...this._with);
632
622
  }
633
623
 
634
624
  /**
635
625
  * Create a new INTERSECT set operation over the given queries.
636
- * @param {...Query} queries The queries.
637
- * @returns {SetOperation}
626
+ * @param queries The queries.
638
627
  */
639
- intersect(...queries) {
628
+ intersect(...queries: Query[]) {
640
629
  return Query.intersect(...queries).with(...this._with);
641
630
  }
642
631
 
643
632
  /**
644
633
  * Create a new EXCEPT set operation over the given queries.
645
- * @param {...Query} queries The queries.
646
- * @returns {SetOperation}
634
+ * @param queries The queries.
647
635
  */
648
- except(...queries) {
636
+ except(...queries: Query[]) {
649
637
  return Query.except(...queries).with(...this._with);
650
638
  }
651
639
  }