@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,26 @@
|
|
|
1
|
+
import { CAST } from '../constants.js';
|
|
2
|
+
import { ExprNode } from './node.js';
|
|
3
|
+
export class CastNode extends ExprNode {
|
|
4
|
+
/** The expression to type cast. */
|
|
5
|
+
expr;
|
|
6
|
+
/** The type to cast to. */
|
|
7
|
+
cast;
|
|
8
|
+
/**
|
|
9
|
+
* Instantiate a cast node.
|
|
10
|
+
* @param expr The expression to type cast.
|
|
11
|
+
* @param type The type to cast to.
|
|
12
|
+
*/
|
|
13
|
+
constructor(expr, type) {
|
|
14
|
+
super(CAST);
|
|
15
|
+
this.expr = expr;
|
|
16
|
+
this.cast = type;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate a SQL query string for this node.
|
|
20
|
+
*/
|
|
21
|
+
toString() {
|
|
22
|
+
// TODO? could include check to see if parens are necessary
|
|
23
|
+
return `(${this.expr})::${this.cast}`;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=cast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cast.js","sourceRoot":"","sources":["../../../src/ast/cast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,OAAO,QAAS,SAAQ,QAAQ;IACpC,mCAAmC;IAC1B,IAAI,CAAW;IACxB,2BAA2B;IAClB,IAAI,CAAS;IAEtB;;;;OAIG;IACH,YAAY,IAAc,EAAE,IAAY;QACtC,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,2DAA2D;QAC3D,OAAO,IAAI,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ExprNode } from './node.js';
|
|
2
|
+
export declare class CollateNode extends ExprNode {
|
|
3
|
+
/** The expression to collate. */
|
|
4
|
+
readonly expr: ExprNode;
|
|
5
|
+
/** The collation type. */
|
|
6
|
+
readonly collation: string;
|
|
7
|
+
/**
|
|
8
|
+
* Instantiate a collate node.
|
|
9
|
+
* @param expr The expression to collate.
|
|
10
|
+
* @param collation The collation type.
|
|
11
|
+
*/
|
|
12
|
+
constructor(expr: ExprNode, collation: string);
|
|
13
|
+
/**
|
|
14
|
+
* Generate a SQL query string for this node.
|
|
15
|
+
*/
|
|
16
|
+
toString(): string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=collate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collate.d.ts","sourceRoot":"","sources":["../../../src/ast/collate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,qBAAa,WAAY,SAAQ,QAAQ;IACvC,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,0BAA0B;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;gBACS,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM;IAM7C;;OAEG;IACH,QAAQ;CAGT"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { COLLATE } from '../constants.js';
|
|
2
|
+
import { ExprNode } from './node.js';
|
|
3
|
+
export class CollateNode extends ExprNode {
|
|
4
|
+
/** The expression to collate. */
|
|
5
|
+
expr;
|
|
6
|
+
/** The collation type. */
|
|
7
|
+
collation;
|
|
8
|
+
/**
|
|
9
|
+
* Instantiate a collate node.
|
|
10
|
+
* @param expr The expression to collate.
|
|
11
|
+
* @param collation The collation type.
|
|
12
|
+
*/
|
|
13
|
+
constructor(expr, collation) {
|
|
14
|
+
super(COLLATE);
|
|
15
|
+
this.expr = expr;
|
|
16
|
+
this.collation = collation;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate a SQL query string for this node.
|
|
20
|
+
*/
|
|
21
|
+
toString() {
|
|
22
|
+
return `${this.expr} ${COLLATE} ${this.collation}`;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=collate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collate.js","sourceRoot":"","sources":["../../../src/ast/collate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,iCAAiC;IACxB,IAAI,CAAW;IACxB,0BAA0B;IACjB,SAAS,CAAS;IAE3B;;;;OAIG;IACH,YAAY,IAAc,EAAE,SAAiB;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;IACrD,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ParamNode } from './param.js';
|
|
2
|
+
import type { TableRefNode } from './table-ref.js';
|
|
3
|
+
import { ColumnRefNode } from './column-ref.js';
|
|
4
|
+
/**
|
|
5
|
+
* Check if a value is a dynamic column reference node.
|
|
6
|
+
* @param value The value to check.
|
|
7
|
+
*/
|
|
8
|
+
export declare function isColumnParam(value: unknown): value is ColumnParamNode;
|
|
9
|
+
export declare class ColumnParamNode extends ColumnRefNode {
|
|
10
|
+
/** The column name as a parameter node */
|
|
11
|
+
readonly param: ParamNode;
|
|
12
|
+
/**
|
|
13
|
+
* Instantiate a column param node.
|
|
14
|
+
* @param param The column name as a parameter node.
|
|
15
|
+
* @param table The table reference.
|
|
16
|
+
*/
|
|
17
|
+
constructor(param: ParamNode, table?: TableRefNode);
|
|
18
|
+
/**
|
|
19
|
+
* Returns the column name.
|
|
20
|
+
*/
|
|
21
|
+
get column(): string;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=column-param.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-param.d.ts","sourceRoot":"","sources":["../../../src/ast/column-param.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAEtE;AAED,qBAAa,eAAgB,SAAQ,aAAa;IAChD,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAE1B;;;;OAIG;gBACS,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,YAAY;IAKlD;;OAEG;IACH,IAAI,MAAM,WAET;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { COLUMN_PARAM } from '../constants.js';
|
|
2
|
+
import { ColumnRefNode } from './column-ref.js';
|
|
3
|
+
/**
|
|
4
|
+
* Check if a value is a dynamic column reference node.
|
|
5
|
+
* @param value The value to check.
|
|
6
|
+
*/
|
|
7
|
+
export function isColumnParam(value) {
|
|
8
|
+
return value instanceof ColumnParamNode;
|
|
9
|
+
}
|
|
10
|
+
export class ColumnParamNode extends ColumnRefNode {
|
|
11
|
+
/** The column name as a parameter node */
|
|
12
|
+
param;
|
|
13
|
+
/**
|
|
14
|
+
* Instantiate a column param node.
|
|
15
|
+
* @param param The column name as a parameter node.
|
|
16
|
+
* @param table The table reference.
|
|
17
|
+
*/
|
|
18
|
+
constructor(param, table) {
|
|
19
|
+
super(COLUMN_PARAM, table);
|
|
20
|
+
this.param = param;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Returns the column name.
|
|
24
|
+
*/
|
|
25
|
+
get column() {
|
|
26
|
+
return `${this.param.value}`;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=column-param.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-param.js","sourceRoot":"","sources":["../../../src/ast/column-param.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,KAAK,YAAY,eAAe,CAAC;AAC1C,CAAC;AAED,MAAM,OAAO,eAAgB,SAAQ,aAAa;IAChD,0CAA0C;IACjC,KAAK,CAAY;IAE1B;;;;OAIG;IACH,YAAY,KAAgB,EAAE,KAAoB;QAChD,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { TableRefNode } from './table-ref.js';
|
|
2
|
+
import { ExprNode } from './node.js';
|
|
3
|
+
/**
|
|
4
|
+
* Check if a value is a column reference node.
|
|
5
|
+
* @param value The value to check.
|
|
6
|
+
*/
|
|
7
|
+
export declare function isColumnRef(value: unknown): value is ColumnRefNode;
|
|
8
|
+
export declare class ColumnRefNode extends ExprNode {
|
|
9
|
+
/** The table reference. */
|
|
10
|
+
readonly table?: TableRefNode;
|
|
11
|
+
/**
|
|
12
|
+
* Instantiate a column reference node.
|
|
13
|
+
* @param type The AST node type.
|
|
14
|
+
* @param table The table reference.
|
|
15
|
+
*/
|
|
16
|
+
constructor(type: string, table?: TableRefNode);
|
|
17
|
+
/**
|
|
18
|
+
* Returns the column name.
|
|
19
|
+
*/
|
|
20
|
+
get column(): string;
|
|
21
|
+
/**
|
|
22
|
+
* Generate a SQL query string for this node.
|
|
23
|
+
*/
|
|
24
|
+
toString(): string;
|
|
25
|
+
}
|
|
26
|
+
export declare class ColumnNameRefNode extends ColumnRefNode {
|
|
27
|
+
/** The column name. */
|
|
28
|
+
readonly name: string;
|
|
29
|
+
/**
|
|
30
|
+
* Instantiate a column reference node.
|
|
31
|
+
* @param name The column name.
|
|
32
|
+
* @param table The table reference.
|
|
33
|
+
*/
|
|
34
|
+
constructor(name: string, table?: TableRefNode);
|
|
35
|
+
/**
|
|
36
|
+
* Returns the column name.
|
|
37
|
+
*/
|
|
38
|
+
get column(): string;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=column-ref.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-ref.d.ts","sourceRoot":"","sources":["../../../src/ast/column-ref.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAElE;AAED,qBAAa,aAAc,SAAQ,QAAQ;IACzC,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAE9B;;;;OAIG;gBACS,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,YAAY;IAK9C;;OAEG;IACH,IAAI,MAAM,WAET;IAED;;OAEG;IACH,QAAQ;CAMT;AAED,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,uBAAuB;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;gBACS,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,YAAY;IAK9C;;OAEG;IACH,IAAI,MAAM,WAET;CACF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { COLUMN_REF } from '../constants.js';
|
|
2
|
+
import { quoteIdentifier } from '../util/string.js';
|
|
3
|
+
import { ExprNode } from './node.js';
|
|
4
|
+
/**
|
|
5
|
+
* Check if a value is a column reference node.
|
|
6
|
+
* @param value The value to check.
|
|
7
|
+
*/
|
|
8
|
+
export function isColumnRef(value) {
|
|
9
|
+
return value instanceof ColumnRefNode;
|
|
10
|
+
}
|
|
11
|
+
export class ColumnRefNode extends ExprNode {
|
|
12
|
+
/** The table reference. */
|
|
13
|
+
table;
|
|
14
|
+
/**
|
|
15
|
+
* Instantiate a column reference node.
|
|
16
|
+
* @param type The AST node type.
|
|
17
|
+
* @param table The table reference.
|
|
18
|
+
*/
|
|
19
|
+
constructor(type, table) {
|
|
20
|
+
super(type);
|
|
21
|
+
this.table = table;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Returns the column name.
|
|
25
|
+
*/
|
|
26
|
+
get column() {
|
|
27
|
+
return ''; // subclasses to override
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Generate a SQL query string for this node.
|
|
31
|
+
*/
|
|
32
|
+
toString() {
|
|
33
|
+
const { column, table } = this;
|
|
34
|
+
const tref = `${table ?? ''}`;
|
|
35
|
+
const id = column === '*' ? '*' : quoteIdentifier(column);
|
|
36
|
+
return (tref ? (tref + '.') : '') + id;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export class ColumnNameRefNode extends ColumnRefNode {
|
|
40
|
+
/** The column name. */
|
|
41
|
+
name;
|
|
42
|
+
/**
|
|
43
|
+
* Instantiate a column reference node.
|
|
44
|
+
* @param name The column name.
|
|
45
|
+
* @param table The table reference.
|
|
46
|
+
*/
|
|
47
|
+
constructor(name, table) {
|
|
48
|
+
super(COLUMN_REF, table);
|
|
49
|
+
this.name = name;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Returns the column name.
|
|
53
|
+
*/
|
|
54
|
+
get column() {
|
|
55
|
+
return this.name;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=column-ref.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-ref.js","sourceRoot":"","sources":["../../../src/ast/column-ref.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,KAAK,YAAY,aAAa,CAAC;AACxC,CAAC;AAED,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzC,2BAA2B;IAClB,KAAK,CAAgB;IAE9B;;;;OAIG;IACH,YAAY,IAAY,EAAE,KAAoB;QAC5C,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,EAAE,CAAC,CAAC,yBAAyB;IACtC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC/B,MAAM,IAAI,GAAG,GAAG,KAAK,IAAI,EAAE,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IAClD,uBAAuB;IACd,IAAI,CAAS;IAEtB;;;;OAIG;IACH,YAAY,IAAY,EAAE,KAAoB;QAC5C,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ExprNode } from './node.js';
|
|
2
|
+
/**
|
|
3
|
+
* A SQL AST node made up of disjoint fragments that are combined to form
|
|
4
|
+
* a coherent expression. Along with verbatim content, this class serves
|
|
5
|
+
* as an "escape hatch" for handling more unstructured SQL content.
|
|
6
|
+
*/
|
|
7
|
+
export declare class FragmentNode extends ExprNode {
|
|
8
|
+
/** The consecutive parts making up the fragment. */
|
|
9
|
+
readonly spans: ExprNode[];
|
|
10
|
+
/**
|
|
11
|
+
* Instantiate a fragment node with arbitrary content.
|
|
12
|
+
* @param spans The consecutive parts making up the fragment.
|
|
13
|
+
*/
|
|
14
|
+
constructor(spans: ExprNode[]);
|
|
15
|
+
/**
|
|
16
|
+
* Generate a SQL query string for this node.
|
|
17
|
+
*/
|
|
18
|
+
toString(): string;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=fragment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fragment.d.ts","sourceRoot":"","sources":["../../../src/ast/fragment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,QAAQ;IACxC,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAE3B;;;OAGG;gBACS,KAAK,EAAE,QAAQ,EAAE;IAK7B;;OAEG;IACH,QAAQ;CAGT"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { FRAGMENT } from '../constants.js';
|
|
2
|
+
import { ExprNode } from './node.js';
|
|
3
|
+
/**
|
|
4
|
+
* A SQL AST node made up of disjoint fragments that are combined to form
|
|
5
|
+
* a coherent expression. Along with verbatim content, this class serves
|
|
6
|
+
* as an "escape hatch" for handling more unstructured SQL content.
|
|
7
|
+
*/
|
|
8
|
+
export class FragmentNode extends ExprNode {
|
|
9
|
+
/** The consecutive parts making up the fragment. */
|
|
10
|
+
spans;
|
|
11
|
+
/**
|
|
12
|
+
* Instantiate a fragment node with arbitrary content.
|
|
13
|
+
* @param spans The consecutive parts making up the fragment.
|
|
14
|
+
*/
|
|
15
|
+
constructor(spans) {
|
|
16
|
+
super(FRAGMENT);
|
|
17
|
+
this.spans = spans;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Generate a SQL query string for this node.
|
|
21
|
+
*/
|
|
22
|
+
toString() {
|
|
23
|
+
return this.spans.join('');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fragment.js","sourceRoot":"","sources":["../../../src/ast/fragment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC;;;;GAIG;AACH,MAAM,OAAO,YAAa,SAAQ,QAAQ;IACxC,oDAAoD;IAC3C,KAAK,CAAa;IAE3B;;;OAGG;IACH,YAAY,KAAiB;QAC3B,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SampleClauseNode } from './sample.js';
|
|
2
|
+
import { SQLNode } from './node.js';
|
|
3
|
+
export declare class FromClauseNode extends SQLNode {
|
|
4
|
+
/** The from expression. */
|
|
5
|
+
readonly expr: SQLNode;
|
|
6
|
+
/** The output name. */
|
|
7
|
+
readonly alias?: string;
|
|
8
|
+
/** The table sample. */
|
|
9
|
+
readonly sample?: SampleClauseNode;
|
|
10
|
+
/**
|
|
11
|
+
* Instantiate a from node.
|
|
12
|
+
* @param expr The from expression.
|
|
13
|
+
* @param alias The output name.
|
|
14
|
+
* @param sample The table sample.
|
|
15
|
+
*/
|
|
16
|
+
constructor(expr: SQLNode, alias?: string, sample?: SampleClauseNode);
|
|
17
|
+
/**
|
|
18
|
+
* Generate a SQL query string for this node.
|
|
19
|
+
*/
|
|
20
|
+
toString(): string;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=from.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"from.d.ts","sourceRoot":"","sources":["../../../src/ast/from.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,qBAAa,cAAe,SAAQ,OAAO;IACzC,2BAA2B;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,uBAAuB;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAEnC;;;;;OAKG;gBACS,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB;IAOpE;;OAEG;IACH,QAAQ;CAQT"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { FROM_CLAUSE } from '../constants.js';
|
|
2
|
+
import { quoteIdentifier } from '../util/string.js';
|
|
3
|
+
import { SQLNode } from './node.js';
|
|
4
|
+
import { isQuery } from './query.js';
|
|
5
|
+
import { isTableRef } from './table-ref.js';
|
|
6
|
+
export class FromClauseNode extends SQLNode {
|
|
7
|
+
/** The from expression. */
|
|
8
|
+
expr;
|
|
9
|
+
/** The output name. */
|
|
10
|
+
alias;
|
|
11
|
+
/** The table sample. */
|
|
12
|
+
sample;
|
|
13
|
+
/**
|
|
14
|
+
* Instantiate a from node.
|
|
15
|
+
* @param expr The from expression.
|
|
16
|
+
* @param alias The output name.
|
|
17
|
+
* @param sample The table sample.
|
|
18
|
+
*/
|
|
19
|
+
constructor(expr, alias, sample) {
|
|
20
|
+
super(FROM_CLAUSE);
|
|
21
|
+
this.expr = expr;
|
|
22
|
+
this.alias = alias;
|
|
23
|
+
this.sample = sample;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Generate a SQL query string for this node.
|
|
27
|
+
*/
|
|
28
|
+
toString() {
|
|
29
|
+
const { expr, alias, sample } = this;
|
|
30
|
+
const ref = isQuery(expr) ? `(${expr})` : `${expr}`;
|
|
31
|
+
const from = alias && !(isTableRef(expr) && expr.table.join('.') === alias)
|
|
32
|
+
? `${ref} AS ${quoteIdentifier(alias)}`
|
|
33
|
+
: `${ref}`;
|
|
34
|
+
return `${from}${sample ? ` TABLESAMPLE ${sample}` : ''}`;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=from.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"from.js","sourceRoot":"","sources":["../../../src/ast/from.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,OAAO,cAAe,SAAQ,OAAO;IACzC,2BAA2B;IAClB,IAAI,CAAU;IACvB,uBAAuB;IACd,KAAK,CAAU;IACxB,wBAAwB;IACf,MAAM,CAAoB;IAEnC;;;;;OAKG;IACH,YAAY,IAAa,EAAE,KAAc,EAAE,MAAyB;QAClE,KAAK,CAAC,WAAW,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACrC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;YACzE,CAAC,CAAC,GAAG,GAAG,OAAO,eAAe,CAAC,KAAK,CAAC,EAAE;YACvC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC5D,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ExprNode } from './node.js';
|
|
2
|
+
export declare class FunctionNode extends ExprNode {
|
|
3
|
+
/** The function name. */
|
|
4
|
+
readonly name: string;
|
|
5
|
+
/** The function arguments. */
|
|
6
|
+
readonly args: ExprNode[];
|
|
7
|
+
/**
|
|
8
|
+
* Instantiate a function node.
|
|
9
|
+
* @param name The function name.
|
|
10
|
+
* @param args The function arguments.
|
|
11
|
+
*/
|
|
12
|
+
constructor(name: string, args?: ExprNode[]);
|
|
13
|
+
/**
|
|
14
|
+
* Generate a SQL query string for this node.
|
|
15
|
+
*/
|
|
16
|
+
toString(): string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=function.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../../src/ast/function.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,qBAAa,YAAa,SAAQ,QAAQ;IACxC,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;IAE1B;;;;OAIG;gBACS,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,QAAQ,EAAO;IAM/C;;OAEG;IACH,QAAQ;CAIT"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { FUNCTION } from '../constants.js';
|
|
2
|
+
import { ExprNode } from './node.js';
|
|
3
|
+
export class FunctionNode extends ExprNode {
|
|
4
|
+
/** The function name. */
|
|
5
|
+
name;
|
|
6
|
+
/** The function arguments. */
|
|
7
|
+
args;
|
|
8
|
+
/**
|
|
9
|
+
* Instantiate a function node.
|
|
10
|
+
* @param name The function name.
|
|
11
|
+
* @param args The function arguments.
|
|
12
|
+
*/
|
|
13
|
+
constructor(name, args = []) {
|
|
14
|
+
super(FUNCTION);
|
|
15
|
+
this.name = name;
|
|
16
|
+
this.args = args;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate a SQL query string for this node.
|
|
20
|
+
*/
|
|
21
|
+
toString() {
|
|
22
|
+
const { name, args } = this;
|
|
23
|
+
return `${name}(${args.join(', ')})`;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=function.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function.js","sourceRoot":"","sources":["../../../src/ast/function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,OAAO,YAAa,SAAQ,QAAQ;IACxC,yBAAyB;IAChB,IAAI,CAAS;IACtB,8BAA8B;IACrB,IAAI,CAAa;IAE1B;;;;OAIG;IACH,YAAY,IAAY,EAAE,OAAmB,EAAE;QAC7C,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QAC5B,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ExprNode } from './node.js';
|
|
2
|
+
export declare class InOpNode extends ExprNode {
|
|
3
|
+
/** The input expression. */
|
|
4
|
+
readonly expr: ExprNode;
|
|
5
|
+
/** The value set. */
|
|
6
|
+
readonly values: ExprNode[];
|
|
7
|
+
/**
|
|
8
|
+
* Instantiate an in operator node.
|
|
9
|
+
* @param expr The input expression.
|
|
10
|
+
* @param values The value set.
|
|
11
|
+
*/
|
|
12
|
+
constructor(expr: ExprNode, values: ExprNode[]);
|
|
13
|
+
/**
|
|
14
|
+
* Generate a SQL query string for this node.
|
|
15
|
+
*/
|
|
16
|
+
toString(): string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=in-op.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-op.d.ts","sourceRoot":"","sources":["../../../src/ast/in-op.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,qBAAa,QAAS,SAAQ,QAAQ;IACpC,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,qBAAqB;IACrB,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IAE5B;;;;OAIG;gBACS,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;IAM9C;;OAEG;IACH,QAAQ;CAGT"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { IN_OPERATOR } from '../constants.js';
|
|
2
|
+
import { ExprNode } from './node.js';
|
|
3
|
+
export class InOpNode extends ExprNode {
|
|
4
|
+
/** The input expression. */
|
|
5
|
+
expr;
|
|
6
|
+
/** The value set. */
|
|
7
|
+
values;
|
|
8
|
+
/**
|
|
9
|
+
* Instantiate an in operator node.
|
|
10
|
+
* @param expr The input expression.
|
|
11
|
+
* @param values The value set.
|
|
12
|
+
*/
|
|
13
|
+
constructor(expr, values) {
|
|
14
|
+
super(IN_OPERATOR);
|
|
15
|
+
this.expr = expr;
|
|
16
|
+
this.values = values;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate a SQL query string for this node.
|
|
20
|
+
*/
|
|
21
|
+
toString() {
|
|
22
|
+
return `(${this.expr} IN (${this.values.join(', ')}))`;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=in-op.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-op.js","sourceRoot":"","sources":["../../../src/ast/in-op.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,OAAO,QAAS,SAAQ,QAAQ;IACpC,4BAA4B;IACnB,IAAI,CAAW;IACxB,qBAAqB;IACZ,MAAM,CAAa;IAE5B;;;;OAIG;IACH,YAAY,IAAc,EAAE,MAAkB;QAC5C,KAAK,CAAC,WAAW,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACzD,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ExprNode } from './node.js';
|
|
2
|
+
export declare class IntervalNode extends ExprNode {
|
|
3
|
+
/** The interval name. */
|
|
4
|
+
readonly name: string;
|
|
5
|
+
/** The interval steps. */
|
|
6
|
+
readonly steps: number;
|
|
7
|
+
/**
|
|
8
|
+
* Instantiate an interval node.
|
|
9
|
+
* @param name The interval name.
|
|
10
|
+
* @param steps The interval steps.
|
|
11
|
+
*/
|
|
12
|
+
constructor(name: string, steps?: number);
|
|
13
|
+
/**
|
|
14
|
+
* Generate a SQL query string for this node.
|
|
15
|
+
*/
|
|
16
|
+
toString(): string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=interval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interval.d.ts","sourceRoot":"","sources":["../../../src/ast/interval.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,qBAAa,YAAa,SAAQ,QAAQ;IACxC,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;gBACS,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU;IAM3C;;OAEG;IACH,QAAQ;CAGT"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { INTERVAL } from '../constants.js';
|
|
2
|
+
import { ExprNode } from './node.js';
|
|
3
|
+
export class IntervalNode extends ExprNode {
|
|
4
|
+
/** The interval name. */
|
|
5
|
+
name;
|
|
6
|
+
/** The interval steps. */
|
|
7
|
+
steps;
|
|
8
|
+
/**
|
|
9
|
+
* Instantiate an interval node.
|
|
10
|
+
* @param name The interval name.
|
|
11
|
+
* @param steps The interval steps.
|
|
12
|
+
*/
|
|
13
|
+
constructor(name, steps = 1) {
|
|
14
|
+
super(INTERVAL);
|
|
15
|
+
this.name = name;
|
|
16
|
+
this.steps = steps;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate a SQL query string for this node.
|
|
20
|
+
*/
|
|
21
|
+
toString() {
|
|
22
|
+
return `INTERVAL ${this.steps} ${this.name}`;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=interval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interval.js","sourceRoot":"","sources":["../../../src/ast/interval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,OAAO,YAAa,SAAQ,QAAQ;IACxC,yBAAyB;IAChB,IAAI,CAAS;IACtB,0BAA0B;IACjB,KAAK,CAAS;IAEvB;;;;OAIG;IACH,YAAY,IAAY,EAAE,QAAgB,CAAC;QACzC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,YAAY,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/C,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ExprNode } from './node.js';
|
|
2
|
+
export declare class LiteralNode extends ExprNode {
|
|
3
|
+
/** The literal value. */
|
|
4
|
+
readonly value: unknown;
|
|
5
|
+
/**
|
|
6
|
+
* Instantiate an literal node.
|
|
7
|
+
* @param value The literal value.
|
|
8
|
+
*/
|
|
9
|
+
constructor(value: unknown);
|
|
10
|
+
/**
|
|
11
|
+
* Generate a SQL query string for this node.
|
|
12
|
+
*/
|
|
13
|
+
toString(): string;
|
|
14
|
+
}
|
|
15
|
+
export declare function literalToSQL(value: unknown): string;
|
|
16
|
+
//# sourceMappingURL=literal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literal.d.ts","sourceRoot":"","sources":["../../../src/ast/literal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,qBAAa,WAAY,SAAQ,QAAQ;IACvC,yBAAyB;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAExB;;;OAGG;gBACS,KAAK,EAAE,OAAO;IAK1B;;OAEG;IACH,QAAQ;CAGT;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,UA2B1C"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { LITERAL } from '../constants.js';
|
|
2
|
+
import { ExprNode } from './node.js';
|
|
3
|
+
export class LiteralNode extends ExprNode {
|
|
4
|
+
/** The literal value. */
|
|
5
|
+
value;
|
|
6
|
+
/**
|
|
7
|
+
* Instantiate an literal node.
|
|
8
|
+
* @param value The literal value.
|
|
9
|
+
*/
|
|
10
|
+
constructor(value) {
|
|
11
|
+
super(LITERAL);
|
|
12
|
+
this.value = value;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Generate a SQL query string for this node.
|
|
16
|
+
*/
|
|
17
|
+
toString() {
|
|
18
|
+
return literalToSQL(this.value);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function literalToSQL(value) {
|
|
22
|
+
switch (typeof value) {
|
|
23
|
+
case 'number':
|
|
24
|
+
return Number.isFinite(value) ? `${value}` : 'NULL';
|
|
25
|
+
case 'string':
|
|
26
|
+
return `'${value.replaceAll(`'`, `''`)}'`;
|
|
27
|
+
case 'boolean':
|
|
28
|
+
return value ? 'TRUE' : 'FALSE';
|
|
29
|
+
default:
|
|
30
|
+
if (value == null) {
|
|
31
|
+
return 'NULL';
|
|
32
|
+
}
|
|
33
|
+
else if (value instanceof Date) {
|
|
34
|
+
const ts = +value;
|
|
35
|
+
if (Number.isNaN(ts))
|
|
36
|
+
return 'NULL';
|
|
37
|
+
const y = value.getUTCFullYear();
|
|
38
|
+
const m = value.getUTCMonth();
|
|
39
|
+
const d = value.getUTCDate();
|
|
40
|
+
return ts === Date.UTC(y, m, d)
|
|
41
|
+
? `DATE '${y}-${m + 1}-${d}'` // utc date
|
|
42
|
+
: `epoch_ms(${ts})`; // timestamp
|
|
43
|
+
}
|
|
44
|
+
else if (value instanceof RegExp) {
|
|
45
|
+
return `'${value.source}'`;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
// otherwise rely on string coercion
|
|
49
|
+
return `${value}`;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=literal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literal.js","sourceRoot":"","sources":["../../../src/ast/literal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,yBAAyB;IAChB,KAAK,CAAU;IAExB;;;OAGG;IACH,YAAY,KAAc;QACxB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QACtD,KAAK,QAAQ;YACX,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;QAC5C,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAClC;YACE,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAClB,OAAO,MAAM,CAAC;YAChB,CAAC;iBAAM,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;gBACjC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC;gBAClB,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBAAE,OAAO,MAAM,CAAC;gBACpC,MAAM,CAAC,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;gBACjC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;gBAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;gBAC7B,OAAO,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC7B,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW;oBACvC,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,YAAY;YACrC,CAAC;iBAAM,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;gBACnC,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,oCAAoC;gBACpC,OAAO,GAAG,KAAK,EAAE,CAAC;YACpB,CAAC;IACL,CAAC;AACH,CAAC"}
|