@devrev/meerkat-core 0.0.97 → 0.0.99
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/package.json +2 -2
- package/src/ast-builder/ast-builder.js +97 -0
- package/src/ast-builder/ast-builder.js.map +1 -0
- package/src/ast-deserializer/ast-deserializer.js +17 -0
- package/src/ast-deserializer/ast-deserializer.js.map +1 -0
- package/src/ast-serializer/ast-serializer.js +8 -0
- package/src/ast-serializer/ast-serializer.js.map +1 -0
- package/src/ast-validator/dimension-validator.js +49 -0
- package/src/ast-validator/dimension-validator.js.map +1 -0
- package/src/ast-validator/index.js +12 -0
- package/src/ast-validator/index.js.map +1 -0
- package/src/ast-validator/measure-validator.js +155 -0
- package/src/ast-validator/measure-validator.js.map +1 -0
- package/{ast-validator → src/ast-validator}/tests/test-data.js +692 -890
- package/src/ast-validator/tests/test-data.js.map +1 -0
- package/src/ast-validator/types.js +3 -0
- package/src/ast-validator/types.js.map +1 -0
- package/src/ast-validator/utils.js +24 -0
- package/src/ast-validator/utils.js.map +1 -0
- package/src/context-params/context-params-ast.js +42 -0
- package/src/context-params/context-params-ast.js.map +1 -0
- package/src/cube-filter-transformer/and/and.js +14 -0
- package/src/cube-filter-transformer/and/and.js.map +1 -0
- package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.js +145 -0
- package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.js.map +1 -0
- package/src/cube-filter-transformer/contains/contains.js +62 -0
- package/src/cube-filter-transformer/contains/contains.js.map +1 -0
- package/src/cube-filter-transformer/equals/equals-array.js +71 -0
- package/src/cube-filter-transformer/equals/equals-array.js.map +1 -0
- package/src/cube-filter-transformer/equals/equals.js +36 -0
- package/src/cube-filter-transformer/equals/equals.js.map +1 -0
- package/src/cube-filter-transformer/factory.js +120 -0
- package/src/cube-filter-transformer/factory.js.map +1 -0
- package/src/cube-filter-transformer/gt/gt.js +28 -0
- package/src/cube-filter-transformer/gt/gt.js.map +1 -0
- package/src/cube-filter-transformer/gte/gte.js +28 -0
- package/src/cube-filter-transformer/gte/gte.js.map +1 -0
- package/src/cube-filter-transformer/in/in.js +69 -0
- package/src/cube-filter-transformer/in/in.js.map +1 -0
- package/src/cube-filter-transformer/in-date-range/in-date-range.js +21 -0
- package/src/cube-filter-transformer/in-date-range/in-date-range.js.map +1 -0
- package/src/cube-filter-transformer/lt/lt.js +28 -0
- package/src/cube-filter-transformer/lt/lt.js.map +1 -0
- package/src/cube-filter-transformer/lte/lte.js +28 -0
- package/src/cube-filter-transformer/lte/lte.js.map +1 -0
- package/src/cube-filter-transformer/not/not.js +14 -0
- package/src/cube-filter-transformer/not/not.js.map +1 -0
- package/src/cube-filter-transformer/not-In-date-range/not-In-date-range.js +21 -0
- package/src/cube-filter-transformer/not-In-date-range/not-In-date-range.js.map +1 -0
- package/src/cube-filter-transformer/not-contains/not-contains.js +62 -0
- package/src/cube-filter-transformer/not-contains/not-contains.js.map +1 -0
- package/src/cube-filter-transformer/not-equals/not-equals-array.js +21 -0
- package/src/cube-filter-transformer/not-equals/not-equals-array.js.map +1 -0
- package/src/cube-filter-transformer/not-equals/not-equals.js +36 -0
- package/src/cube-filter-transformer/not-equals/not-equals.js.map +1 -0
- package/src/cube-filter-transformer/not-in/not-in.js +76 -0
- package/src/cube-filter-transformer/not-in/not-in.js.map +1 -0
- package/src/cube-filter-transformer/not-set/not-set.js +23 -0
- package/src/cube-filter-transformer/not-set/not-set.js.map +1 -0
- package/src/cube-filter-transformer/or/or.js +14 -0
- package/src/cube-filter-transformer/or/or.js.map +1 -0
- package/src/cube-filter-transformer/set/set.js +23 -0
- package/src/cube-filter-transformer/set/set.js.map +1 -0
- package/src/cube-group-by-transformer/cube-group-by-transformer.d.ts +2 -1
- package/src/cube-group-by-transformer/cube-group-by-transformer.js +25 -0
- package/src/cube-group-by-transformer/cube-group-by-transformer.js.map +1 -0
- package/src/cube-limit-offset-transformer/cube-limit-offset-transformer.js +42 -0
- package/src/cube-limit-offset-transformer/cube-limit-offset-transformer.js.map +1 -0
- package/src/cube-measure-transformer/cube-measure-transformer.js +142 -0
- package/src/cube-measure-transformer/cube-measure-transformer.js.map +1 -0
- package/src/cube-order-by-transformer/cube-order-by-transformer.d.ts +2 -1
- package/src/cube-order-by-transformer/cube-order-by-transformer.js +40 -0
- package/src/cube-order-by-transformer/cube-order-by-transformer.js.map +1 -0
- package/src/cube-to-duckdb/cube-filter-to-duckdb.js +3 -0
- package/src/cube-to-duckdb/cube-filter-to-duckdb.js.map +1 -0
- package/src/filter-params/filter-params-ast.js +114 -0
- package/src/filter-params/filter-params-ast.js.map +1 -0
- package/src/get-filter-params-sql/get-filter-params-sql.js +25 -0
- package/src/get-filter-params-sql/get-filter-params-sql.js.map +1 -0
- package/src/get-final-base-sql/get-final-base-sql.js +28 -0
- package/src/get-final-base-sql/get-final-base-sql.js.map +1 -0
- package/{get-wrapped-base-query-with-projections → src/get-wrapped-base-query-with-projections}/get-aliased-columns-from-filters.js +48 -61
- package/src/get-wrapped-base-query-with-projections/get-aliased-columns-from-filters.js.map +1 -0
- package/src/get-wrapped-base-query-with-projections/get-projection-clause.js +91 -0
- package/src/get-wrapped-base-query-with-projections/get-projection-clause.js.map +1 -0
- package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js +32 -0
- package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js.map +1 -0
- package/src/get-wrapped-base-query-with-projections/sql-expression-modifiers.js +32 -0
- package/src/get-wrapped-base-query-with-projections/sql-expression-modifiers.js.map +1 -0
- package/src/index.js +37 -0
- package/src/index.js.map +1 -0
- package/src/joins/joins.js +162 -0
- package/src/joins/joins.js.map +1 -0
- package/src/member-formatters/constants.js +6 -0
- package/src/member-formatters/constants.js.map +1 -0
- package/src/member-formatters/get-alias.d.ts +15 -0
- package/src/member-formatters/get-alias.js +42 -0
- package/src/member-formatters/get-alias.js.map +1 -0
- package/src/member-formatters/get-namespaced-key.d.ts +1 -0
- package/src/member-formatters/get-namespaced-key.js +6 -0
- package/src/member-formatters/get-namespaced-key.js.map +1 -0
- package/src/member-formatters/index.d.ts +2 -0
- package/src/member-formatters/index.js +15 -0
- package/src/member-formatters/index.js.map +1 -0
- package/src/member-formatters/member-key-to-safe-key.js +9 -0
- package/src/member-formatters/member-key-to-safe-key.js.map +1 -0
- package/src/member-formatters/split-into-data-source-and-fields.js +10 -0
- package/src/member-formatters/split-into-data-source-and-fields.js.map +1 -0
- package/src/resolution/resolution.d.ts +4 -3
- package/src/resolution/resolution.js +141 -0
- package/src/resolution/resolution.js.map +1 -0
- package/src/resolution/types.js +5 -0
- package/src/resolution/types.js.map +1 -0
- package/src/types/cube-types/index.js +6 -0
- package/src/types/cube-types/index.js.map +1 -0
- package/src/types/cube-types/query.js +8 -0
- package/src/types/cube-types/query.js.map +1 -0
- package/src/types/cube-types/table.d.ts +2 -0
- package/src/types/cube-types/table.js +3 -0
- package/src/types/cube-types/table.js.map +1 -0
- package/src/types/duckdb-serialization-types/index.js +11 -0
- package/src/types/duckdb-serialization-types/index.js.map +1 -0
- package/{types → src/types}/duckdb-serialization-types/serialization/Constraint.js +6 -19
- package/src/types/duckdb-serialization-types/serialization/Constraint.js.map +1 -0
- package/{types → src/types}/duckdb-serialization-types/serialization/CreateInfo.js +10 -29
- package/src/types/duckdb-serialization-types/serialization/CreateInfo.js.map +1 -0
- package/{types → src/types}/duckdb-serialization-types/serialization/Expression.js +6 -19
- package/src/types/duckdb-serialization-types/serialization/Expression.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/LogicalOperator.js +28 -0
- package/src/types/duckdb-serialization-types/serialization/LogicalOperator.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/MacroFunction.js +10 -0
- package/src/types/duckdb-serialization-types/serialization/MacroFunction.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/Misc.js +3 -0
- package/src/types/duckdb-serialization-types/serialization/Misc.js.map +1 -0
- package/{types → src/types}/duckdb-serialization-types/serialization/Nodes.js +17 -45
- package/src/types/duckdb-serialization-types/serialization/Nodes.js.map +1 -0
- package/{types → src/types}/duckdb-serialization-types/serialization/ParseInfo.js +20 -54
- package/src/types/duckdb-serialization-types/serialization/ParseInfo.js.map +1 -0
- package/{types → src/types}/duckdb-serialization-types/serialization/ParsedExpression.js +6 -19
- package/src/types/duckdb-serialization-types/serialization/ParsedExpression.js.map +1 -0
- package/{types → src/types}/duckdb-serialization-types/serialization/QueryNode.js +8 -24
- package/src/types/duckdb-serialization-types/serialization/QueryNode.js.map +1 -0
- package/{types → src/types}/duckdb-serialization-types/serialization/ResultModifier.js +4 -9
- package/src/types/duckdb-serialization-types/serialization/ResultModifier.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/Statement.js +3 -0
- package/src/types/duckdb-serialization-types/serialization/Statement.js.map +1 -0
- package/{types → src/types}/duckdb-serialization-types/serialization/TableFilter.js +4 -9
- package/src/types/duckdb-serialization-types/serialization/TableFilter.js.map +1 -0
- package/{types → src/types}/duckdb-serialization-types/serialization/TableRef.js +8 -24
- package/src/types/duckdb-serialization-types/serialization/TableRef.js.map +1 -0
- package/{types → src/types}/duckdb-serialization-types/serialization/Types.js +4 -9
- package/src/types/duckdb-serialization-types/serialization/Types.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/example.js +109 -0
- package/src/types/duckdb-serialization-types/serialization/example.js.map +1 -0
- package/src/types/utils.js +69 -0
- package/src/types/utils.js.map +1 -0
- package/{utils → src/utils}/__fixtures__/joins.fixtures.js +228 -316
- package/src/utils/__fixtures__/joins.fixtures.js.map +1 -0
- package/src/utils/base-ast.js +49 -0
- package/src/utils/base-ast.js.map +1 -0
- package/src/utils/cube-filter-enrichment.js +53 -0
- package/src/utils/cube-filter-enrichment.js.map +1 -0
- package/{utils → src/utils}/cube-to-table-schema.js +25 -38
- package/src/utils/cube-to-table-schema.js.map +1 -0
- package/src/utils/cube-type-to-duckdb-type.js +12 -0
- package/src/utils/cube-type-to-duckdb-type.js.map +1 -0
- package/src/utils/find-in-table-schema.d.ts +3 -1
- package/src/utils/find-in-table-schema.js +55 -0
- package/src/utils/find-in-table-schema.js.map +1 -0
- package/src/utils/get-column-names-from-ast.js +45 -0
- package/src/utils/get-column-names-from-ast.js.map +1 -0
- package/src/utils/get-possible-nodes.js +146 -0
- package/src/utils/get-possible-nodes.js.map +1 -0
- package/src/utils/get-type-info.js +34 -0
- package/src/utils/get-type-info.js.map +1 -0
- package/src/utils/is-array-member-type.js +8 -0
- package/src/utils/is-array-member-type.js.map +1 -0
- package/src/utils/key-from-measures-dimension.js +32 -0
- package/src/utils/key-from-measures-dimension.js.map +1 -0
- package/src/utils/meerkat-placeholder-replacer.js +10 -0
- package/src/utils/meerkat-placeholder-replacer.js.map +1 -0
- package/src/utils/modify-meerkat-filter.d.ts +2 -3
- package/src/utils/modify-meerkat-filter.js +24 -0
- package/src/utils/modify-meerkat-filter.js.map +1 -0
- package/{utils → src/utils}/type-guards.js +10 -28
- package/src/utils/type-guards.js.map +1 -0
- package/ast-builder/ast-builder.js +0 -90
- package/ast-builder/ast-builder.js.map +0 -1
- package/ast-deserializer/ast-deserializer.js +0 -30
- package/ast-deserializer/ast-deserializer.js.map +0 -1
- package/ast-serializer/ast-serializer.js +0 -12
- package/ast-serializer/ast-serializer.js.map +0 -1
- package/ast-validator/dimension-validator.js +0 -54
- package/ast-validator/dimension-validator.js.map +0 -1
- package/ast-validator/index.js +0 -25
- package/ast-validator/index.js.map +0 -1
- package/ast-validator/measure-validator.js +0 -163
- package/ast-validator/measure-validator.js.map +0 -1
- package/ast-validator/tests/test-data.js.map +0 -1
- package/ast-validator/types.js +0 -3
- package/ast-validator/types.js.map +0 -1
- package/ast-validator/utils.js +0 -35
- package/ast-validator/utils.js.map +0 -1
- package/context-params/context-params-ast.js +0 -55
- package/context-params/context-params-ast.js.map +0 -1
- package/cube-filter-transformer/and/and.js +0 -18
- package/cube-filter-transformer/and/and.js.map +0 -1
- package/cube-filter-transformer/base-condition-builder/base-condition-builder.js +0 -160
- package/cube-filter-transformer/base-condition-builder/base-condition-builder.js.map +0 -1
- package/cube-filter-transformer/contains/contains.js +0 -71
- package/cube-filter-transformer/contains/contains.js.map +0 -1
- package/cube-filter-transformer/equals/equals-array.js +0 -77
- package/cube-filter-transformer/equals/equals-array.js.map +0 -1
- package/cube-filter-transformer/equals/equals.js +0 -37
- package/cube-filter-transformer/equals/equals.js.map +0 -1
- package/cube-filter-transformer/factory.js +0 -124
- package/cube-filter-transformer/factory.js.map +0 -1
- package/cube-filter-transformer/gt/gt.js +0 -30
- package/cube-filter-transformer/gt/gt.js.map +0 -1
- package/cube-filter-transformer/gte/gte.js +0 -30
- package/cube-filter-transformer/gte/gte.js.map +0 -1
- package/cube-filter-transformer/in/in.js +0 -78
- package/cube-filter-transformer/in/in.js.map +0 -1
- package/cube-filter-transformer/in-date-range/in-date-range.js +0 -24
- package/cube-filter-transformer/in-date-range/in-date-range.js.map +0 -1
- package/cube-filter-transformer/lt/lt.js +0 -30
- package/cube-filter-transformer/lt/lt.js.map +0 -1
- package/cube-filter-transformer/lte/lte.js +0 -30
- package/cube-filter-transformer/lte/lte.js.map +0 -1
- package/cube-filter-transformer/not/not.js +0 -18
- package/cube-filter-transformer/not/not.js.map +0 -1
- package/cube-filter-transformer/not-In-date-range/not-In-date-range.js +0 -24
- package/cube-filter-transformer/not-In-date-range/not-In-date-range.js.map +0 -1
- package/cube-filter-transformer/not-contains/not-contains.js +0 -71
- package/cube-filter-transformer/not-contains/not-contains.js.map +0 -1
- package/cube-filter-transformer/not-equals/not-equals-array.js +0 -26
- package/cube-filter-transformer/not-equals/not-equals-array.js.map +0 -1
- package/cube-filter-transformer/not-equals/not-equals.js +0 -37
- package/cube-filter-transformer/not-equals/not-equals.js.map +0 -1
- package/cube-filter-transformer/not-in/not-in.js +0 -85
- package/cube-filter-transformer/not-in/not-in.js.map +0 -1
- package/cube-filter-transformer/not-set/not-set.js +0 -27
- package/cube-filter-transformer/not-set/not-set.js.map +0 -1
- package/cube-filter-transformer/or/or.js +0 -18
- package/cube-filter-transformer/or/or.js.map +0 -1
- package/cube-filter-transformer/set/set.js +0 -27
- package/cube-filter-transformer/set/set.js.map +0 -1
- package/cube-group-by-transformer/cube-group-by-transformer.js +0 -25
- package/cube-group-by-transformer/cube-group-by-transformer.js.map +0 -1
- package/cube-limit-offset-transformer/cube-limit-offset-transformer.js +0 -42
- package/cube-limit-offset-transformer/cube-limit-offset-transformer.js.map +0 -1
- package/cube-measure-transformer/cube-measure-transformer.js +0 -127
- package/cube-measure-transformer/cube-measure-transformer.js.map +0 -1
- package/cube-order-by-transformer/cube-order-by-transformer.js +0 -39
- package/cube-order-by-transformer/cube-order-by-transformer.js.map +0 -1
- package/cube-to-duckdb/cube-filter-to-duckdb.js +0 -3
- package/cube-to-duckdb/cube-filter-to-duckdb.js.map +0 -1
- package/filter-params/filter-params-ast.js +0 -115
- package/filter-params/filter-params-ast.js.map +0 -1
- package/get-filter-params-sql/get-filter-params-sql.js +0 -28
- package/get-filter-params-sql/get-filter-params-sql.js.map +0 -1
- package/get-final-base-sql/get-final-base-sql.js +0 -30
- package/get-final-base-sql/get-final-base-sql.js.map +0 -1
- package/get-wrapped-base-query-with-projections/get-aliased-columns-from-filters.js.map +0 -1
- package/get-wrapped-base-query-with-projections/get-projection-clause.js +0 -87
- package/get-wrapped-base-query-with-projections/get-projection-clause.js.map +0 -1
- package/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js +0 -33
- package/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js.map +0 -1
- package/get-wrapped-base-query-with-projections/sql-expression-modifiers.js +0 -60
- package/get-wrapped-base-query-with-projections/sql-expression-modifiers.js.map +0 -1
- package/index.js +0 -66
- package/index.js.map +0 -1
- package/joins/joins.js +0 -170
- package/joins/joins.js.map +0 -1
- package/member-formatters/constants.js +0 -19
- package/member-formatters/constants.js.map +0 -1
- package/member-formatters/index.js +0 -23
- package/member-formatters/index.js.map +0 -1
- package/member-formatters/member-key-to-safe-key.js +0 -13
- package/member-formatters/member-key-to-safe-key.js.map +0 -1
- package/member-formatters/split-into-data-source-and-fields.js +0 -17
- package/member-formatters/split-into-data-source-and-fields.js.map +0 -1
- package/resolution/resolution.js +0 -128
- package/resolution/resolution.js.map +0 -1
- package/resolution/types.js +0 -10
- package/resolution/types.js.map +0 -1
- package/types/cube-types/index.d.js +0 -6
- package/types/cube-types/index.d.js.map +0 -1
- package/types/cube-types/index.js +0 -6
- package/types/cube-types/index.js.map +0 -1
- package/types/cube-types/query.d.js +0 -5
- package/types/cube-types/query.d.js.map +0 -1
- package/types/cube-types/query.js +0 -14
- package/types/cube-types/query.js.map +0 -1
- package/types/cube-types/table.d.js +0 -3
- package/types/cube-types/table.d.js.map +0 -1
- package/types/cube-types/table.js +0 -3
- package/types/cube-types/table.js.map +0 -1
- package/types/duckdb-serialization-types/index.d.js +0 -11
- package/types/duckdb-serialization-types/index.d.js.map +0 -1
- package/types/duckdb-serialization-types/index.js +0 -11
- package/types/duckdb-serialization-types/index.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/Constraint.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/CreateInfo.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/Expression.d.js +0 -3
- package/types/duckdb-serialization-types/serialization/Expression.d.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/Expression.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/LogicalOperator.js +0 -47
- package/types/duckdb-serialization-types/serialization/LogicalOperator.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/MacroFunction.js +0 -15
- package/types/duckdb-serialization-types/serialization/MacroFunction.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/Misc.d.js +0 -3
- package/types/duckdb-serialization-types/serialization/Misc.d.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/Misc.js +0 -3
- package/types/duckdb-serialization-types/serialization/Misc.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/Nodes.d.js +0 -3
- package/types/duckdb-serialization-types/serialization/Nodes.d.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/Nodes.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/ParseInfo.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/ParsedExpression.d.js +0 -3
- package/types/duckdb-serialization-types/serialization/ParsedExpression.d.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/ParsedExpression.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/QueryNode.d.js +0 -3
- package/types/duckdb-serialization-types/serialization/QueryNode.d.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/QueryNode.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/ResultModifier.d.js +0 -3
- package/types/duckdb-serialization-types/serialization/ResultModifier.d.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/ResultModifier.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/Statement.d.js +0 -3
- package/types/duckdb-serialization-types/serialization/Statement.d.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/Statement.js +0 -3
- package/types/duckdb-serialization-types/serialization/Statement.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/TableFilter.d.js +0 -3
- package/types/duckdb-serialization-types/serialization/TableFilter.d.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/TableFilter.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/TableRef.d.js +0 -3
- package/types/duckdb-serialization-types/serialization/TableRef.d.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/TableRef.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/Types.d.js +0 -3
- package/types/duckdb-serialization-types/serialization/Types.d.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/Types.js.map +0 -1
- package/types/duckdb-serialization-types/serialization/example.js +0 -131
- package/types/duckdb-serialization-types/serialization/example.js.map +0 -1
- package/types/utils.js +0 -108
- package/types/utils.js.map +0 -1
- package/utils/__fixtures__/joins.fixtures.js.map +0 -1
- package/utils/base-ast.js +0 -63
- package/utils/base-ast.js.map +0 -1
- package/utils/cube-filter-enrichment.js +0 -63
- package/utils/cube-filter-enrichment.js.map +0 -1
- package/utils/cube-to-table-schema.js.map +0 -1
- package/utils/cube-type-to-duckdb-type.js +0 -17
- package/utils/cube-type-to-duckdb-type.js.map +0 -1
- package/utils/find-in-table-schema.js +0 -40
- package/utils/find-in-table-schema.js.map +0 -1
- package/utils/get-column-names-from-ast.js +0 -45
- package/utils/get-column-names-from-ast.js.map +0 -1
- package/utils/get-possible-nodes.js +0 -152
- package/utils/get-possible-nodes.js.map +0 -1
- package/utils/get-type-info.js +0 -44
- package/utils/get-type-info.js.map +0 -1
- package/utils/is-array-member-type.js +0 -12
- package/utils/is-array-member-type.js.map +0 -1
- package/utils/key-from-measures-dimension.js +0 -35
- package/utils/key-from-measures-dimension.js.map +0 -1
- package/utils/meerkat-placeholder-replacer.js +0 -14
- package/utils/meerkat-placeholder-replacer.js.map +0 -1
- package/utils/modify-meerkat-filter.js +0 -30
- package/utils/modify-meerkat-filter.js.map +0 -1
- package/utils/type-guards.js.map +0 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMemberInfoFromTableSchema = void 0;
|
|
4
|
+
const split_into_data_source_and_fields_1 = require("../member-formatters/split-into-data-source-and-fields");
|
|
5
|
+
const getMemberInfoFromTableSchema = (memberKey, tableSchema) => {
|
|
6
|
+
let memberInfo;
|
|
7
|
+
const [_, memberKeyName] = (0, split_into_data_source_and_fields_1.splitIntoDataSourceAndFields)(memberKey);
|
|
8
|
+
/**
|
|
9
|
+
* Finding the table key from the measures.
|
|
10
|
+
*/
|
|
11
|
+
for (let i = 0; i < tableSchema.measures.length; i++) {
|
|
12
|
+
const measure = tableSchema.measures[i];
|
|
13
|
+
const key = measure.name;
|
|
14
|
+
if (!key || key !== memberKeyName) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
memberInfo = measure;
|
|
18
|
+
return memberInfo;
|
|
19
|
+
}
|
|
20
|
+
for (let i = 0; i < tableSchema.dimensions.length; i++) {
|
|
21
|
+
const dimension = tableSchema.dimensions[i];
|
|
22
|
+
const key = dimension.name;
|
|
23
|
+
if (!key || key !== memberKeyName) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
memberInfo = dimension;
|
|
27
|
+
return memberInfo;
|
|
28
|
+
}
|
|
29
|
+
return;
|
|
30
|
+
};
|
|
31
|
+
exports.getMemberInfoFromTableSchema = getMemberInfoFromTableSchema;
|
|
32
|
+
//# sourceMappingURL=key-from-measures-dimension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-from-measures-dimension.js","sourceRoot":"","sources":["../../../../meerkat-core/src/utils/key-from-measures-dimension.ts"],"names":[],"mappings":";;;AAAA,8GAAsG;AAG/F,MAAM,4BAA4B,GAAG,CAC1C,SAAiB,EACjB,WAAwB,EACxB,EAAE;IACF,IAAI,UAA2C,CAAC;IAEhD,MAAM,CAAC,CAAC,EAAE,aAAa,CAAC,GAAG,IAAA,gEAA4B,EAAC,SAAS,CAAC,CAAC;IAEnE;;OAEG;IACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpD,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,aAAa,EAAE;YACjC,SAAS;SACV;QAED,UAAU,GAAG,OAAO,CAAC;QACrB,OAAO,UAAU,CAAC;KACnB;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACtD,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC;QAE3B,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,aAAa,EAAE;YACjC,SAAS;SACV;QAED,UAAU,GAAG,SAAS,CAAC;QACvB,OAAO,UAAU,CAAC;KACnB;IACD,OAAO;AACT,CAAC,CAAC;AAlCW,QAAA,4BAA4B,gCAkCvC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.meerkatPlaceholderReplacer = void 0;
|
|
4
|
+
const constants_1 = require("../member-formatters/constants");
|
|
5
|
+
const meerkatPlaceholderReplacer = (sql, tableName) => {
|
|
6
|
+
const tableNameEncapsulationRegEx = /\{MEERKAT\}\./g;
|
|
7
|
+
return sql.replace(tableNameEncapsulationRegEx, tableName + constants_1.MEERKAT_OUTPUT_DELIMITER);
|
|
8
|
+
};
|
|
9
|
+
exports.meerkatPlaceholderReplacer = meerkatPlaceholderReplacer;
|
|
10
|
+
//# sourceMappingURL=meerkat-placeholder-replacer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meerkat-placeholder-replacer.js","sourceRoot":"","sources":["../../../../meerkat-core/src/utils/meerkat-placeholder-replacer.ts"],"names":[],"mappings":";;;AAAA,8DAA0E;AAEnE,MAAM,0BAA0B,GAAG,CAAC,GAAW,EAAE,SAAiB,EAAE,EAAE;IAC3E,MAAM,2BAA2B,GAAG,gBAAgB,CAAC;IACrD,OAAO,GAAG,CAAC,OAAO,CAChB,2BAA2B,EAC3B,SAAS,GAAG,oCAAwB,CACrC,CAAC;AACJ,CAAC,CAAC;AANW,QAAA,0BAA0B,8BAMrC"}
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import { QueryFiltersWithInfo } from
|
|
2
|
-
|
|
3
|
-
export declare const modifyLeafMeerkatFilter: <T>(filters: QueryFiltersWithInfo, callback: (arg: QueryFilter) => T) => T[] | undefined;
|
|
1
|
+
import { QueryFiltersWithInfo, QueryOperatorsWithInfo } from '../cube-to-duckdb/cube-filter-to-duckdb';
|
|
2
|
+
export declare const modifyLeafMeerkatFilter: <T>(filters: QueryFiltersWithInfo, callback: (arg: QueryOperatorsWithInfo) => T) => T[] | undefined;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.modifyLeafMeerkatFilter = void 0;
|
|
4
|
+
const modifyLeafMeerkatFilter = (filters, callback) => {
|
|
5
|
+
/*
|
|
6
|
+
** This function traverse the QueryFiltersWithInfo JSON, and calls the callback for each leaf type.
|
|
7
|
+
** This way we need no rewrite the traversal logic again and again.
|
|
8
|
+
** The return value of the callback will show up the same path in the resulting object as in the original object
|
|
9
|
+
*/
|
|
10
|
+
if (!filters)
|
|
11
|
+
return undefined;
|
|
12
|
+
return filters.map((item) => {
|
|
13
|
+
if ('member' in item) {
|
|
14
|
+
return callback(item);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
const andPayload = 'and' in item ? (0, exports.modifyLeafMeerkatFilter)(item.and, callback) : undefined;
|
|
18
|
+
const orPayload = 'or' in item ? (0, exports.modifyLeafMeerkatFilter)(item.or, callback) : undefined;
|
|
19
|
+
return Object.assign(Object.assign({}, (andPayload ? { and: andPayload } : {})), (orPayload ? { or: orPayload } : {}));
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
exports.modifyLeafMeerkatFilter = modifyLeafMeerkatFilter;
|
|
24
|
+
//# sourceMappingURL=modify-meerkat-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modify-meerkat-filter.js","sourceRoot":"","sources":["../../../../meerkat-core/src/utils/modify-meerkat-filter.ts"],"names":[],"mappings":";;;AAKO,MAAM,uBAAuB,GAAG,CACrC,OAA6B,EAC7B,QAA4C,EAC3B,EAAE;IACnB;;;;OAIG;IACH,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,IAAI,QAAQ,IAAI,IAAI,EAAE;YACpB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;SACvB;aAAM;YACL,MAAM,UAAU,GACd,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAA,+BAAuB,EAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1E,MAAM,SAAS,GACb,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAA,+BAAuB,EAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAExE,OAAO,gCACF,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GACvC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACnC,CAAC;SACR;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAzBW,QAAA,uBAAuB,2BAyBlC"}
|
|
@@ -1,39 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
enumerable: true,
|
|
5
|
-
get: all[name]
|
|
6
|
-
});
|
|
7
|
-
}
|
|
8
|
-
_export(exports, {
|
|
9
|
-
hasChildren: function() {
|
|
10
|
-
return hasChildren;
|
|
11
|
-
},
|
|
12
|
-
isFilterArray: function() {
|
|
13
|
-
return isFilterArray;
|
|
14
|
-
},
|
|
15
|
-
isLogicalAnd: function() {
|
|
16
|
-
return isLogicalAnd;
|
|
17
|
-
},
|
|
18
|
-
isLogicalAndOR: function() {
|
|
19
|
-
return isLogicalAndOR;
|
|
20
|
-
},
|
|
21
|
-
isLogicalOr: function() {
|
|
22
|
-
return isLogicalOr;
|
|
23
|
-
},
|
|
24
|
-
isQueryFilter: function() {
|
|
25
|
-
return isQueryFilter;
|
|
26
|
-
}
|
|
27
|
-
});
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hasChildren = exports.isFilterArray = exports.isQueryFilter = exports.isLogicalOr = exports.isLogicalAnd = exports.isLogicalAndOR = void 0;
|
|
28
4
|
function isLogicalAndOR(expression) {
|
|
29
5
|
if (!expression) {
|
|
30
6
|
return false;
|
|
31
7
|
}
|
|
32
|
-
if (Object.prototype.hasOwnProperty.call(expression, 'and') ||
|
|
8
|
+
if (Object.prototype.hasOwnProperty.call(expression, 'and') ||
|
|
9
|
+
Object.prototype.hasOwnProperty.call(expression, 'or')) {
|
|
33
10
|
return true;
|
|
34
11
|
}
|
|
35
12
|
return false;
|
|
36
13
|
}
|
|
14
|
+
exports.isLogicalAndOR = isLogicalAndOR;
|
|
37
15
|
function isLogicalAnd(expression) {
|
|
38
16
|
if (!expression) {
|
|
39
17
|
return false;
|
|
@@ -43,6 +21,7 @@ function isLogicalAnd(expression) {
|
|
|
43
21
|
}
|
|
44
22
|
return false;
|
|
45
23
|
}
|
|
24
|
+
exports.isLogicalAnd = isLogicalAnd;
|
|
46
25
|
function isLogicalOr(expression) {
|
|
47
26
|
if (!expression) {
|
|
48
27
|
return false;
|
|
@@ -52,6 +31,7 @@ function isLogicalOr(expression) {
|
|
|
52
31
|
}
|
|
53
32
|
return false;
|
|
54
33
|
}
|
|
34
|
+
exports.isLogicalOr = isLogicalOr;
|
|
55
35
|
function isQueryFilter(expression) {
|
|
56
36
|
if (!expression) {
|
|
57
37
|
return false;
|
|
@@ -61,6 +41,7 @@ function isQueryFilter(expression) {
|
|
|
61
41
|
}
|
|
62
42
|
return false;
|
|
63
43
|
}
|
|
44
|
+
exports.isQueryFilter = isQueryFilter;
|
|
64
45
|
function isFilterArray(expression) {
|
|
65
46
|
if (!expression) {
|
|
66
47
|
return false;
|
|
@@ -70,6 +51,7 @@ function isFilterArray(expression) {
|
|
|
70
51
|
}
|
|
71
52
|
return false;
|
|
72
53
|
}
|
|
54
|
+
exports.isFilterArray = isFilterArray;
|
|
73
55
|
function hasChildren(whereObj) {
|
|
74
56
|
if (!whereObj) {
|
|
75
57
|
return false;
|
|
@@ -79,5 +61,5 @@ function hasChildren(whereObj) {
|
|
|
79
61
|
}
|
|
80
62
|
return false;
|
|
81
63
|
}
|
|
82
|
-
|
|
64
|
+
exports.hasChildren = hasChildren;
|
|
83
65
|
//# sourceMappingURL=type-guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-guards.js","sourceRoot":"","sources":["../../../../meerkat-core/src/utils/type-guards.ts"],"names":[],"mappings":";;;AAGA,SAAgB,cAAc,CAC5B,UAA4D;IAE5D,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,KAAK,CAAC;KACd;IACD,IACE,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EACtD;QACA,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAbD,wCAaC;AAED,SAAgB,YAAY,CAC1B,UAA4D;IAE5D,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,KAAK,CAAC;KACd;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE;QAC3D,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAVD,oCAUC;AAED,SAAgB,WAAW,CACzB,UAA4D;IAE5D,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,KAAK,CAAC;KACd;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE;QAC1D,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAVD,kCAUC;AAED,SAAgB,aAAa,CAC3B,UAA4D;IAE5D,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,KAAK,CAAC;KACd;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE;QAC9D,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAVD,sCAUC;AAED,SAAgB,aAAa,CAC3B,UAEwD;IAExD,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,KAAK,CAAC;KACd;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;QAC7B,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAZD,sCAYC;AAED,SAAgB,WAAW,CACzB,QAAiC;IAEjC,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,KAAK,CAAC;KACd;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE;QAC9D,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAVD,kCAUC"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "cubeToDuckdbAST", {
|
|
3
|
-
enumerable: true,
|
|
4
|
-
get: function() {
|
|
5
|
-
return cubeToDuckdbAST;
|
|
6
|
-
}
|
|
7
|
-
});
|
|
8
|
-
const _extends = require("@swc/helpers/_/_extends");
|
|
9
|
-
const _factory = require("../cube-filter-transformer/factory");
|
|
10
|
-
const _cubegroupbytransformer = require("../cube-group-by-transformer/cube-group-by-transformer");
|
|
11
|
-
const _cubelimitoffsettransformer = require("../cube-limit-offset-transformer/cube-limit-offset-transformer");
|
|
12
|
-
const _cubeorderbytransformer = require("../cube-order-by-transformer/cube-order-by-transformer");
|
|
13
|
-
const _filterparamsast = require("../filter-params/filter-params-ast");
|
|
14
|
-
const _memberkeytosafekey = require("../member-formatters/member-key-to-safe-key");
|
|
15
|
-
const _baseast = require("../utils/base-ast");
|
|
16
|
-
const _cubefilterenrichment = require("../utils/cube-filter-enrichment");
|
|
17
|
-
const _modifymeerkatfilter = require("../utils/modify-meerkat-filter");
|
|
18
|
-
const formatFilters = (queryFiltersWithInfo, filterType)=>{
|
|
19
|
-
/*
|
|
20
|
-
* If the type of filter is set to base filter where
|
|
21
|
-
*/ return filterType === 'BASE_FILTER' ? queryFiltersWithInfo : (0, _modifymeerkatfilter.modifyLeafMeerkatFilter)(queryFiltersWithInfo, (item)=>{
|
|
22
|
-
return _extends._({}, item, {
|
|
23
|
-
member: (0, _memberkeytosafekey.memberKeyToSafeKey)(item.member)
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
};
|
|
27
|
-
const getFormattedFilters = ({ queryFiltersWithInfo, filterType, mapperFn, baseAST })=>{
|
|
28
|
-
const filters = queryFiltersWithInfo.map((item)=>mapperFn(item)).filter(Boolean);
|
|
29
|
-
const formattedFilters = formatFilters(filters, filterType);
|
|
30
|
-
return (0, _factory.cubeFilterToDuckdbAST)(formattedFilters, baseAST);
|
|
31
|
-
};
|
|
32
|
-
const cubeToDuckdbAST = (query, tableSchema, options)=>{
|
|
33
|
-
var _query_dimensions;
|
|
34
|
-
/**
|
|
35
|
-
* Obviously, if no table schema was found, return null.
|
|
36
|
-
*/ if (!tableSchema) {
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
const baseAST = (0, _baseast.getBaseAST)();
|
|
40
|
-
const node = baseAST.node;
|
|
41
|
-
if (query.filters && query.filters.length > 0) {
|
|
42
|
-
/**
|
|
43
|
-
* Make a copy of the query filters and enrich them with the table schema.
|
|
44
|
-
*/ const queryFiltersWithInfo = (0, _cubefilterenrichment.cubeFiltersEnrichment)(JSON.parse(JSON.stringify(query.filters)), tableSchema);
|
|
45
|
-
if (!queryFiltersWithInfo) {
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
const whereClause = getFormattedFilters({
|
|
49
|
-
baseAST,
|
|
50
|
-
mapperFn: (item)=>(0, _filterparamsast.traverseAndFilter)(item, (value)=>!query.measures.includes(value.member)),
|
|
51
|
-
queryFiltersWithInfo,
|
|
52
|
-
filterType: options == null ? void 0 : options.filterType
|
|
53
|
-
});
|
|
54
|
-
const havingClause = getFormattedFilters({
|
|
55
|
-
baseAST,
|
|
56
|
-
mapperFn: (item)=>(0, _filterparamsast.traverseAndFilter)(item, (value)=>query.measures.includes(value.member)),
|
|
57
|
-
queryFiltersWithInfo,
|
|
58
|
-
filterType: options == null ? void 0 : options.filterType
|
|
59
|
-
});
|
|
60
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
61
|
-
//@ts-ignore
|
|
62
|
-
node.where_clause = whereClause;
|
|
63
|
-
node.having = havingClause;
|
|
64
|
-
}
|
|
65
|
-
if (query.measures.length && query.dimensions && ((_query_dimensions = query.dimensions) == null ? void 0 : _query_dimensions.length) > 0) {
|
|
66
|
-
node.group_expressions = (0, _cubegroupbytransformer.cubeDimensionToGroupByAST)(query.dimensions);
|
|
67
|
-
const groupSets = [];
|
|
68
|
-
/**
|
|
69
|
-
* We only support one group set for now.
|
|
70
|
-
*/ for(let i = 0; i < node.group_expressions.length; i++){
|
|
71
|
-
groupSets.push(i);
|
|
72
|
-
}
|
|
73
|
-
node.group_sets = [
|
|
74
|
-
groupSets
|
|
75
|
-
];
|
|
76
|
-
}
|
|
77
|
-
node.modifiers = [];
|
|
78
|
-
if (query.order && Object.keys(query.order).length > 0) {
|
|
79
|
-
node.modifiers.push((0, _cubeorderbytransformer.cubeOrderByToAST)(query.order));
|
|
80
|
-
}
|
|
81
|
-
if (query.limit || query.offset) {
|
|
82
|
-
// Type assertion is needed here because the AST is not typed correctly.
|
|
83
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
84
|
-
//@ts-ignore
|
|
85
|
-
node.modifiers.push((0, _cubelimitoffsettransformer.cubeLimitOffsetToAST)(query.limit, query.offset));
|
|
86
|
-
}
|
|
87
|
-
return baseAST;
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
//# sourceMappingURL=ast-builder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../meerkat-core/src/ast-builder/ast-builder.ts"],"sourcesContent":["import { cubeFilterToDuckdbAST } from '../cube-filter-transformer/factory';\nimport { cubeDimensionToGroupByAST } from '../cube-group-by-transformer/cube-group-by-transformer';\nimport { cubeLimitOffsetToAST } from '../cube-limit-offset-transformer/cube-limit-offset-transformer';\nimport { cubeOrderByToAST } from '../cube-order-by-transformer/cube-order-by-transformer';\nimport {\n QueryFiltersWithInfo,\n QueryFiltersWithInfoSingular,\n} from '../cube-to-duckdb/cube-filter-to-duckdb';\nimport { traverseAndFilter } from '../filter-params/filter-params-ast';\nimport { memberKeyToSafeKey } from '../member-formatters/member-key-to-safe-key';\nimport {\n FilterType,\n MeerkatQueryFilter,\n Query,\n} from '../types/cube-types/query';\nimport { TableSchema } from '../types/cube-types/table';\nimport { SelectStatement } from '../types/duckdb-serialization-types';\nimport { SelectNode } from '../types/duckdb-serialization-types/serialization/QueryNode';\nimport { getBaseAST } from '../utils/base-ast';\nimport { cubeFiltersEnrichment } from '../utils/cube-filter-enrichment';\nimport { modifyLeafMeerkatFilter } from '../utils/modify-meerkat-filter';\n\nconst formatFilters = (\n queryFiltersWithInfo: QueryFiltersWithInfo,\n filterType?: FilterType\n) => {\n /*\n * If the type of filter is set to base filter where\n */\n return filterType === 'BASE_FILTER'\n ? queryFiltersWithInfo\n : (modifyLeafMeerkatFilter(queryFiltersWithInfo, (item) => {\n return {\n ...item,\n member: memberKeyToSafeKey(item.member),\n };\n }) as QueryFiltersWithInfo);\n};\n\nconst getFormattedFilters = ({\n queryFiltersWithInfo,\n filterType,\n mapperFn,\n baseAST,\n}: {\n queryFiltersWithInfo: QueryFiltersWithInfo;\n filterType?: FilterType;\n baseAST: SelectStatement;\n mapperFn: (val: QueryFiltersWithInfoSingular) => MeerkatQueryFilter | null;\n}) => {\n const filters = queryFiltersWithInfo\n .map((item) => mapperFn(item))\n .filter(Boolean) as QueryFiltersWithInfoSingular[];\n const formattedFilters = formatFilters(filters, filterType);\n return cubeFilterToDuckdbAST(formattedFilters, baseAST);\n};\n\nexport const cubeToDuckdbAST = (\n query: Query,\n tableSchema: TableSchema,\n options?: { filterType: FilterType }\n) => {\n /**\n * Obviously, if no table schema was found, return null.\n */\n if (!tableSchema) {\n return null;\n }\n\n const baseAST = getBaseAST();\n const node = baseAST.node as SelectNode;\n if (query.filters && query.filters.length > 0) {\n /**\n * Make a copy of the query filters and enrich them with the table schema.\n */\n const queryFiltersWithInfo = cubeFiltersEnrichment(\n JSON.parse(JSON.stringify(query.filters)),\n tableSchema\n );\n\n if (!queryFiltersWithInfo) {\n return null;\n }\n\n const whereClause = getFormattedFilters({\n baseAST,\n mapperFn: (item) =>\n traverseAndFilter(\n item,\n (value) => !query.measures.includes(value.member)\n ),\n queryFiltersWithInfo,\n filterType: options?.filterType,\n });\n\n const havingClause = getFormattedFilters({\n baseAST,\n mapperFn: (item) =>\n traverseAndFilter(item, (value) =>\n query.measures.includes(value.member)\n ),\n queryFiltersWithInfo,\n filterType: options?.filterType,\n });\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n node.where_clause = whereClause;\n node.having = havingClause;\n }\n if (\n query.measures.length &&\n query.dimensions &&\n query.dimensions?.length > 0\n ) {\n node.group_expressions = cubeDimensionToGroupByAST(query.dimensions);\n const groupSets = [];\n /**\n * We only support one group set for now.\n */\n for (let i = 0; i < node.group_expressions.length; i++) {\n groupSets.push(i);\n }\n node.group_sets = [groupSets];\n }\n node.modifiers = [];\n if (query.order && Object.keys(query.order).length > 0) {\n node.modifiers.push(cubeOrderByToAST(query.order));\n }\n if (query.limit || query.offset) {\n // Type assertion is needed here because the AST is not typed correctly.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n node.modifiers.push(cubeLimitOffsetToAST(query.limit, query.offset));\n }\n\n return baseAST;\n};\n"],"names":["cubeToDuckdbAST","formatFilters","queryFiltersWithInfo","filterType","modifyLeafMeerkatFilter","item","member","memberKeyToSafeKey","getFormattedFilters","mapperFn","baseAST","filters","map","filter","Boolean","formattedFilters","cubeFilterToDuckdbAST","query","tableSchema","options","getBaseAST","node","length","cubeFiltersEnrichment","JSON","parse","stringify","whereClause","traverseAndFilter","value","measures","includes","havingClause","where_clause","having","dimensions","group_expressions","cubeDimensionToGroupByAST","groupSets","i","push","group_sets","modifiers","order","Object","keys","cubeOrderByToAST","limit","offset","cubeLimitOffsetToAST"],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
function _export(target, all) {
|
|
3
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
4
|
-
enumerable: true,
|
|
5
|
-
get: all[name]
|
|
6
|
-
});
|
|
7
|
-
}
|
|
8
|
-
_export(exports, {
|
|
9
|
-
astDeserializerQuery: function() {
|
|
10
|
-
return astDeserializerQuery;
|
|
11
|
-
},
|
|
12
|
-
deserializeQuery: function() {
|
|
13
|
-
return deserializeQuery;
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
const astDeserializerQuery = (ast)=>{
|
|
17
|
-
return `SELECT json_deserialize_sql('${JSON.stringify({
|
|
18
|
-
statements: [
|
|
19
|
-
ast
|
|
20
|
-
]
|
|
21
|
-
})}');`;
|
|
22
|
-
};
|
|
23
|
-
const deserializeQuery = (queryOutput)=>{
|
|
24
|
-
const deserializeObj = queryOutput[0];
|
|
25
|
-
const deserializeKey = Object.keys(deserializeObj)[0];
|
|
26
|
-
const deserializeQuery = deserializeObj[deserializeKey];
|
|
27
|
-
return deserializeQuery;
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
//# sourceMappingURL=ast-deserializer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../meerkat-core/src/ast-deserializer/ast-deserializer.ts"],"sourcesContent":["import { SelectStatement } from '../types/duckdb-serialization-types';\n\nexport const astDeserializerQuery = (ast: SelectStatement) => {\n return `SELECT json_deserialize_sql('${JSON.stringify({\n statements: [ast],\n })}');`;\n};\n\nexport const deserializeQuery = (\n queryOutput: {\n [key: string]: string;\n }[]\n) => {\n const deserializeObj = queryOutput[0];\n const deserializeKey = Object.keys(deserializeObj)[0];\n const deserializeQuery = deserializeObj[deserializeKey];\n return deserializeQuery;\n};\n"],"names":["astDeserializerQuery","deserializeQuery","ast","JSON","stringify","statements","queryOutput","deserializeObj","deserializeKey","Object","keys"],"mappings":";;;;;;;;IAEaA,oBAAoB;eAApBA;;IAMAC,gBAAgB;eAAhBA;;;AANN,MAAMD,uBAAuB,CAACE;IACnC,OAAO,CAAC,6BAA6B,EAAEC,KAAKC,SAAS,CAAC;QACpDC,YAAY;YAACH;SAAI;IACnB,GAAG,GAAG,CAAC;AACT;AAEO,MAAMD,mBAAmB,CAC9BK;IAIA,MAAMC,iBAAiBD,WAAW,CAAC,EAAE;IACrC,MAAME,iBAAiBC,OAAOC,IAAI,CAACH,eAAe,CAAC,EAAE;IACrD,MAAMN,mBAAmBM,cAAc,CAACC,eAAe;IACvD,OAAOP;AACT"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "astSerializerQuery", {
|
|
3
|
-
enumerable: true,
|
|
4
|
-
get: function() {
|
|
5
|
-
return astSerializerQuery;
|
|
6
|
-
}
|
|
7
|
-
});
|
|
8
|
-
const astSerializerQuery = (query)=>{
|
|
9
|
-
return `SELECT json_serialize_sql('${query}')`;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
//# sourceMappingURL=ast-serializer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../meerkat-core/src/ast-serializer/ast-serializer.ts"],"sourcesContent":["export const astSerializerQuery = (query: string) => {\n return `SELECT json_serialize_sql('${query}')`;\n};\n"],"names":["astSerializerQuery","query"],"mappings":";+BAAaA;;;eAAAA;;;AAAN,MAAMA,qBAAqB,CAACC;IACjC,OAAO,CAAC,2BAA2B,EAAEA,MAAM,EAAE,CAAC;AAChD"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
function _export(target, all) {
|
|
3
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
4
|
-
enumerable: true,
|
|
5
|
-
get: all[name]
|
|
6
|
-
});
|
|
7
|
-
}
|
|
8
|
-
_export(exports, {
|
|
9
|
-
validateDimension: function() {
|
|
10
|
-
return validateDimension;
|
|
11
|
-
},
|
|
12
|
-
validateExpressionNode: function() {
|
|
13
|
-
return validateExpressionNode;
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
const _utils = require("../types/utils");
|
|
17
|
-
const _utils1 = require("./utils");
|
|
18
|
-
const validateExpressionNode = (node, validFunctions)=>{
|
|
19
|
-
// Column references and value constants
|
|
20
|
-
if ((0, _utils.isColumnRefExpression)(node) || (0, _utils.isConstantExpression)(node)) {
|
|
21
|
-
return true;
|
|
22
|
-
}
|
|
23
|
-
// Cast expression
|
|
24
|
-
if ((0, _utils.isCastExpression)(node)) {
|
|
25
|
-
return validateExpressionNode(node.child, validFunctions);
|
|
26
|
-
}
|
|
27
|
-
// Operator expression
|
|
28
|
-
if ((0, _utils.isOperatorExpression)(node)) {
|
|
29
|
-
return node.children.every((child)=>validateExpressionNode(child, validFunctions));
|
|
30
|
-
}
|
|
31
|
-
// Function expression
|
|
32
|
-
if ((0, _utils.isFunctionExpression)(node)) {
|
|
33
|
-
if (!validFunctions.has(node.function_name)) {
|
|
34
|
-
throw new Error(`Invalid function: ${node.function_name}`);
|
|
35
|
-
}
|
|
36
|
-
return node.children.every((child)=>validateExpressionNode(child, validFunctions));
|
|
37
|
-
}
|
|
38
|
-
// Case expression
|
|
39
|
-
if ((0, _utils.isCaseExpression)(node)) {
|
|
40
|
-
return node.case_checks.every((check)=>validateExpressionNode(check.then_expr, validFunctions)) && validateExpressionNode(node.else_expr, validFunctions);
|
|
41
|
-
}
|
|
42
|
-
throw new Error(`Invalid expression type: ${node.type}`);
|
|
43
|
-
};
|
|
44
|
-
const validateDimension = (parsedSerialization, validFunctions)=>{
|
|
45
|
-
const node = (0, _utils1.getSelectNode)(parsedSerialization);
|
|
46
|
-
const validFunctionSet = new Set(validFunctions);
|
|
47
|
-
// Validate the expression
|
|
48
|
-
if (validateExpressionNode(node, validFunctionSet)) {
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
throw new Error('Expression contains invalid functions or operators');
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
//# sourceMappingURL=dimension-validator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../meerkat-core/src/ast-validator/dimension-validator.ts"],"sourcesContent":["import { ParsedExpression } from '../types/duckdb-serialization-types';\nimport {\n isCaseExpression,\n isCastExpression,\n isColumnRefExpression,\n isConstantExpression,\n isFunctionExpression,\n isOperatorExpression,\n} from '../types/utils';\nimport { ParsedSerialization } from './types';\nimport { getSelectNode } from './utils';\n\n/**\n * Validates an individual expression node\n */\nexport const validateExpressionNode = (\n node: ParsedExpression,\n validFunctions: Set<string>\n): boolean => {\n // Column references and value constants\n if (isColumnRefExpression(node) || isConstantExpression(node)) {\n return true;\n }\n\n // Cast expression\n if (isCastExpression(node)) {\n return validateExpressionNode(node.child, validFunctions);\n }\n\n // Operator expression\n if (isOperatorExpression(node)) {\n return node.children.every((child) =>\n validateExpressionNode(child, validFunctions)\n );\n }\n\n // Function expression\n if (isFunctionExpression(node)) {\n if (!validFunctions.has(node.function_name)) {\n throw new Error(`Invalid function: ${node.function_name}`);\n }\n return node.children.every((child) =>\n validateExpressionNode(child, validFunctions)\n );\n }\n\n // Case expression\n if (isCaseExpression(node)) {\n return (\n node.case_checks.every((check) =>\n validateExpressionNode(check.then_expr, validFunctions)\n ) && validateExpressionNode(node.else_expr, validFunctions)\n );\n }\n\n throw new Error(`Invalid expression type: ${node.type}`);\n};\n\n/**\n * Validates if the parsed serialization represents a valid dimension\n */\nexport const validateDimension = (\n parsedSerialization: ParsedSerialization,\n validFunctions: string[]\n): boolean => {\n const node = getSelectNode(parsedSerialization);\n\n const validFunctionSet = new Set(validFunctions);\n\n // Validate the expression\n if (validateExpressionNode(node, validFunctionSet)) {\n return true;\n }\n\n throw new Error('Expression contains invalid functions or operators');\n};\n"],"names":["validateDimension","validateExpressionNode","node","validFunctions","isColumnRefExpression","isConstantExpression","isCastExpression","child","isOperatorExpression","children","every","isFunctionExpression","has","function_name","Error","isCaseExpression","case_checks","check","then_expr","else_expr","type","parsedSerialization","getSelectNode","validFunctionSet","Set"],"mappings":";;;;;;;;IA6DaA,iBAAiB;eAAjBA;;IA9CAC,sBAAsB;eAAtBA;;;uBAPN;wBAEuB;AAKvB,MAAMA,yBAAyB,CACpCC,MACAC;IAEA,wCAAwC;IACxC,IAAIC,IAAAA,4BAAqB,EAACF,SAASG,IAAAA,2BAAoB,EAACH,OAAO;QAC7D,OAAO;IACT;IAEA,kBAAkB;IAClB,IAAII,IAAAA,uBAAgB,EAACJ,OAAO;QAC1B,OAAOD,uBAAuBC,KAAKK,KAAK,EAAEJ;IAC5C;IAEA,sBAAsB;IACtB,IAAIK,IAAAA,2BAAoB,EAACN,OAAO;QAC9B,OAAOA,KAAKO,QAAQ,CAACC,KAAK,CAAC,CAACH,QAC1BN,uBAAuBM,OAAOJ;IAElC;IAEA,sBAAsB;IACtB,IAAIQ,IAAAA,2BAAoB,EAACT,OAAO;QAC9B,IAAI,CAACC,eAAeS,GAAG,CAACV,KAAKW,aAAa,GAAG;YAC3C,MAAM,IAAIC,MAAM,CAAC,kBAAkB,EAAEZ,KAAKW,aAAa,CAAC,CAAC;QAC3D;QACA,OAAOX,KAAKO,QAAQ,CAACC,KAAK,CAAC,CAACH,QAC1BN,uBAAuBM,OAAOJ;IAElC;IAEA,kBAAkB;IAClB,IAAIY,IAAAA,uBAAgB,EAACb,OAAO;QAC1B,OACEA,KAAKc,WAAW,CAACN,KAAK,CAAC,CAACO,QACtBhB,uBAAuBgB,MAAMC,SAAS,EAAEf,oBACrCF,uBAAuBC,KAAKiB,SAAS,EAAEhB;IAEhD;IAEA,MAAM,IAAIW,MAAM,CAAC,yBAAyB,EAAEZ,KAAKkB,IAAI,CAAC,CAAC;AACzD;AAKO,MAAMpB,oBAAoB,CAC/BqB,qBACAlB;IAEA,MAAMD,OAAOoB,IAAAA,qBAAa,EAACD;IAE3B,MAAME,mBAAmB,IAAIC,IAAIrB;IAEjC,0BAA0B;IAC1B,IAAIF,uBAAuBC,MAAMqB,mBAAmB;QAClD,OAAO;IACT;IAEA,MAAM,IAAIT,MAAM;AAClB"}
|
package/ast-validator/index.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
function _export(target, all) {
|
|
3
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
4
|
-
enumerable: true,
|
|
5
|
-
get: all[name]
|
|
6
|
-
});
|
|
7
|
-
}
|
|
8
|
-
_export(exports, {
|
|
9
|
-
getSelectNode: function() {
|
|
10
|
-
return _utils.getSelectNode;
|
|
11
|
-
},
|
|
12
|
-
validateDimension: function() {
|
|
13
|
-
return _dimensionvalidator.validateDimension;
|
|
14
|
-
},
|
|
15
|
-
validateMeasure: function() {
|
|
16
|
-
return _measurevalidator.validateMeasure;
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
const _export_star = require("@swc/helpers/_/_export_star");
|
|
20
|
-
const _dimensionvalidator = require("./dimension-validator");
|
|
21
|
-
const _measurevalidator = require("./measure-validator");
|
|
22
|
-
_export_star._(require("./types"), exports);
|
|
23
|
-
const _utils = require("./utils");
|
|
24
|
-
|
|
25
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../meerkat-core/src/ast-validator/index.ts"],"sourcesContent":["export { validateDimension } from './dimension-validator';\nexport { validateMeasure } from './measure-validator';\nexport * from './types';\nexport { getSelectNode } from './utils';\n"],"names":["getSelectNode","validateDimension","validateMeasure"],"mappings":";;;;;;;;IAGSA,aAAa;eAAbA,oBAAa;;IAHbC,iBAAiB;eAAjBA,qCAAiB;;IACjBC,eAAe;eAAfA,iCAAe;;;;oCADU;kCACF;uBAClB;uBACgB"}
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
function _export(target, all) {
|
|
3
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
4
|
-
enumerable: true,
|
|
5
|
-
get: all[name]
|
|
6
|
-
});
|
|
7
|
-
}
|
|
8
|
-
_export(exports, {
|
|
9
|
-
containsAggregation: function() {
|
|
10
|
-
return containsAggregation;
|
|
11
|
-
},
|
|
12
|
-
validateExpressionNode: function() {
|
|
13
|
-
return validateExpressionNode;
|
|
14
|
-
},
|
|
15
|
-
validateMeasure: function() {
|
|
16
|
-
return validateMeasure;
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
const _utils = require("../types/utils");
|
|
20
|
-
const _utils1 = require("./utils");
|
|
21
|
-
const validateExpressionNode = ({ node, validFunctions, parentNode, validScalarFunctions, hasAggregation = false })=>{
|
|
22
|
-
// Base cases for column references and constants
|
|
23
|
-
if ((0, _utils.isColumnRefExpression)(node) || (0, _utils.isConstantExpression)(node)) {
|
|
24
|
-
// Allow column references inside aggregation functions
|
|
25
|
-
return !!parentNode;
|
|
26
|
-
}
|
|
27
|
-
// Check for valid aggregation functions
|
|
28
|
-
if ((0, _utils.isFunctionExpression)(node) || (0, _utils.isWindowExpression)(node)) {
|
|
29
|
-
// count_star don't have children
|
|
30
|
-
if (node.function_name === 'count_star') return true;
|
|
31
|
-
// This is a valid aggregation function - verify its children don't contain nested aggregations
|
|
32
|
-
if (validFunctions.has(node.function_name)) {
|
|
33
|
-
return node.children.some((child)=>validateExpressionNode({
|
|
34
|
-
node: child,
|
|
35
|
-
validFunctions,
|
|
36
|
-
parentNode: node,
|
|
37
|
-
validScalarFunctions,
|
|
38
|
-
hasAggregation: true
|
|
39
|
-
}));
|
|
40
|
-
}
|
|
41
|
-
// For non-aggregation functions
|
|
42
|
-
if (validScalarFunctions.has(node.function_name)) {
|
|
43
|
-
return node.children.some((child)=>{
|
|
44
|
-
return validateExpressionNode({
|
|
45
|
-
node: child,
|
|
46
|
-
validFunctions,
|
|
47
|
-
parentNode: node,
|
|
48
|
-
validScalarFunctions
|
|
49
|
-
}) && (containsAggregation(child, validFunctions) || hasAggregation);
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
throw new Error(`Invalid function type: ${node.function_name}`);
|
|
53
|
-
}
|
|
54
|
-
// Operator expression
|
|
55
|
-
if ((0, _utils.isOperatorExpression)(node)) {
|
|
56
|
-
return node.children.some((child)=>validateExpressionNode({
|
|
57
|
-
node: child,
|
|
58
|
-
validFunctions,
|
|
59
|
-
parentNode,
|
|
60
|
-
validScalarFunctions
|
|
61
|
-
}));
|
|
62
|
-
}
|
|
63
|
-
// Cast expression
|
|
64
|
-
if ((0, _utils.isCastExpression)(node)) {
|
|
65
|
-
return validateExpressionNode({
|
|
66
|
-
node: node.child,
|
|
67
|
-
validFunctions,
|
|
68
|
-
parentNode,
|
|
69
|
-
validScalarFunctions
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
// Case expression
|
|
73
|
-
if ((0, _utils.isCaseExpression)(node)) {
|
|
74
|
-
const checksValid = node.case_checks.every((caseCheck)=>{
|
|
75
|
-
// WHEN conditions cannot contain aggregations
|
|
76
|
-
const whenValid = !containsAggregation(caseCheck.when_expr, validFunctions);
|
|
77
|
-
// THEN expressions must be valid aggregations or contain no aggregations
|
|
78
|
-
const thenValid = validateExpressionNode({
|
|
79
|
-
node: caseCheck.then_expr,
|
|
80
|
-
validFunctions,
|
|
81
|
-
parentNode: node,
|
|
82
|
-
validScalarFunctions
|
|
83
|
-
}) || !containsAggregation(caseCheck.then_expr, validFunctions);
|
|
84
|
-
return whenValid && thenValid;
|
|
85
|
-
});
|
|
86
|
-
const elseValid = validateExpressionNode({
|
|
87
|
-
node: node.else_expr,
|
|
88
|
-
validFunctions,
|
|
89
|
-
parentNode: node,
|
|
90
|
-
validScalarFunctions
|
|
91
|
-
}) || !containsAggregation(node.else_expr, validFunctions);
|
|
92
|
-
return checksValid && elseValid;
|
|
93
|
-
}
|
|
94
|
-
// Subquery expression
|
|
95
|
-
if ((0, _utils.isSubqueryExpression)(node) && (0, _utils.isSelectNode)(node.subquery.node)) {
|
|
96
|
-
return node.subquery.node.select_list.every((node)=>{
|
|
97
|
-
return validateExpressionNode({
|
|
98
|
-
node,
|
|
99
|
-
validFunctions,
|
|
100
|
-
parentNode,
|
|
101
|
-
validScalarFunctions
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
// Window expression
|
|
106
|
-
if ((0, _utils.isWindowExpression)(node)) {
|
|
107
|
-
return node.children.every((node)=>{
|
|
108
|
-
return validateExpressionNode({
|
|
109
|
-
node,
|
|
110
|
-
validFunctions,
|
|
111
|
-
parentNode,
|
|
112
|
-
validScalarFunctions
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
throw new Error(`Invalid expression type: ${node.type}`);
|
|
117
|
-
};
|
|
118
|
-
const containsAggregation = (node, validFunctions)=>{
|
|
119
|
-
if (!node) return false;
|
|
120
|
-
// Function expression
|
|
121
|
-
if ((0, _utils.isFunctionExpression)(node) || (0, _utils.isWindowExpression)(node)) {
|
|
122
|
-
return validFunctions.has(node.function_name) || node.children.some((child)=>containsAggregation(child, validFunctions));
|
|
123
|
-
}
|
|
124
|
-
// Case expression
|
|
125
|
-
if ((0, _utils.isCaseExpression)(node)) {
|
|
126
|
-
return node.case_checks.some((check)=>containsAggregation(check.when_expr, validFunctions) || containsAggregation(check.then_expr, validFunctions)) || containsAggregation(node.else_expr, validFunctions);
|
|
127
|
-
}
|
|
128
|
-
// Operator expression
|
|
129
|
-
if ((0, _utils.isOperatorExpression)(node)) {
|
|
130
|
-
return node.children.some((child)=>containsAggregation(child, validFunctions));
|
|
131
|
-
}
|
|
132
|
-
if ((0, _utils.isCastExpression)(node)) {
|
|
133
|
-
return containsAggregation(node.child, validFunctions);
|
|
134
|
-
}
|
|
135
|
-
// Window expression
|
|
136
|
-
if ((0, _utils.isWindowExpression)(node)) {
|
|
137
|
-
return node.children.some((child)=>containsAggregation(child, validFunctions));
|
|
138
|
-
}
|
|
139
|
-
// Subquery expression
|
|
140
|
-
if ((0, _utils.isSubqueryExpression)(node) && (0, _utils.isSelectNode)(node.subquery.node)) {
|
|
141
|
-
return node.subquery.node.select_list.every((node)=>{
|
|
142
|
-
return containsAggregation(node, validFunctions);
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
return false;
|
|
146
|
-
};
|
|
147
|
-
const validateMeasure = (parsedSerialization, validFunctions, validScalarFunctions)=>{
|
|
148
|
-
const node = (0, _utils1.getSelectNode)(parsedSerialization);
|
|
149
|
-
const validFunctionSet = new Set(validFunctions);
|
|
150
|
-
const validScalarFunctionSet = new Set(validScalarFunctions);
|
|
151
|
-
// Validate the expression
|
|
152
|
-
if (validateExpressionNode({
|
|
153
|
-
node: node,
|
|
154
|
-
validFunctions: validFunctionSet,
|
|
155
|
-
parentNode: null,
|
|
156
|
-
validScalarFunctions: validScalarFunctionSet
|
|
157
|
-
})) {
|
|
158
|
-
return true;
|
|
159
|
-
}
|
|
160
|
-
throw new Error('Expression contains invalid functions or operators');
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
//# sourceMappingURL=measure-validator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../meerkat-core/src/ast-validator/measure-validator.ts"],"sourcesContent":["import { ParsedExpression } from '../types/duckdb-serialization-types';\nimport {\n isCaseExpression,\n isCastExpression,\n isColumnRefExpression,\n isConstantExpression,\n isFunctionExpression,\n isOperatorExpression,\n isSelectNode,\n isSubqueryExpression,\n isWindowExpression,\n} from '../types/utils';\nimport { ParsedSerialization } from './types';\nimport { getSelectNode } from './utils';\n\nexport const validateExpressionNode = ({\n node,\n validFunctions,\n parentNode,\n validScalarFunctions,\n hasAggregation = false,\n}: {\n node: ParsedExpression;\n validFunctions: Set<string>;\n parentNode: ParsedExpression | null;\n hasAggregation?: boolean;\n validScalarFunctions: Set<string>;\n}): boolean => {\n // Base cases for column references and constants\n if (isColumnRefExpression(node) || isConstantExpression(node)) {\n // Allow column references inside aggregation functions\n return !!parentNode;\n }\n\n // Check for valid aggregation functions\n if (isFunctionExpression(node) || isWindowExpression(node)) {\n // count_star don't have children\n if (node.function_name === 'count_star') return true;\n\n // This is a valid aggregation function - verify its children don't contain nested aggregations\n if (validFunctions.has(node.function_name)) {\n return node.children.some((child) =>\n validateExpressionNode({\n node: child,\n validFunctions,\n parentNode: node,\n validScalarFunctions,\n hasAggregation: true,\n })\n );\n }\n\n // For non-aggregation functions\n if (validScalarFunctions.has(node.function_name)) {\n return node.children.some((child) => {\n return (\n validateExpressionNode({\n node: child,\n validFunctions,\n parentNode: node,\n validScalarFunctions,\n }) &&\n (containsAggregation(child, validFunctions) || hasAggregation)\n );\n });\n }\n\n throw new Error(`Invalid function type: ${node.function_name}`);\n }\n\n // Operator expression\n if (isOperatorExpression(node)) {\n return node.children.some((child) =>\n validateExpressionNode({\n node: child,\n validFunctions,\n parentNode,\n validScalarFunctions,\n })\n );\n }\n\n // Cast expression\n if (isCastExpression(node)) {\n return validateExpressionNode({\n node: node.child,\n validFunctions,\n parentNode,\n validScalarFunctions,\n });\n }\n\n // Case expression\n if (isCaseExpression(node)) {\n const checksValid = node.case_checks.every((caseCheck) => {\n // WHEN conditions cannot contain aggregations\n const whenValid = !containsAggregation(\n caseCheck.when_expr,\n validFunctions\n );\n\n // THEN expressions must be valid aggregations or contain no aggregations\n const thenValid =\n validateExpressionNode({\n node: caseCheck.then_expr,\n validFunctions,\n parentNode: node,\n validScalarFunctions,\n }) || !containsAggregation(caseCheck.then_expr, validFunctions);\n return whenValid && thenValid;\n });\n\n const elseValid =\n validateExpressionNode({\n node: node.else_expr,\n validFunctions,\n parentNode: node,\n validScalarFunctions,\n }) || !containsAggregation(node.else_expr, validFunctions);\n\n return checksValid && elseValid;\n }\n\n // Subquery expression\n if (isSubqueryExpression(node) && isSelectNode(node.subquery.node)) {\n return node.subquery.node.select_list.every((node) => {\n return validateExpressionNode({\n node,\n validFunctions,\n parentNode,\n validScalarFunctions,\n });\n });\n }\n\n // Window expression\n if (isWindowExpression(node)) {\n return node.children.every((node) => {\n return validateExpressionNode({\n node,\n validFunctions,\n parentNode,\n validScalarFunctions,\n });\n });\n }\n\n throw new Error(`Invalid expression type: ${node.type}`);\n};\n\nexport const containsAggregation = (\n node: ParsedExpression,\n validFunctions: Set<string>\n): boolean => {\n if (!node) return false;\n\n // Function expression\n if (isFunctionExpression(node) || isWindowExpression(node)) {\n return (\n validFunctions.has(node.function_name) ||\n node.children.some((child) => containsAggregation(child, validFunctions))\n );\n }\n\n // Case expression\n if (isCaseExpression(node)) {\n return (\n node.case_checks.some(\n (check) =>\n containsAggregation(check.when_expr, validFunctions) ||\n containsAggregation(check.then_expr, validFunctions)\n ) || containsAggregation(node.else_expr, validFunctions)\n );\n }\n\n // Operator expression\n if (isOperatorExpression(node)) {\n return node.children.some((child) =>\n containsAggregation(child, validFunctions)\n );\n }\n\n if (isCastExpression(node)) {\n return containsAggregation(node.child, validFunctions);\n }\n\n // Window expression\n if (isWindowExpression(node)) {\n return node.children.some((child) =>\n containsAggregation(child, validFunctions)\n );\n }\n\n // Subquery expression\n if (isSubqueryExpression(node) && isSelectNode(node.subquery.node)) {\n return node.subquery.node.select_list.every((node) => {\n return containsAggregation(node, validFunctions);\n });\n }\n\n return false;\n};\n\nexport const validateMeasure = (\n parsedSerialization: ParsedSerialization,\n validFunctions: string[],\n validScalarFunctions: string[]\n): boolean => {\n const node = getSelectNode(parsedSerialization);\n\n const validFunctionSet = new Set(validFunctions);\n const validScalarFunctionSet = new Set(validScalarFunctions);\n\n // Validate the expression\n if (\n validateExpressionNode({\n node: node,\n validFunctions: validFunctionSet,\n parentNode: null,\n validScalarFunctions: validScalarFunctionSet,\n })\n ) {\n return true;\n }\n\n throw new Error('Expression contains invalid functions or operators');\n};\n"],"names":["containsAggregation","validateExpressionNode","validateMeasure","node","validFunctions","parentNode","validScalarFunctions","hasAggregation","isColumnRefExpression","isConstantExpression","isFunctionExpression","isWindowExpression","function_name","has","children","some","child","Error","isOperatorExpression","isCastExpression","isCaseExpression","checksValid","case_checks","every","caseCheck","whenValid","when_expr","thenValid","then_expr","elseValid","else_expr","isSubqueryExpression","isSelectNode","subquery","select_list","type","check","parsedSerialization","getSelectNode","validFunctionSet","Set","validScalarFunctionSet"],"mappings":"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"}
|