@uwdata/mosaic-sql 0.17.0 → 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 +47 -0
- 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/src/ast/param.d.ts +20 -0
- 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/src/ast/with.d.ts +25 -0
- 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/src/functions/case.d.ts +13 -0
- 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/src/functions/cte.d.ts +13 -0
- 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/src/functions/literal.d.ts +16 -0
- 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/src/functions/sql-template-tag.d.ts +13 -0
- 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/src/functions/window.d.ts +74 -0
- 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 +4 -8
- 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/src/types.d.ts +49 -0
- 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/src/util/ast.d.ts +62 -0
- 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/src/visit/visitors.d.ts +32 -0
- 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 +13 -7
- package/src/ast/{aggregate.js → aggregate.ts} +49 -60
- 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.js → collate.ts} +8 -14
- 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.js → from.ts} +12 -21
- 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.js → node.ts} +10 -13
- package/src/ast/order-by.ts +38 -0
- package/src/ast/{param.js → param.ts} +6 -12
- package/src/ast/{query.js → query.ts} +159 -203
- package/src/ast/sample.ts +47 -0
- package/src/ast/{select.js → select.ts} +10 -16
- package/src/ast/{subquery.js → subquery.ts} +9 -8
- 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.ts +27 -0
- package/src/ast/{window-frame.js → window-frame.ts} +37 -47
- package/src/ast/window.ts +246 -0
- package/src/ast/{with.js → with.ts} +19 -20
- 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.js → collate.ts} +4 -7
- package/src/functions/{column.js → column.ts} +9 -10
- package/src/functions/{cte.js → cte.ts} +9 -6
- package/src/functions/{datetime.js → datetime.ts} +12 -20
- package/src/functions/interval.ts +74 -0
- package/src/functions/{literal.js → literal.ts} +5 -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} +25 -10
- 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.js → filter-query.ts} +10 -14
- 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 -39
- 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.js → clone.ts} +10 -10
- package/src/visit/{recurse.js → recurse.ts} +1 -1
- package/src/visit/{rewrite.js → rewrite.ts} +7 -7
- package/src/visit/{visitors.js → visitors.ts} +22 -30
- package/src/visit/walk.ts +46 -0
- 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/logical-op.js +0 -67
- package/src/ast/order-by.js +0 -48
- package/src/ast/sample.js +0 -53
- package/src/ast/verbatim.js +0 -33
- package/src/ast/window.js +0 -260
- package/src/functions/aggregate.js +0 -347
- package/src/functions/interval.js +0 -83
- 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/functions/window-frame.js +0 -61
- package/src/index-types.ts +0 -2
- package/src/load/extension.js +0 -3
- package/src/transforms/bin-date.js +0 -38
- 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 -34
- package/tsconfig.json +0 -8
- package/vitest.config.ts +0 -3
- /package/src/{constants.js → constants.ts} +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ExprValue, FromExpr } from '../types.js';
|
|
2
|
+
import type { ColumnRefNode } from '../ast/column-ref.js';
|
|
3
|
+
/**
|
|
4
|
+
* M4 is an optimization for value-preserving time-series aggregation
|
|
5
|
+
* (https://www.vldb.org/pvldb/vol7/p797-jugel.pdf). This implementation uses
|
|
6
|
+
* an efficient version with a single scan and the aggregate functions
|
|
7
|
+
* argmin and argmax, following https://arxiv.org/pdf/2306.03714.pdf.
|
|
8
|
+
* This method can bin along either the *x* or *y* dimension, as determined
|
|
9
|
+
* by the caller-provided *bin* expression.
|
|
10
|
+
* @param input The base query or table.
|
|
11
|
+
* @param bin An expression that maps
|
|
12
|
+
* time-series values to fractional pixel positions.
|
|
13
|
+
* @param x The x dimension column name.
|
|
14
|
+
* @param y The y dimension column name.
|
|
15
|
+
* @param groups Additional groupby columns, for example for faceted charts.
|
|
16
|
+
* @returns The resulting M4 query.
|
|
17
|
+
*/
|
|
18
|
+
export declare function m4(input: FromExpr, bin: ExprValue, x: string, y: string, groups?: ColumnRefNode[]): import("../ast/query.js").SetOperation;
|
|
19
|
+
//# sourceMappingURL=m4.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"m4.d.ts","sourceRoot":"","sources":["../../../src/transforms/m4.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAc,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAO1D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,EAAE,CAChB,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,SAAS,EACd,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,MAAM,GAAE,aAAa,EAAO,0CAyB7B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Query, isQuery } from '../ast/query.js';
|
|
2
|
+
import { argmax, argmin, max, min } from '../functions/aggregate.js';
|
|
3
|
+
import { int32 } from '../functions/cast.js';
|
|
4
|
+
import { cte } from '../functions/cte.js';
|
|
5
|
+
import { floor } from '../functions/numeric.js';
|
|
6
|
+
/**
|
|
7
|
+
* M4 is an optimization for value-preserving time-series aggregation
|
|
8
|
+
* (https://www.vldb.org/pvldb/vol7/p797-jugel.pdf). This implementation uses
|
|
9
|
+
* an efficient version with a single scan and the aggregate functions
|
|
10
|
+
* argmin and argmax, following https://arxiv.org/pdf/2306.03714.pdf.
|
|
11
|
+
* This method can bin along either the *x* or *y* dimension, as determined
|
|
12
|
+
* by the caller-provided *bin* expression.
|
|
13
|
+
* @param input The base query or table.
|
|
14
|
+
* @param bin An expression that maps
|
|
15
|
+
* time-series values to fractional pixel positions.
|
|
16
|
+
* @param x The x dimension column name.
|
|
17
|
+
* @param y The y dimension column name.
|
|
18
|
+
* @param groups Additional groupby columns, for example for faceted charts.
|
|
19
|
+
* @returns The resulting M4 query.
|
|
20
|
+
*/
|
|
21
|
+
export function m4(input, bin, x, y, groups = []) {
|
|
22
|
+
const pixel = int32(floor(bin));
|
|
23
|
+
// Below, we treat input as a CTE when it is a query. In this case,
|
|
24
|
+
// we also request that the CTE be explicitly materialized.
|
|
25
|
+
const useCTE = isQuery(input);
|
|
26
|
+
const from = useCTE ? 'input' : input;
|
|
27
|
+
const query = useCTE
|
|
28
|
+
? Query.with(cte(String(from), input, true))
|
|
29
|
+
: Query;
|
|
30
|
+
const q = (sel) => Query
|
|
31
|
+
.from(from)
|
|
32
|
+
.select(sel)
|
|
33
|
+
.groupby(pixel, groups);
|
|
34
|
+
return query
|
|
35
|
+
.union(q([{ [x]: min(x), [y]: argmin(y, x) }, ...groups]), q([{ [x]: max(x), [y]: argmax(y, x) }, ...groups]), q([{ [x]: argmin(x, y), [y]: min(y) }, ...groups]), q([{ [x]: argmax(x, y), [y]: max(y) }, ...groups]))
|
|
36
|
+
.orderby(groups, x);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=m4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"m4.js","sourceRoot":"","sources":["../../../src/transforms/m4.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAEhD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,EAAE,CAChB,KAAe,EACf,GAAc,EACd,CAAS,EACT,CAAS,EACT,SAA0B,EAAE;IAE5B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAEhC,mEAAmE;IACnE,2DAA2D;IAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM;QAClB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC,KAAK,CAAC;IAEV,MAAM,CAAC,GAAG,CAAC,GAAe,EAAE,EAAE,CAAC,KAAK;SACjC,IAAI,CAAC,IAAI,CAAC;SACV,MAAM,CAAC,GAAG,CAAC;SACX,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAE1B,OAAO,KAAK;SACT,KAAK,CACJ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,EAClD,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,EAClD,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,EAClD,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,CACnD;SACA,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ExprValue } from '../types.js';
|
|
2
|
+
import { ExprNode } from '../ast/node.js';
|
|
3
|
+
export interface ScaleTransform<T> {
|
|
4
|
+
apply: (value: T) => number;
|
|
5
|
+
invert: (value: number) => T;
|
|
6
|
+
sqlApply: (value: ExprValue) => ExprNode;
|
|
7
|
+
sqlInvert: (value: ExprNode) => ExprNode;
|
|
8
|
+
}
|
|
9
|
+
export type ScaleType = 'identity' | 'linear' | 'log' | 'symlog' | 'sqrt' | 'pow' | 'time' | 'utc';
|
|
10
|
+
export type ScaleDomain = [number, number] | [Date, Date];
|
|
11
|
+
export interface ScaleOptions {
|
|
12
|
+
/** The scale type, such as `'linear'`, `'log'`, etc. */
|
|
13
|
+
type: ScaleType;
|
|
14
|
+
/** The scale domain, as an array of start and end data values. */
|
|
15
|
+
domain?: ScaleDomain;
|
|
16
|
+
/**
|
|
17
|
+
* The scale range, as an array of start and end screen pixels.
|
|
18
|
+
* The range may be omitted for *identity* scales.
|
|
19
|
+
*/
|
|
20
|
+
range?: [number, number];
|
|
21
|
+
/** The base of the logarithm. For `'log'` scales only. */
|
|
22
|
+
base?: number;
|
|
23
|
+
/** The constant parameter. For `'symlog'` scales only. */
|
|
24
|
+
constant?: number;
|
|
25
|
+
/** The exponent parameter. For `'pow'` scales only. */
|
|
26
|
+
exponent?: number;
|
|
27
|
+
}
|
|
28
|
+
export type Scale<T> = ScaleTransform<T> & ScaleOptions;
|
|
29
|
+
export declare function scaleTransform<T>(options: ScaleOptions): Scale<T>;
|
|
30
|
+
//# sourceMappingURL=scales.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scales.d.ts","sourceRoot":"","sources":["../../../src/transforms/scales.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAS1C,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;IAC5B,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC;IAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,QAAQ,CAAC;IACzC,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,QAAQ,CAAC;CAC1C;AAED,MAAM,MAAM,SAAS,GACjB,UAAU,GACV,QAAQ,GACR,KAAK,GACL,QAAQ,GACR,MAAM,GACN,KAAK,GACL,MAAM,GACN,KAAK,CACN;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,IAAI,EAAE,SAAS,CAAC;IAChB,kEAAkE;IAClE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;AAwFxD,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAKjE"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { LiteralNode } from '../ast/literal.js';
|
|
2
|
+
import { epoch_ms } from '../functions/datetime.js';
|
|
3
|
+
import { literal } from '../functions/literal.js';
|
|
4
|
+
import { abs, exp, ln, log, sign, sqrt } from '../functions/numeric.js';
|
|
5
|
+
import { add, div, mul, pow, sub } from '../functions/operators.js';
|
|
6
|
+
import { asNode } from '../util/ast.js';
|
|
7
|
+
import { identity } from '../util/identity.js';
|
|
8
|
+
function scaleLinear() {
|
|
9
|
+
return {
|
|
10
|
+
apply: identity,
|
|
11
|
+
invert: identity,
|
|
12
|
+
sqlApply: asNode,
|
|
13
|
+
sqlInvert: identity
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function scaleLog({ base = null } = {}) {
|
|
17
|
+
if (base == null || base === Math.E) {
|
|
18
|
+
return {
|
|
19
|
+
apply: Math.log,
|
|
20
|
+
invert: Math.exp,
|
|
21
|
+
sqlApply: c => ln(c),
|
|
22
|
+
sqlInvert: c => exp(c)
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
else if (base === 10) {
|
|
26
|
+
return {
|
|
27
|
+
apply: Math.log10,
|
|
28
|
+
invert: x => Math.pow(10, x),
|
|
29
|
+
sqlApply: c => log(c),
|
|
30
|
+
sqlInvert: c => pow(10, c)
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
const b = +base;
|
|
35
|
+
return {
|
|
36
|
+
apply: x => Math.log(x) / Math.log(b),
|
|
37
|
+
invert: x => Math.pow(b, x),
|
|
38
|
+
sqlApply: c => div(ln(c), ln(b)),
|
|
39
|
+
sqlInvert: c => pow(b, c)
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function scaleSymlog({ constant = 1 } = {}) {
|
|
44
|
+
const _ = +constant;
|
|
45
|
+
return {
|
|
46
|
+
apply: x => Math.sign(x) * Math.log1p(Math.abs(x)),
|
|
47
|
+
invert: x => Math.sign(x) * Math.exp(Math.abs(x) - _),
|
|
48
|
+
sqlApply: c => (c = asNode(c), mul(sign(c), ln(add(_, abs(c))))),
|
|
49
|
+
sqlInvert: c => mul(sign(c), sub(exp(abs(c)), _))
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function scaleSqrt() {
|
|
53
|
+
return {
|
|
54
|
+
apply: x => Math.sign(x) * Math.sqrt(Math.abs(x)),
|
|
55
|
+
invert: x => Math.sign(x) * x * x,
|
|
56
|
+
sqlApply: c => (c = asNode(c), mul(sign(c), sqrt(abs(c)))),
|
|
57
|
+
sqlInvert: c => mul(sign(c), pow(c, 2))
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function scalePow({ exponent = 1 } = {}) {
|
|
61
|
+
const e = +exponent;
|
|
62
|
+
return {
|
|
63
|
+
apply: x => Math.sign(x) * Math.pow(Math.abs(x), e),
|
|
64
|
+
invert: x => Math.sign(x) * Math.pow(Math.abs(x), 1 / e),
|
|
65
|
+
sqlApply: c => (c = asNode(c), mul(sign(c), pow(abs(c), e))),
|
|
66
|
+
sqlInvert: c => mul(sign(c), pow(abs(c), div(1, e)))
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function scaleTime() {
|
|
70
|
+
return {
|
|
71
|
+
apply: x => Number(x),
|
|
72
|
+
invert: x => new Date(x),
|
|
73
|
+
sqlApply: c => c instanceof Date ? literal(+c)
|
|
74
|
+
: isDateLiteral(c) ? literal(Number(c.value))
|
|
75
|
+
: epoch_ms(c),
|
|
76
|
+
sqlInvert: identity
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
const scales = {
|
|
80
|
+
identity: scaleLinear,
|
|
81
|
+
linear: scaleLinear,
|
|
82
|
+
log: scaleLog,
|
|
83
|
+
symlog: scaleSymlog,
|
|
84
|
+
sqrt: scaleSqrt,
|
|
85
|
+
pow: scalePow,
|
|
86
|
+
time: scaleTime,
|
|
87
|
+
utc: scaleTime
|
|
88
|
+
};
|
|
89
|
+
export function scaleTransform(options) {
|
|
90
|
+
const scale = scales[options.type];
|
|
91
|
+
if (!scale)
|
|
92
|
+
throw new Error(`Unrecognized scale type: ${options.type}`);
|
|
93
|
+
// @ts-expect-error suppress error, revisit later?
|
|
94
|
+
return { ...options, ...scale(options) };
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Check if a value is a date-valued literal SQL AST node.
|
|
98
|
+
* @param x The value to test.
|
|
99
|
+
*/
|
|
100
|
+
function isDateLiteral(x) {
|
|
101
|
+
return x instanceof LiteralNode && x.value instanceof Date;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=scales.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scales.js","sourceRoot":"","sources":["../../../src/transforms/scales.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** Numerical binning options. */
|
|
2
|
+
export interface BinOptions {
|
|
3
|
+
/**
|
|
4
|
+
* An exact binning step to use.
|
|
5
|
+
*/
|
|
6
|
+
step?: number;
|
|
7
|
+
/**
|
|
8
|
+
* The desired number of binning steps. This value is a hint,
|
|
9
|
+
* it does not guarantee an exact number of steps.
|
|
10
|
+
*/
|
|
11
|
+
steps?: number;
|
|
12
|
+
/**
|
|
13
|
+
* A minimum binning step value.
|
|
14
|
+
* No generated step can be less than this value.
|
|
15
|
+
*/
|
|
16
|
+
minstep?: number;
|
|
17
|
+
/**
|
|
18
|
+
* A boolean flag (default true) indicating if bin extents should be snapped
|
|
19
|
+
* to "nice" numbers such as multiples of 5 or 10.
|
|
20
|
+
*/
|
|
21
|
+
nice?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* A number indicating the the logarithm base to use for automatic step size
|
|
24
|
+
* determination. Defaults to base 10.
|
|
25
|
+
*/
|
|
26
|
+
base?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Generate a numeric binning scheme suitable for a histogram.
|
|
30
|
+
* @param min The minimum value of the extent to bin.
|
|
31
|
+
* @param max The maximum value of the extent to bin.
|
|
32
|
+
* @param options Binning scheme options.
|
|
33
|
+
*/
|
|
34
|
+
export declare function binSpec(min: number, max: number, options: BinOptions): {
|
|
35
|
+
min: number;
|
|
36
|
+
max: number;
|
|
37
|
+
steps: number;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Determine a bin step interval.
|
|
41
|
+
* @param span The span from maximum to minimum value.
|
|
42
|
+
* @param steps The approximate number of desired bins.
|
|
43
|
+
* @param minstep The minimum acceptable bin step size.
|
|
44
|
+
* @param logb The log base for determining orders of magnitude for step
|
|
45
|
+
* sizes. Defaults to log base 10 (`Math.LN10`). For example to use log
|
|
46
|
+
* base 2, provide the argument `Math.LN2` instead.
|
|
47
|
+
* @returns The bin step interval (bin size).
|
|
48
|
+
*/
|
|
49
|
+
export declare function binStep(span: number, steps: number, minstep?: number, logb?: number): number;
|
|
50
|
+
//# sourceMappingURL=bin-step.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin-step.d.ts","sourceRoot":"","sources":["../../../../src/transforms/util/bin-step.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU;;;;EA4BpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,MAAU,EACnB,IAAI,GAAE,MAAkB,UAqBzB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a numeric binning scheme suitable for a histogram.
|
|
3
|
+
* @param min The minimum value of the extent to bin.
|
|
4
|
+
* @param max The maximum value of the extent to bin.
|
|
5
|
+
* @param options Binning scheme options.
|
|
6
|
+
*/
|
|
7
|
+
export function binSpec(min, max, options) {
|
|
8
|
+
let { step, steps = 25, } = options;
|
|
9
|
+
const { minstep = 0, nice = true, base } = options;
|
|
10
|
+
if (nice !== false) {
|
|
11
|
+
// use span to determine step size
|
|
12
|
+
const span = max - min;
|
|
13
|
+
const logb = base ? Math.log(base) : Math.LN10;
|
|
14
|
+
step = step || binStep(span, steps, minstep, logb);
|
|
15
|
+
// adjust min/max relative to step
|
|
16
|
+
let v = Math.log(step);
|
|
17
|
+
const precision = v >= 0 ? 0 : ~~(-v / logb) + 1;
|
|
18
|
+
const eps = Math.pow(10, -precision - 1);
|
|
19
|
+
v = Math.floor(min / step + eps) * step;
|
|
20
|
+
min = min < v ? v - step : v;
|
|
21
|
+
max = Math.ceil(max / step) * step;
|
|
22
|
+
steps = Math.round((max - min) / step);
|
|
23
|
+
}
|
|
24
|
+
return { min, max, steps };
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Determine a bin step interval.
|
|
28
|
+
* @param span The span from maximum to minimum value.
|
|
29
|
+
* @param steps The approximate number of desired bins.
|
|
30
|
+
* @param minstep The minimum acceptable bin step size.
|
|
31
|
+
* @param logb The log base for determining orders of magnitude for step
|
|
32
|
+
* sizes. Defaults to log base 10 (`Math.LN10`). For example to use log
|
|
33
|
+
* base 2, provide the argument `Math.LN2` instead.
|
|
34
|
+
* @returns The bin step interval (bin size).
|
|
35
|
+
*/
|
|
36
|
+
export function binStep(span, steps, minstep = 0, logb = Math.LN10) {
|
|
37
|
+
let v;
|
|
38
|
+
const level = Math.ceil(Math.log(steps) / logb);
|
|
39
|
+
let step = Math.max(minstep, Math.pow(10, Math.round(Math.log(span) / logb) - level));
|
|
40
|
+
// increase step size if too many bins
|
|
41
|
+
while (Math.ceil(span / step) > steps) {
|
|
42
|
+
step *= 10;
|
|
43
|
+
}
|
|
44
|
+
// decrease step size if allowed
|
|
45
|
+
const div = [5, 2];
|
|
46
|
+
for (let i = 0, n = div.length; i < n; ++i) {
|
|
47
|
+
v = step / div[i];
|
|
48
|
+
if (v >= minstep && span / v <= steps)
|
|
49
|
+
step = v;
|
|
50
|
+
}
|
|
51
|
+
return step;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=bin-step.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin-step.js","sourceRoot":"","sources":["../../../../src/transforms/util/bin-step.ts"],"names":[],"mappings":"AA4BA;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,GAAW,EAAE,OAAmB;IACnE,IAAI,EACF,IAAI,EACJ,KAAK,GAAG,EAAE,GACX,GAAG,OAAO,CAAC;IACZ,MAAM,EACJ,OAAO,GAAG,CAAC,EACX,IAAI,GAAG,IAAI,EACX,IAAI,EACL,GAAG,OAAO,CAAC;IAEZ,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,kCAAkC;QAClC,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/C,IAAI,GAAG,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAEnD,kCAAkC;QAClC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;QACxC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QACnC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,OAAO,CACrB,IAAY,EACZ,KAAa,EACb,UAAkB,CAAC,EACnB,OAAe,IAAI,CAAC,IAAI;IAExB,IAAI,CAAC,CAAC;IAEN,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAChD,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CACjB,OAAO,EACP,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,CACxD,CAAC;IAEF,sCAAsC;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;QAAC,IAAI,IAAI,EAAE,CAAC;IAAC,CAAC;IAEtD,gCAAgC;IAChC,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAC3C,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,IAAI,OAAO,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK;YAAE,IAAI,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type DateTimeValue = Date | number;
|
|
2
|
+
export type TimeUnit = 'year' | 'quarter' | 'month' | 'day' | 'hour' | 'minute' | 'second' | 'millisecond' | 'microsecond';
|
|
3
|
+
/**
|
|
4
|
+
* Determine a time interval for binning based on provided min
|
|
5
|
+
* and max timestamps and approximate step count.
|
|
6
|
+
* @param min The minimum timestamp value.
|
|
7
|
+
* @param max The maximum timestamp value.
|
|
8
|
+
* @param steps The approximate number of bins desired.
|
|
9
|
+
*/
|
|
10
|
+
export declare function timeInterval(min: DateTimeValue, max: DateTimeValue, steps: number): ({
|
|
11
|
+
unit: TimeUnit;
|
|
12
|
+
step: number;
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=time-interval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time-interval.d.ts","sourceRoot":"","sources":["../../../../src/transforms/util/time-interval.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,MAAM,CAAC;AAE1C,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN,SAAS,GACT,OAAO,GACP,KAAK,GACL,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,aAAa,GACb,aAAa,CAAC;AAuClB;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,aAAa,EAClB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,MAAM,GACZ,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAmBpC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { binStep } from './bin-step.js';
|
|
2
|
+
const YEAR = 'year';
|
|
3
|
+
const MONTH = 'month';
|
|
4
|
+
const DAY = 'day';
|
|
5
|
+
const HOUR = 'hour';
|
|
6
|
+
const MINUTE = 'minute';
|
|
7
|
+
const SECOND = 'second';
|
|
8
|
+
const MILLISECOND = 'millisecond';
|
|
9
|
+
const MICROSECOND = 'microsecond';
|
|
10
|
+
const durationSecond = 1000;
|
|
11
|
+
const durationMinute = durationSecond * 60;
|
|
12
|
+
const durationHour = durationMinute * 60;
|
|
13
|
+
const durationDay = durationHour * 24;
|
|
14
|
+
const durationWeek = durationDay * 7;
|
|
15
|
+
const durationMonth = durationDay * 30;
|
|
16
|
+
const durationYear = durationDay * 365;
|
|
17
|
+
const units = [
|
|
18
|
+
{ unit: SECOND, step: 1, dt: durationSecond },
|
|
19
|
+
{ unit: SECOND, step: 5, dt: durationSecond * 5 },
|
|
20
|
+
{ unit: SECOND, step: 15, dt: durationSecond * 15 },
|
|
21
|
+
{ unit: SECOND, step: 30, dt: durationSecond * 30 },
|
|
22
|
+
{ unit: MINUTE, step: 1, dt: durationMinute },
|
|
23
|
+
{ unit: MINUTE, step: 5, dt: durationMinute * 5 },
|
|
24
|
+
{ unit: MINUTE, step: 15, dt: durationMinute * 15 },
|
|
25
|
+
{ unit: MINUTE, step: 30, dt: durationMinute * 30 },
|
|
26
|
+
{ unit: HOUR, step: 1, dt: durationHour },
|
|
27
|
+
{ unit: HOUR, step: 3, dt: durationHour * 3 },
|
|
28
|
+
{ unit: HOUR, step: 6, dt: durationHour * 6 },
|
|
29
|
+
{ unit: HOUR, step: 12, dt: durationHour * 12 },
|
|
30
|
+
{ unit: DAY, step: 1, dt: durationDay },
|
|
31
|
+
{ unit: DAY, step: 7, dt: durationWeek },
|
|
32
|
+
{ unit: MONTH, step: 1, dt: durationMonth },
|
|
33
|
+
{ unit: MONTH, step: 3, dt: durationMonth * 3 },
|
|
34
|
+
{ unit: YEAR, step: 1, dt: durationYear }
|
|
35
|
+
];
|
|
36
|
+
/**
|
|
37
|
+
* Determine a time interval for binning based on provided min
|
|
38
|
+
* and max timestamps and approximate step count.
|
|
39
|
+
* @param min The minimum timestamp value.
|
|
40
|
+
* @param max The maximum timestamp value.
|
|
41
|
+
* @param steps The approximate number of bins desired.
|
|
42
|
+
*/
|
|
43
|
+
export function timeInterval(min, max, steps) {
|
|
44
|
+
const span = +max - +min;
|
|
45
|
+
const t = span / steps; // target step size duration
|
|
46
|
+
const i = bisect(units, t, v => v.dt);
|
|
47
|
+
let unit;
|
|
48
|
+
let step;
|
|
49
|
+
if (i === units.length) {
|
|
50
|
+
unit = YEAR;
|
|
51
|
+
step = binStep(span / durationYear, steps);
|
|
52
|
+
}
|
|
53
|
+
else if (i) {
|
|
54
|
+
({ unit, step } = units[t / units[i - 1].dt < units[i].dt / t ? i - 1 : i]);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
step = binStep(span, steps);
|
|
58
|
+
unit = step >= 1 ? MILLISECOND : MICROSECOND;
|
|
59
|
+
step = step >= 1 ? step : step * 1000;
|
|
60
|
+
}
|
|
61
|
+
return { unit, step };
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Perform a binary search.
|
|
65
|
+
* @param a The array to search.
|
|
66
|
+
* @param x The target value.
|
|
67
|
+
* @param value A value accessor.
|
|
68
|
+
* @returns The search result array index.
|
|
69
|
+
*/
|
|
70
|
+
function bisect(a, x, value) {
|
|
71
|
+
const compare1 = (a, b) => Number(a) - Number(b);
|
|
72
|
+
const compare2 = (d, x) => compare1(value(d), x);
|
|
73
|
+
let lo = 0;
|
|
74
|
+
let hi = a.length;
|
|
75
|
+
if (lo < hi) {
|
|
76
|
+
if (compare1(x, x) !== 0)
|
|
77
|
+
return hi;
|
|
78
|
+
do {
|
|
79
|
+
const mid = (lo + hi) >>> 1;
|
|
80
|
+
if (compare2(a[mid], x) <= 0)
|
|
81
|
+
lo = mid + 1;
|
|
82
|
+
else
|
|
83
|
+
hi = mid;
|
|
84
|
+
} while (lo < hi);
|
|
85
|
+
}
|
|
86
|
+
return lo;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=time-interval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time-interval.js","sourceRoot":"","sources":["../../../../src/transforms/util/time-interval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ColumnRefNode } from './ast/column-ref.js';
|
|
2
|
+
import { ExprNode, SQLNode } from './ast/node.js';
|
|
3
|
+
import { TableRefNode } from './ast/table-ref.js';
|
|
4
|
+
import { Query } from './ast/query.js';
|
|
5
|
+
import { WithClauseNode } from './ast/with.js';
|
|
6
|
+
/**
|
|
7
|
+
* Interface representing a dynamic parameter value.
|
|
8
|
+
*/
|
|
9
|
+
export interface ParamLike {
|
|
10
|
+
/** The current parameter value. */
|
|
11
|
+
value: unknown;
|
|
12
|
+
/** Add an event listener callback. */
|
|
13
|
+
addEventListener(type: string, callback: EventCallback): void;
|
|
14
|
+
/** Remove an event listener callback. */
|
|
15
|
+
removeEventListener(type: string, callback: EventCallback): void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Expression value input to SQL builder method.
|
|
19
|
+
*/
|
|
20
|
+
export type ExprValue = ExprNode | ParamLike | string | number | boolean | Date | null;
|
|
21
|
+
/**
|
|
22
|
+
* Expression values that may be nested in arrays.
|
|
23
|
+
*/
|
|
24
|
+
export type ExprVarArgs = MaybeArray<ExprValue>;
|
|
25
|
+
/**
|
|
26
|
+
* String-typed expression value.
|
|
27
|
+
*/
|
|
28
|
+
export type StringValue = ExprNode | ParamLike | string;
|
|
29
|
+
/**
|
|
30
|
+
* Number-typed expression value.
|
|
31
|
+
*/
|
|
32
|
+
export type NumberValue = ExprNode | ParamLike | number;
|
|
33
|
+
/**
|
|
34
|
+
* Event listener callback function.
|
|
35
|
+
*/
|
|
36
|
+
export type EventCallback = <T>(value: unknown) => Promise<T> | undefined;
|
|
37
|
+
/** Valid window function names. */
|
|
38
|
+
export type WindowFunctionName = 'cume_dist' | 'dense_rank' | 'first_value' | 'lag' | 'last_value' | 'lead' | 'nth_value' | 'ntile' | 'percent_rank' | 'rank_dense' | 'rank' | 'row_number';
|
|
39
|
+
export type MaybeArray<T> = T | T[];
|
|
40
|
+
export type SelectEntry = null | string | ColumnRefNode | [string, ExprNode] | Record<string, ExprValue>;
|
|
41
|
+
export type SelectExpr = MaybeArray<SelectEntry>;
|
|
42
|
+
export type WithEntry = WithClauseNode | Record<string, Query>;
|
|
43
|
+
export type WithExpr = MaybeArray<WithEntry>;
|
|
44
|
+
export type FromEntry = string | TableRefNode | SQLNode | [string, SQLNode] | Record<string, string | SQLNode>;
|
|
45
|
+
export type FromExpr = MaybeArray<FromEntry>;
|
|
46
|
+
export type FilterExpr = MaybeArray<string | boolean | ExprNode>;
|
|
47
|
+
export type GroupByExpr = MaybeArray<string | ExprNode>;
|
|
48
|
+
export type OrderByExpr = MaybeArray<string | ExprNode>;
|
|
49
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,mCAAmC;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,sCAAsC;IACtC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9D,yCAAyC;IACzC,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;AAEvF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AAE1E,mCAAmC;AACnC,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,YAAY,GACZ,aAAa,GACb,KAAK,GACL,YAAY,GACZ,MAAM,GACN,WAAW,GACX,OAAO,GACP,cAAc,GACd,YAAY,GACZ,MAAM,GACN,YAAY,CAAC;AAEjB,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAEpC,MAAM,MAAM,WAAW,GACnB,IAAI,GACJ,MAAM,GACN,aAAa,GACb,CAAC,MAAM,EAAE,QAAQ,CAAC,GAClB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAE9B,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;AAEjD,MAAM,MAAM,SAAS,GACjB,cAAc,GACd,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE1B,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AAE7C,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,YAAY,GACZ,OAAO,GACP,CAAC,MAAM,EAAE,OAAO,CAAC,GACjB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;AAErC,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC;AACjE,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;AACxD,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { ColumnRefNode } from '../ast/column-ref.js';
|
|
2
|
+
import type { TableRefNode } from '../ast/table-ref.js';
|
|
3
|
+
import { ExprNode, type SQLNode } from '../ast/node.js';
|
|
4
|
+
import { WindowDefNode } from '../ast/window.js';
|
|
5
|
+
/**
|
|
6
|
+
* Interpret a value as a SQL AST node. String values are assumed to be
|
|
7
|
+
* column references. All other primitive values are interpreted as
|
|
8
|
+
* SQL literals. Dynamic parameters are interpreted as param AST nodes,
|
|
9
|
+
* while existing AST nodes are left as-is.
|
|
10
|
+
* @param value The value to interpret as a SQL AST node.
|
|
11
|
+
*/
|
|
12
|
+
export declare function asNode(value: unknown): ExprNode;
|
|
13
|
+
/**
|
|
14
|
+
* Interpret a value as a verbatim SQL AST node. String values will be
|
|
15
|
+
* passed through to queries as verbatim text. All other primitive values
|
|
16
|
+
* are interpreted as SQL literals. Dynamic parameters are interpreted
|
|
17
|
+
* as param AST nodes, while existing AST nodes are left as-is.
|
|
18
|
+
* @param value The value to interpret as a verbatim AST node.
|
|
19
|
+
*/
|
|
20
|
+
export declare function asVerbatim(value: unknown): ExprNode;
|
|
21
|
+
/**
|
|
22
|
+
* Interpret a value as a literal AST node. All other primitive values
|
|
23
|
+
* are interpreted as SQL literals. Dynamic parameters are interpreted
|
|
24
|
+
* as param AST nodes, while existing AST nodes are left as-is.
|
|
25
|
+
* @param value The value to interpret as a literal AST node.
|
|
26
|
+
*/
|
|
27
|
+
export declare function asLiteral(value: unknown): ExprNode;
|
|
28
|
+
/**
|
|
29
|
+
* Interpret a value as a table reference AST node. String values are parsed
|
|
30
|
+
* assuming dot ('.') delimiters (as in `schema.table`). Array values are
|
|
31
|
+
* interpreted as pre-parsed name paths (as in `['schema', 'table']`). Any
|
|
32
|
+
* other values are left as-is.
|
|
33
|
+
* @param value The value to interpret as a table reference AST node.
|
|
34
|
+
*/
|
|
35
|
+
export declare function asTableRef(value?: string | string[] | TableRefNode): TableRefNode | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Try to interpret a value as a table reference AST node. String values are
|
|
38
|
+
* parsed assuming dot ('.') delimiters (as in `schema.table`). Array values
|
|
39
|
+
* are interpreted as pre-parsed name paths (as in `['schema', 'table']`). Any
|
|
40
|
+
* other values are left as-is.
|
|
41
|
+
* @param value The value to interpret as a table reference.
|
|
42
|
+
*/
|
|
43
|
+
export declare function maybeTableRef(value: string | string[] | SQLNode): SQLNode;
|
|
44
|
+
/**
|
|
45
|
+
* Parse a string as a column reference, potentially with
|
|
46
|
+
* dot ('.') delimited table, schema, and database references.
|
|
47
|
+
* @param ref The column reference string.
|
|
48
|
+
*/
|
|
49
|
+
export declare function parseColumnRef(ref: string): ColumnRefNode;
|
|
50
|
+
/**
|
|
51
|
+
* Parse a string as a table reference, potentially with
|
|
52
|
+
* dot ('.') delimited schema and database references.
|
|
53
|
+
* @param ref The table reference string.
|
|
54
|
+
*/
|
|
55
|
+
export declare function parseTableRef(ref: string): TableRefNode;
|
|
56
|
+
/**
|
|
57
|
+
* Create a new window definition node. The return value is an empty
|
|
58
|
+
* window definition. Use chained calls such as `partitionby` and `orderby`
|
|
59
|
+
* to specify the window settings.
|
|
60
|
+
*/
|
|
61
|
+
export declare function over(): WindowDefNode;
|
|
62
|
+
//# sourceMappingURL=ast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../../src/util/ast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAOjD;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAI/C;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAInD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAIlD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,CAE7F;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,GAAG,OAAO,CAEzE;AAQD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAGzD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,IAAI,kBAEnB"}
|