@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.
- package/LICENSE +1 -1
- package/README.md +0 -2
- package/dist/src/ast/aggregate.d.ts +82 -0
- package/dist/src/ast/aggregate.d.ts.map +1 -0
- package/dist/src/ast/aggregate.js +180 -0
- package/dist/src/ast/aggregate.js.map +1 -0
- package/dist/src/ast/between-op.d.ts +46 -0
- package/dist/src/ast/between-op.d.ts.map +1 -0
- package/dist/src/ast/between-op.js +60 -0
- package/dist/src/ast/between-op.js.map +1 -0
- package/dist/src/ast/binary-op.d.ts +21 -0
- package/dist/src/ast/binary-op.d.ts.map +1 -0
- package/dist/src/ast/binary-op.js +29 -0
- package/dist/src/ast/binary-op.js.map +1 -0
- package/dist/src/ast/case.d.ts +53 -0
- package/dist/src/ast/case.d.ts.map +1 -0
- package/dist/src/ast/case.js +75 -0
- package/dist/src/ast/case.js.map +1 -0
- package/dist/src/ast/cast.d.ts +18 -0
- package/dist/src/ast/cast.d.ts.map +1 -0
- package/dist/src/ast/cast.js +26 -0
- package/dist/src/ast/cast.js.map +1 -0
- package/dist/src/ast/collate.d.ts +18 -0
- package/dist/src/ast/collate.d.ts.map +1 -0
- package/dist/src/ast/collate.js +25 -0
- package/dist/src/ast/collate.js.map +1 -0
- package/dist/src/ast/column-param.d.ts +23 -0
- package/dist/src/ast/column-param.d.ts.map +1 -0
- package/dist/src/ast/column-param.js +29 -0
- package/dist/src/ast/column-param.js.map +1 -0
- package/dist/src/ast/column-ref.d.ts +40 -0
- package/dist/src/ast/column-ref.d.ts.map +1 -0
- package/dist/src/ast/column-ref.js +58 -0
- package/dist/src/ast/column-ref.js.map +1 -0
- package/dist/src/ast/fragment.d.ts +20 -0
- package/dist/src/ast/fragment.d.ts.map +1 -0
- package/dist/src/ast/fragment.js +26 -0
- package/dist/src/ast/fragment.js.map +1 -0
- package/dist/src/ast/from.d.ts +22 -0
- package/dist/src/ast/from.d.ts.map +1 -0
- package/dist/src/ast/from.js +37 -0
- package/dist/src/ast/from.js.map +1 -0
- package/dist/src/ast/function.d.ts +18 -0
- package/dist/src/ast/function.d.ts.map +1 -0
- package/dist/src/ast/function.js +26 -0
- package/dist/src/ast/function.js.map +1 -0
- package/dist/src/ast/in-op.d.ts +18 -0
- package/dist/src/ast/in-op.d.ts.map +1 -0
- package/dist/src/ast/in-op.js +25 -0
- package/dist/src/ast/in-op.js.map +1 -0
- package/dist/src/ast/interval.d.ts +18 -0
- package/dist/src/ast/interval.d.ts.map +1 -0
- package/dist/src/ast/interval.js +25 -0
- package/dist/src/ast/interval.js.map +1 -0
- package/dist/src/ast/literal.d.ts +16 -0
- package/dist/src/ast/literal.d.ts.map +1 -0
- package/dist/src/ast/literal.js +53 -0
- package/dist/src/ast/literal.js.map +1 -0
- package/dist/src/ast/logical-op.d.ts +32 -0
- package/dist/src/ast/logical-op.d.ts.map +1 -0
- package/dist/src/ast/logical-op.js +46 -0
- package/dist/src/ast/logical-op.js.map +1 -0
- package/dist/src/ast/node.d.ts +25 -0
- package/dist/src/ast/node.d.ts.map +1 -0
- package/dist/src/ast/node.js +36 -0
- package/dist/src/ast/node.js.map +1 -0
- package/dist/src/ast/order-by.d.ts +21 -0
- package/dist/src/ast/order-by.d.ts.map +1 -0
- package/dist/src/ast/order-by.js +36 -0
- package/dist/src/ast/order-by.js.map +1 -0
- package/dist/{types → src}/ast/param.d.ts +11 -11
- package/dist/src/ast/param.d.ts.map +1 -0
- package/dist/src/ast/param.js +28 -0
- package/dist/src/ast/param.js.map +1 -0
- package/dist/src/ast/query.d.ts +294 -0
- package/dist/src/ast/query.d.ts.map +1 -0
- package/dist/src/ast/query.js +584 -0
- package/dist/src/ast/query.js.map +1 -0
- package/dist/src/ast/sample.d.ts +27 -0
- package/dist/src/ast/sample.d.ts.map +1 -0
- package/dist/src/ast/sample.js +38 -0
- package/dist/src/ast/sample.js.map +1 -0
- package/dist/src/ast/select.d.ts +19 -0
- package/dist/src/ast/select.d.ts.map +1 -0
- package/dist/src/ast/select.js +35 -0
- package/dist/src/ast/select.js.map +1 -0
- package/dist/src/ast/subquery.d.ts +16 -0
- package/dist/src/ast/subquery.d.ts.map +1 -0
- package/dist/src/ast/subquery.js +21 -0
- package/dist/src/ast/subquery.js.map +1 -0
- package/dist/src/ast/table-ref.d.ts +24 -0
- package/dist/src/ast/table-ref.d.ts.map +1 -0
- package/dist/src/ast/table-ref.js +35 -0
- package/dist/src/ast/table-ref.js.map +1 -0
- package/dist/src/ast/unary-op.d.ts +40 -0
- package/dist/src/ast/unary-op.d.ts.map +1 -0
- package/dist/src/ast/unary-op.js +52 -0
- package/dist/src/ast/unary-op.js.map +1 -0
- package/dist/src/ast/verbatim.d.ts +18 -0
- package/dist/src/ast/verbatim.d.ts.map +1 -0
- package/dist/src/ast/verbatim.js +25 -0
- package/dist/src/ast/verbatim.js.map +1 -0
- package/dist/src/ast/window-frame.d.ts +54 -0
- package/dist/src/ast/window-frame.d.ts.map +1 -0
- package/dist/src/ast/window-frame.js +79 -0
- package/dist/src/ast/window-frame.js.map +1 -0
- package/dist/src/ast/window.d.ts +128 -0
- package/dist/src/ast/window.d.ts.map +1 -0
- package/dist/src/ast/window.js +194 -0
- package/dist/src/ast/window.js.map +1 -0
- package/dist/{types → src}/ast/with.d.ts +15 -22
- package/dist/src/ast/with.d.ts.map +1 -0
- package/dist/src/ast/with.js +36 -0
- package/dist/src/ast/with.js.map +1 -0
- package/dist/src/constants.d.ts +38 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +38 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/functions/aggregate.d.ts +236 -0
- package/dist/src/functions/aggregate.d.ts.map +1 -0
- package/dist/src/functions/aggregate.js +308 -0
- package/dist/src/functions/aggregate.js.map +1 -0
- package/dist/{types → src}/functions/case.d.ts +7 -7
- package/dist/src/functions/case.d.ts.map +1 -0
- package/dist/src/functions/case.js +17 -0
- package/dist/src/functions/case.js.map +1 -0
- package/dist/src/functions/cast.d.ts +23 -0
- package/dist/src/functions/cast.d.ts.map +1 -0
- package/dist/src/functions/cast.js +32 -0
- package/dist/src/functions/cast.js.map +1 -0
- package/dist/src/functions/collate.d.ts +10 -0
- package/dist/src/functions/collate.d.ts.map +1 -0
- package/dist/src/functions/collate.js +12 -0
- package/dist/src/functions/collate.js.map +1 -0
- package/dist/src/functions/column.d.ts +10 -0
- package/dist/src/functions/column.d.ts.map +1 -0
- package/dist/src/functions/column.js +17 -0
- package/dist/src/functions/column.js.map +1 -0
- package/dist/{types → src}/functions/cte.d.ts +7 -7
- package/dist/src/functions/cte.d.ts.map +1 -0
- package/dist/src/functions/cte.js +14 -0
- package/dist/src/functions/cte.js.map +1 -0
- package/dist/src/functions/datetime.d.ts +32 -0
- package/dist/src/functions/datetime.d.ts.map +1 -0
- package/dist/src/functions/datetime.js +45 -0
- package/dist/src/functions/datetime.js.map +1 -0
- package/dist/src/functions/interval.d.ts +48 -0
- package/dist/src/functions/interval.d.ts.map +1 -0
- package/dist/src/functions/interval.js +66 -0
- package/dist/src/functions/interval.js.map +1 -0
- package/dist/{types → src}/functions/literal.d.ts +8 -8
- package/dist/src/functions/literal.d.ts.map +1 -0
- package/dist/src/functions/literal.js +20 -0
- package/dist/src/functions/literal.js.map +1 -0
- package/dist/src/functions/numeric.d.ts +80 -0
- package/dist/src/functions/numeric.d.ts.map +1 -0
- package/dist/src/functions/numeric.js +110 -0
- package/dist/src/functions/numeric.js.map +1 -0
- package/dist/src/functions/operators.d.ts +169 -0
- package/dist/src/functions/operators.d.ts.map +1 -0
- package/dist/src/functions/operators.js +235 -0
- package/dist/src/functions/operators.js.map +1 -0
- package/dist/src/functions/order-by.d.ts +15 -0
- package/dist/src/functions/order-by.d.ts.map +1 -0
- package/dist/src/functions/order-by.js +19 -0
- package/dist/src/functions/order-by.js.map +1 -0
- package/dist/src/functions/spatial.d.ts +32 -0
- package/dist/src/functions/spatial.d.ts.map +1 -0
- package/dist/src/functions/spatial.js +44 -0
- package/dist/src/functions/spatial.js.map +1 -0
- package/dist/{types → src}/functions/sql-template-tag.d.ts +8 -10
- package/dist/src/functions/sql-template-tag.d.ts.map +1 -0
- package/dist/src/functions/sql-template-tag.js +44 -0
- package/dist/src/functions/sql-template-tag.js.map +1 -0
- package/dist/src/functions/string.d.ts +49 -0
- package/dist/src/functions/string.d.ts.map +1 -0
- package/dist/src/functions/string.js +67 -0
- package/dist/src/functions/string.js.map +1 -0
- package/dist/src/functions/table-ref.d.ts +10 -0
- package/dist/src/functions/table-ref.d.ts.map +1 -0
- package/dist/src/functions/table-ref.js +13 -0
- package/dist/src/functions/table-ref.js.map +1 -0
- package/dist/src/functions/util.d.ts +7 -0
- package/dist/src/functions/util.d.ts.map +1 -0
- package/dist/src/functions/util.js +9 -0
- package/dist/src/functions/util.js.map +1 -0
- package/dist/src/functions/window-frame.d.ts +41 -0
- package/dist/src/functions/window-frame.d.ts.map +1 -0
- package/dist/src/functions/window-frame.js +52 -0
- package/dist/src/functions/window-frame.js.map +1 -0
- package/dist/{types → src}/functions/window.d.ts +24 -39
- package/dist/src/functions/window.d.ts.map +1 -0
- package/dist/src/functions/window.js +96 -0
- package/dist/src/functions/window.js.map +1 -0
- package/dist/src/index.d.ts +69 -0
- package/dist/src/index.d.ts.map +1 -0
- package/{src → dist/src}/index.js +16 -12
- package/dist/src/index.js.map +1 -0
- package/dist/src/load/create.d.ts +10 -0
- package/dist/src/load/create.d.ts.map +1 -0
- package/dist/src/load/create.js +14 -0
- package/dist/src/load/create.js.map +1 -0
- package/dist/src/load/extension.d.ts +2 -0
- package/dist/src/load/extension.d.ts.map +1 -0
- package/dist/src/load/extension.js +4 -0
- package/dist/src/load/extension.js.map +1 -0
- package/dist/src/load/load.d.ts +18 -0
- package/dist/src/load/load.d.ts.map +1 -0
- package/dist/src/load/load.js +80 -0
- package/dist/src/load/load.js.map +1 -0
- package/dist/src/load/sql-from.d.ts +14 -0
- package/dist/src/load/sql-from.d.ts.map +1 -0
- package/dist/src/load/sql-from.js +29 -0
- package/dist/src/load/sql-from.js.map +1 -0
- package/dist/src/transforms/bin-1d.d.ts +16 -0
- package/dist/src/transforms/bin-1d.d.ts.map +1 -0
- package/dist/src/transforms/bin-1d.js +21 -0
- package/dist/src/transforms/bin-1d.js.map +1 -0
- package/dist/src/transforms/bin-2d.d.ts +19 -0
- package/dist/src/transforms/bin-2d.d.ts.map +1 -0
- package/dist/src/transforms/bin-2d.js +27 -0
- package/dist/src/transforms/bin-2d.js.map +1 -0
- package/dist/src/transforms/bin-date.d.ts +31 -0
- package/dist/src/transforms/bin-date.d.ts.map +1 -0
- package/dist/src/transforms/bin-date.js +20 -0
- package/dist/src/transforms/bin-date.js.map +1 -0
- package/dist/src/transforms/bin-histogram.d.ts +37 -0
- package/dist/src/transforms/bin-histogram.d.ts.map +1 -0
- package/dist/src/transforms/bin-histogram.js +32 -0
- package/dist/src/transforms/bin-histogram.js.map +1 -0
- package/dist/src/transforms/bin-linear-1d.d.ts +11 -0
- package/dist/src/transforms/bin-linear-1d.d.ts.map +1 -0
- package/dist/src/transforms/bin-linear-1d.js +25 -0
- package/dist/src/transforms/bin-linear-1d.js.map +1 -0
- package/dist/src/transforms/bin-linear-2d.d.ts +20 -0
- package/dist/src/transforms/bin-linear-2d.d.ts.map +1 -0
- package/dist/src/transforms/bin-linear-2d.js +49 -0
- package/dist/src/transforms/bin-linear-2d.js.map +1 -0
- package/dist/src/transforms/filter-query.d.ts +12 -0
- package/dist/src/transforms/filter-query.d.ts.map +1 -0
- package/dist/src/transforms/filter-query.js +39 -0
- package/dist/src/transforms/filter-query.js.map +1 -0
- package/dist/src/transforms/line-density.d.ts +24 -0
- package/dist/src/transforms/line-density.d.ts.map +1 -0
- package/dist/src/transforms/line-density.js +98 -0
- package/dist/src/transforms/line-density.js.map +1 -0
- package/dist/src/transforms/m4.d.ts +19 -0
- package/dist/src/transforms/m4.d.ts.map +1 -0
- package/dist/src/transforms/m4.js +38 -0
- package/dist/src/transforms/m4.js.map +1 -0
- package/dist/src/transforms/scales.d.ts +30 -0
- package/dist/src/transforms/scales.d.ts.map +1 -0
- package/dist/src/transforms/scales.js +103 -0
- package/dist/src/transforms/scales.js.map +1 -0
- package/dist/src/transforms/util/bin-step.d.ts +50 -0
- package/dist/src/transforms/util/bin-step.d.ts.map +1 -0
- package/dist/src/transforms/util/bin-step.js +53 -0
- package/dist/src/transforms/util/bin-step.js.map +1 -0
- package/dist/src/transforms/util/time-interval.d.ts +14 -0
- package/dist/src/transforms/util/time-interval.d.ts.map +1 -0
- package/dist/src/transforms/util/time-interval.js +88 -0
- package/dist/src/transforms/util/time-interval.js.map +1 -0
- package/dist/{types → src}/types.d.ts +6 -19
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/{types → src}/util/ast.d.ts +26 -25
- package/dist/src/util/ast.d.ts.map +1 -0
- package/{src → dist/src}/util/ast.js +36 -41
- package/dist/src/util/ast.js.map +1 -0
- package/dist/src/util/function.d.ts +56 -0
- package/dist/src/util/function.d.ts.map +1 -0
- package/dist/src/util/function.js +73 -0
- package/dist/src/util/function.js.map +1 -0
- package/dist/src/util/identity.d.ts +6 -0
- package/dist/src/util/identity.d.ts.map +1 -0
- package/dist/src/util/identity.js +8 -0
- package/dist/src/util/identity.js.map +1 -0
- package/dist/src/util/string.d.ts +4 -0
- package/dist/src/util/string.d.ts.map +1 -0
- package/dist/src/util/string.js +14 -0
- package/dist/src/util/string.js.map +1 -0
- package/dist/src/util/type-check.d.ts +17 -0
- package/dist/src/util/type-check.d.ts.map +1 -0
- package/dist/src/util/type-check.js +28 -0
- package/dist/src/util/type-check.js.map +1 -0
- package/dist/src/visit/clone.d.ts +7 -0
- package/dist/src/visit/clone.d.ts.map +1 -0
- package/dist/src/visit/clone.js +52 -0
- package/dist/src/visit/clone.js.map +1 -0
- package/dist/src/visit/recurse.d.ts +2 -0
- package/dist/src/visit/recurse.d.ts.map +1 -0
- package/dist/src/visit/recurse.js +36 -0
- package/dist/src/visit/recurse.js.map +1 -0
- package/dist/src/visit/rewrite.d.ts +9 -0
- package/dist/src/visit/rewrite.d.ts.map +1 -0
- package/dist/src/visit/rewrite.js +39 -0
- package/dist/src/visit/rewrite.js.map +1 -0
- package/dist/{types → src}/visit/visitors.d.ts +14 -16
- package/dist/src/visit/visitors.d.ts.map +1 -0
- package/dist/src/visit/visitors.js +95 -0
- package/dist/src/visit/visitors.js.map +1 -0
- package/dist/src/visit/walk.d.ts +21 -0
- package/dist/src/visit/walk.d.ts.map +1 -0
- package/dist/src/visit/walk.js +32 -0
- package/dist/src/visit/walk.js.map +1 -0
- package/package.json +12 -10
- package/src/ast/aggregate.ts +198 -0
- package/src/ast/{between-op.js → between-op.ts} +19 -26
- package/src/ast/binary-op.ts +31 -0
- package/src/ast/{case.js → case.ts} +29 -44
- package/src/ast/{cast.js → cast.ts} +8 -14
- package/src/ast/collate.ts +27 -0
- package/src/ast/column-param.ts +34 -0
- package/src/ast/{column-ref.js → column-ref.ts} +16 -25
- package/src/ast/fragment.ts +28 -0
- package/src/ast/from.ts +40 -0
- package/src/ast/{function.js → function.ts} +8 -14
- package/src/ast/{in-op.js → in-op.ts} +8 -14
- package/src/ast/{interval.js → interval.ts} +8 -14
- package/src/ast/{literal.js → literal.ts} +6 -9
- package/src/ast/logical-op.ts +50 -0
- package/src/ast/node.ts +39 -0
- package/src/ast/order-by.ts +38 -0
- package/src/ast/{param.js → param.ts} +6 -12
- package/src/ast/{query.js → query.ts} +193 -205
- package/src/ast/sample.ts +47 -0
- package/src/ast/{select.js → select.ts} +10 -16
- package/src/ast/subquery.ts +24 -0
- package/src/ast/{table-ref.js → table-ref.ts} +7 -12
- package/src/ast/{unary-op.js → unary-op.ts} +16 -23
- package/src/ast/{verbatim.js → verbatim.ts} +9 -8
- package/src/ast/window-frame.ts +97 -0
- package/src/ast/window.ts +246 -0
- package/src/ast/{with.js → with.ts} +19 -20
- package/src/{constants.js → constants.ts} +5 -6
- package/src/functions/aggregate.ts +344 -0
- package/src/functions/{case.js → case.ts} +5 -8
- package/src/functions/{cast.js → cast.ts} +9 -13
- package/src/functions/collate.ts +13 -0
- package/src/functions/{column.js → column.ts} +9 -10
- package/src/functions/{cte.js → cte.ts} +9 -6
- package/src/functions/datetime.ts +50 -0
- package/src/functions/interval.ts +74 -0
- package/src/functions/{literal.js → literal.ts} +6 -7
- package/src/functions/numeric.ts +125 -0
- package/src/functions/operators.ts +272 -0
- package/src/functions/order-by.ts +21 -0
- package/src/functions/spatial.ts +50 -0
- package/src/functions/{sql-template-tag.js → sql-template-tag.ts} +16 -13
- package/src/functions/string.ts +79 -0
- package/src/functions/{table-ref.js → table-ref.ts} +4 -4
- package/src/functions/util.ts +10 -0
- package/src/functions/window-frame.ts +58 -0
- package/src/functions/{window.js → window.ts} +18 -35
- package/src/index.ts +75 -0
- package/src/load/{create.js → create.ts} +9 -3
- package/src/load/extension.ts +3 -0
- package/src/load/{load.js → load.ts} +26 -11
- package/src/load/{sql-from.js → sql-from.ts} +14 -7
- package/src/transforms/{bin-1d.js → bin-1d.ts} +13 -9
- package/src/transforms/{bin-2d.js → bin-2d.ts} +17 -13
- package/src/transforms/bin-date.ts +48 -0
- package/src/transforms/bin-histogram.ts +61 -0
- package/src/transforms/{bin-linear-1d.js → bin-linear-1d.ts} +16 -11
- package/src/transforms/{bin-linear-2d.js → bin-linear-2d.ts} +23 -35
- package/src/transforms/filter-query.ts +40 -0
- package/src/transforms/{line-density.js → line-density.ts} +19 -17
- package/src/transforms/{m4.js → m4.ts} +17 -14
- package/src/transforms/{scales.js → scales.ts} +57 -14
- package/src/transforms/util/bin-step.ts +100 -0
- package/src/transforms/util/{time-interval.js → time-interval.ts} +32 -21
- package/src/types.ts +5 -30
- package/src/util/ast.ts +104 -0
- package/src/util/{function.js → function.ts} +40 -31
- package/src/util/identity.ts +7 -0
- package/src/util/{string.js → string.ts} +4 -4
- package/src/util/type-check.ts +31 -0
- package/src/visit/clone.ts +53 -0
- package/src/visit/{recurse.js → recurse.ts} +18 -6
- package/src/visit/{rewrite.js → rewrite.ts} +10 -18
- package/src/visit/{visitors.js → visitors.ts} +22 -30
- package/src/visit/walk.ts +46 -0
- package/dist/types/ast/aggregate.d.ts +0 -71
- package/dist/types/ast/between-op.d.ts +0 -46
- package/dist/types/ast/binary-op.d.ts +0 -28
- package/dist/types/ast/case.d.ts +0 -67
- package/dist/types/ast/cast.d.ts +0 -21
- package/dist/types/ast/column-param.d.ts +0 -23
- package/dist/types/ast/column-ref.d.ts +0 -40
- package/dist/types/ast/fragment.d.ts +0 -14
- package/dist/types/ast/from.d.ts +0 -21
- package/dist/types/ast/function.d.ts +0 -21
- package/dist/types/ast/in-op.d.ts +0 -21
- package/dist/types/ast/interval.d.ts +0 -21
- package/dist/types/ast/literal.d.ts +0 -15
- package/dist/types/ast/logical-op.d.ts +0 -46
- package/dist/types/ast/node.d.ts +0 -24
- package/dist/types/ast/order-by.d.ts +0 -29
- package/dist/types/ast/query.d.ts +0 -320
- package/dist/types/ast/sample.d.ts +0 -42
- package/dist/types/ast/select.d.ts +0 -22
- package/dist/types/ast/table-ref.d.ts +0 -25
- package/dist/types/ast/unary-op.d.ts +0 -39
- package/dist/types/ast/verbatim.d.ts +0 -9
- package/dist/types/ast/window.d.ts +0 -180
- package/dist/types/constants.d.ts +0 -38
- package/dist/types/functions/aggregate.d.ts +0 -236
- package/dist/types/functions/cast.d.ts +0 -26
- package/dist/types/functions/column.d.ts +0 -11
- package/dist/types/functions/datetime.d.ts +0 -45
- package/dist/types/functions/numeric.d.ts +0 -95
- package/dist/types/functions/operators.d.ts +0 -200
- package/dist/types/functions/order-by.d.ts +0 -18
- package/dist/types/functions/spatial.d.ts +0 -38
- package/dist/types/functions/string.d.ts +0 -57
- package/dist/types/functions/table-ref.d.ts +0 -9
- package/dist/types/functions/util.d.ts +0 -8
- package/dist/types/index-types.d.ts +0 -2
- package/dist/types/index.d.ts +0 -59
- package/dist/types/load/create.d.ts +0 -8
- package/dist/types/load/extension.d.ts +0 -1
- package/dist/types/load/load.d.ts +0 -12
- package/dist/types/load/sql-from.d.ts +0 -11
- package/dist/types/transforms/bin-1d.d.ts +0 -15
- package/dist/types/transforms/bin-2d.d.ts +0 -19
- package/dist/types/transforms/bin-date.d.ts +0 -44
- package/dist/types/transforms/bin-histogram.d.ts +0 -51
- package/dist/types/transforms/bin-linear-1d.d.ts +0 -12
- package/dist/types/transforms/bin-linear-2d.d.ts +0 -19
- package/dist/types/transforms/line-density.d.ts +0 -24
- package/dist/types/transforms/m4.d.ts +0 -21
- package/dist/types/transforms/scales.d.ts +0 -1
- package/dist/types/transforms/util/bin-step.d.ts +0 -61
- package/dist/types/transforms/util/time-interval.d.ts +0 -13
- package/dist/types/util/function.d.ts +0 -56
- package/dist/types/util/string.d.ts +0 -3
- package/dist/types/util/type-check.d.ts +0 -22
- package/dist/types/visit/recurse.d.ts +0 -28
- package/dist/types/visit/rewrite.d.ts +0 -10
- package/dist/types/visit/walk.d.ts +0 -10
- package/jsconfig.json +0 -11
- package/src/ast/aggregate.js +0 -167
- package/src/ast/binary-op.js +0 -40
- package/src/ast/column-param.js +0 -40
- package/src/ast/fragment.js +0 -26
- package/src/ast/from.js +0 -40
- package/src/ast/logical-op.js +0 -67
- package/src/ast/node.js +0 -29
- package/src/ast/order-by.js +0 -48
- package/src/ast/sample.js +0 -53
- package/src/ast/window.js +0 -294
- package/src/functions/aggregate.js +0 -347
- package/src/functions/datetime.js +0 -68
- package/src/functions/numeric.js +0 -143
- package/src/functions/operators.js +0 -301
- package/src/functions/order-by.js +0 -27
- package/src/functions/spatial.js +0 -59
- package/src/functions/string.js +0 -85
- package/src/functions/util.js +0 -14
- package/src/index-types.ts +0 -2
- package/src/load/extension.js +0 -3
- package/src/transforms/bin-date.js +0 -37
- package/src/transforms/bin-histogram.js +0 -52
- package/src/transforms/util/bin-step.js +0 -79
- package/src/util/type-check.js +0 -33
- package/src/visit/walk.js +0 -35
- package/tsconfig.json +0 -12
- package/vitest.config.ts +0 -3
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
155
|
-
* @returns {this}
|
|
144
|
+
* @param expr Expressions to add.
|
|
156
145
|
*/
|
|
157
|
-
with(...expr) {
|
|
158
|
-
|
|
159
|
-
const
|
|
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.
|
|
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
|
|
176
|
-
* @returns
|
|
163
|
+
* @param expr Expressions to add.
|
|
177
164
|
*/
|
|
178
|
-
orderby(...expr) {
|
|
179
|
-
this._orderby = this._orderby.concat(
|
|
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
|
|
186
|
-
* @returns {this}
|
|
182
|
+
* @param value The limit value.
|
|
187
183
|
*/
|
|
188
|
-
limit(value) {
|
|
189
|
-
this.
|
|
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
|
|
196
|
-
* @returns {this}
|
|
192
|
+
* @param value The offset value.
|
|
197
193
|
*/
|
|
198
|
-
offset(value) {
|
|
199
|
-
this._offset =
|
|
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(
|
|
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
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
const add = (v, as) =>
|
|
269
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
309
|
-
* @returns {this}
|
|
298
|
+
* @param expr Expressions to add.
|
|
310
299
|
*/
|
|
311
|
-
from(...expr) {
|
|
312
|
-
const list = [];
|
|
313
|
-
|
|
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
|
|
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
|
|
339
|
-
*
|
|
340
|
-
* @param
|
|
341
|
-
*
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
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
|
|
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
|
|
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
|
|
381
|
-
* @returns {this}
|
|
373
|
+
* @param expr Expressions to add.
|
|
382
374
|
*/
|
|
383
|
-
groupby(...expr) {
|
|
384
|
-
this._groupby = this._groupby.concat(
|
|
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
|
|
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
|
|
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
|
|
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)
|
|
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
|
|
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 (
|
|
474
|
+
if (_limit) sql.push(`LIMIT ${_limit}${_limitPerc ? '%' : ''}`);
|
|
488
475
|
|
|
489
476
|
// OFFSET
|
|
490
|
-
if (
|
|
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
|
|
526
|
-
* @param
|
|
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
|
-
|
|
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 (
|
|
571
|
+
if (_limit) sql.push(`LIMIT ${_limit}${_limitPerc ? '%' : ''}`);
|
|
581
572
|
|
|
582
573
|
// OFFSET
|
|
583
|
-
if (
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
}
|