@devrev/meerkat-core 0.0.77
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/README.md +11 -0
- package/package.json +30 -0
- package/src/ast-builder/ast-builder.d.ts +6 -0
- package/src/ast-builder/ast-builder.js +89 -0
- package/src/ast-builder/ast-builder.js.map +1 -0
- package/src/ast-deserializer/ast-deserializer.d.ts +5 -0
- package/src/ast-deserializer/ast-deserializer.js +30 -0
- package/src/ast-deserializer/ast-deserializer.js.map +1 -0
- package/src/context-params/context-params-ast.d.ts +11 -0
- package/src/context-params/context-params-ast.js +55 -0
- package/src/context-params/context-params-ast.js.map +1 -0
- package/src/cube-filter-transformer/and/and.d.ts +2 -0
- package/src/cube-filter-transformer/and/and.js +18 -0
- package/src/cube-filter-transformer/and/and.js.map +1 -0
- package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.d.ts +154 -0
- package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.js +159 -0
- package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.js.map +1 -0
- package/src/cube-filter-transformer/contains/contains.d.ts +65 -0
- package/src/cube-filter-transformer/contains/contains.js +70 -0
- package/src/cube-filter-transformer/contains/contains.js.map +1 -0
- package/src/cube-filter-transformer/equals/equals-array.d.ts +2 -0
- package/src/cube-filter-transformer/equals/equals-array.js +30 -0
- package/src/cube-filter-transformer/equals/equals-array.js.map +1 -0
- package/src/cube-filter-transformer/equals/equals.d.ts +2 -0
- package/src/cube-filter-transformer/equals/equals.js +37 -0
- package/src/cube-filter-transformer/equals/equals.js.map +1 -0
- package/src/cube-filter-transformer/factory.d.ts +5 -0
- package/src/cube-filter-transformer/factory.js +124 -0
- package/src/cube-filter-transformer/factory.js.map +1 -0
- package/src/cube-filter-transformer/gt/gt.d.ts +2 -0
- package/src/cube-filter-transformer/gt/gt.js +30 -0
- package/src/cube-filter-transformer/gt/gt.js.map +1 -0
- package/src/cube-filter-transformer/gte/gte.d.ts +2 -0
- package/src/cube-filter-transformer/gte/gte.js +30 -0
- package/src/cube-filter-transformer/gte/gte.js.map +1 -0
- package/src/cube-filter-transformer/in/in.d.ts +2 -0
- package/src/cube-filter-transformer/in/in.js +77 -0
- package/src/cube-filter-transformer/in/in.js.map +1 -0
- package/src/cube-filter-transformer/in-date-range/in-date-range.d.ts +2 -0
- package/src/cube-filter-transformer/in-date-range/in-date-range.js +24 -0
- package/src/cube-filter-transformer/in-date-range/in-date-range.js.map +1 -0
- package/src/cube-filter-transformer/lt/lt.d.ts +2 -0
- package/src/cube-filter-transformer/lt/lt.js +30 -0
- package/src/cube-filter-transformer/lt/lt.js.map +1 -0
- package/src/cube-filter-transformer/lte/lte.d.ts +2 -0
- package/src/cube-filter-transformer/lte/lte.js +30 -0
- package/src/cube-filter-transformer/lte/lte.js.map +1 -0
- package/src/cube-filter-transformer/not/not.d.ts +2 -0
- package/src/cube-filter-transformer/not/not.js +18 -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.d.ts +2 -0
- package/src/cube-filter-transformer/not-In-date-range/not-In-date-range.js +24 -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.d.ts +65 -0
- package/src/cube-filter-transformer/not-contains/not-contains.js +70 -0
- package/src/cube-filter-transformer/not-contains/not-contains.js.map +1 -0
- package/src/cube-filter-transformer/not-equals/not-equals-array.d.ts +2 -0
- package/src/cube-filter-transformer/not-equals/not-equals-array.js +26 -0
- package/src/cube-filter-transformer/not-equals/not-equals-array.js.map +1 -0
- package/src/cube-filter-transformer/not-equals/not-equals.d.ts +8 -0
- package/src/cube-filter-transformer/not-equals/not-equals.js +37 -0
- package/src/cube-filter-transformer/not-equals/not-equals.js.map +1 -0
- package/src/cube-filter-transformer/not-in/not-in.d.ts +2 -0
- package/src/cube-filter-transformer/not-in/not-in.js +84 -0
- package/src/cube-filter-transformer/not-in/not-in.js.map +1 -0
- package/src/cube-filter-transformer/not-set/not-set.d.ts +2 -0
- package/src/cube-filter-transformer/not-set/not-set.js +26 -0
- package/src/cube-filter-transformer/not-set/not-set.js.map +1 -0
- package/src/cube-filter-transformer/or/or.d.ts +2 -0
- package/src/cube-filter-transformer/or/or.js +18 -0
- package/src/cube-filter-transformer/or/or.js.map +1 -0
- package/src/cube-filter-transformer/set/set.d.ts +2 -0
- package/src/cube-filter-transformer/set/set.js +26 -0
- package/src/cube-filter-transformer/set/set.js.map +1 -0
- package/src/cube-group-by-transformer/cube-group-by-transformer.d.ts +8 -0
- 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.d.ts +31 -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.d.ts +21 -0
- package/src/cube-measure-transformer/cube-measure-transformer.js +126 -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 +21 -0
- package/src/cube-order-by-transformer/cube-order-by-transformer.js +39 -0
- package/src/cube-order-by-transformer/cube-order-by-transformer.js.map +1 -0
- package/src/cube-to-duckdb/cube-filter-to-duckdb.d.ts +16 -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.d.ts +33 -0
- package/src/filter-params/filter-params-ast.js +115 -0
- package/src/filter-params/filter-params-ast.js.map +1 -0
- package/src/get-projection-clause/get-projection-clause.d.ts +27 -0
- package/src/get-projection-clause/get-projection-clause.js +135 -0
- package/src/get-projection-clause/get-projection-clause.js.map +1 -0
- package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.d.ts +8 -0
- package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js +99 -0
- package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js.map +1 -0
- package/src/index.d.ts +16 -0
- package/src/index.js +55 -0
- package/src/index.js.map +1 -0
- package/src/joins/joins.d.ts +22 -0
- package/src/joins/joins.js +170 -0
- package/src/joins/joins.js.map +1 -0
- package/src/types/cube-types/index.d.js +6 -0
- package/src/types/cube-types/index.d.js.map +1 -0
- package/src/types/cube-types/index.d.ts +2 -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.d.js +5 -0
- package/src/types/cube-types/query.d.js.map +1 -0
- package/src/types/cube-types/query.d.ts +141 -0
- package/src/types/cube-types/query.js +14 -0
- package/src/types/cube-types/query.js.map +1 -0
- package/src/types/cube-types/table.d.js +3 -0
- package/src/types/cube-types/table.d.js.map +1 -0
- package/src/types/cube-types/table.d.ts +25 -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.d.js +11 -0
- package/src/types/duckdb-serialization-types/index.d.js.map +1 -0
- package/src/types/duckdb-serialization-types/index.d.ts +7 -0
- package/src/types/duckdb-serialization-types/index.js +11 -0
- package/src/types/duckdb-serialization-types/index.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/Constraint.d.ts +47 -0
- package/src/types/duckdb-serialization-types/serialization/Constraint.js +31 -0
- package/src/types/duckdb-serialization-types/serialization/Constraint.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/CreateInfo.d.ts +95 -0
- package/src/types/duckdb-serialization-types/serialization/CreateInfo.js +67 -0
- package/src/types/duckdb-serialization-types/serialization/CreateInfo.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/Expression.d.js +3 -0
- package/src/types/duckdb-serialization-types/serialization/Expression.d.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/Expression.d.ts +186 -0
- package/src/types/duckdb-serialization-types/serialization/Expression.js +130 -0
- package/src/types/duckdb-serialization-types/serialization/Expression.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/LogicalOperator.d.ts +231 -0
- package/src/types/duckdb-serialization-types/serialization/LogicalOperator.js +47 -0
- package/src/types/duckdb-serialization-types/serialization/LogicalOperator.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/MacroFunction.d.ts +20 -0
- package/src/types/duckdb-serialization-types/serialization/MacroFunction.js +15 -0
- package/src/types/duckdb-serialization-types/serialization/MacroFunction.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/Misc.d.js +3 -0
- package/src/types/duckdb-serialization-types/serialization/Misc.d.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/Misc.d.ts +3 -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/src/types/duckdb-serialization-types/serialization/Nodes.d.js +10 -0
- package/src/types/duckdb-serialization-types/serialization/Nodes.d.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/Nodes.d.ts +212 -0
- package/src/types/duckdb-serialization-types/serialization/Nodes.js +92 -0
- package/src/types/duckdb-serialization-types/serialization/Nodes.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/ParseInfo.d.ts +192 -0
- package/src/types/duckdb-serialization-types/serialization/ParseInfo.js +128 -0
- package/src/types/duckdb-serialization-types/serialization/ParseInfo.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/ParsedExpression.d.js +3 -0
- package/src/types/duckdb-serialization-types/serialization/ParsedExpression.d.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/ParsedExpression.d.ts +114 -0
- package/src/types/duckdb-serialization-types/serialization/ParsedExpression.js +37 -0
- package/src/types/duckdb-serialization-types/serialization/ParsedExpression.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/QueryNode.d.js +3 -0
- package/src/types/duckdb-serialization-types/serialization/QueryNode.d.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/QueryNode.d.ts +62 -0
- package/src/types/duckdb-serialization-types/serialization/QueryNode.js +42 -0
- package/src/types/duckdb-serialization-types/serialization/QueryNode.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/ResultModifier.d.js +3 -0
- package/src/types/duckdb-serialization-types/serialization/ResultModifier.d.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/ResultModifier.d.ts +29 -0
- package/src/types/duckdb-serialization-types/serialization/ResultModifier.js +16 -0
- package/src/types/duckdb-serialization-types/serialization/ResultModifier.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/Statement.d.js +3 -0
- package/src/types/duckdb-serialization-types/serialization/Statement.d.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/Statement.d.ts +4 -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/src/types/duckdb-serialization-types/serialization/TableFilter.d.js +3 -0
- package/src/types/duckdb-serialization-types/serialization/TableFilter.d.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/TableFilter.d.ts +32 -0
- package/src/types/duckdb-serialization-types/serialization/TableFilter.js +17 -0
- package/src/types/duckdb-serialization-types/serialization/TableFilter.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/TableRef.d.js +3 -0
- package/src/types/duckdb-serialization-types/serialization/TableRef.d.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/TableRef.d.ts +84 -0
- package/src/types/duckdb-serialization-types/serialization/TableRef.js +53 -0
- package/src/types/duckdb-serialization-types/serialization/TableRef.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/Types.d.js +3 -0
- package/src/types/duckdb-serialization-types/serialization/Types.d.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/Types.d.ts +53 -0
- package/src/types/duckdb-serialization-types/serialization/Types.js +21 -0
- package/src/types/duckdb-serialization-types/serialization/Types.js.map +1 -0
- package/src/types/duckdb-serialization-types/serialization/example.d.ts +1 -0
- package/src/types/duckdb-serialization-types/serialization/example.js +131 -0
- package/src/types/duckdb-serialization-types/serialization/example.js.map +1 -0
- package/src/utils/__fixtures__/joins.fixtures.d.ts +211 -0
- package/src/utils/__fixtures__/joins.fixtures.js +922 -0
- package/src/utils/__fixtures__/joins.fixtures.js.map +1 -0
- package/src/utils/base-ast.d.ts +3 -0
- package/src/utils/base-ast.js +64 -0
- package/src/utils/base-ast.js.map +1 -0
- package/src/utils/constants.d.ts +2 -0
- package/src/utils/constants.js +19 -0
- package/src/utils/constants.js.map +1 -0
- package/src/utils/cube-filter-enrichment.d.ts +4 -0
- package/src/utils/cube-filter-enrichment.js +63 -0
- package/src/utils/cube-filter-enrichment.js.map +1 -0
- package/src/utils/cube-to-table-schema.d.ts +3 -0
- package/src/utils/cube-to-table-schema.js +104 -0
- package/src/utils/cube-to-table-schema.js.map +1 -0
- package/src/utils/cube-type-to-duckdb-type.d.ts +6 -0
- package/src/utils/cube-type-to-duckdb-type.js +17 -0
- package/src/utils/cube-type-to-duckdb-type.js.map +1 -0
- package/src/utils/find-in-table-schema.d.ts +4 -0
- package/src/utils/find-in-table-schema.js +40 -0
- package/src/utils/find-in-table-schema.js.map +1 -0
- package/src/utils/get-possible-nodes.d.ts +15 -0
- package/src/utils/get-possible-nodes.js +152 -0
- package/src/utils/get-possible-nodes.js.map +1 -0
- package/src/utils/get-type-info.d.ts +7 -0
- package/src/utils/get-type-info.js +44 -0
- package/src/utils/get-type-info.js.map +1 -0
- package/src/utils/is-array-member-type.d.ts +4 -0
- package/src/utils/is-array-member-type.js +12 -0
- package/src/utils/is-array-member-type.js.map +1 -0
- package/src/utils/key-from-measures-dimension.d.ts +2 -0
- package/src/utils/key-from-measures-dimension.js +34 -0
- package/src/utils/key-from-measures-dimension.js.map +1 -0
- package/src/utils/meerkat-placeholder-replacer.d.ts +1 -0
- package/src/utils/meerkat-placeholder-replacer.js +14 -0
- package/src/utils/meerkat-placeholder-replacer.js.map +1 -0
- package/src/utils/member-key-to-safe-key.d.ts +1 -0
- package/src/utils/member-key-to-safe-key.js +13 -0
- package/src/utils/member-key-to-safe-key.js.map +1 -0
- package/src/utils/modify-meerkat-filter.d.ts +3 -0
- package/src/utils/modify-meerkat-filter.js +30 -0
- package/src/utils/modify-meerkat-filter.js.map +1 -0
- package/src/utils/type-guards.d.ts +8 -0
- package/src/utils/type-guards.js +83 -0
- package/src/utils/type-guards.js.map +1 -0
package/README.md
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@devrev/meerkat-core",
|
|
3
|
+
"version": "0.0.77",
|
|
4
|
+
"dependencies": {
|
|
5
|
+
"@swc/helpers": "~0.5.0"
|
|
6
|
+
},
|
|
7
|
+
"scripts": {
|
|
8
|
+
"release": "semantic-release"
|
|
9
|
+
},
|
|
10
|
+
"release": {
|
|
11
|
+
"plugins": [
|
|
12
|
+
"@semantic-release/commit-analyzer",
|
|
13
|
+
"@semantic-release/release-notes-generator",
|
|
14
|
+
"@semantic-release/github"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"type": "commonjs",
|
|
18
|
+
"main": "./src/index.js",
|
|
19
|
+
"typings": "./src/index.d.ts",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/devrev/meerkat.git"
|
|
23
|
+
},
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"registry": "https://registry.npmjs.org"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [],
|
|
28
|
+
"author": "devrev",
|
|
29
|
+
"license": "ISC"
|
|
30
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FilterType, Query } from '../types/cube-types/query';
|
|
2
|
+
import { TableSchema } from '../types/cube-types/table';
|
|
3
|
+
import { SelectStatement } from '../types/duckdb-serialization-types';
|
|
4
|
+
export declare const cubeToDuckdbAST: (query: Query, tableSchema: TableSchema, options?: {
|
|
5
|
+
filterType: FilterType;
|
|
6
|
+
}) => SelectStatement | null;
|
|
@@ -0,0 +1,89 @@
|
|
|
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 _baseast = require("../utils/base-ast");
|
|
15
|
+
const _cubefilterenrichment = require("../utils/cube-filter-enrichment");
|
|
16
|
+
const _modifymeerkatfilter = require("../utils/modify-meerkat-filter");
|
|
17
|
+
const formatFilters = (queryFiltersWithInfo, filterType)=>{
|
|
18
|
+
/*
|
|
19
|
+
* If the type of filter is set to base filter where
|
|
20
|
+
*/ return filterType === 'BASE_FILTER' ? queryFiltersWithInfo : (0, _modifymeerkatfilter.modifyLeafMeerkatFilter)(queryFiltersWithInfo, (item)=>{
|
|
21
|
+
return _extends._({}, item, {
|
|
22
|
+
member: item.member.split('.').join('__')
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
const getFormattedFilters = ({ queryFiltersWithInfo, filterType, mapperFn, baseAST })=>{
|
|
27
|
+
const filters = queryFiltersWithInfo.map((item)=>mapperFn(item)).filter(Boolean);
|
|
28
|
+
const formattedFilters = formatFilters(filters, filterType);
|
|
29
|
+
return (0, _factory.cubeFilterToDuckdbAST)(formattedFilters, baseAST);
|
|
30
|
+
};
|
|
31
|
+
const cubeToDuckdbAST = (query, tableSchema, options)=>{
|
|
32
|
+
var _query_dimensions;
|
|
33
|
+
/**
|
|
34
|
+
* Obviously, if no table schema was found, return null.
|
|
35
|
+
*/ if (!tableSchema) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
const baseAST = (0, _baseast.getBaseAST)();
|
|
39
|
+
const node = baseAST.node;
|
|
40
|
+
if (query.filters && query.filters.length > 0) {
|
|
41
|
+
/**
|
|
42
|
+
* Make a copy of the query filters and enrich them with the table schema.
|
|
43
|
+
*/ const queryFiltersWithInfo = (0, _cubefilterenrichment.cubeFiltersEnrichment)(JSON.parse(JSON.stringify(query.filters)), tableSchema);
|
|
44
|
+
if (!queryFiltersWithInfo) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const whereClause = getFormattedFilters({
|
|
48
|
+
baseAST,
|
|
49
|
+
mapperFn: (item)=>(0, _filterparamsast.traverseAndFilter)(item, (value)=>!query.measures.includes(value.member)),
|
|
50
|
+
queryFiltersWithInfo,
|
|
51
|
+
filterType: options == null ? void 0 : options.filterType
|
|
52
|
+
});
|
|
53
|
+
const havingClause = getFormattedFilters({
|
|
54
|
+
baseAST,
|
|
55
|
+
mapperFn: (item)=>(0, _filterparamsast.traverseAndFilter)(item, (value)=>query.measures.includes(value.member)),
|
|
56
|
+
queryFiltersWithInfo,
|
|
57
|
+
filterType: options == null ? void 0 : options.filterType
|
|
58
|
+
});
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
60
|
+
//@ts-ignore
|
|
61
|
+
node.where_clause = whereClause;
|
|
62
|
+
node.having = havingClause;
|
|
63
|
+
}
|
|
64
|
+
if (query.measures.length && query.dimensions && ((_query_dimensions = query.dimensions) == null ? void 0 : _query_dimensions.length) > 0) {
|
|
65
|
+
node.group_expressions = (0, _cubegroupbytransformer.cubeDimensionToGroupByAST)(query.dimensions);
|
|
66
|
+
const groupSets = [];
|
|
67
|
+
/**
|
|
68
|
+
* We only support one group set for now.
|
|
69
|
+
*/ for(let i = 0; i < node.group_expressions.length; i++){
|
|
70
|
+
groupSets.push(i);
|
|
71
|
+
}
|
|
72
|
+
node.group_sets = [
|
|
73
|
+
groupSets
|
|
74
|
+
];
|
|
75
|
+
}
|
|
76
|
+
node.modifiers = [];
|
|
77
|
+
if (query.order) {
|
|
78
|
+
node.modifiers.push((0, _cubeorderbytransformer.cubeOrderByToAST)(query.order));
|
|
79
|
+
}
|
|
80
|
+
if (query.limit || query.offset) {
|
|
81
|
+
// Type assertion is needed here because the AST is not typed correctly.
|
|
82
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
83
|
+
//@ts-ignore
|
|
84
|
+
node.modifiers.push((0, _cubelimitoffsettransformer.cubeLimitOffsetToAST)(query.limit, query.offset));
|
|
85
|
+
}
|
|
86
|
+
return baseAST;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
//# sourceMappingURL=ast-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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 { QueryFiltersWithInfo, QueryFiltersWithInfoSingular } from '../cube-to-duckdb/cube-filter-to-duckdb';\nimport { traverseAndFilter } from '../filter-params/filter-params-ast';\nimport { FilterType, MeerkatQueryFilter, Query } 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\n\nconst formatFilters = (queryFiltersWithInfo: QueryFiltersWithInfo, filterType?: FilterType) => {\n /*\n * If the type of filter is set to base filter where \n */\n return filterType === 'BASE_FILTER' ? queryFiltersWithInfo : modifyLeafMeerkatFilter(queryFiltersWithInfo, (item) => {\n return {\n ...item,\n member: item.member.split('.').join('__')\n };\n }) as QueryFiltersWithInfo;\n}\n\n\nconst getFormattedFilters = ({ queryFiltersWithInfo, filterType, mapperFn, baseAST }: {\n queryFiltersWithInfo: QueryFiltersWithInfo,\n filterType?: FilterType,\n baseAST: SelectStatement,\n mapperFn: (val: QueryFiltersWithInfoSingular) => MeerkatQueryFilter | null\n}) => {\n const filters = queryFiltersWithInfo.map(item => mapperFn(item)).filter(Boolean) as QueryFiltersWithInfoSingular[];\n const formattedFilters = formatFilters(filters, filterType);\n return cubeFilterToDuckdbAST(\n formattedFilters,\n baseAST\n );\n}\n\nexport const cubeToDuckdbAST = (query: Query, tableSchema: TableSchema, 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) => traverseAndFilter(item, (value) => !query.measures.includes(value.member)),\n queryFiltersWithInfo,\n filterType: options?.filterType\n })\n\n const havingClause = getFormattedFilters({\n baseAST,\n mapperFn: (item) => traverseAndFilter(item, (value) => query.measures.includes(value.member)),\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 (query.measures.length && query.dimensions && query.dimensions?.length > 0) {\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) {\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","split","join","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","cubeOrderByToAST","limit","offset","cubeLimitOffsetToAST"],"mappings":";+BA0CaA;;;eAAAA;;;;yBA1CyB;wCACI;4CACL;wCACJ;iCAEC;yBAKP;sCACW;qCACE;AAGxC,MAAMC,gBAAgB,CAACC,sBAA4CC;IACjE;;EAEA,GACA,OAAOA,eAAe,gBAAgBD,uBAAuBE,IAAAA,4CAAuB,EAACF,sBAAsB,CAACG;QAC1G,OAAO,eACFA;YACHC,QAAQD,KAAKC,MAAM,CAACC,KAAK,CAAC,KAAKC,IAAI,CAAC;;IAExC;AACF;AAGA,MAAMC,sBAAsB,CAAC,EAAEP,oBAAoB,EAAEC,UAAU,EAAEO,QAAQ,EAAEC,OAAO,EAKjF;IACC,MAAMC,UAAUV,qBAAqBW,GAAG,CAACR,CAAAA,OAAQK,SAASL,OAAOS,MAAM,CAACC;IACxE,MAAMC,mBAAmBf,cAAcW,SAAST;IAChD,OAAOc,IAAAA,8BAAqB,EAC1BD,kBACAL;AAEJ;AAEO,MAAMX,kBAAkB,CAACkB,OAAcC,aAA0BC;QA2CrBF;IAzCjD;;GAEC,GACD,IAAI,CAACC,aAAa;QAChB,OAAO;IACT;IAEA,MAAMR,UAAUU,IAAAA,mBAAU;IAC1B,MAAMC,OAAOX,QAAQW,IAAI;IACzB,IAAIJ,MAAMN,OAAO,IAAIM,MAAMN,OAAO,CAACW,MAAM,GAAG,GAAG;QAC7C;;KAEC,GACD,MAAMrB,uBAAuBsB,IAAAA,2CAAqB,EAChDC,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACT,MAAMN,OAAO,IACvCO;QAGF,IAAI,CAACjB,sBAAsB;YACzB,OAAO;QACT;QAEA,MAAM0B,cAAcnB,oBAAoB;YACtCE;YACAD,UAAU,CAACL,OAASwB,IAAAA,kCAAiB,EAACxB,MAAM,CAACyB,QAAW,CAACZ,MAAMa,QAAQ,CAACC,QAAQ,CAACF,MAAMxB,MAAM;YAC7FJ;YACAC,UAAU,EAAEiB,2BAAAA,QAASjB,UAAU;QACjC;QAEA,MAAM8B,eAAexB,oBAAoB;YACvCE;YACAD,UAAU,CAACL,OAASwB,IAAAA,kCAAiB,EAACxB,MAAM,CAACyB,QAAWZ,MAAMa,QAAQ,CAACC,QAAQ,CAACF,MAAMxB,MAAM;YAC5FJ;YACAC,UAAU,EAAEiB,2BAAAA,QAASjB,UAAU;QACjC;QAEA,6DAA6D;QAC7D,YAAY;QACZmB,KAAKY,YAAY,GAAGN;QACpBN,KAAKa,MAAM,GAAGF;IAChB;IACA,IAAIf,MAAMa,QAAQ,CAACR,MAAM,IAAIL,MAAMkB,UAAU,IAAIlB,EAAAA,oBAAAA,MAAMkB,UAAU,qBAAhBlB,kBAAkBK,MAAM,IAAG,GAAG;QAC7ED,KAAKe,iBAAiB,GAAGC,IAAAA,iDAAyB,EAACpB,MAAMkB,UAAU;QACnE,MAAMG,YAAY,EAAE;QACpB;;KAEC,GACD,IAAK,IAAIC,IAAI,GAAGA,IAAIlB,KAAKe,iBAAiB,CAACd,MAAM,EAAEiB,IAAK;YACtDD,UAAUE,IAAI,CAACD;QACjB;QACAlB,KAAKoB,UAAU,GAAG;YAACH;SAAU;IAC/B;IACAjB,KAAKqB,SAAS,GAAG,EAAE;IACnB,IAAIzB,MAAM0B,KAAK,EAAE;QACftB,KAAKqB,SAAS,CAACF,IAAI,CAACI,IAAAA,wCAAgB,EAAC3B,MAAM0B,KAAK;IAClD;IACA,IAAI1B,MAAM4B,KAAK,IAAI5B,MAAM6B,MAAM,EAAE;QAC/B,wEAAwE;QACxE,6DAA6D;QAC7D,YAAY;QACZzB,KAAKqB,SAAS,CAACF,IAAI,CAACO,IAAAA,gDAAoB,EAAC9B,MAAM4B,KAAK,EAAE5B,MAAM6B,MAAM;IACpE;IAEA,OAAOpC;AACT"}
|
|
@@ -0,0 +1,30 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ContextParams } from '../types/cube-types/table';
|
|
2
|
+
export declare const detectAllContextParams: (sql: string) => {
|
|
3
|
+
memberKey: string;
|
|
4
|
+
matchKey: string;
|
|
5
|
+
}[];
|
|
6
|
+
export declare const applyContextParamsToBaseSQL: (baseSQL: string, contextParamsSQL: {
|
|
7
|
+
memberKey: string;
|
|
8
|
+
contextParamSQL: string;
|
|
9
|
+
matchKey: string;
|
|
10
|
+
}[]) => string;
|
|
11
|
+
export declare const detectApplyContextParamsToBaseSQL: (baseSQL: string, contextParams: ContextParams) => string;
|
|
@@ -0,0 +1,55 @@
|
|
|
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
|
+
detectAllContextParams: function() {
|
|
10
|
+
return detectAllContextParams;
|
|
11
|
+
},
|
|
12
|
+
applyContextParamsToBaseSQL: function() {
|
|
13
|
+
return applyContextParamsToBaseSQL;
|
|
14
|
+
},
|
|
15
|
+
detectApplyContextParamsToBaseSQL: function() {
|
|
16
|
+
return detectApplyContextParamsToBaseSQL;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const detectAllContextParams = (sql)=>{
|
|
20
|
+
const regex = /\$\{CONTEXT_PARAMS\.([^}]*)\}/g;
|
|
21
|
+
const matches = [];
|
|
22
|
+
let match;
|
|
23
|
+
while((match = regex.exec(sql)) !== null){
|
|
24
|
+
matches.push({
|
|
25
|
+
memberKey: match[1],
|
|
26
|
+
matchKey: match[0]
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return matches;
|
|
30
|
+
};
|
|
31
|
+
const applyContextParamsToBaseSQL = (baseSQL, contextParamsSQL)=>{
|
|
32
|
+
let newSQL = baseSQL;
|
|
33
|
+
for (const contextParamSQL of contextParamsSQL){
|
|
34
|
+
// Replace matchKey with contextParamSQL
|
|
35
|
+
newSQL = newSQL.replace(contextParamSQL.matchKey, contextParamSQL.contextParamSQL);
|
|
36
|
+
}
|
|
37
|
+
return newSQL;
|
|
38
|
+
};
|
|
39
|
+
const detectApplyContextParamsToBaseSQL = (baseSQL, contextParams)=>{
|
|
40
|
+
const contextParamsSQL = [];
|
|
41
|
+
const contextParamsKeys = detectAllContextParams(baseSQL);
|
|
42
|
+
for (const contextParamsKey of contextParamsKeys){
|
|
43
|
+
const contextParamSQL = contextParams[contextParamsKey.memberKey];
|
|
44
|
+
if (contextParamSQL) {
|
|
45
|
+
contextParamsSQL.push({
|
|
46
|
+
memberKey: contextParamsKey.memberKey,
|
|
47
|
+
matchKey: contextParamsKey.matchKey,
|
|
48
|
+
contextParamSQL: contextParamSQL
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return applyContextParamsToBaseSQL(baseSQL, contextParamsSQL);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=context-params-ast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../meerkat-core/src/context-params/context-params-ast.ts"],"sourcesContent":["import { ContextParams } from '../types/cube-types/table';\n\nexport const detectAllContextParams = (\n sql: string\n): {\n memberKey: string;\n matchKey: string;\n}[] => {\n const regex = /\\$\\{CONTEXT_PARAMS\\.([^}]*)\\}/g;\n const matches = [];\n let match;\n\n while ((match = regex.exec(sql)) !== null) {\n matches.push({\n memberKey: match[1],\n matchKey: match[0],\n });\n }\n\n return matches;\n};\n\nexport const applyContextParamsToBaseSQL = (\n baseSQL: string,\n contextParamsSQL: {\n memberKey: string;\n contextParamSQL: string;\n matchKey: string;\n }[]\n) => {\n let newSQL = baseSQL;\n for (const contextParamSQL of contextParamsSQL) {\n // Replace matchKey with contextParamSQL\n newSQL = newSQL.replace(\n contextParamSQL.matchKey,\n contextParamSQL.contextParamSQL\n );\n }\n return newSQL;\n};\n\nexport const detectApplyContextParamsToBaseSQL = (\n baseSQL: string,\n contextParams: ContextParams\n) => {\n const contextParamsSQL = [];\n const contextParamsKeys = detectAllContextParams(baseSQL);\n\n for (const contextParamsKey of contextParamsKeys) {\n const contextParamSQL = contextParams[contextParamsKey.memberKey];\n if (contextParamSQL) {\n contextParamsSQL.push({\n memberKey: contextParamsKey.memberKey,\n matchKey: contextParamsKey.matchKey,\n contextParamSQL: contextParamSQL,\n });\n }\n }\n\n return applyContextParamsToBaseSQL(baseSQL, contextParamsSQL);\n};\n"],"names":["detectAllContextParams","applyContextParamsToBaseSQL","detectApplyContextParamsToBaseSQL","sql","regex","matches","match","exec","push","memberKey","matchKey","baseSQL","contextParamsSQL","newSQL","contextParamSQL","replace","contextParams","contextParamsKeys","contextParamsKey"],"mappings":";;;;;;;;IAEaA,sBAAsB;eAAtBA;;IAoBAC,2BAA2B;eAA3BA;;IAmBAC,iCAAiC;eAAjCA;;;AAvCN,MAAMF,yBAAyB,CACpCG;IAKA,MAAMC,QAAQ;IACd,MAAMC,UAAU,EAAE;IAClB,IAAIC;IAEJ,MAAO,AAACA,CAAAA,QAAQF,MAAMG,IAAI,CAACJ,IAAG,MAAO,KAAM;QACzCE,QAAQG,IAAI,CAAC;YACXC,WAAWH,KAAK,CAAC,EAAE;YACnBI,UAAUJ,KAAK,CAAC,EAAE;QACpB;IACF;IAEA,OAAOD;AACT;AAEO,MAAMJ,8BAA8B,CACzCU,SACAC;IAMA,IAAIC,SAASF;IACb,KAAK,MAAMG,mBAAmBF,iBAAkB;QAC9C,wCAAwC;QACxCC,SAASA,OAAOE,OAAO,CACrBD,gBAAgBJ,QAAQ,EACxBI,gBAAgBA,eAAe;IAEnC;IACA,OAAOD;AACT;AAEO,MAAMX,oCAAoC,CAC/CS,SACAK;IAEA,MAAMJ,mBAAmB,EAAE;IAC3B,MAAMK,oBAAoBjB,uBAAuBW;IAEjD,KAAK,MAAMO,oBAAoBD,kBAAmB;QAChD,MAAMH,kBAAkBE,aAAa,CAACE,iBAAiBT,SAAS,CAAC;QACjE,IAAIK,iBAAiB;YACnBF,iBAAiBJ,IAAI,CAAC;gBACpBC,WAAWS,iBAAiBT,SAAS;gBACrCC,UAAUQ,iBAAiBR,QAAQ;gBACnCI,iBAAiBA;YACnB;QACF;IACF;IAEA,OAAOb,4BAA4BU,SAASC;AAC9C"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "andDuckdbCondition", {
|
|
3
|
+
enumerable: true,
|
|
4
|
+
get: function() {
|
|
5
|
+
return andDuckdbCondition;
|
|
6
|
+
}
|
|
7
|
+
});
|
|
8
|
+
const _index = require("../../types/duckdb-serialization-types/index");
|
|
9
|
+
const andDuckdbCondition = ()=>{
|
|
10
|
+
return {
|
|
11
|
+
class: _index.ExpressionClass.CONJUNCTION,
|
|
12
|
+
type: _index.ExpressionType.CONJUNCTION_AND,
|
|
13
|
+
alias: '',
|
|
14
|
+
children: []
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=and.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/and/and.ts"],"sourcesContent":["import {\n ConjunctionExpression,\n ExpressionClass,\n ExpressionType,\n} from '../../types/duckdb-serialization-types/index';\n\nexport const andDuckdbCondition = (): ConjunctionExpression => {\n return {\n class: ExpressionClass.CONJUNCTION,\n type: ExpressionType.CONJUNCTION_AND,\n alias: '',\n children: [],\n };\n};\n"],"names":["andDuckdbCondition","class","ExpressionClass","CONJUNCTION","type","ExpressionType","CONJUNCTION_AND","alias","children"],"mappings":";+BAMaA;;;eAAAA;;;uBAFN;AAEA,MAAMA,qBAAqB;IAChC,OAAO;QACLC,OAAOC,sBAAe,CAACC,WAAW;QAClCC,MAAMC,qBAAc,CAACC,eAAe;QACpCC,OAAO;QACPC,UAAU,EAAE;IACd;AACF"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { Dimension, Measure } from '../../types/cube-types/index';
|
|
2
|
+
import { ExpressionClass, ExpressionType, QueryNodeType, SubqueryType } from '../../types/duckdb-serialization-types/index';
|
|
3
|
+
export declare const baseDuckdbCondition: (columnName: string, type: ExpressionType, value: string, memberInfo: Measure | Dimension) => {
|
|
4
|
+
class: ExpressionClass;
|
|
5
|
+
type: ExpressionType;
|
|
6
|
+
alias: string;
|
|
7
|
+
left: {
|
|
8
|
+
class: ExpressionClass;
|
|
9
|
+
type: ExpressionType;
|
|
10
|
+
alias: string;
|
|
11
|
+
column_names: string[];
|
|
12
|
+
};
|
|
13
|
+
right: {
|
|
14
|
+
class: ExpressionClass;
|
|
15
|
+
type: ExpressionType;
|
|
16
|
+
alias: string;
|
|
17
|
+
value: {
|
|
18
|
+
type: {
|
|
19
|
+
id: string;
|
|
20
|
+
type_info: null;
|
|
21
|
+
};
|
|
22
|
+
is_null: boolean;
|
|
23
|
+
value: string;
|
|
24
|
+
} | {
|
|
25
|
+
type: {
|
|
26
|
+
id: string;
|
|
27
|
+
type_info: {
|
|
28
|
+
type: string;
|
|
29
|
+
alias: string;
|
|
30
|
+
width: number;
|
|
31
|
+
scale: number;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
is_null: boolean;
|
|
35
|
+
value: number;
|
|
36
|
+
} | {
|
|
37
|
+
type: {
|
|
38
|
+
id: string;
|
|
39
|
+
type_info: null;
|
|
40
|
+
};
|
|
41
|
+
is_null: boolean;
|
|
42
|
+
value: boolean;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
export declare const baseArrayDuckdbCondition: (columnName: string, type: ExpressionType, value: string, memberInfo: Measure | Dimension) => {
|
|
47
|
+
class: ExpressionClass;
|
|
48
|
+
type: ExpressionType;
|
|
49
|
+
alias: string;
|
|
50
|
+
subquery_type: SubqueryType;
|
|
51
|
+
subquery: {
|
|
52
|
+
node: {
|
|
53
|
+
type: QueryNodeType;
|
|
54
|
+
modifiers: never[];
|
|
55
|
+
cte_map: {
|
|
56
|
+
map: never[];
|
|
57
|
+
};
|
|
58
|
+
select_list: {
|
|
59
|
+
class: ExpressionClass;
|
|
60
|
+
type: ExpressionType;
|
|
61
|
+
alias: string;
|
|
62
|
+
function_name: string;
|
|
63
|
+
schema: string;
|
|
64
|
+
children: {
|
|
65
|
+
class: ExpressionClass;
|
|
66
|
+
type: ExpressionType;
|
|
67
|
+
alias: string;
|
|
68
|
+
column_names: string[];
|
|
69
|
+
}[];
|
|
70
|
+
filter: null;
|
|
71
|
+
order_bys: {
|
|
72
|
+
type: string;
|
|
73
|
+
orders: never[];
|
|
74
|
+
};
|
|
75
|
+
distinct: boolean;
|
|
76
|
+
is_operator: boolean;
|
|
77
|
+
export_state: boolean;
|
|
78
|
+
catalog: string;
|
|
79
|
+
}[];
|
|
80
|
+
from_table: {
|
|
81
|
+
type: string;
|
|
82
|
+
alias: string;
|
|
83
|
+
sample: null;
|
|
84
|
+
};
|
|
85
|
+
where_clause: null;
|
|
86
|
+
group_expressions: never[];
|
|
87
|
+
group_sets: never[];
|
|
88
|
+
aggregate_handling: string;
|
|
89
|
+
having: null;
|
|
90
|
+
sample: null;
|
|
91
|
+
qualify: null;
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
child: {
|
|
95
|
+
class: string;
|
|
96
|
+
type: string;
|
|
97
|
+
alias: string;
|
|
98
|
+
value: {
|
|
99
|
+
type: {
|
|
100
|
+
id: string;
|
|
101
|
+
type_info: null;
|
|
102
|
+
};
|
|
103
|
+
is_null: boolean;
|
|
104
|
+
value: string;
|
|
105
|
+
} | {
|
|
106
|
+
type: {
|
|
107
|
+
id: string;
|
|
108
|
+
type_info: {
|
|
109
|
+
type: string;
|
|
110
|
+
alias: string;
|
|
111
|
+
width: number;
|
|
112
|
+
scale: number;
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
is_null: boolean;
|
|
116
|
+
value: number;
|
|
117
|
+
} | {
|
|
118
|
+
type: {
|
|
119
|
+
id: string;
|
|
120
|
+
type_info: null;
|
|
121
|
+
};
|
|
122
|
+
is_null: boolean;
|
|
123
|
+
value: boolean;
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
comparison_type: ExpressionType;
|
|
127
|
+
};
|
|
128
|
+
export declare const valueBuilder: (value: string, memberInfo: Measure | Dimension) => {
|
|
129
|
+
type: {
|
|
130
|
+
id: string;
|
|
131
|
+
type_info: null;
|
|
132
|
+
};
|
|
133
|
+
is_null: boolean;
|
|
134
|
+
value: string;
|
|
135
|
+
} | {
|
|
136
|
+
type: {
|
|
137
|
+
id: string;
|
|
138
|
+
type_info: {
|
|
139
|
+
type: string;
|
|
140
|
+
alias: string;
|
|
141
|
+
width: number;
|
|
142
|
+
scale: number;
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
is_null: boolean;
|
|
146
|
+
value: number;
|
|
147
|
+
} | {
|
|
148
|
+
type: {
|
|
149
|
+
id: string;
|
|
150
|
+
type_info: null;
|
|
151
|
+
};
|
|
152
|
+
is_null: boolean;
|
|
153
|
+
value: boolean;
|
|
154
|
+
};
|
|
@@ -0,0 +1,159 @@
|
|
|
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
|
+
baseDuckdbCondition: function() {
|
|
10
|
+
return baseDuckdbCondition;
|
|
11
|
+
},
|
|
12
|
+
baseArrayDuckdbCondition: function() {
|
|
13
|
+
return baseArrayDuckdbCondition;
|
|
14
|
+
},
|
|
15
|
+
valueBuilder: function() {
|
|
16
|
+
return valueBuilder;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _index = require("../../types/duckdb-serialization-types/index");
|
|
20
|
+
const _cubetypetoduckdbtype = require("../../utils/cube-type-to-duckdb-type");
|
|
21
|
+
const _gettypeinfo = require("../../utils/get-type-info");
|
|
22
|
+
const baseDuckdbCondition = (columnName, type, value, memberInfo)=>{
|
|
23
|
+
return {
|
|
24
|
+
class: _index.ExpressionClass.COMPARISON,
|
|
25
|
+
type: type,
|
|
26
|
+
alias: '',
|
|
27
|
+
left: {
|
|
28
|
+
class: _index.ExpressionClass.COLUMN_REF,
|
|
29
|
+
type: _index.ExpressionType.COLUMN_REF,
|
|
30
|
+
alias: '',
|
|
31
|
+
column_names: columnName.split('.')
|
|
32
|
+
},
|
|
33
|
+
right: {
|
|
34
|
+
class: _index.ExpressionClass.CONSTANT,
|
|
35
|
+
type: _index.ExpressionType.VALUE_CONSTANT,
|
|
36
|
+
alias: '',
|
|
37
|
+
value: valueBuilder(value, memberInfo)
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
const baseArrayDuckdbCondition = (columnName, type, value, memberInfo)=>{
|
|
42
|
+
return {
|
|
43
|
+
class: _index.ExpressionClass.SUBQUERY,
|
|
44
|
+
type: _index.ExpressionType.SUBQUERY,
|
|
45
|
+
alias: '',
|
|
46
|
+
subquery_type: _index.SubqueryType.ANY,
|
|
47
|
+
subquery: {
|
|
48
|
+
node: {
|
|
49
|
+
type: _index.QueryNodeType.SELECT_NODE,
|
|
50
|
+
modifiers: [],
|
|
51
|
+
cte_map: {
|
|
52
|
+
map: []
|
|
53
|
+
},
|
|
54
|
+
select_list: [
|
|
55
|
+
{
|
|
56
|
+
class: _index.ExpressionClass.FUNCTION,
|
|
57
|
+
type: _index.ExpressionType.FUNCTION,
|
|
58
|
+
alias: '',
|
|
59
|
+
function_name: 'unnest',
|
|
60
|
+
schema: '',
|
|
61
|
+
children: [
|
|
62
|
+
{
|
|
63
|
+
class: _index.ExpressionClass.COLUMN_REF,
|
|
64
|
+
type: _index.ExpressionType.COLUMN_REF,
|
|
65
|
+
alias: '',
|
|
66
|
+
column_names: columnName.split('.')
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
filter: null,
|
|
70
|
+
order_bys: {
|
|
71
|
+
type: 'ORDER_MODIFIER',
|
|
72
|
+
orders: []
|
|
73
|
+
},
|
|
74
|
+
distinct: false,
|
|
75
|
+
is_operator: false,
|
|
76
|
+
export_state: false,
|
|
77
|
+
catalog: ''
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
from_table: {
|
|
81
|
+
type: 'EMPTY',
|
|
82
|
+
alias: '',
|
|
83
|
+
sample: null
|
|
84
|
+
},
|
|
85
|
+
where_clause: null,
|
|
86
|
+
group_expressions: [],
|
|
87
|
+
group_sets: [],
|
|
88
|
+
aggregate_handling: 'STANDARD_HANDLING',
|
|
89
|
+
having: null,
|
|
90
|
+
sample: null,
|
|
91
|
+
qualify: null
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
child: {
|
|
95
|
+
class: 'CONSTANT',
|
|
96
|
+
type: 'VALUE_CONSTANT',
|
|
97
|
+
alias: '',
|
|
98
|
+
value: valueBuilder(value, memberInfo)
|
|
99
|
+
},
|
|
100
|
+
comparison_type: type
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
const valueBuilder = (value, memberInfo)=>{
|
|
104
|
+
switch(memberInfo.type){
|
|
105
|
+
case 'string':
|
|
106
|
+
return {
|
|
107
|
+
type: {
|
|
108
|
+
id: _cubetypetoduckdbtype.CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],
|
|
109
|
+
type_info: null
|
|
110
|
+
},
|
|
111
|
+
is_null: false,
|
|
112
|
+
value: value
|
|
113
|
+
};
|
|
114
|
+
case 'number':
|
|
115
|
+
{
|
|
116
|
+
const parsedValue = parseFloat(value);
|
|
117
|
+
return {
|
|
118
|
+
type: {
|
|
119
|
+
id: _cubetypetoduckdbtype.CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],
|
|
120
|
+
type_info: (0, _gettypeinfo.getTypeInfo)(parsedValue)
|
|
121
|
+
},
|
|
122
|
+
is_null: false,
|
|
123
|
+
value: (0, _gettypeinfo.convertFloatToInt)(parsedValue)
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
case 'boolean':
|
|
127
|
+
{
|
|
128
|
+
const parsedValue = value === 'true';
|
|
129
|
+
return {
|
|
130
|
+
type: {
|
|
131
|
+
id: _cubetypetoduckdbtype.CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],
|
|
132
|
+
type_info: null
|
|
133
|
+
},
|
|
134
|
+
is_null: false,
|
|
135
|
+
value: parsedValue
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
case 'time':
|
|
139
|
+
return {
|
|
140
|
+
type: {
|
|
141
|
+
id: _cubetypetoduckdbtype.CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],
|
|
142
|
+
type_info: null
|
|
143
|
+
},
|
|
144
|
+
is_null: false,
|
|
145
|
+
value: value
|
|
146
|
+
};
|
|
147
|
+
default:
|
|
148
|
+
return {
|
|
149
|
+
type: {
|
|
150
|
+
id: _cubetypetoduckdbtype.CUBE_TYPE_TO_DUCKDB_TYPE.string,
|
|
151
|
+
type_info: null
|
|
152
|
+
},
|
|
153
|
+
is_null: false,
|
|
154
|
+
value: value
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
//# sourceMappingURL=base-condition-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/base-condition-builder/base-condition-builder.ts"],"sourcesContent":["import { Dimension, Measure } from '../../types/cube-types/index';\n\nimport {\n ExpressionClass,\n ExpressionType,\n QueryNodeType,\n SubqueryType,\n} from '../../types/duckdb-serialization-types/index';\nimport { CUBE_TYPE_TO_DUCKDB_TYPE } from '../../utils/cube-type-to-duckdb-type';\nimport { convertFloatToInt, getTypeInfo } from '../../utils/get-type-info';\n\nexport const baseDuckdbCondition = (\n columnName: string,\n type: ExpressionType,\n value: string,\n memberInfo: Measure | Dimension\n) => {\n return {\n class: ExpressionClass.COMPARISON,\n type: type,\n alias: '',\n left: {\n class: ExpressionClass.COLUMN_REF,\n type: ExpressionType.COLUMN_REF,\n alias: '',\n column_names: columnName.split('.'),\n },\n right: {\n class: ExpressionClass.CONSTANT,\n type: ExpressionType.VALUE_CONSTANT,\n alias: '',\n value: valueBuilder(value, memberInfo),\n },\n };\n};\n\nexport const baseArrayDuckdbCondition = (\n columnName: string,\n type: ExpressionType,\n value: string,\n memberInfo: Measure | Dimension\n) => {\n return {\n class: ExpressionClass.SUBQUERY,\n type: ExpressionType.SUBQUERY,\n alias: '',\n subquery_type: SubqueryType.ANY,\n subquery: {\n node: {\n type: QueryNodeType.SELECT_NODE,\n modifiers: [],\n cte_map: {\n map: [],\n },\n select_list: [\n {\n class: ExpressionClass.FUNCTION,\n type: ExpressionType.FUNCTION,\n alias: '',\n function_name: 'unnest',\n schema: '',\n children: [\n {\n class: ExpressionClass.COLUMN_REF,\n type: ExpressionType.COLUMN_REF,\n alias: '',\n column_names: columnName.split('.'),\n },\n ],\n filter: null,\n order_bys: {\n type: 'ORDER_MODIFIER',\n orders: [],\n },\n distinct: false,\n is_operator: false,\n export_state: false,\n catalog: '',\n },\n ],\n from_table: {\n type: 'EMPTY',\n alias: '',\n sample: null,\n },\n where_clause: null,\n group_expressions: [],\n group_sets: [],\n aggregate_handling: 'STANDARD_HANDLING',\n having: null,\n sample: null,\n qualify: null,\n },\n },\n child: {\n class: 'CONSTANT',\n type: 'VALUE_CONSTANT',\n alias: '',\n value: valueBuilder(value, memberInfo),\n },\n comparison_type: type,\n };\n};\n\nexport const valueBuilder = (\n value: string,\n memberInfo: Measure | Dimension\n) => {\n switch (memberInfo.type) {\n case 'string':\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],\n type_info: null,\n },\n is_null: false,\n value: value,\n };\n\n case 'number': {\n const parsedValue = parseFloat(value);\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],\n type_info: getTypeInfo(parsedValue),\n },\n is_null: false,\n value: convertFloatToInt(parsedValue),\n };\n }\n case 'boolean': {\n const parsedValue = value === 'true';\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],\n type_info: null,\n },\n is_null: false,\n value: parsedValue,\n };\n }\n case 'time':\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],\n type_info: null,\n },\n is_null: false,\n value: value,\n };\n\n default:\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE.string,\n type_info: null,\n },\n is_null: false,\n value: value,\n };\n }\n};\n"],"names":["baseDuckdbCondition","baseArrayDuckdbCondition","valueBuilder","columnName","type","value","memberInfo","class","ExpressionClass","COMPARISON","alias","left","COLUMN_REF","ExpressionType","column_names","split","right","CONSTANT","VALUE_CONSTANT","SUBQUERY","subquery_type","SubqueryType","ANY","subquery","node","QueryNodeType","SELECT_NODE","modifiers","cte_map","map","select_list","FUNCTION","function_name","schema","children","filter","order_bys","orders","distinct","is_operator","export_state","catalog","from_table","sample","where_clause","group_expressions","group_sets","aggregate_handling","having","qualify","child","comparison_type","id","CUBE_TYPE_TO_DUCKDB_TYPE","type_info","is_null","parsedValue","parseFloat","getTypeInfo","convertFloatToInt","string"],"mappings":"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"}
|