@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,50 +1,43 @@
1
- /**
2
- * @import { ExprValue } from '../types.js'
3
- */
1
+ import { ExprValue } from '../types.js';
4
2
  import { CASE, WHEN } from '../constants.js';
5
3
  import { asNode } from '../util/ast.js';
6
4
  import { ExprNode, SQLNode } from './node.js';
7
5
 
8
6
  export class CaseNode extends ExprNode {
7
+ /** The optional base expression. */
8
+ readonly expr?: ExprNode;
9
+ /** An array of WHEN/THEN expression nodes. */
10
+ readonly _when: WhenNode[];
11
+ /** An ELSE expression. */
12
+ readonly _else?: ExprNode;
13
+
9
14
  /**
10
15
  * Instantiate a case node.
11
- * @param {ExprNode} [expr] An optional base expression, that comes
16
+ * @param expr An optional base expression, that comes
12
17
  * immediately after the CASE keyword. If specified, this case statement
13
18
  * acts like a switch statement, with WHEN expressions as values to
14
19
  * match against the switch value rather than boolean conditions.
15
- * @param {WhenNode[]} [when] An array of WHEN/THEN expression nodes.
16
- * @param {ExprNode} [elseExpr] An ELSE expression.
20
+ * @param when An array of WHEN/THEN expression nodes.
21
+ * @param elseExpr An ELSE expression.
17
22
  */
18
- constructor(expr = undefined, when = [], elseExpr = undefined) {
23
+ constructor(
24
+ expr: ExprNode | undefined = undefined,
25
+ when: WhenNode[] = [],
26
+ elseExpr: ExprNode | undefined = undefined
27
+ ) {
19
28
  super(CASE);
20
- /**
21
- * The optional base expression.
22
- * @type {ExprNode}
23
- * @readonly
24
- */
25
29
  this.expr = expr;
26
- /**
27
- * An array of WHEN/THEN expression nodes.
28
- * @type {WhenNode[]}
29
- * @readonly
30
- */
31
30
  this._when = when;
32
- /**
33
- * An ELSE expression.
34
- * @type {ExprNode}
35
- * @readonly
36
- */
37
31
  this._else = elseExpr;
38
32
  }
39
33
 
40
34
  /**
41
35
  * Return a new case node with the given conditional added as
42
36
  * the last WHEN / THEN pair.
43
- * @param {ExprValue} cond The WHEN condition expression.
44
- * @param {ExprValue} value The THEN value expression.
45
- * @returns {CaseNode}
37
+ * @param cond The WHEN condition expression.
38
+ * @param value The THEN value expression.
46
39
  */
47
- when(cond, value) {
40
+ when(cond: ExprValue, value: ExprValue) {
48
41
  return new CaseNode(
49
42
  this.expr,
50
43
  this._when.concat(new WhenNode(asNode(cond), asNode(value))),
@@ -54,16 +47,14 @@ export class CaseNode extends ExprNode {
54
47
 
55
48
  /**
56
49
  * Return a new case node with the given ELSE expression.
57
- * @param {ExprValue} expr The ELSE expression.
58
- * @returns {CaseNode}
50
+ * @param expr The ELSE expression.
59
51
  */
60
- else(expr) {
52
+ else(expr: ExprValue) {
61
53
  return new CaseNode(this.expr, this._when, asNode(expr));
62
54
  }
63
55
 
64
56
  /**
65
57
  * Generate a SQL query string for this node.
66
- * @returns {string}
67
58
  */
68
59
  toString() {
69
60
  return 'CASE '
@@ -75,30 +66,24 @@ export class CaseNode extends ExprNode {
75
66
  }
76
67
 
77
68
  export class WhenNode extends SQLNode {
69
+ /** The condition expression. */
70
+ readonly when: ExprNode;
71
+ /** The value expression. */
72
+ readonly then: ExprNode;
73
+
78
74
  /**
79
75
  * Instantiate a case node.
80
- * @param {ExprNode} when The WHEN condition expression.
81
- * @param {ExprNode} then The THEN value expression.
76
+ * @param when The WHEN condition expression.
77
+ * @param then The THEN value expression.
82
78
  */
83
- constructor(when, then) {
79
+ constructor(when: ExprNode, then: ExprNode) {
84
80
  super(WHEN);
85
- /**
86
- * The condition expression.
87
- * @type {ExprNode}
88
- * @readonly
89
- */
90
81
  this.when = when;
91
- /**
92
- * The value expression.
93
- * @type {ExprNode}
94
- * @readonly
95
- */
96
82
  this.then = then;
97
83
  }
98
84
 
99
85
  /**
100
86
  * Generate a SQL query string for this node.
101
- * @returns {string}
102
87
  */
103
88
  toString() {
104
89
  return `WHEN ${this.when} THEN ${this.then}`;
@@ -2,30 +2,24 @@ import { CAST } from '../constants.js';
2
2
  import { ExprNode } from './node.js';
3
3
 
4
4
  export class CastNode extends ExprNode {
5
+ /** The expression to type cast. */
6
+ readonly expr: ExprNode;
7
+ /** The type to cast to. */
8
+ readonly cast: string;
9
+
5
10
  /**
6
11
  * Instantiate a cast node.
7
- * @param {ExprNode} expr The expression to type cast.
8
- * @param {string} type The type to cast to.
12
+ * @param expr The expression to type cast.
13
+ * @param type The type to cast to.
9
14
  */
10
- constructor(expr, type) {
15
+ constructor(expr: ExprNode, type: string) {
11
16
  super(CAST);
12
- /**
13
- * The expression to type cast.
14
- * @type {ExprNode}
15
- * @readonly
16
- */
17
17
  this.expr = expr;
18
- /**
19
- * The type to cast to.
20
- * @type {string}
21
- * @readonly
22
- */
23
18
  this.cast = type;
24
19
  }
25
20
 
26
21
  /**
27
22
  * Generate a SQL query string for this node.
28
- * @returns {string}
29
23
  */
30
24
  toString() {
31
25
  // TODO? could include check to see if parens are necessary
@@ -0,0 +1,27 @@
1
+ import { COLLATE } from '../constants.js';
2
+ import { ExprNode } from './node.js';
3
+
4
+ export class CollateNode extends ExprNode {
5
+ /** The expression to collate. */
6
+ readonly expr: ExprNode;
7
+ /** The collation type. */
8
+ readonly collation: string;
9
+
10
+ /**
11
+ * Instantiate a collate node.
12
+ * @param expr The expression to collate.
13
+ * @param collation The collation type.
14
+ */
15
+ constructor(expr: ExprNode, collation: string) {
16
+ super(COLLATE);
17
+ this.expr = expr;
18
+ this.collation = collation;
19
+ }
20
+
21
+ /**
22
+ * Generate a SQL query string for this node.
23
+ */
24
+ toString() {
25
+ return `${this.expr} ${COLLATE} ${this.collation}`;
26
+ }
27
+ }
@@ -0,0 +1,34 @@
1
+ import type { ParamNode } from './param.js';
2
+ import type { TableRefNode } from './table-ref.js';
3
+ import { COLUMN_PARAM } from '../constants.js';
4
+ import { ColumnRefNode } from './column-ref.js';
5
+
6
+ /**
7
+ * Check if a value is a dynamic column reference node.
8
+ * @param value The value to check.
9
+ */
10
+ export function isColumnParam(value: unknown): value is ColumnParamNode {
11
+ return value instanceof ColumnParamNode;
12
+ }
13
+
14
+ export class ColumnParamNode extends ColumnRefNode {
15
+ /** The column name as a parameter node */
16
+ readonly param: ParamNode;
17
+
18
+ /**
19
+ * Instantiate a column param node.
20
+ * @param param The column name as a parameter node.
21
+ * @param table The table reference.
22
+ */
23
+ constructor(param: ParamNode, table?: TableRefNode) {
24
+ super(COLUMN_PARAM, table);
25
+ this.param = param;
26
+ }
27
+
28
+ /**
29
+ * Returns the column name.
30
+ */
31
+ get column() {
32
+ return `${this.param.value}`;
33
+ }
34
+ }
@@ -1,45 +1,39 @@
1
- /**
2
- * @import { TableRefNode } from './table-ref.js'
3
- */
1
+ import type { TableRefNode } from './table-ref.js';
4
2
  import { COLUMN_REF } from '../constants.js';
5
3
  import { quoteIdentifier } from '../util/string.js';
6
4
  import { ExprNode } from './node.js';
7
5
 
8
6
  /**
9
7
  * Check if a value is a column reference node.
10
- * @param {*} value The value to check.
11
- * @returns {value is ColumnRefNode}
8
+ * @param value The value to check.
12
9
  */
13
- export function isColumnRef(value) {
10
+ export function isColumnRef(value: unknown): value is ColumnRefNode {
14
11
  return value instanceof ColumnRefNode;
15
12
  }
16
13
 
17
14
  export class ColumnRefNode extends ExprNode {
15
+ /** The table reference. */
16
+ readonly table?: TableRefNode;
17
+
18
18
  /**
19
19
  * Instantiate a column reference node.
20
- * @param {TableRefNode} [table] The table reference.
20
+ * @param type The AST node type.
21
+ * @param table The table reference.
21
22
  */
22
- constructor(type, table) {
23
+ constructor(type: string, table?: TableRefNode) {
23
24
  super(type);
24
- /**
25
- * The table reference.
26
- * @type {TableRefNode}
27
- * @readonly
28
- */
29
25
  this.table = table;
30
26
  }
31
27
 
32
28
  /**
33
29
  * Returns the column name.
34
- * @returns {string}
35
30
  */
36
31
  get column() {
37
- return null; // subclasses to override
32
+ return ''; // subclasses to override
38
33
  }
39
34
 
40
35
  /**
41
36
  * Generate a SQL query string for this node.
42
- * @returns {string}
43
37
  */
44
38
  toString() {
45
39
  const { column, table } = this;
@@ -50,24 +44,21 @@ export class ColumnRefNode extends ExprNode {
50
44
  }
51
45
 
52
46
  export class ColumnNameRefNode extends ColumnRefNode {
47
+ /** The column name. */
48
+ readonly name: string;
49
+
53
50
  /**
54
51
  * Instantiate a column reference node.
55
- * @param {string} name The column name.
56
- * @param {TableRefNode} [table] The table reference.
52
+ * @param name The column name.
53
+ * @param table The table reference.
57
54
  */
58
- constructor(name, table) {
55
+ constructor(name: string, table?: TableRefNode) {
59
56
  super(COLUMN_REF, table);
60
- /**
61
- * The column name.
62
- * @type {string}
63
- * @readonly
64
- */
65
57
  this.name = name;
66
58
  }
67
59
 
68
60
  /**
69
61
  * Returns the column name.
70
- * @returns {string}
71
62
  */
72
63
  get column() {
73
64
  return this.name;
@@ -0,0 +1,28 @@
1
+ import { FRAGMENT } from '../constants.js';
2
+ import { ExprNode } from './node.js';
3
+
4
+ /**
5
+ * A SQL AST node made up of disjoint fragments that are combined to form
6
+ * a coherent expression. Along with verbatim content, this class serves
7
+ * as an "escape hatch" for handling more unstructured SQL content.
8
+ */
9
+ export class FragmentNode extends ExprNode {
10
+ /** The consecutive parts making up the fragment. */
11
+ readonly spans: ExprNode[];
12
+
13
+ /**
14
+ * Instantiate a fragment node with arbitrary content.
15
+ * @param spans The consecutive parts making up the fragment.
16
+ */
17
+ constructor(spans: ExprNode[]) {
18
+ super(FRAGMENT);
19
+ this.spans = spans;
20
+ }
21
+
22
+ /**
23
+ * Generate a SQL query string for this node.
24
+ */
25
+ toString() {
26
+ return this.spans.join('');
27
+ }
28
+ }
@@ -0,0 +1,40 @@
1
+ import type { SampleClauseNode } from './sample.js';
2
+ import { FROM_CLAUSE } from '../constants.js';
3
+ import { quoteIdentifier } from '../util/string.js';
4
+ import { SQLNode } from './node.js';
5
+ import { isQuery } from './query.js';
6
+ import { isTableRef } from './table-ref.js';
7
+
8
+ export class FromClauseNode extends SQLNode {
9
+ /** The from expression. */
10
+ readonly expr: SQLNode;
11
+ /** The output name. */
12
+ readonly alias?: string;
13
+ /** The table sample. */
14
+ readonly sample?: SampleClauseNode;
15
+
16
+ /**
17
+ * Instantiate a from node.
18
+ * @param expr The from expression.
19
+ * @param alias The output name.
20
+ * @param sample The table sample.
21
+ */
22
+ constructor(expr: SQLNode, alias?: string, sample?: SampleClauseNode) {
23
+ super(FROM_CLAUSE);
24
+ this.expr = expr;
25
+ this.alias = alias;
26
+ this.sample = sample;
27
+ }
28
+
29
+ /**
30
+ * Generate a SQL query string for this node.
31
+ */
32
+ toString() {
33
+ const { expr, alias, sample } = this;
34
+ const ref = isQuery(expr) ? `(${expr})` : `${expr}`;
35
+ const from = alias && !(isTableRef(expr) && expr.table.join('.') === alias)
36
+ ? `${ref} AS ${quoteIdentifier(alias)}`
37
+ : `${ref}`;
38
+ return `${from}${sample ? ` TABLESAMPLE ${sample}` : ''}`;
39
+ }
40
+ }
@@ -2,30 +2,24 @@ import { FUNCTION } from '../constants.js';
2
2
  import { ExprNode } from './node.js';
3
3
 
4
4
  export class FunctionNode extends ExprNode {
5
+ /** The function name. */
6
+ readonly name: string;
7
+ /** The function arguments. */
8
+ readonly args: ExprNode[];
9
+
5
10
  /**
6
11
  * Instantiate a function node.
7
- * @param {string} name The function name.
8
- * @param {ExprNode[]} [args=[]] The function arguments.
12
+ * @param name The function name.
13
+ * @param args The function arguments.
9
14
  */
10
- constructor(name, args = []) {
15
+ constructor(name: string, args: ExprNode[] = []) {
11
16
  super(FUNCTION);
12
- /**
13
- * The function name.
14
- * @type {string}
15
- * @readonly
16
- */
17
17
  this.name = name;
18
- /**
19
- * The function arguments.
20
- * @type {ExprNode[]}
21
- * @readonly
22
- */
23
18
  this.args = args;
24
19
  }
25
20
 
26
21
  /**
27
22
  * Generate a SQL query string for this node.
28
- * @returns {string}
29
23
  */
30
24
  toString() {
31
25
  const { name, args } = this;
@@ -2,30 +2,24 @@ import { IN_OPERATOR } from '../constants.js';
2
2
  import { ExprNode } from './node.js';
3
3
 
4
4
  export class InOpNode extends ExprNode {
5
+ /** The input expression. */
6
+ readonly expr: ExprNode;
7
+ /** The value set. */
8
+ readonly values: ExprNode[];
9
+
5
10
  /**
6
11
  * Instantiate an in operator node.
7
- * @param {ExprNode} expr The input expression.
8
- * @param {ExprNode[]} values The value set.
12
+ * @param expr The input expression.
13
+ * @param values The value set.
9
14
  */
10
- constructor(expr, values) {
15
+ constructor(expr: ExprNode, values: ExprNode[]) {
11
16
  super(IN_OPERATOR);
12
- /**
13
- * The input expression.
14
- * @type {ExprNode}
15
- * @readonly
16
- */
17
17
  this.expr = expr;
18
- /**
19
- * The value set.
20
- * @type {ExprNode[]}
21
- * @readonly
22
- */
23
18
  this.values = values;
24
19
  }
25
20
 
26
21
  /**
27
22
  * Generate a SQL query string for this node.
28
- * @returns {string}
29
23
  */
30
24
  toString() {
31
25
  return `(${this.expr} IN (${this.values.join(', ')}))`;
@@ -2,30 +2,24 @@ import { INTERVAL } from '../constants.js';
2
2
  import { ExprNode } from './node.js';
3
3
 
4
4
  export class IntervalNode extends ExprNode {
5
+ /** The interval name. */
6
+ readonly name: string;
7
+ /** The interval steps. */
8
+ readonly steps: number;
9
+
5
10
  /**
6
11
  * Instantiate an interval node.
7
- * @param {string} name The interval name.
8
- * @param {number} [steps=1] The interval steps.
12
+ * @param name The interval name.
13
+ * @param steps The interval steps.
9
14
  */
10
- constructor(name, steps = 1) {
15
+ constructor(name: string, steps: number = 1) {
11
16
  super(INTERVAL);
12
- /**
13
- * The interval name.
14
- * @type {string}
15
- * @readonly
16
- */
17
17
  this.name = name;
18
- /**
19
- * The interval steps.
20
- * @type {number}
21
- * @readonly
22
- */
23
18
  this.steps = steps;
24
19
  }
25
20
 
26
21
  /**
27
22
  * Generate a SQL query string for this node.
28
- * @returns {string}
29
23
  */
30
24
  toString() {
31
25
  return `INTERVAL ${this.steps} ${this.name}`;
@@ -2,30 +2,27 @@ import { LITERAL } from '../constants.js';
2
2
  import { ExprNode } from './node.js';
3
3
 
4
4
  export class LiteralNode extends ExprNode {
5
+ /** The literal value. */
6
+ readonly value: unknown;
7
+
5
8
  /**
6
9
  * Instantiate an literal node.
7
- * @param {*} value The literal value.
10
+ * @param value The literal value.
8
11
  */
9
- constructor(value) {
12
+ constructor(value: unknown) {
10
13
  super(LITERAL);
11
- /**
12
- * The literal value.
13
- * @type {any}
14
- * @readonly
15
- */
16
14
  this.value = value;
17
15
  }
18
16
 
19
17
  /**
20
18
  * Generate a SQL query string for this node.
21
- * @returns {string}
22
19
  */
23
20
  toString() {
24
21
  return literalToSQL(this.value);
25
22
  }
26
23
  }
27
24
 
28
- export function literalToSQL(value) {
25
+ export function literalToSQL(value: unknown) {
29
26
  switch (typeof value) {
30
27
  case 'number':
31
28
  return Number.isFinite(value) ? `${value}` : 'NULL';
@@ -0,0 +1,50 @@
1
+ import { LOGICAL_OPERATOR } from '../constants.js';
2
+ import { ExprNode } from './node.js';
3
+
4
+ export class LogicalOpNode<T extends ExprNode> extends ExprNode {
5
+ /** The logical operator */
6
+ readonly op: string;
7
+ /** The clause expressions. */
8
+ readonly clauses: T[];
9
+
10
+ /**
11
+ * Instantiate a logical operator node.
12
+ * @param op The logical operation.
13
+ * @param clauses The input clause expressions.
14
+ */
15
+ constructor(op: string, clauses: T[]) {
16
+ super(LOGICAL_OPERATOR);
17
+ this.op = op;
18
+ this.clauses = clauses;
19
+ }
20
+
21
+ /**
22
+ * Generate a SQL query string for this node.
23
+ */
24
+ toString() {
25
+ const c = this.clauses;
26
+ return c.length === 0 ? ''
27
+ : c.length === 1 ? `${c[0]}`
28
+ : `(${c.join(` ${this.op} `)})`;
29
+ }
30
+ }
31
+
32
+ export class AndNode<T extends ExprNode> extends LogicalOpNode<T> {
33
+ /**
34
+ * Instantiate a logical AND operator node.
35
+ * @param clauses The input clause expressions.
36
+ */
37
+ constructor(clauses: T[]) {
38
+ super('AND', clauses);
39
+ }
40
+ }
41
+
42
+ export class OrNode<T extends ExprNode> extends LogicalOpNode<T> {
43
+ /**
44
+ * Instantiate a logical OR operator node.
45
+ * @param clauses The input clause expressions.
46
+ */
47
+ constructor(clauses: T[]) {
48
+ super('OR', clauses);
49
+ }
50
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Check if a value is a SQL AST node.
3
+ * @param value The value to check.
4
+ */
5
+ export function isNode(value: unknown): value is SQLNode {
6
+ return value instanceof SQLNode;
7
+ }
8
+
9
+ export class SQLNode {
10
+ /** The SQL AST node type. */
11
+ readonly type: string;
12
+
13
+ /**
14
+ * Instantiate a SQL AST node.
15
+ * @param type The SQL AST node type.
16
+ */
17
+ constructor(type: string) {
18
+ this.type = type;
19
+ }
20
+
21
+ /**
22
+ * Create a shallow clone of this SQL AST node.
23
+ * @returns The shallow clone node.
24
+ */
25
+ clone(): this {
26
+ // @ts-expect-error use constructor
27
+ const clone = new this.constructor();
28
+ for (const key in this) {
29
+ clone[key] = this[key];
30
+ }
31
+ return clone;
32
+ }
33
+ }
34
+
35
+ /**
36
+ * AST node corresponding to an individual expression.
37
+ */
38
+ export class ExprNode extends SQLNode {
39
+ }
@@ -0,0 +1,38 @@
1
+ import { ORDER_BY } from '../constants.js';
2
+ import { ExprNode } from './node.js';
3
+
4
+ export class OrderByNode extends ExprNode {
5
+ /** The expression to order by. */
6
+ readonly expr: ExprNode;
7
+ /** Flag indicating descending order. */
8
+ readonly desc?: boolean;
9
+ /** Flag indicating if null values should be sorted first. */
10
+ readonly nullsFirst?: boolean;
11
+
12
+ /**
13
+ * Instantiate an order by entry node.
14
+ * @param expr The expression to order by.
15
+ * @param desc Flag indicating descending order.
16
+ * @param nullsFirst Flag indicating if null values should be sorted first.
17
+ */
18
+ constructor(expr: ExprNode, desc?: boolean, nullsFirst?: boolean) {
19
+ super(ORDER_BY);
20
+ this.expr = expr;
21
+ this.desc = desc;
22
+ this.nullsFirst = nullsFirst;
23
+ }
24
+
25
+ /**
26
+ * Generate a SQL query string for this node.
27
+ */
28
+ toString() {
29
+ const { expr, desc, nullsFirst } = this;
30
+ const dir = desc ? ' DESC'
31
+ : desc === false ? ' ASC'
32
+ : '';
33
+ const nf = nullsFirst ? ' NULLS FIRST'
34
+ : nullsFirst === false ? ' NULLS LAST'
35
+ : '';
36
+ return `${expr}${dir}${nf}`;
37
+ }
38
+ }