@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
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Query } from '../../types/cube-types/query';
|
|
2
|
+
import { ContextParams, TableSchema } from '../../types/cube-types/table';
|
|
3
|
+
import { ResolutionConfig } from '../types';
|
|
4
|
+
export interface ApplyAliasesParams {
|
|
5
|
+
aggregatedTableSchema: TableSchema;
|
|
6
|
+
originalTableSchemas: TableSchema[];
|
|
7
|
+
resolutionConfig: ResolutionConfig;
|
|
8
|
+
contextParams?: ContextParams;
|
|
9
|
+
cubeQueryToSQL: (params: {
|
|
10
|
+
query: Query;
|
|
11
|
+
tableSchemas: TableSchema[];
|
|
12
|
+
contextParams?: ContextParams;
|
|
13
|
+
}) => Promise<string>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Restores aliases from the original table schemas to the aggregated schema
|
|
17
|
+
* and generates the final SQL with proper column names.
|
|
18
|
+
*
|
|
19
|
+
* This step:
|
|
20
|
+
* 1. Creates an alias map from the original table schemas
|
|
21
|
+
* 2. Handles resolution column configs to determine proper aliases
|
|
22
|
+
* - For single resolution columns: uses the original alias
|
|
23
|
+
* - For multiple resolution columns: creates compound aliases (e.g., "Owners - Display Name")
|
|
24
|
+
* 3. Creates a new schema with restored aliases
|
|
25
|
+
* 4. Generates final SQL with proper aliases
|
|
26
|
+
*
|
|
27
|
+
* @param aggregatedTableSchema - The aggregated table schema from the aggregation step
|
|
28
|
+
* @param originalTableSchemas - The original table schemas with aliases
|
|
29
|
+
* @param resolutionConfig - Resolution configuration
|
|
30
|
+
* @param contextParams - Optional context parameters
|
|
31
|
+
* @param cubeQueryToSQL - Function to generate SQL from query and table schemas
|
|
32
|
+
* @returns Final SQL string with aliases
|
|
33
|
+
*/
|
|
34
|
+
export declare const applyAliases: ({ aggregatedTableSchema, originalTableSchemas, resolutionConfig, contextParams, cubeQueryToSQL, }: ApplyAliasesParams) => Promise<string>;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyAliases = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const get_alias_1 = require("../../member-formatters/get-alias");
|
|
6
|
+
const get_namespaced_key_1 = require("../../member-formatters/get-namespaced-key");
|
|
7
|
+
const member_key_to_safe_key_1 = require("../../member-formatters/member-key-to-safe-key");
|
|
8
|
+
/**
|
|
9
|
+
* Restores aliases from the original table schemas to the aggregated schema
|
|
10
|
+
* and generates the final SQL with proper column names.
|
|
11
|
+
*
|
|
12
|
+
* This step:
|
|
13
|
+
* 1. Creates an alias map from the original table schemas
|
|
14
|
+
* 2. Handles resolution column configs to determine proper aliases
|
|
15
|
+
* - For single resolution columns: uses the original alias
|
|
16
|
+
* - For multiple resolution columns: creates compound aliases (e.g., "Owners - Display Name")
|
|
17
|
+
* 3. Creates a new schema with restored aliases
|
|
18
|
+
* 4. Generates final SQL with proper aliases
|
|
19
|
+
*
|
|
20
|
+
* @param aggregatedTableSchema - The aggregated table schema from the aggregation step
|
|
21
|
+
* @param originalTableSchemas - The original table schemas with aliases
|
|
22
|
+
* @param resolutionConfig - Resolution configuration
|
|
23
|
+
* @param contextParams - Optional context parameters
|
|
24
|
+
* @param cubeQueryToSQL - Function to generate SQL from query and table schemas
|
|
25
|
+
* @returns Final SQL string with aliases
|
|
26
|
+
*/
|
|
27
|
+
const applyAliases = ({ aggregatedTableSchema, originalTableSchemas, resolutionConfig, contextParams, cubeQueryToSQL, }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
28
|
+
var _a;
|
|
29
|
+
// Restore aliases from original tableSchemas to get nice column names in final output
|
|
30
|
+
// Create a map of schemaName__fieldName -> alias from original schemas
|
|
31
|
+
const aliasMap = new Map();
|
|
32
|
+
const columnConfigMap = new Map(((_a = resolutionConfig.columnConfigs) === null || _a === void 0 ? void 0 : _a.map((colConfig) => [
|
|
33
|
+
colConfig.name,
|
|
34
|
+
colConfig,
|
|
35
|
+
])) || []);
|
|
36
|
+
const tableSchemaMap = new Map(resolutionConfig.tableSchemas.map((schema) => [schema.name, schema]));
|
|
37
|
+
const safeKeyOptions = { useDotNotation: false };
|
|
38
|
+
// Helper function to process dimensions or measures and populate the alias map
|
|
39
|
+
const processMembers = (members, schemaName) => {
|
|
40
|
+
members.forEach((member) => {
|
|
41
|
+
var _a;
|
|
42
|
+
if (!member.alias)
|
|
43
|
+
return;
|
|
44
|
+
const columnName = (0, member_key_to_safe_key_1.memberKeyToSafeKey)(`${schemaName}.${member.name}`, safeKeyOptions);
|
|
45
|
+
const columnConfig = columnConfigMap.get(columnName);
|
|
46
|
+
// No resolution config - use original alias
|
|
47
|
+
if (!columnConfig) {
|
|
48
|
+
aliasMap.set(columnName, member.alias);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const joinedTableName = columnName;
|
|
52
|
+
// Single resolution column - use original alias
|
|
53
|
+
if (columnConfig.resolutionColumns.length === 1) {
|
|
54
|
+
aliasMap.set((0, member_key_to_safe_key_1.memberKeyToSafeKey)((0, get_namespaced_key_1.getNamespacedKey)(joinedTableName, columnConfig.resolutionColumns[0]), safeKeyOptions), member.alias);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// Multiple resolution columns - create compound aliases
|
|
58
|
+
const sourceTableSchema = tableSchemaMap.get(columnConfig.source);
|
|
59
|
+
if (!sourceTableSchema) {
|
|
60
|
+
throw new Error(`Source table schema not found for ${columnConfig.source}`);
|
|
61
|
+
}
|
|
62
|
+
for (const resolutionColumn of columnConfig.resolutionColumns) {
|
|
63
|
+
const sourceFieldAlias = (_a = sourceTableSchema.dimensions.find((dimension) => dimension.name === resolutionColumn)) === null || _a === void 0 ? void 0 : _a.alias;
|
|
64
|
+
if (!sourceFieldAlias) {
|
|
65
|
+
throw new Error(`Source field alias not found for ${resolutionColumn}`);
|
|
66
|
+
}
|
|
67
|
+
aliasMap.set((0, member_key_to_safe_key_1.memberKeyToSafeKey)((0, get_namespaced_key_1.getNamespacedKey)(joinedTableName, resolutionColumn), safeKeyOptions), (0, get_alias_1.constructCompoundAlias)(member.alias, sourceFieldAlias));
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
originalTableSchemas.forEach((schema) => {
|
|
72
|
+
processMembers(schema.dimensions, schema.name);
|
|
73
|
+
processMembers(schema.measures, schema.name);
|
|
74
|
+
});
|
|
75
|
+
// Create a new schema with restored aliases
|
|
76
|
+
const schemaWithAliases = Object.assign(Object.assign({}, aggregatedTableSchema), { dimensions: [
|
|
77
|
+
...aggregatedTableSchema.dimensions.map((dim) => {
|
|
78
|
+
var _a;
|
|
79
|
+
return (Object.assign(Object.assign({}, dim), { alias: aliasMap.get((_a = dim.alias) !== null && _a !== void 0 ? _a : '') || dim.alias }));
|
|
80
|
+
}),
|
|
81
|
+
...aggregatedTableSchema.measures.map((measure) => {
|
|
82
|
+
var _a;
|
|
83
|
+
return (Object.assign(Object.assign({}, measure), { alias: aliasMap.get((_a = measure.alias) !== null && _a !== void 0 ? _a : '') || measure.alias }));
|
|
84
|
+
}),
|
|
85
|
+
], measures: [] });
|
|
86
|
+
// Generate final SQL with aliases
|
|
87
|
+
const sqlWithAliases = yield cubeQueryToSQL({
|
|
88
|
+
query: {
|
|
89
|
+
dimensions: [
|
|
90
|
+
...schemaWithAliases.dimensions.map((d) => (0, get_namespaced_key_1.getNamespacedKey)(schemaWithAliases.name, d.name)),
|
|
91
|
+
],
|
|
92
|
+
measures: [],
|
|
93
|
+
},
|
|
94
|
+
tableSchemas: [schemaWithAliases],
|
|
95
|
+
contextParams,
|
|
96
|
+
});
|
|
97
|
+
return sqlWithAliases;
|
|
98
|
+
});
|
|
99
|
+
exports.applyAliases = applyAliases;
|
|
100
|
+
//# sourceMappingURL=apply-aliases-step.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-aliases-step.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/resolution/steps/apply-aliases-step.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { TableSchema } from '../../types/cube-types/table';
|
|
2
|
+
import { ResolutionConfig } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Applies SQL override configurations to a table schema.
|
|
5
|
+
* This function overrides dimensions/measures with custom SQL expressions.
|
|
6
|
+
*
|
|
7
|
+
* This is done AFTER the base SQL is generated, so filters and sorts
|
|
8
|
+
* that rely on original values are already compiled into the SQL.
|
|
9
|
+
*
|
|
10
|
+
* NOTE: The fieldName in sqlOverrideConfigs should be in natural format (e.g., 'issues.priority').
|
|
11
|
+
* This function will apply memberKeyToSafeKey internally.
|
|
12
|
+
*
|
|
13
|
+
* The overrideSql should reference fields in datasource.fieldname format (same as fieldName),
|
|
14
|
+
* which will be automatically converted to the safe format.
|
|
15
|
+
*
|
|
16
|
+
* @param baseSchema - The base table schema to apply overrides to
|
|
17
|
+
* @param resolutionConfig - Resolution config containing SQL overrides
|
|
18
|
+
* @returns A new TableSchema with SQL overrides applied
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* // For scalar fields:
|
|
23
|
+
* {
|
|
24
|
+
* fieldName: 'issues.priority',
|
|
25
|
+
* overrideSql: `CASE WHEN issues.priority = 1 THEN 'P0' WHEN issues.priority = 2 THEN 'P1' END`,
|
|
26
|
+
* type: 'string'
|
|
27
|
+
* }
|
|
28
|
+
* // issues.priority gets replaced with issues__priority
|
|
29
|
+
*
|
|
30
|
+
* // For array fields:
|
|
31
|
+
* {
|
|
32
|
+
* fieldName: 'issues.priority_tags',
|
|
33
|
+
* overrideSql: `list_transform(issues.priority_tags, x -> CASE WHEN x = 1 THEN 'P0' ... END)`,
|
|
34
|
+
* type: 'string_array'
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare const applySqlOverrides: (baseSchema: TableSchema, resolutionConfig: ResolutionConfig) => TableSchema;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applySqlOverrides = void 0;
|
|
4
|
+
const member_formatters_1 = require("../../member-formatters");
|
|
5
|
+
/**
|
|
6
|
+
* Applies SQL override configurations to a table schema.
|
|
7
|
+
* This function overrides dimensions/measures with custom SQL expressions.
|
|
8
|
+
*
|
|
9
|
+
* This is done AFTER the base SQL is generated, so filters and sorts
|
|
10
|
+
* that rely on original values are already compiled into the SQL.
|
|
11
|
+
*
|
|
12
|
+
* NOTE: The fieldName in sqlOverrideConfigs should be in natural format (e.g., 'issues.priority').
|
|
13
|
+
* This function will apply memberKeyToSafeKey internally.
|
|
14
|
+
*
|
|
15
|
+
* The overrideSql should reference fields in datasource.fieldname format (same as fieldName),
|
|
16
|
+
* which will be automatically converted to the safe format.
|
|
17
|
+
*
|
|
18
|
+
* @param baseSchema - The base table schema to apply overrides to
|
|
19
|
+
* @param resolutionConfig - Resolution config containing SQL overrides
|
|
20
|
+
* @returns A new TableSchema with SQL overrides applied
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* // For scalar fields:
|
|
25
|
+
* {
|
|
26
|
+
* fieldName: 'issues.priority',
|
|
27
|
+
* overrideSql: `CASE WHEN issues.priority = 1 THEN 'P0' WHEN issues.priority = 2 THEN 'P1' END`,
|
|
28
|
+
* type: 'string'
|
|
29
|
+
* }
|
|
30
|
+
* // issues.priority gets replaced with issues__priority
|
|
31
|
+
*
|
|
32
|
+
* // For array fields:
|
|
33
|
+
* {
|
|
34
|
+
* fieldName: 'issues.priority_tags',
|
|
35
|
+
* overrideSql: `list_transform(issues.priority_tags, x -> CASE WHEN x = 1 THEN 'P0' ... END)`,
|
|
36
|
+
* type: 'string_array'
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
const applySqlOverrides = (baseSchema, resolutionConfig) => {
|
|
41
|
+
const options = { useDotNotation: false };
|
|
42
|
+
if (!resolutionConfig.sqlOverrideConfigs ||
|
|
43
|
+
resolutionConfig.sqlOverrideConfigs.length === 0) {
|
|
44
|
+
return baseSchema;
|
|
45
|
+
}
|
|
46
|
+
// Validate that all SQL overrides reference the field being overridden
|
|
47
|
+
resolutionConfig.sqlOverrideConfigs.forEach((overrideConfig) => {
|
|
48
|
+
// fieldName is expected to be in natural format (e.g., 'issues.priority')
|
|
49
|
+
if (!overrideConfig.overrideSql.includes(overrideConfig.fieldName)) {
|
|
50
|
+
throw new Error(`SQL override for field '${overrideConfig.fieldName}' must reference the field in the SQL. ` +
|
|
51
|
+
`Current SQL: ${overrideConfig.overrideSql}`);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
// Create a new schema with cloned dimensions and measures
|
|
55
|
+
const updatedSchema = Object.assign(Object.assign({}, baseSchema), { dimensions: [...baseSchema.dimensions], measures: [...baseSchema.measures] });
|
|
56
|
+
resolutionConfig.sqlOverrideConfigs.forEach((overrideConfig) => {
|
|
57
|
+
// Convert natural field name to safe key for matching
|
|
58
|
+
// e.g., with useDotNotation: false, 'issues.priority' -> 'issues__priority'
|
|
59
|
+
// e.g., with useDotNotation: true, 'issues.priority' -> 'issues.priority'
|
|
60
|
+
const safeFieldName = (0, member_formatters_1.memberKeyToSafeKey)(overrideConfig.fieldName, options);
|
|
61
|
+
// Check dimensions in base schema
|
|
62
|
+
const dimensionIndex = updatedSchema.dimensions.findIndex((dim) => dim.name === safeFieldName);
|
|
63
|
+
if (dimensionIndex !== -1) {
|
|
64
|
+
const originalDimension = updatedSchema.dimensions[dimensionIndex];
|
|
65
|
+
// Replace datasource.fieldName with datasource__fieldName in the SQL
|
|
66
|
+
// e.g., "issues.priority" -> "issues__priority"
|
|
67
|
+
const fieldNamePattern = overrideConfig.fieldName.replace(/\./g, '\\.'); // Escape dots for regex
|
|
68
|
+
const finalSql = overrideConfig.overrideSql.replace(new RegExp(`\\b${fieldNamePattern}\\b`, 'g'), // Word boundary to match exact field names
|
|
69
|
+
safeFieldName);
|
|
70
|
+
updatedSchema.dimensions[dimensionIndex] = Object.assign(Object.assign({}, originalDimension), { sql: finalSql, type: overrideConfig.type });
|
|
71
|
+
}
|
|
72
|
+
// Check measures in base schema
|
|
73
|
+
const measureIndex = updatedSchema.measures.findIndex((measure) => measure.name === safeFieldName);
|
|
74
|
+
if (measureIndex !== -1) {
|
|
75
|
+
const originalMeasure = updatedSchema.measures[measureIndex];
|
|
76
|
+
const fieldNamePattern = overrideConfig.fieldName.replace(/\./g, '\\.');
|
|
77
|
+
const finalSql = overrideConfig.overrideSql.replace(new RegExp(`\\b${fieldNamePattern}\\b`, 'g'), safeFieldName);
|
|
78
|
+
updatedSchema.measures[measureIndex] = Object.assign(Object.assign({}, originalMeasure), { sql: finalSql, type: overrideConfig.type });
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
return updatedSchema;
|
|
82
|
+
};
|
|
83
|
+
exports.applySqlOverrides = applySqlOverrides;
|
|
84
|
+
//# sourceMappingURL=apply-sql-overrides.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-sql-overrides.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/resolution/steps/apply-sql-overrides.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,17 +13,16 @@ const index_1 = require("../../index");
|
|
|
13
13
|
* @returns Table schema with resolved values from lookup tables
|
|
14
14
|
*/
|
|
15
15
|
const getResolvedTableSchema = ({ baseTableSchema, resolutionConfig, columnProjections, contextParams, cubeQueryToSQL, }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
+
const config = { useDotNotation: false };
|
|
16
17
|
const updatedBaseTableSchema = baseTableSchema;
|
|
17
18
|
// Generate resolution schemas for fields that need resolution
|
|
18
|
-
const resolutionSchemas = (0, index_1.generateResolutionSchemas)(resolutionConfig
|
|
19
|
-
updatedBaseTableSchema,
|
|
20
|
-
]);
|
|
19
|
+
const resolutionSchemas = (0, index_1.generateResolutionSchemas)(resolutionConfig);
|
|
21
20
|
const joinPaths = (0, index_1.generateResolutionJoinPaths)(updatedBaseTableSchema.name, resolutionConfig, [updatedBaseTableSchema]);
|
|
22
21
|
const tempQuery = {
|
|
23
22
|
measures: [],
|
|
24
23
|
dimensions: baseTableSchema.dimensions.map((d) => (0, index_1.getNamespacedKey)(updatedBaseTableSchema.name, d.name)),
|
|
25
24
|
};
|
|
26
|
-
const updatedColumnProjections = columnProjections === null || columnProjections === void 0 ? void 0 : columnProjections.map((cp) => (0, index_1.memberKeyToSafeKey)(cp));
|
|
25
|
+
const updatedColumnProjections = columnProjections === null || columnProjections === void 0 ? void 0 : columnProjections.map((cp) => (0, index_1.memberKeyToSafeKey)(cp, config));
|
|
27
26
|
// Generate resolved dimensions using columnProjections
|
|
28
27
|
const resolvedDimensions = (0, index_1.generateResolvedDimensions)(updatedBaseTableSchema.name, tempQuery, resolutionConfig, updatedColumnProjections);
|
|
29
28
|
// Create query and generate SQL
|
|
@@ -47,10 +46,10 @@ const getResolvedTableSchema = ({ baseTableSchema, resolutionConfig, columnProje
|
|
|
47
46
|
resolutionSchemaByConfigName.set(resSchema.name, resSchema);
|
|
48
47
|
});
|
|
49
48
|
// Build the dimension map using the pre-indexed schemas
|
|
50
|
-
resolutionConfig.columnConfigs.forEach((
|
|
51
|
-
const resSchema = resolutionSchemaByConfigName.get(
|
|
49
|
+
resolutionConfig.columnConfigs.forEach((colConfig) => {
|
|
50
|
+
const resSchema = resolutionSchemaByConfigName.get(colConfig.name);
|
|
52
51
|
if (resSchema) {
|
|
53
|
-
resolutionDimensionsByColumnName.set(
|
|
52
|
+
resolutionDimensionsByColumnName.set(colConfig.name, resSchema.dimensions.map((dim) => ({
|
|
54
53
|
name: dim.name,
|
|
55
54
|
sql: (0, index_1.getColumnReference)(resolvedTableSchema.name, dim),
|
|
56
55
|
type: dim.type,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolution-step.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/resolution/steps/resolution-step.ts"],"names":[],"mappings":";;;;AAAA,uCAYqB;AAErB;;;;;;;;GAQG;AACI,MAAM,sBAAsB,GAAG,CAAO,EAC3C,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,cAAc,GAWf,EAAwB,EAAE;IACzB,MAAM,sBAAsB,GAAgB,eAAe,CAAC;IAE5D,8DAA8D;IAC9D,MAAM,iBAAiB,GAAG,IAAA,iCAAyB,EAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"resolution-step.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/resolution/steps/resolution-step.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,14 @@ export interface ResolutionColumnConfig {
|
|
|
6
6
|
joinColumn: string;
|
|
7
7
|
resolutionColumns: string[];
|
|
8
8
|
}
|
|
9
|
+
export interface SqlOverrideConfig {
|
|
10
|
+
fieldName: string;
|
|
11
|
+
overrideSql: string;
|
|
12
|
+
type: DimensionType | MeasureType;
|
|
13
|
+
}
|
|
9
14
|
export interface ResolutionConfig {
|
|
10
15
|
columnConfigs: ResolutionColumnConfig[];
|
|
11
16
|
tableSchemas: TableSchema[];
|
|
17
|
+
sqlOverrideConfigs?: SqlOverrideConfig[];
|
|
12
18
|
}
|
|
13
19
|
export declare const BASE_DATA_SOURCE_NAME = "__base_query";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../meerkat-core/src/resolution/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../meerkat-core/src/resolution/types.ts"],"names":[],"mappings":";;;AAwCa,QAAA,qBAAqB,GAAG,cAAc,CAAC"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
+
import { QueryOptions } from '../member-formatters/get-alias';
|
|
1
2
|
import { TableSchema } from '../types/cube-types';
|
|
2
|
-
export declare const meerkatPlaceholderReplacer: (sql: string, originalTableName: string, tableSchema: TableSchema) => string;
|
|
3
|
+
export declare const meerkatPlaceholderReplacer: (sql: string, originalTableName: string, tableSchema: TableSchema, config: QueryOptions) => string;
|
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.meerkatPlaceholderReplacer = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
4
|
+
const get_alias_1 = require("../member-formatters/get-alias");
|
|
5
|
+
const get_namespaced_key_1 = require("../member-formatters/get-namespaced-key");
|
|
6
|
+
const meerkatPlaceholderReplacer = (sql, originalTableName, tableSchema, config) => {
|
|
6
7
|
const tableNameEncapsulationRegEx = /\{MEERKAT\}\.([a-zA-Z_][a-zA-Z0-9_]*)/g;
|
|
7
8
|
return sql.replace(tableNameEncapsulationRegEx, (_, columnName) => {
|
|
8
|
-
return (0,
|
|
9
|
-
name: (0, member_formatters_1.getNamespacedKey)(originalTableName, columnName),
|
|
10
|
-
tableSchema,
|
|
11
|
-
aliasContext: {
|
|
12
|
-
isAstIdentifier: false,
|
|
13
|
-
},
|
|
14
|
-
});
|
|
9
|
+
return (0, get_alias_1.getAliasForSQL)((0, get_namespaced_key_1.getNamespacedKey)(originalTableName, columnName), tableSchema, config);
|
|
15
10
|
});
|
|
16
11
|
};
|
|
17
12
|
exports.meerkatPlaceholderReplacer = meerkatPlaceholderReplacer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meerkat-placeholder-replacer.js","sourceRoot":"","sources":["../../../../meerkat-core/src/utils/meerkat-placeholder-replacer.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"meerkat-placeholder-replacer.js","sourceRoot":"","sources":["../../../../meerkat-core/src/utils/meerkat-placeholder-replacer.ts"],"names":[],"mappings":";;;AAAA,8DAGwC;AACxC,gFAA2E;AAGpE,MAAM,0BAA0B,GAAG,CACxC,GAAW,EACX,iBAAyB,EACzB,WAAwB,EACxB,MAAoB,EACpB,EAAE;IACF,MAAM,2BAA2B,GAAG,wCAAwC,CAAC;IAC7E,OAAO,GAAG,CAAC,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE;QAChE,OAAO,IAAA,0BAAc,EACnB,IAAA,qCAAgB,EAAC,iBAAiB,EAAE,UAAU,CAAC,EAC/C,WAAW,EACX,MAAM,CACP,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAdW,QAAA,0BAA0B,8BAcrC"}
|