@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.
Files changed (117) hide show
  1. package/package.json +1 -1
  2. package/src/ast-builder/ast-builder.d.ts +3 -1
  3. package/src/ast-builder/ast-builder.js +18 -15
  4. package/src/ast-builder/ast-builder.js.map +1 -1
  5. package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.d.ts +37 -15
  6. package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.js +48 -15
  7. package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.js.map +1 -1
  8. package/src/cube-filter-transformer/contains/contains.d.ts +3 -9
  9. package/src/cube-filter-transformer/contains/contains.js +8 -12
  10. package/src/cube-filter-transformer/contains/contains.js.map +1 -1
  11. package/src/cube-filter-transformer/equals/equals-array.js +7 -11
  12. package/src/cube-filter-transformer/equals/equals-array.js.map +1 -1
  13. package/src/cube-filter-transformer/equals/equals.js +5 -5
  14. package/src/cube-filter-transformer/equals/equals.js.map +1 -1
  15. package/src/cube-filter-transformer/factory.d.ts +3 -2
  16. package/src/cube-filter-transformer/factory.js +23 -23
  17. package/src/cube-filter-transformer/factory.js.map +1 -1
  18. package/src/cube-filter-transformer/gt/gt.js +4 -4
  19. package/src/cube-filter-transformer/gt/gt.js.map +1 -1
  20. package/src/cube-filter-transformer/gte/gte.js +4 -4
  21. package/src/cube-filter-transformer/gte/gte.js.map +1 -1
  22. package/src/cube-filter-transformer/in/in.js +7 -11
  23. package/src/cube-filter-transformer/in/in.js.map +1 -1
  24. package/src/cube-filter-transformer/in-date-range/in-date-range.js +4 -4
  25. package/src/cube-filter-transformer/in-date-range/in-date-range.js.map +1 -1
  26. package/src/cube-filter-transformer/lt/lt.js +4 -4
  27. package/src/cube-filter-transformer/lt/lt.js.map +1 -1
  28. package/src/cube-filter-transformer/lte/lte.js +4 -4
  29. package/src/cube-filter-transformer/lte/lte.js.map +1 -1
  30. package/src/cube-filter-transformer/not-In-date-range/not-In-date-range.js +3 -3
  31. package/src/cube-filter-transformer/not-In-date-range/not-In-date-range.js.map +1 -1
  32. package/src/cube-filter-transformer/not-contains/not-contains.d.ts +3 -9
  33. package/src/cube-filter-transformer/not-contains/not-contains.js +8 -12
  34. package/src/cube-filter-transformer/not-contains/not-contains.js.map +1 -1
  35. package/src/cube-filter-transformer/not-equals/not-equals-array.js +2 -2
  36. package/src/cube-filter-transformer/not-equals/not-equals-array.js.map +1 -1
  37. package/src/cube-filter-transformer/not-equals/not-equals.js +5 -5
  38. package/src/cube-filter-transformer/not-equals/not-equals.js.map +1 -1
  39. package/src/cube-filter-transformer/not-in/not-in.js +7 -11
  40. package/src/cube-filter-transformer/not-in/not-in.js.map +1 -1
  41. package/src/cube-filter-transformer/not-set/not-set.js +5 -8
  42. package/src/cube-filter-transformer/not-set/not-set.js.map +1 -1
  43. package/src/cube-filter-transformer/set/set.js +5 -8
  44. package/src/cube-filter-transformer/set/set.js.map +1 -1
  45. package/src/cube-filter-transformer/sql-expression/sql-expression-parser.d.ts +2 -1
  46. package/src/cube-filter-transformer/sql-expression/sql-expression-parser.js +10 -18
  47. package/src/cube-filter-transformer/sql-expression/sql-expression-parser.js.map +1 -1
  48. package/src/cube-group-by-transformer/cube-group-by-transformer.d.ts +2 -1
  49. package/src/cube-group-by-transformer/cube-group-by-transformer.js +2 -8
  50. package/src/cube-group-by-transformer/cube-group-by-transformer.js.map +1 -1
  51. package/src/cube-measure-transformer/cube-measure-transformer.d.ts +4 -2
  52. package/src/cube-measure-transformer/cube-measure-transformer.js +16 -30
  53. package/src/cube-measure-transformer/cube-measure-transformer.js.map +1 -1
  54. package/src/cube-order-by-transformer/cube-order-by-transformer.d.ts +3 -2
  55. package/src/cube-order-by-transformer/cube-order-by-transformer.js +3 -9
  56. package/src/cube-order-by-transformer/cube-order-by-transformer.js.map +1 -1
  57. package/src/filter-params/filter-params-ast.d.ts +2 -1
  58. package/src/filter-params/filter-params-ast.js +2 -1
  59. package/src/filter-params/filter-params-ast.js.map +1 -1
  60. package/src/get-filter-params-sql/get-filter-params-sql.d.ts +5 -3
  61. package/src/get-filter-params-sql/get-filter-params-sql.js +2 -2
  62. package/src/get-filter-params-sql/get-filter-params-sql.js.map +1 -1
  63. package/src/get-final-base-sql/get-final-base-sql.d.ts +3 -1
  64. package/src/get-final-base-sql/get-final-base-sql.js +3 -1
  65. package/src/get-final-base-sql/get-final-base-sql.js.map +1 -1
  66. package/src/get-wrapped-base-query-with-projections/get-aliased-columns-from-filters.d.ts +7 -3
  67. package/src/get-wrapped-base-query-with-projections/get-aliased-columns-from-filters.js +11 -14
  68. package/src/get-wrapped-base-query-with-projections/get-aliased-columns-from-filters.js.map +1 -1
  69. package/src/get-wrapped-base-query-with-projections/get-projection-clause.d.ts +2 -1
  70. package/src/get-wrapped-base-query-with-projections/get-projection-clause.js +5 -11
  71. package/src/get-wrapped-base-query-with-projections/get-projection-clause.js.map +1 -1
  72. package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.d.ts +3 -1
  73. package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js +3 -2
  74. package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js.map +1 -1
  75. package/src/index.d.ts +2 -0
  76. package/src/index.js +2 -0
  77. package/src/index.js.map +1 -1
  78. package/src/joins/joins.d.ts +22 -0
  79. package/src/joins/joins.js +60 -8
  80. package/src/joins/joins.js.map +1 -1
  81. package/src/member-formatters/get-alias.d.ts +112 -7
  82. package/src/member-formatters/get-alias.js +149 -17
  83. package/src/member-formatters/get-alias.js.map +1 -1
  84. package/src/member-formatters/index.d.ts +2 -2
  85. package/src/member-formatters/index.js +6 -1
  86. package/src/member-formatters/index.js.map +1 -1
  87. package/src/member-formatters/member-key-to-safe-key.d.ts +17 -1
  88. package/src/member-formatters/member-key-to-safe-key.js +15 -1
  89. package/src/member-formatters/member-key-to-safe-key.js.map +1 -1
  90. package/src/resolution/generators/generate-resolution-join-paths.js +7 -7
  91. package/src/resolution/generators/generate-resolution-join-paths.js.map +1 -1
  92. package/src/resolution/generators/generate-resolution-schemas.d.ts +1 -1
  93. package/src/resolution/generators/generate-resolution-schemas.js +5 -14
  94. package/src/resolution/generators/generate-resolution-schemas.js.map +1 -1
  95. package/src/resolution/generators/generate-resolved-dimensions.js +3 -2
  96. package/src/resolution/generators/generate-resolved-dimensions.js.map +1 -1
  97. package/src/resolution/generators/generate-row-number-sql.js +2 -1
  98. package/src/resolution/generators/generate-row-number-sql.js.map +1 -1
  99. package/src/resolution/resolution.d.ts +1 -1
  100. package/src/resolution/resolution.js +20 -21
  101. package/src/resolution/resolution.js.map +1 -1
  102. package/src/resolution/steps/aggregation-step.d.ts +1 -1
  103. package/src/resolution/steps/aggregation-step.js +2 -1
  104. package/src/resolution/steps/aggregation-step.js.map +1 -1
  105. package/src/resolution/steps/apply-aliases-step.d.ts +34 -0
  106. package/src/resolution/steps/apply-aliases-step.js +100 -0
  107. package/src/resolution/steps/apply-aliases-step.js.map +1 -0
  108. package/src/resolution/steps/apply-sql-overrides.d.ts +38 -0
  109. package/src/resolution/steps/apply-sql-overrides.js +84 -0
  110. package/src/resolution/steps/apply-sql-overrides.js.map +1 -0
  111. package/src/resolution/steps/resolution-step.js +6 -7
  112. package/src/resolution/steps/resolution-step.js.map +1 -1
  113. package/src/resolution/types.d.ts +6 -0
  114. package/src/resolution/types.js.map +1 -1
  115. package/src/utils/meerkat-placeholder-replacer.d.ts +2 -1
  116. package/src/utils/meerkat-placeholder-replacer.js +4 -9
  117. 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((config) => {
51
- const resSchema = resolutionSchemaByConfigName.get(config.name);
49
+ resolutionConfig.columnConfigs.forEach((colConfig) => {
50
+ const resSchema = resolutionSchemaByConfigName.get(colConfig.name);
52
51
  if (resSchema) {
53
- resolutionDimensionsByColumnName.set(config.name, resSchema.dimensions.map((dim) => ({
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":"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"}
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":";;;AA0Ba,QAAA,qBAAqB,GAAG,cAAc,CAAC"}
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 member_formatters_1 = require("../member-formatters");
5
- const meerkatPlaceholderReplacer = (sql, originalTableName, tableSchema) => {
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, member_formatters_1.getAliasFromSchema)({
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,4DAA4E;AAGrE,MAAM,0BAA0B,GAAG,CACxC,GAAW,EACX,iBAAyB,EACzB,WAAwB,EACxB,EAAE;IACF,MAAM,2BAA2B,GAAG,wCAAwC,CAAC;IAC7E,OAAO,GAAG,CAAC,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE;QAChE,OAAO,IAAA,sCAAkB,EAAC;YACxB,IAAI,EAAE,IAAA,oCAAgB,EAAC,iBAAiB,EAAE,UAAU,CAAC;YACrD,WAAW;YACX,YAAY,EAAE;gBACZ,eAAe,EAAE,KAAK;aACvB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAfW,QAAA,0BAA0B,8BAerC"}
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"}