@devrev/meerkat-core 0.0.111 → 0.0.115
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 +1 -1
- package/src/ast-builder/ast-builder.d.ts +3 -1
- package/src/ast-builder/ast-builder.js +18 -15
- package/src/ast-builder/ast-builder.js.map +1 -1
- package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.d.ts +37 -15
- package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.js +48 -15
- package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.js.map +1 -1
- package/src/cube-filter-transformer/contains/contains.d.ts +3 -9
- package/src/cube-filter-transformer/contains/contains.js +8 -12
- package/src/cube-filter-transformer/contains/contains.js.map +1 -1
- package/src/cube-filter-transformer/equals/equals-array.js +7 -11
- package/src/cube-filter-transformer/equals/equals-array.js.map +1 -1
- package/src/cube-filter-transformer/equals/equals.js +5 -5
- package/src/cube-filter-transformer/equals/equals.js.map +1 -1
- package/src/cube-filter-transformer/factory.d.ts +3 -2
- package/src/cube-filter-transformer/factory.js +23 -23
- package/src/cube-filter-transformer/factory.js.map +1 -1
- package/src/cube-filter-transformer/gt/gt.js +4 -4
- package/src/cube-filter-transformer/gt/gt.js.map +1 -1
- package/src/cube-filter-transformer/gte/gte.js +4 -4
- package/src/cube-filter-transformer/gte/gte.js.map +1 -1
- package/src/cube-filter-transformer/in/in.js +7 -11
- package/src/cube-filter-transformer/in/in.js.map +1 -1
- package/src/cube-filter-transformer/in-date-range/in-date-range.js +4 -4
- package/src/cube-filter-transformer/in-date-range/in-date-range.js.map +1 -1
- package/src/cube-filter-transformer/lt/lt.js +4 -4
- package/src/cube-filter-transformer/lt/lt.js.map +1 -1
- package/src/cube-filter-transformer/lte/lte.js +4 -4
- package/src/cube-filter-transformer/lte/lte.js.map +1 -1
- package/src/cube-filter-transformer/not-In-date-range/not-In-date-range.js +3 -3
- package/src/cube-filter-transformer/not-In-date-range/not-In-date-range.js.map +1 -1
- package/src/cube-filter-transformer/not-contains/not-contains.d.ts +3 -9
- package/src/cube-filter-transformer/not-contains/not-contains.js +8 -12
- package/src/cube-filter-transformer/not-contains/not-contains.js.map +1 -1
- package/src/cube-filter-transformer/not-equals/not-equals-array.js +2 -2
- package/src/cube-filter-transformer/not-equals/not-equals-array.js.map +1 -1
- package/src/cube-filter-transformer/not-equals/not-equals.js +5 -5
- package/src/cube-filter-transformer/not-equals/not-equals.js.map +1 -1
- package/src/cube-filter-transformer/not-in/not-in.js +7 -11
- package/src/cube-filter-transformer/not-in/not-in.js.map +1 -1
- package/src/cube-filter-transformer/not-set/not-set.js +5 -8
- package/src/cube-filter-transformer/not-set/not-set.js.map +1 -1
- package/src/cube-filter-transformer/set/set.js +5 -8
- package/src/cube-filter-transformer/set/set.js.map +1 -1
- package/src/cube-filter-transformer/sql-expression/sql-expression-parser.d.ts +2 -1
- package/src/cube-filter-transformer/sql-expression/sql-expression-parser.js +10 -18
- package/src/cube-filter-transformer/sql-expression/sql-expression-parser.js.map +1 -1
- 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 +2 -8
- package/src/cube-group-by-transformer/cube-group-by-transformer.js.map +1 -1
- package/src/cube-measure-transformer/cube-measure-transformer.d.ts +4 -2
- package/src/cube-measure-transformer/cube-measure-transformer.js +16 -30
- package/src/cube-measure-transformer/cube-measure-transformer.js.map +1 -1
- package/src/cube-order-by-transformer/cube-order-by-transformer.d.ts +3 -2
- package/src/cube-order-by-transformer/cube-order-by-transformer.js +3 -9
- package/src/cube-order-by-transformer/cube-order-by-transformer.js.map +1 -1
- package/src/filter-params/filter-params-ast.d.ts +2 -1
- package/src/filter-params/filter-params-ast.js +2 -1
- package/src/filter-params/filter-params-ast.js.map +1 -1
- package/src/get-filter-params-sql/get-filter-params-sql.d.ts +5 -3
- package/src/get-filter-params-sql/get-filter-params-sql.js +2 -2
- package/src/get-filter-params-sql/get-filter-params-sql.js.map +1 -1
- package/src/get-final-base-sql/get-final-base-sql.d.ts +3 -1
- package/src/get-final-base-sql/get-final-base-sql.js +3 -1
- package/src/get-final-base-sql/get-final-base-sql.js.map +1 -1
- package/src/get-wrapped-base-query-with-projections/get-aliased-columns-from-filters.d.ts +7 -3
- package/src/get-wrapped-base-query-with-projections/get-aliased-columns-from-filters.js +11 -14
- package/src/get-wrapped-base-query-with-projections/get-aliased-columns-from-filters.js.map +1 -1
- package/src/get-wrapped-base-query-with-projections/get-projection-clause.d.ts +2 -1
- package/src/get-wrapped-base-query-with-projections/get-projection-clause.js +5 -11
- package/src/get-wrapped-base-query-with-projections/get-projection-clause.js.map +1 -1
- package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.d.ts +3 -1
- package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js +3 -2
- package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js.map +1 -1
- package/src/index.d.ts +2 -0
- package/src/index.js +2 -0
- package/src/index.js.map +1 -1
- package/src/joins/joins.d.ts +22 -0
- package/src/joins/joins.js +60 -8
- package/src/joins/joins.js.map +1 -1
- package/src/member-formatters/get-alias.d.ts +112 -7
- package/src/member-formatters/get-alias.js +149 -17
- package/src/member-formatters/get-alias.js.map +1 -1
- package/src/member-formatters/index.d.ts +2 -2
- package/src/member-formatters/index.js +6 -1
- package/src/member-formatters/index.js.map +1 -1
- package/src/member-formatters/member-key-to-safe-key.d.ts +17 -1
- package/src/member-formatters/member-key-to-safe-key.js +15 -1
- package/src/member-formatters/member-key-to-safe-key.js.map +1 -1
- package/src/resolution/generators/generate-resolution-join-paths.js +7 -7
- package/src/resolution/generators/generate-resolution-join-paths.js.map +1 -1
- package/src/resolution/generators/generate-resolution-schemas.d.ts +1 -1
- package/src/resolution/generators/generate-resolution-schemas.js +5 -14
- package/src/resolution/generators/generate-resolution-schemas.js.map +1 -1
- package/src/resolution/generators/generate-resolved-dimensions.js +3 -2
- package/src/resolution/generators/generate-resolved-dimensions.js.map +1 -1
- package/src/resolution/generators/generate-row-number-sql.js +2 -1
- package/src/resolution/generators/generate-row-number-sql.js.map +1 -1
- package/src/resolution/resolution.d.ts +1 -1
- package/src/resolution/resolution.js +20 -21
- package/src/resolution/resolution.js.map +1 -1
- package/src/resolution/steps/aggregation-step.d.ts +1 -1
- package/src/resolution/steps/aggregation-step.js +2 -1
- package/src/resolution/steps/aggregation-step.js.map +1 -1
- package/src/resolution/steps/apply-aliases-step.d.ts +34 -0
- package/src/resolution/steps/apply-aliases-step.js +100 -0
- package/src/resolution/steps/apply-aliases-step.js.map +1 -0
- package/src/resolution/steps/apply-sql-overrides.d.ts +38 -0
- package/src/resolution/steps/apply-sql-overrides.js +84 -0
- package/src/resolution/steps/apply-sql-overrides.js.map +1 -0
- package/src/resolution/steps/resolution-step.js +6 -7
- package/src/resolution/steps/resolution-step.js.map +1 -1
- package/src/resolution/types.d.ts +6 -0
- package/src/resolution/types.js.map +1 -1
- package/src/utils/meerkat-placeholder-replacer.d.ts +2 -1
- package/src/utils/meerkat-placeholder-replacer.js +4 -9
- package/src/utils/meerkat-placeholder-replacer.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { QueryOptions } from '../member-formatters/get-alias';
|
|
1
2
|
import { FilterType, Query } from '../types/cube-types/query';
|
|
2
3
|
import { TableSchema } from '../types/cube-types/table';
|
|
3
4
|
import { SelectStatement } from '../types/duckdb-serialization-types';
|
|
4
|
-
export declare const cubeToDuckdbAST: (query: Query, tableSchema: TableSchema, options
|
|
5
|
+
export declare const cubeToDuckdbAST: (query: Query, tableSchema: TableSchema, options: {
|
|
5
6
|
filterType: FilterType;
|
|
7
|
+
config: QueryOptions;
|
|
6
8
|
}) => SelectStatement | null;
|
|
@@ -10,28 +10,29 @@ const get_alias_1 = require("../member-formatters/get-alias");
|
|
|
10
10
|
const base_ast_1 = require("../utils/base-ast");
|
|
11
11
|
const cube_filter_enrichment_1 = require("../utils/cube-filter-enrichment");
|
|
12
12
|
const modify_meerkat_filter_1 = require("../utils/modify-meerkat-filter");
|
|
13
|
-
const formatFilters = (queryFiltersWithInfo, filterType) => {
|
|
13
|
+
const formatFilters = (queryFiltersWithInfo, filterType, config) => {
|
|
14
14
|
/*
|
|
15
15
|
* If the type of filter is set to base filter where
|
|
16
16
|
*/
|
|
17
17
|
return filterType === 'BASE_FILTER'
|
|
18
18
|
? queryFiltersWithInfo
|
|
19
19
|
: (0, modify_meerkat_filter_1.modifyLeafMeerkatFilter)(queryFiltersWithInfo, (item) => {
|
|
20
|
-
return Object.assign(Object.assign({}, item), { member: (0, get_alias_1.
|
|
21
|
-
name: item.member,
|
|
22
|
-
alias: item.memberInfo.alias,
|
|
23
|
-
aliasContext: {
|
|
24
|
-
isAstIdentifier: true,
|
|
25
|
-
},
|
|
26
|
-
}) });
|
|
20
|
+
return Object.assign(Object.assign({}, item), { member: (0, get_alias_1.constructAliasForAST)(item.member, item.memberInfo.alias, config) });
|
|
27
21
|
});
|
|
28
22
|
};
|
|
29
|
-
const getFormattedFilters = ({ queryFiltersWithInfo, filterType, mapperFn, baseAST, }) => {
|
|
23
|
+
const getFormattedFilters = ({ queryFiltersWithInfo, filterType, mapperFn, baseAST, config, }) => {
|
|
30
24
|
const filters = queryFiltersWithInfo
|
|
31
25
|
.map((item) => mapperFn(item))
|
|
32
26
|
.filter(Boolean);
|
|
33
|
-
const formattedFilters = formatFilters(filters, filterType);
|
|
34
|
-
|
|
27
|
+
const formattedFilters = formatFilters(filters, filterType, config);
|
|
28
|
+
// When it's a projection filter (not BASE_FILTER), we reference projected aliases.
|
|
29
|
+
// When it's a BASE_FILTER, we reference table.column directly.
|
|
30
|
+
const isProjectionFilter = filterType !== 'BASE_FILTER';
|
|
31
|
+
const columnRefOptions = {
|
|
32
|
+
isAlias: isProjectionFilter,
|
|
33
|
+
useDotNotation: config.useDotNotation,
|
|
34
|
+
};
|
|
35
|
+
return (0, factory_1.cubeFilterToDuckdbAST)(formattedFilters, baseAST, columnRefOptions);
|
|
35
36
|
};
|
|
36
37
|
const cubeToDuckdbAST = (query, tableSchema, options) => {
|
|
37
38
|
var _a;
|
|
@@ -55,13 +56,15 @@ const cubeToDuckdbAST = (query, tableSchema, options) => {
|
|
|
55
56
|
baseAST,
|
|
56
57
|
mapperFn: (item) => (0, filter_params_ast_1.traverseAndFilter)(item, (value) => !query.measures.includes(value.member)),
|
|
57
58
|
queryFiltersWithInfo,
|
|
58
|
-
filterType: options
|
|
59
|
+
filterType: options.filterType,
|
|
60
|
+
config: options.config,
|
|
59
61
|
});
|
|
60
62
|
const havingClause = getFormattedFilters({
|
|
61
63
|
baseAST,
|
|
62
64
|
mapperFn: (item) => (0, filter_params_ast_1.traverseAndFilter)(item, (value) => query.measures.includes(value.member)),
|
|
63
65
|
queryFiltersWithInfo,
|
|
64
|
-
filterType: options
|
|
66
|
+
filterType: options.filterType,
|
|
67
|
+
config: options.config,
|
|
65
68
|
});
|
|
66
69
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
67
70
|
//@ts-ignore
|
|
@@ -71,7 +74,7 @@ const cubeToDuckdbAST = (query, tableSchema, options) => {
|
|
|
71
74
|
if (query.measures.length &&
|
|
72
75
|
query.dimensions &&
|
|
73
76
|
((_a = query.dimensions) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
74
|
-
node.group_expressions = (0, cube_group_by_transformer_1.cubeDimensionToGroupByAST)(query.dimensions, tableSchema);
|
|
77
|
+
node.group_expressions = (0, cube_group_by_transformer_1.cubeDimensionToGroupByAST)(query.dimensions, tableSchema, options.config);
|
|
75
78
|
const groupSets = [];
|
|
76
79
|
/**
|
|
77
80
|
* We only support one group set for now.
|
|
@@ -83,7 +86,7 @@ const cubeToDuckdbAST = (query, tableSchema, options) => {
|
|
|
83
86
|
}
|
|
84
87
|
node.modifiers = [];
|
|
85
88
|
if (query.order && Object.keys(query.order).length > 0) {
|
|
86
|
-
node.modifiers.push((0, cube_order_by_transformer_1.cubeOrderByToAST)(query.order, tableSchema));
|
|
89
|
+
node.modifiers.push((0, cube_order_by_transformer_1.cubeOrderByToAST)(query.order, tableSchema, options.config));
|
|
87
90
|
}
|
|
88
91
|
if (query.limit || query.offset) {
|
|
89
92
|
// Type assertion is needed here because the AST is not typed correctly.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-builder.js","sourceRoot":"","sources":["../../../../meerkat-core/src/ast-builder/ast-builder.ts"],"names":[],"mappings":";;;AAAA,gEAA2E;AAC3E,sGAAmG;AACnG,kHAAsG;AACtG,sGAA0F;AAK1F,0EAAuE;AACvE,
|
|
1
|
+
{"version":3,"file":"ast-builder.js","sourceRoot":"","sources":["../../../../meerkat-core/src/ast-builder/ast-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,42 @@
|
|
|
1
1
|
import { Dimension, Measure } from '../../types/cube-types/index';
|
|
2
|
-
import { ExpressionClass, ExpressionType, QueryNodeType, SubqueryType } from '../../types/duckdb-serialization-types/index';
|
|
3
|
-
|
|
2
|
+
import { ExpressionClass, ExpressionType, ParsedExpression, QueryNodeType, SubqueryType } from '../../types/duckdb-serialization-types/index';
|
|
3
|
+
/**
|
|
4
|
+
* Options for creating a column reference.
|
|
5
|
+
*/
|
|
6
|
+
export interface CreateColumnRefOptions {
|
|
7
|
+
/**
|
|
8
|
+
* When true, the columnName is an alias (e.g., "orders.customer_id" as a single column name).
|
|
9
|
+
* When false, the columnName is a table.column reference to be split.
|
|
10
|
+
*/
|
|
11
|
+
isAlias: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Creates a column reference AST node.
|
|
15
|
+
*
|
|
16
|
+
* @param columnName - The column name or member key
|
|
17
|
+
* @param options - Configuration options
|
|
18
|
+
* @returns A column reference expression for DuckDB AST
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* // Base table reference (isAlias: false)
|
|
23
|
+
* createColumnRef("orders.customer_id") // column_names: ["orders", "customer_id"]
|
|
24
|
+
*
|
|
25
|
+
* // Alias reference (isAlias: true, useDotNotation: true)
|
|
26
|
+
* createColumnRef("orders.customer_id", { isAlias: true, useDotNotation: true })
|
|
27
|
+
* // column_names: ["orders.customer_id"]
|
|
28
|
+
*
|
|
29
|
+
* // Alias reference (isAlias: true, useDotNotation: false - legacy)
|
|
30
|
+
* createColumnRef("orders__customer_id", { isAlias: true })
|
|
31
|
+
* // column_names: ["orders__customer_id"]
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare const createColumnRef: (columnName: string, options: CreateColumnRefOptions) => ParsedExpression;
|
|
35
|
+
export declare const baseDuckdbCondition: (columnName: string, type: ExpressionType, value: string, memberInfo: Measure | Dimension, options: CreateColumnRefOptions) => {
|
|
4
36
|
class: ExpressionClass;
|
|
5
37
|
type: ExpressionType;
|
|
6
38
|
alias: string;
|
|
7
|
-
left:
|
|
8
|
-
class: ExpressionClass;
|
|
9
|
-
type: ExpressionType;
|
|
10
|
-
alias: string;
|
|
11
|
-
column_names: string[];
|
|
12
|
-
};
|
|
39
|
+
left: ParsedExpression;
|
|
13
40
|
right: {
|
|
14
41
|
class: ExpressionClass;
|
|
15
42
|
type: ExpressionType;
|
|
@@ -43,7 +70,7 @@ export declare const baseDuckdbCondition: (columnName: string, type: ExpressionT
|
|
|
43
70
|
};
|
|
44
71
|
};
|
|
45
72
|
};
|
|
46
|
-
export declare const baseArrayDuckdbCondition: (columnName: string, type: ExpressionType, value: string, memberInfo: Measure | Dimension) => {
|
|
73
|
+
export declare const baseArrayDuckdbCondition: (columnName: string, type: ExpressionType, value: string, memberInfo: Measure | Dimension, options: CreateColumnRefOptions) => {
|
|
47
74
|
class: ExpressionClass;
|
|
48
75
|
type: ExpressionType;
|
|
49
76
|
alias: string;
|
|
@@ -61,12 +88,7 @@ export declare const baseArrayDuckdbCondition: (columnName: string, type: Expres
|
|
|
61
88
|
alias: string;
|
|
62
89
|
function_name: string;
|
|
63
90
|
schema: string;
|
|
64
|
-
children:
|
|
65
|
-
class: ExpressionClass;
|
|
66
|
-
type: ExpressionType;
|
|
67
|
-
alias: string;
|
|
68
|
-
column_names: string[];
|
|
69
|
-
}[];
|
|
91
|
+
children: ParsedExpression[];
|
|
70
92
|
filter: null;
|
|
71
93
|
order_bys: {
|
|
72
94
|
type: string;
|
|
@@ -1,22 +1,58 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.valueBuilder = exports.baseArrayDuckdbCondition = exports.baseDuckdbCondition = void 0;
|
|
3
|
+
exports.valueBuilder = exports.baseArrayDuckdbCondition = exports.baseDuckdbCondition = exports.createColumnRef = void 0;
|
|
4
4
|
const constants_1 = require("../../member-formatters/constants");
|
|
5
5
|
const sanitize_value_1 = require("../../member-formatters/sanitize-value");
|
|
6
6
|
const index_1 = require("../../types/duckdb-serialization-types/index");
|
|
7
7
|
const cube_type_to_duckdb_type_1 = require("../../utils/cube-type-to-duckdb-type");
|
|
8
8
|
const get_type_info_1 = require("../../utils/get-type-info");
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Creates a column reference AST node.
|
|
11
|
+
*
|
|
12
|
+
* @param columnName - The column name or member key
|
|
13
|
+
* @param options - Configuration options
|
|
14
|
+
* @returns A column reference expression for DuckDB AST
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* // Base table reference (isAlias: false)
|
|
19
|
+
* createColumnRef("orders.customer_id") // column_names: ["orders", "customer_id"]
|
|
20
|
+
*
|
|
21
|
+
* // Alias reference (isAlias: true, useDotNotation: true)
|
|
22
|
+
* createColumnRef("orders.customer_id", { isAlias: true, useDotNotation: true })
|
|
23
|
+
* // column_names: ["orders.customer_id"]
|
|
24
|
+
*
|
|
25
|
+
* // Alias reference (isAlias: true, useDotNotation: false - legacy)
|
|
26
|
+
* createColumnRef("orders__customer_id", { isAlias: true })
|
|
27
|
+
* // column_names: ["orders__customer_id"]
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
const createColumnRef = (columnName, options) => {
|
|
31
|
+
let columnNames;
|
|
32
|
+
if (options.isAlias) {
|
|
33
|
+
// When it's an alias, don't split - use as single column name
|
|
34
|
+
// This is used for PROJECTION_FILTER where we reference projected aliases
|
|
35
|
+
columnNames = [columnName];
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// When it's a base table reference, split by delimiter
|
|
39
|
+
// This is used for BASE_FILTER where we reference table.column
|
|
40
|
+
columnNames = columnName.split(constants_1.COLUMN_NAME_DELIMITER);
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
class: index_1.ExpressionClass.COLUMN_REF,
|
|
44
|
+
type: index_1.ExpressionType.COLUMN_REF,
|
|
45
|
+
alias: '',
|
|
46
|
+
column_names: columnNames,
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
exports.createColumnRef = createColumnRef;
|
|
50
|
+
const baseDuckdbCondition = (columnName, type, value, memberInfo, options) => {
|
|
10
51
|
return {
|
|
11
52
|
class: index_1.ExpressionClass.COMPARISON,
|
|
12
53
|
type: type,
|
|
13
54
|
alias: '',
|
|
14
|
-
left:
|
|
15
|
-
class: index_1.ExpressionClass.COLUMN_REF,
|
|
16
|
-
type: index_1.ExpressionType.COLUMN_REF,
|
|
17
|
-
alias: '',
|
|
18
|
-
column_names: columnName.split(constants_1.COLUMN_NAME_DELIMITER),
|
|
19
|
-
},
|
|
55
|
+
left: (0, exports.createColumnRef)(columnName, options),
|
|
20
56
|
right: {
|
|
21
57
|
class: index_1.ExpressionClass.CONSTANT,
|
|
22
58
|
type: index_1.ExpressionType.VALUE_CONSTANT,
|
|
@@ -26,7 +62,7 @@ const baseDuckdbCondition = (columnName, type, value, memberInfo) => {
|
|
|
26
62
|
};
|
|
27
63
|
};
|
|
28
64
|
exports.baseDuckdbCondition = baseDuckdbCondition;
|
|
29
|
-
const baseArrayDuckdbCondition = (columnName, type, value, memberInfo) => {
|
|
65
|
+
const baseArrayDuckdbCondition = (columnName, type, value, memberInfo, options) => {
|
|
30
66
|
return {
|
|
31
67
|
class: index_1.ExpressionClass.SUBQUERY,
|
|
32
68
|
type: index_1.ExpressionType.SUBQUERY,
|
|
@@ -47,12 +83,9 @@ const baseArrayDuckdbCondition = (columnName, type, value, memberInfo) => {
|
|
|
47
83
|
function_name: 'unnest',
|
|
48
84
|
schema: '',
|
|
49
85
|
children: [
|
|
50
|
-
{
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
alias: '',
|
|
54
|
-
column_names: columnName.split(constants_1.COLUMN_NAME_DELIMITER),
|
|
55
|
-
},
|
|
86
|
+
(0, exports.createColumnRef)(columnName, {
|
|
87
|
+
isAlias: options.isAlias,
|
|
88
|
+
}),
|
|
56
89
|
],
|
|
57
90
|
filter: null,
|
|
58
91
|
order_bys: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-condition-builder.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/cube-filter-transformer/base-condition-builder/base-condition-builder.ts"],"names":[],"mappings":";;;AAEA,iEAA0E;AAC1E,2EAA6E;AAC7E,
|
|
1
|
+
{"version":3,"file":"base-condition-builder.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/cube-filter-transformer/base-condition-builder/base-condition-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
import { Dimension, Measure } from '../../types/cube-types/table';
|
|
2
2
|
import { ExpressionClass, ExpressionType } from '../../types/duckdb-serialization-types/serialization/Expression';
|
|
3
|
+
import { CreateColumnRefOptions } from '../base-condition-builder/base-condition-builder';
|
|
3
4
|
import { CubeToParseExpressionTransform } from '../factory';
|
|
4
|
-
export declare const containsDuckdbCondition: (columnName: string, value: string, memberInfo: Measure | Dimension) => {
|
|
5
|
+
export declare const containsDuckdbCondition: (columnName: string, value: string, memberInfo: Measure | Dimension, options: CreateColumnRefOptions) => {
|
|
5
6
|
class: ExpressionClass;
|
|
6
7
|
type: ExpressionType;
|
|
7
8
|
alias: string;
|
|
8
9
|
function_name: string;
|
|
9
10
|
schema: string;
|
|
10
|
-
children: ({
|
|
11
|
-
class: string;
|
|
12
|
-
type: string;
|
|
13
|
-
alias: string;
|
|
14
|
-
column_names: string[];
|
|
15
|
-
value?: undefined;
|
|
16
|
-
} | {
|
|
11
|
+
children: (import("../..").BaseParsedExpression | {
|
|
17
12
|
class: string;
|
|
18
13
|
type: string;
|
|
19
14
|
alias: string;
|
|
@@ -44,7 +39,6 @@ export declare const containsDuckdbCondition: (columnName: string, value: string
|
|
|
44
39
|
is_null: boolean;
|
|
45
40
|
value: boolean;
|
|
46
41
|
};
|
|
47
|
-
column_names?: undefined;
|
|
48
42
|
})[];
|
|
49
43
|
filter: null;
|
|
50
44
|
order_bys: {
|
|
@@ -2,12 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.containsTransform = exports.containsDuckdbCondition = void 0;
|
|
4
4
|
const cube_filter_to_duckdb_1 = require("../../cube-to-duckdb/cube-filter-to-duckdb");
|
|
5
|
-
const constants_1 = require("../../member-formatters/constants");
|
|
6
5
|
const Expression_1 = require("../../types/duckdb-serialization-types/serialization/Expression");
|
|
7
6
|
const base_condition_builder_1 = require("../base-condition-builder/base-condition-builder");
|
|
8
7
|
const or_1 = require("../or/or");
|
|
9
8
|
const sql_expression_parser_1 = require("../sql-expression/sql-expression-parser");
|
|
10
|
-
const containsDuckdbCondition = (columnName, value, memberInfo) => {
|
|
9
|
+
const containsDuckdbCondition = (columnName, value, memberInfo, options) => {
|
|
11
10
|
return {
|
|
12
11
|
class: Expression_1.ExpressionClass.FUNCTION,
|
|
13
12
|
type: Expression_1.ExpressionType.FUNCTION,
|
|
@@ -15,12 +14,9 @@ const containsDuckdbCondition = (columnName, value, memberInfo) => {
|
|
|
15
14
|
function_name: '~~*',
|
|
16
15
|
schema: '',
|
|
17
16
|
children: [
|
|
18
|
-
{
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
alias: '',
|
|
22
|
-
column_names: columnName.split(constants_1.COLUMN_NAME_DELIMITER),
|
|
23
|
-
},
|
|
17
|
+
(0, base_condition_builder_1.createColumnRef)(columnName, {
|
|
18
|
+
isAlias: options.isAlias,
|
|
19
|
+
}),
|
|
24
20
|
{
|
|
25
21
|
class: 'CONSTANT',
|
|
26
22
|
type: 'VALUE_CONSTANT',
|
|
@@ -40,11 +36,11 @@ const containsDuckdbCondition = (columnName, value, memberInfo) => {
|
|
|
40
36
|
};
|
|
41
37
|
};
|
|
42
38
|
exports.containsDuckdbCondition = containsDuckdbCondition;
|
|
43
|
-
const containsTransform = (query) => {
|
|
39
|
+
const containsTransform = (query, options) => {
|
|
44
40
|
const { member, memberInfo } = query;
|
|
45
41
|
// SQL expressions not supported for contains operator
|
|
46
42
|
if ((0, cube_filter_to_duckdb_1.isQueryOperatorsWithSQLInfo)(query)) {
|
|
47
|
-
return (0, sql_expression_parser_1.getSQLExpressionAST)(member, query.sqlExpression, 'contains');
|
|
43
|
+
return (0, sql_expression_parser_1.getSQLExpressionAST)(member, query.sqlExpression, 'contains', options);
|
|
48
44
|
}
|
|
49
45
|
// Otherwise, use values
|
|
50
46
|
if (!query.values || query.values.length === 0) {
|
|
@@ -55,14 +51,14 @@ const containsTransform = (query) => {
|
|
|
55
51
|
* If there is only one value, we can create a simple Contains condition
|
|
56
52
|
*/
|
|
57
53
|
if (values.length === 1) {
|
|
58
|
-
return (0, exports.containsDuckdbCondition)(member, values[0], memberInfo);
|
|
54
|
+
return (0, exports.containsDuckdbCondition)(member, values[0], memberInfo, options);
|
|
59
55
|
}
|
|
60
56
|
/**
|
|
61
57
|
* If there are multiple values, we need to create an OR condition
|
|
62
58
|
*/
|
|
63
59
|
const orCondition = (0, or_1.orDuckdbCondition)();
|
|
64
60
|
values.forEach((value) => {
|
|
65
|
-
orCondition.children.push((0, exports.containsDuckdbCondition)(member, value, memberInfo));
|
|
61
|
+
orCondition.children.push((0, exports.containsDuckdbCondition)(member, value, memberInfo, options));
|
|
66
62
|
});
|
|
67
63
|
return orCondition;
|
|
68
64
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contains.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/cube-filter-transformer/contains/contains.ts"],"names":[],"mappings":";;;AAAA,sFAAyF;AAGzF,
|
|
1
|
+
{"version":3,"file":"contains.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/cube-filter-transformer/contains/contains.ts"],"names":[],"mappings":";;;AAAA,sFAAyF;AAGzF,gGAGyE;AACzE,6FAI0D;AAE1D,iCAA6C;AAC7C,mFAA8E;AAEvE,MAAM,uBAAuB,GAAG,CACrC,UAAkB,EAClB,KAAa,EACb,UAA+B,EAC/B,OAA+B,EAC/B,EAAE;IACF,OAAO;QACL,KAAK,EAAE,4BAAe,CAAC,QAAQ;QAC/B,IAAI,EAAE,2BAAc,CAAC,QAAQ;QAC7B,KAAK,EAAE,EAAE;QACT,aAAa,EAAE,KAAK;QACpB,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE;YACR,IAAA,wCAAe,EAAC,UAAU,EAAE;gBAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC;YACF;gBACE,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,IAAA,qCAAY,EAAC,IAAI,KAAK,GAAG,EAAE,UAAU,CAAC;aAC9C;SACF;QACD,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE;YACT,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,EAAE;SACX;QACD,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,KAAK;QACnB,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC,CAAC;AAjCW,QAAA,uBAAuB,2BAiClC;AAEK,MAAM,iBAAiB,GAAmC,CAC/D,KAAK,EACL,OAAO,EACP,EAAE;IACF,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAErC,sDAAsD;IACtD,IAAI,IAAA,mDAA2B,EAAC,KAAK,CAAC,EAAE;QACtC,OAAO,IAAA,2CAAmB,EACxB,MAAM,EACN,KAAK,CAAC,aAAa,EACnB,UAAU,EACV,OAAO,CACR,CAAC;KACH;IAED,wBAAwB;IACxB,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9C,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;KACjE;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B;;OAEG;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,OAAO,IAAA,+BAAuB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;KACxE;IAED;;OAEG;IACH,MAAM,WAAW,GAAG,IAAA,sBAAiB,GAAE,CAAC;IACxC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,WAAW,CAAC,QAAQ,CAAC,IAAI,CACvB,IAAA,+BAAuB,EAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAC5D,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAxCW,QAAA,iBAAiB,qBAwC5B"}
|
|
@@ -2,18 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.equalsArrayTransform = void 0;
|
|
4
4
|
const cube_filter_to_duckdb_1 = require("../../cube-to-duckdb/cube-filter-to-duckdb");
|
|
5
|
-
const constants_1 = require("../../member-formatters/constants");
|
|
6
5
|
const Expression_1 = require("../../types/duckdb-serialization-types/serialization/Expression");
|
|
7
6
|
const ResultModifier_1 = require("../../types/duckdb-serialization-types/serialization/ResultModifier");
|
|
8
7
|
const base_condition_builder_1 = require("../base-condition-builder/base-condition-builder");
|
|
9
8
|
const sql_expression_parser_1 = require("../sql-expression/sql-expression-parser");
|
|
10
|
-
const equalsDuckDbCondition = (columnName, values, memberInfo) => {
|
|
11
|
-
const columnRef = {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
alias: '',
|
|
15
|
-
column_names: columnName.split(constants_1.COLUMN_NAME_DELIMITER),
|
|
16
|
-
};
|
|
9
|
+
const equalsDuckDbCondition = (columnName, values, memberInfo, options) => {
|
|
10
|
+
const columnRef = (0, base_condition_builder_1.createColumnRef)(columnName, {
|
|
11
|
+
isAlias: options.isAlias,
|
|
12
|
+
});
|
|
17
13
|
const sqlTreeValues = values.map((value) => {
|
|
18
14
|
const children = {
|
|
19
15
|
class: Expression_1.ExpressionClass.CONSTANT,
|
|
@@ -59,11 +55,11 @@ const equalsDuckDbCondition = (columnName, values, memberInfo) => {
|
|
|
59
55
|
};
|
|
60
56
|
return sqlTree;
|
|
61
57
|
};
|
|
62
|
-
const equalsArrayTransform = (query) => {
|
|
58
|
+
const equalsArrayTransform = (query, options) => {
|
|
63
59
|
const { member, memberInfo } = query;
|
|
64
60
|
// SQL expressions not supported for equals operator
|
|
65
61
|
if ((0, cube_filter_to_duckdb_1.isQueryOperatorsWithSQLInfo)(query)) {
|
|
66
|
-
return (0, sql_expression_parser_1.getSQLExpressionAST)(member, query.sqlExpression, 'equals');
|
|
62
|
+
return (0, sql_expression_parser_1.getSQLExpressionAST)(member, query.sqlExpression, 'equals', options);
|
|
67
63
|
}
|
|
68
64
|
/**
|
|
69
65
|
* If there is only one value, we can create a simple equals condition
|
|
@@ -71,7 +67,7 @@ const equalsArrayTransform = (query) => {
|
|
|
71
67
|
if (!query.values) {
|
|
72
68
|
throw new Error('In filter must have at least one value');
|
|
73
69
|
}
|
|
74
|
-
return equalsDuckDbCondition(member, query.values, memberInfo);
|
|
70
|
+
return equalsDuckDbCondition(member, query.values, memberInfo, options);
|
|
75
71
|
};
|
|
76
72
|
exports.equalsArrayTransform = equalsArrayTransform;
|
|
77
73
|
//# sourceMappingURL=equals-array.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"equals-array.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/cube-filter-transformer/equals/equals-array.ts"],"names":[],"mappings":";;;AAAA,sFAAyF;
|
|
1
|
+
{"version":3,"file":"equals-array.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/cube-filter-transformer/equals/equals-array.ts"],"names":[],"mappings":";;;AAAA,sFAAyF;AAEzF,gGAGyE;AACzE,wGAAyG;AACzG,6FAI0D;AAE1D,mFAA8E;AAE9E,MAAM,qBAAqB,GAAG,CAC5B,UAAkB,EAClB,MAAgB,EAChB,UAA+B,EAC/B,OAA+B,EAC/B,EAAE;IACF,MAAM,SAAS,GAAG,IAAA,wCAAe,EAAC,UAAU,EAAE;QAC5C,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACzC,MAAM,QAAQ,GAAG;YACf,KAAK,EAAE,4BAAe,CAAC,QAAQ;YAC/B,IAAI,EAAE,2BAAc,CAAC,cAAc;YACnC,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,IAAA,qCAAY,EAAC,KAAK,EAAE,UAAU,CAAC;SACvC,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG;QACxB,KAAK,EAAE,4BAAe,CAAC,QAAQ;QAC/B,IAAI,EAAE,2BAAc,CAAC,QAAQ;QAC7B,KAAK,EAAE,EAAE;QACT,aAAa,EAAE,YAAY;QAC3B,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,aAAa;QACvB,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE;YACT,IAAI,EAAE,mCAAkB,CAAC,cAAc;YACvC,MAAM,EAAE,EAAE;SACX;QACD,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK;QAClB,YAAY,EAAE,KAAK;QACnB,OAAO,EAAE,EAAE;KACZ,CAAC;IAEF,MAAM,OAAO,GAAG;QACd,KAAK,EAAE,4BAAe,CAAC,QAAQ;QAC/B,IAAI,EAAE,2BAAc,CAAC,QAAQ;QAC7B,KAAK,EAAE,EAAE;QACT,aAAa,EAAE,cAAc;QAC7B,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,CAAC,SAAS,EAAE,iBAAiB,CAAC;QACxC,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE;YACT,IAAI,EAAE,mCAAkB,CAAC,cAAc;YACvC,MAAM,EAAE,EAAE;SACX;QACD,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK;QAClB,YAAY,EAAE,KAAK;QACnB,OAAO,EAAE,EAAE;KACZ,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEK,MAAM,oBAAoB,GAAmC,CAClE,KAAK,EACL,OAAO,EACP,EAAE;IACF,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAErC,oDAAoD;IACpD,IAAI,IAAA,mDAA2B,EAAC,KAAK,CAAC,EAAE;QACtC,OAAO,IAAA,2CAAmB,EAAC,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;KAC5E;IAED;;OAEG;IACH,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;KAC3D;IACD,OAAO,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC,CAAC;AAlBW,QAAA,oBAAoB,wBAkB/B"}
|
|
@@ -8,18 +8,18 @@ const and_1 = require("../and/and");
|
|
|
8
8
|
const base_condition_builder_1 = require("../base-condition-builder/base-condition-builder");
|
|
9
9
|
const sql_expression_parser_1 = require("../sql-expression/sql-expression-parser");
|
|
10
10
|
const equals_array_1 = require("./equals-array");
|
|
11
|
-
const equalsTransform = (query) => {
|
|
11
|
+
const equalsTransform = (query, options) => {
|
|
12
12
|
const { member, memberInfo } = query;
|
|
13
13
|
// SQL expressions not supported for equals operator
|
|
14
14
|
if ((0, cube_filter_to_duckdb_1.isQueryOperatorsWithSQLInfo)(query)) {
|
|
15
|
-
return (0, sql_expression_parser_1.getSQLExpressionAST)(member, query.sqlExpression, 'equals');
|
|
15
|
+
return (0, sql_expression_parser_1.getSQLExpressionAST)(member, query.sqlExpression, 'equals', options);
|
|
16
16
|
}
|
|
17
17
|
const values = query.values;
|
|
18
18
|
/**
|
|
19
19
|
* If the member is an array, we need to use the array transform
|
|
20
20
|
*/
|
|
21
21
|
if ((0, is_array_member_type_1.isArrayTypeMember)(memberInfo.type)) {
|
|
22
|
-
return (0, equals_array_1.equalsArrayTransform)(query);
|
|
22
|
+
return (0, equals_array_1.equalsArrayTransform)(query, options);
|
|
23
23
|
}
|
|
24
24
|
if (!values || values.length === 0) {
|
|
25
25
|
throw new Error('Equals filter must have at least one value');
|
|
@@ -28,14 +28,14 @@ const equalsTransform = (query) => {
|
|
|
28
28
|
* If there is only one value, we can create a simple equals condition
|
|
29
29
|
*/
|
|
30
30
|
if (values.length === 1) {
|
|
31
|
-
return (0, base_condition_builder_1.baseDuckdbCondition)(member, Expression_1.ExpressionType.COMPARE_EQUAL, values[0], query.memberInfo);
|
|
31
|
+
return (0, base_condition_builder_1.baseDuckdbCondition)(member, Expression_1.ExpressionType.COMPARE_EQUAL, values[0], query.memberInfo, options);
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
34
|
* If there are multiple values, we need to create an AND condition
|
|
35
35
|
*/
|
|
36
36
|
const andCondition = (0, and_1.andDuckdbCondition)();
|
|
37
37
|
values.forEach((value) => {
|
|
38
|
-
andCondition.children.push((0, base_condition_builder_1.baseDuckdbCondition)(member, Expression_1.ExpressionType.COMPARE_EQUAL, value, query.memberInfo));
|
|
38
|
+
andCondition.children.push((0, base_condition_builder_1.baseDuckdbCondition)(member, Expression_1.ExpressionType.COMPARE_EQUAL, value, query.memberInfo, options));
|
|
39
39
|
});
|
|
40
40
|
return andCondition;
|
|
41
41
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"equals.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/cube-filter-transformer/equals/equals.ts"],"names":[],"mappings":";;;AAAA,sFAAyF;AACzF,gGAAiG;AACjG,2EAAqE;AACrE,oCAAgD;AAChD,6FAAuF;AAEvF,mFAA8E;AAC9E,iDAAsD;AAE/C,MAAM,eAAe,GAAmC,
|
|
1
|
+
{"version":3,"file":"equals.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/cube-filter-transformer/equals/equals.ts"],"names":[],"mappings":";;;AAAA,sFAAyF;AACzF,gGAAiG;AACjG,2EAAqE;AACrE,oCAAgD;AAChD,6FAAuF;AAEvF,mFAA8E;AAC9E,iDAAsD;AAE/C,MAAM,eAAe,GAAmC,CAC7D,KAAK,EACL,OAAO,EACP,EAAE;IACF,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAErC,oDAAoD;IACpD,IAAI,IAAA,mDAA2B,EAAC,KAAK,CAAC,EAAE;QACtC,OAAO,IAAA,2CAAmB,EAAC,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;KAC5E;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B;;OAEG;IACH,IAAI,IAAA,wCAAiB,EAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACtC,OAAO,IAAA,mCAAoB,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC;KAC7C;IACD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QAClC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;KAC/D;IACD;;OAEG;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,OAAO,IAAA,4CAAmB,EACxB,MAAM,EACN,2BAAc,CAAC,aAAa,EAC5B,MAAM,CAAC,CAAC,CAAC,EACT,KAAK,CAAC,UAAU,EAChB,OAAO,CACR,CAAC;KACH;IAED;;OAEG;IACH,MAAM,YAAY,GAAG,IAAA,wBAAkB,GAAE,CAAC;IAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,YAAY,CAAC,QAAQ,CAAC,IAAI,CACxB,IAAA,4CAAmB,EACjB,MAAM,EACN,2BAAc,CAAC,aAAa,EAC5B,KAAK,EACL,KAAK,CAAC,UAAU,EAChB,OAAO,CACR,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAnDW,QAAA,eAAe,mBAmD1B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { QueryFiltersWithInfo, QueryOperatorsWithInfo } from '../cube-to-duckdb/cube-filter-to-duckdb';
|
|
2
2
|
import { ParsedExpression } from '../types/duckdb-serialization-types/serialization/ParsedExpression';
|
|
3
3
|
import { SelectStatement } from '../types/duckdb-serialization-types/serialization/Statement';
|
|
4
|
-
|
|
5
|
-
export
|
|
4
|
+
import { CreateColumnRefOptions } from './base-condition-builder/base-condition-builder';
|
|
5
|
+
export type CubeToParseExpressionTransform = (query: QueryOperatorsWithInfo, options: CreateColumnRefOptions) => ParsedExpression;
|
|
6
|
+
export declare const cubeFilterToDuckdbAST: (cubeFilter: QueryFiltersWithInfo, ast: SelectStatement, options: CreateColumnRefOptions) => ParsedExpression | null;
|