@devrev/meerkat-core 0.0.110 → 0.0.112

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 (27) hide show
  1. package/package.json +1 -1
  2. package/src/cube-filter-transformer/sql-expression/sql-expression-parser.js +25 -4
  3. package/src/cube-filter-transformer/sql-expression/sql-expression-parser.js.map +1 -1
  4. package/src/index.d.ts +2 -0
  5. package/src/index.js +2 -0
  6. package/src/index.js.map +1 -1
  7. package/src/member-formatters/get-alias.d.ts +15 -0
  8. package/src/member-formatters/get-alias.js +19 -1
  9. package/src/member-formatters/get-alias.js.map +1 -1
  10. package/src/member-formatters/index.d.ts +1 -1
  11. package/src/member-formatters/index.js +2 -1
  12. package/src/member-formatters/index.js.map +1 -1
  13. package/src/resolution/generators/generate-resolution-join-paths.js +1 -1
  14. package/src/resolution/generators/generate-resolution-join-paths.js.map +1 -1
  15. package/src/resolution/generators/generate-resolution-schemas.js +1 -5
  16. package/src/resolution/generators/generate-resolution-schemas.js.map +1 -1
  17. package/src/resolution/steps/aggregation-step.d.ts +1 -1
  18. package/src/resolution/steps/aggregation-step.js +2 -1
  19. package/src/resolution/steps/aggregation-step.js.map +1 -1
  20. package/src/resolution/steps/apply-aliases-step.d.ts +34 -0
  21. package/src/resolution/steps/apply-aliases-step.js +96 -0
  22. package/src/resolution/steps/apply-aliases-step.js.map +1 -0
  23. package/src/resolution/steps/apply-sql-overrides.d.ts +39 -0
  24. package/src/resolution/steps/apply-sql-overrides.js +83 -0
  25. package/src/resolution/steps/apply-sql-overrides.js.map +1 -0
  26. package/src/resolution/types.d.ts +6 -0
  27. package/src/resolution/types.js.map +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devrev/meerkat-core",
3
- "version": "0.0.110",
3
+ "version": "0.0.112",
4
4
  "dependencies": {
5
5
  "tslib": "^2.3.0"
6
6
  },
@@ -3,8 +3,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.applySQLExpressions = exports.getSQLExpressionAST = void 0;
4
4
  const constants_1 = require("../../member-formatters/constants");
5
5
  const Expression_1 = require("../../types/duckdb-serialization-types/serialization/Expression");
6
+ /**
7
+ * Encode a string to base64 (works in both browser and Node.js)
8
+ */
9
+ const toBase64 = (str) => {
10
+ const bytes = new TextEncoder().encode(str);
11
+ let binary = '';
12
+ for (let i = 0; i < bytes.length; i++) {
13
+ binary += String.fromCharCode(bytes[i]);
14
+ }
15
+ return btoa(binary);
16
+ };
17
+ /**
18
+ * Decode a base64 string (works in both browser and Node.js)
19
+ */
20
+ const fromBase64 = (base64) => {
21
+ const binary = atob(base64);
22
+ const bytes = new Uint8Array(binary.length);
23
+ for (let i = 0; i < binary.length; i++) {
24
+ bytes[i] = binary.charCodeAt(i);
25
+ }
26
+ return new TextDecoder().decode(bytes);
27
+ };
6
28
  const getSQLPlaceholder = (sqlExpression) => {
7
- return `__MEERKAT_SQL_EXPR__${Buffer.from(sqlExpression).toString('base64')}__`;
29
+ return `__MEERKAT_SQL_EXPR__${toBase64(sqlExpression)}__`;
8
30
  };
9
31
  const createInOperatorAST = (member, sqlExpression) => {
10
32
  const sqlPlaceholder = getSQLPlaceholder(sqlExpression);
@@ -71,10 +93,9 @@ exports.getSQLExpressionAST = getSQLExpressionAST;
71
93
  */
72
94
  const applySQLExpressions = (sql) => {
73
95
  // Replace quoted placeholders (DuckDB uses single quotes for VARCHAR constants)
74
- return sql.replace(/'__MEERKAT_SQL_EXPR__([A-Za-z0-9+/=]+)__'/g, (match, encoded) => {
96
+ return sql.replace(/'__MEERKAT_SQL_EXPR__([A-Za-z0-9+/=]+)__'/g, (_, encoded) => {
75
97
  // Decode the base64 SQL expression
76
- const sqlExpression = Buffer.from(encoded, 'base64').toString('utf-8');
77
- return sqlExpression;
98
+ return fromBase64(encoded);
78
99
  });
79
100
  };
80
101
  exports.applySQLExpressions = applySQLExpressions;
@@ -1 +1 @@
1
- {"version":3,"file":"sql-expression-parser.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/cube-filter-transformer/sql-expression/sql-expression-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sql-expression-parser.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/cube-filter-transformer/sql-expression/sql-expression-parser.ts"],"names":[],"mappings":"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"}
package/src/index.d.ts CHANGED
@@ -16,6 +16,8 @@ export * from './member-formatters';
16
16
  export * from './resolution/generators';
17
17
  export * from './resolution/resolution';
18
18
  export * from './resolution/steps/aggregation-step';
19
+ export * from './resolution/steps/apply-aliases-step';
20
+ export * from './resolution/steps/apply-sql-overrides';
19
21
  export * from './resolution/steps/resolution-step';
20
22
  export * from './resolution/steps/unnest-step';
21
23
  export * from './resolution/types';
package/src/index.js CHANGED
@@ -28,6 +28,8 @@ tslib_1.__exportStar(require("./member-formatters"), exports);
28
28
  tslib_1.__exportStar(require("./resolution/generators"), exports);
29
29
  tslib_1.__exportStar(require("./resolution/resolution"), exports);
30
30
  tslib_1.__exportStar(require("./resolution/steps/aggregation-step"), exports);
31
+ tslib_1.__exportStar(require("./resolution/steps/apply-aliases-step"), exports);
32
+ tslib_1.__exportStar(require("./resolution/steps/apply-sql-overrides"), exports);
31
33
  tslib_1.__exportStar(require("./resolution/steps/resolution-step"), exports);
32
34
  tslib_1.__exportStar(require("./resolution/steps/unnest-step"), exports);
33
35
  tslib_1.__exportStar(require("./resolution/types"), exports);
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../meerkat-core/src/index.ts"],"names":[],"mappings":";;;;AAAA,oEAA0C;AAC1C,8EAAoD;AACpD,0EAAgD;AAChD,0DAAgC;AAChC,8DAAoC;AACpC,0EAAwF;AAA/E,uIAAA,iCAAiC,OAAA;AAC1C,wGAGwE;AAFtE,4HAAA,mBAAmB,OAAA;AACnB,4HAAA,mBAAmB,OAAA;AAErB,8FAAoE;AACpE,iFAAuD;AACvD,uEAI2C;AAHzC,+HAAA,0BAA0B,OAAA;AAC1B,iIAAA,4BAA4B,OAAA;AAC5B,uHAAA,kBAAkB,OAAA;AAEpB,uFAAmF;AAA1E,2HAAA,kBAAkB,OAAA;AAC3B,8EAA0E;AAAjE,qHAAA,eAAe,OAAA;AACxB,oFAA0D;AAC1D,wDAA8B;AAC9B,8DAAoC;AACpC,kEAAwC;AACxC,kEAAwC;AACxC,8EAAoD;AACpD,6EAAmD;AACnD,yEAA+C;AAC/C,6DAAmC;AAEnC,mEAAyC;AACzC,mFAAyD;AACzD,wDAA8B;AAC9B,6CAAmD;AAA1C,2GAAA,eAAe,OAAA;AACxB,uEAA6C;AAC7C,4EAAkD;AAClD,qEAA2C;AAC3C,qFAAkF;AAAzE,0IAAA,0BAA0B,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../meerkat-core/src/index.ts"],"names":[],"mappings":";;;;AAAA,oEAA0C;AAC1C,8EAAoD;AACpD,0EAAgD;AAChD,0DAAgC;AAChC,8DAAoC;AACpC,0EAAwF;AAA/E,uIAAA,iCAAiC,OAAA;AAC1C,wGAGwE;AAFtE,4HAAA,mBAAmB,OAAA;AACnB,4HAAA,mBAAmB,OAAA;AAErB,8FAAoE;AACpE,iFAAuD;AACvD,uEAI2C;AAHzC,+HAAA,0BAA0B,OAAA;AAC1B,iIAAA,4BAA4B,OAAA;AAC5B,uHAAA,kBAAkB,OAAA;AAEpB,uFAAmF;AAA1E,2HAAA,kBAAkB,OAAA;AAC3B,8EAA0E;AAAjE,qHAAA,eAAe,OAAA;AACxB,oFAA0D;AAC1D,wDAA8B;AAC9B,8DAAoC;AACpC,kEAAwC;AACxC,kEAAwC;AACxC,8EAAoD;AACpD,gFAAsD;AACtD,iFAAuD;AACvD,6EAAmD;AACnD,yEAA+C;AAC/C,6DAAmC;AAEnC,mEAAyC;AACzC,mFAAyD;AACzD,wDAA8B;AAC9B,6CAAmD;AAA1C,2GAAA,eAAe,OAAA;AACxB,uEAA6C;AAC7C,4EAAkD;AAClD,qEAA2C;AAC3C,qFAAkF;AAAzE,0IAAA,0BAA0B,OAAA"}
@@ -13,3 +13,18 @@ export declare const constructAlias: ({ name, alias, aliasContext, }: {
13
13
  alias?: string | undefined;
14
14
  aliasContext: AliasContext;
15
15
  }) => string;
16
+ /**
17
+ * Creates a compound alias by joining two alias strings with " - ".
18
+ * Used when a field resolves to multiple columns (e.g., "Owners - Display Name").
19
+ *
20
+ * @param baseAlias - The base field alias (e.g., "Owners")
21
+ * @param resolutionAlias - The resolved field alias (e.g., "Display Name")
22
+ * @returns The compound alias (e.g., "Owners - Display Name")
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * createCompoundAlias("Owners", "Display Name") // "Owners - Display Name"
27
+ * createCompoundAlias("Tags", "Tag Name") // "Tags - Tag Name"
28
+ * ```
29
+ */
30
+ export declare const constructCompoundAlias: (baseAlias: string, resolutionAlias: string) => string;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.constructAlias = exports.getAliasFromSchema = void 0;
3
+ exports.constructCompoundAlias = exports.constructAlias = exports.getAliasFromSchema = void 0;
4
4
  const find_in_table_schema_1 = require("../utils/find-in-table-schema");
5
5
  const member_key_to_safe_key_1 = require("./member-key-to-safe-key");
6
6
  const split_into_data_source_and_fields_1 = require("./split-into-data-source-and-fields");
@@ -39,4 +39,22 @@ const constructAlias = ({ name, alias, aliasContext, }) => {
39
39
  return (0, member_key_to_safe_key_1.memberKeyToSafeKey)(name);
40
40
  };
41
41
  exports.constructAlias = constructAlias;
42
+ /**
43
+ * Creates a compound alias by joining two alias strings with " - ".
44
+ * Used when a field resolves to multiple columns (e.g., "Owners - Display Name").
45
+ *
46
+ * @param baseAlias - The base field alias (e.g., "Owners")
47
+ * @param resolutionAlias - The resolved field alias (e.g., "Display Name")
48
+ * @returns The compound alias (e.g., "Owners - Display Name")
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * createCompoundAlias("Owners", "Display Name") // "Owners - Display Name"
53
+ * createCompoundAlias("Tags", "Tag Name") // "Tags - Tag Name"
54
+ * ```
55
+ */
56
+ const constructCompoundAlias = (baseAlias, resolutionAlias) => {
57
+ return `${baseAlias} - ${resolutionAlias}`;
58
+ };
59
+ exports.constructCompoundAlias = constructCompoundAlias;
42
60
  //# sourceMappingURL=get-alias.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-alias.js","sourceRoot":"","sources":["../../../../meerkat-core/src/member-formatters/get-alias.ts"],"names":[],"mappings":";;;AACA,wEAA6D;AAC7D,qEAA8D;AAC9D,2FAAmF;AAOnF,MAAM,kBAAkB,GAAG,CAAC,EAC1B,eAAe,EACf,kBAAkB,GACL,EAAW,EAAE;IAC1B,IAAI,eAAe,EAAE;QACnB,yFAAyF;QACzF,kCAAkC;QAClC,OAAO,KAAK,CAAC;KACd;IACD,IAAI,kBAAkB,EAAE;QACtB,0DAA0D;QAC1D,OAAO,KAAK,CAAC;KACd;IACD,mEAAmE;IACnE,mFAAmF;IACnF,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEK,MAAM,kBAAkB,GAAG,CAAC,EACjC,IAAI,EACJ,WAAW,EACX,YAAY,GAKb,EAAU,EAAE;;IACX,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,IAAA,gEAA4B,EAAC,IAAI,CAAC,CAAC;IACrD,OAAO,IAAA,sBAAc,EAAC;QACpB,IAAI;QACJ,KAAK,EAAE,MAAA,IAAA,mCAAY,EAAC,KAAK,EAAE,WAAW,CAAC,0CAAE,KAAK;QAC9C,YAAY;KACb,CAAC,CAAC;AACL,CAAC,CAAC;AAfW,QAAA,kBAAkB,sBAe7B;AAEK,MAAM,cAAc,GAAG,CAAC,EAC7B,IAAI,EACJ,KAAK,EACL,YAAY,GAKb,EAAU,EAAE;IACX,IAAI,KAAK,EAAE;QACT,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE;YACpC,gFAAgF;YAChF,OAAO,IAAI,KAAK,GAAG,CAAC;SACrB;QACD,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAA,2CAAkB,EAAC,IAAI,CAAC,CAAC;AAClC,CAAC,CAAC;AAjBW,QAAA,cAAc,kBAiBzB"}
1
+ {"version":3,"file":"get-alias.js","sourceRoot":"","sources":["../../../../meerkat-core/src/member-formatters/get-alias.ts"],"names":[],"mappings":";;;AACA,wEAA6D;AAC7D,qEAA8D;AAC9D,2FAAmF;AAOnF,MAAM,kBAAkB,GAAG,CAAC,EAC1B,eAAe,EACf,kBAAkB,GACL,EAAW,EAAE;IAC1B,IAAI,eAAe,EAAE;QACnB,yFAAyF;QACzF,kCAAkC;QAClC,OAAO,KAAK,CAAC;KACd;IACD,IAAI,kBAAkB,EAAE;QACtB,0DAA0D;QAC1D,OAAO,KAAK,CAAC;KACd;IACD,mEAAmE;IACnE,mFAAmF;IACnF,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEK,MAAM,kBAAkB,GAAG,CAAC,EACjC,IAAI,EACJ,WAAW,EACX,YAAY,GAKb,EAAU,EAAE;;IACX,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,IAAA,gEAA4B,EAAC,IAAI,CAAC,CAAC;IACrD,OAAO,IAAA,sBAAc,EAAC;QACpB,IAAI;QACJ,KAAK,EAAE,MAAA,IAAA,mCAAY,EAAC,KAAK,EAAE,WAAW,CAAC,0CAAE,KAAK;QAC9C,YAAY;KACb,CAAC,CAAC;AACL,CAAC,CAAC;AAfW,QAAA,kBAAkB,sBAe7B;AAEK,MAAM,cAAc,GAAG,CAAC,EAC7B,IAAI,EACJ,KAAK,EACL,YAAY,GAKb,EAAU,EAAE;IACX,IAAI,KAAK,EAAE;QACT,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE;YACpC,gFAAgF;YAChF,OAAO,IAAI,KAAK,GAAG,CAAC;SACrB;QACD,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAA,2CAAkB,EAAC,IAAI,CAAC,CAAC;AAClC,CAAC,CAAC;AAjBW,QAAA,cAAc,kBAiBzB;AAEF;;;;;;;;;;;;;GAaG;AACI,MAAM,sBAAsB,GAAG,CACpC,SAAiB,EACjB,eAAuB,EACf,EAAE;IACV,OAAO,GAAG,SAAS,MAAM,eAAe,EAAE,CAAC;AAC7C,CAAC,CAAC;AALW,QAAA,sBAAsB,0BAKjC"}
@@ -1,5 +1,5 @@
1
1
  export { COLUMN_NAME_DELIMITER, MEERKAT_OUTPUT_DELIMITER } from './constants';
2
- export { constructAlias, getAliasFromSchema } from './get-alias';
2
+ export { constructAlias, constructCompoundAlias, getAliasFromSchema, } from './get-alias';
3
3
  export { getNamespacedKey } from './get-namespaced-key';
4
4
  export { memberKeyToSafeKey } from './member-key-to-safe-key';
5
5
  export { splitIntoDataSourceAndFields } from './split-into-data-source-and-fields';
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.splitIntoDataSourceAndFields = exports.memberKeyToSafeKey = exports.getNamespacedKey = exports.getAliasFromSchema = exports.constructAlias = exports.MEERKAT_OUTPUT_DELIMITER = exports.COLUMN_NAME_DELIMITER = void 0;
3
+ exports.splitIntoDataSourceAndFields = exports.memberKeyToSafeKey = exports.getNamespacedKey = exports.getAliasFromSchema = exports.constructCompoundAlias = exports.constructAlias = exports.MEERKAT_OUTPUT_DELIMITER = exports.COLUMN_NAME_DELIMITER = void 0;
4
4
  var constants_1 = require("./constants");
5
5
  Object.defineProperty(exports, "COLUMN_NAME_DELIMITER", { enumerable: true, get: function () { return constants_1.COLUMN_NAME_DELIMITER; } });
6
6
  Object.defineProperty(exports, "MEERKAT_OUTPUT_DELIMITER", { enumerable: true, get: function () { return constants_1.MEERKAT_OUTPUT_DELIMITER; } });
7
7
  var get_alias_1 = require("./get-alias");
8
8
  Object.defineProperty(exports, "constructAlias", { enumerable: true, get: function () { return get_alias_1.constructAlias; } });
9
+ Object.defineProperty(exports, "constructCompoundAlias", { enumerable: true, get: function () { return get_alias_1.constructCompoundAlias; } });
9
10
  Object.defineProperty(exports, "getAliasFromSchema", { enumerable: true, get: function () { return get_alias_1.getAliasFromSchema; } });
10
11
  var get_namespaced_key_1 = require("./get-namespaced-key");
11
12
  Object.defineProperty(exports, "getNamespacedKey", { enumerable: true, get: function () { return get_namespaced_key_1.getNamespacedKey; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../meerkat-core/src/member-formatters/index.ts"],"names":[],"mappings":";;;AAAA,yCAA8E;AAArE,kHAAA,qBAAqB,OAAA;AAAE,qHAAA,wBAAwB,OAAA;AACxD,yCAAiE;AAAxD,2GAAA,cAAc,OAAA;AAAE,+GAAA,kBAAkB,OAAA;AAC3C,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA;AACzB,mEAA8D;AAArD,4HAAA,kBAAkB,OAAA;AAC3B,yFAAmF;AAA1E,iJAAA,4BAA4B,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../meerkat-core/src/member-formatters/index.ts"],"names":[],"mappings":";;;AAAA,yCAA8E;AAArE,kHAAA,qBAAqB,OAAA;AAAE,qHAAA,wBAAwB,OAAA;AACxD,yCAIqB;AAHnB,2GAAA,cAAc,OAAA;AACd,mHAAA,sBAAsB,OAAA;AACtB,+GAAA,kBAAkB,OAAA;AAEpB,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA;AACzB,mEAA8D;AAArD,4HAAA,kBAAkB,OAAA;AAC3B,yFAAmF;AAA1E,iJAAA,4BAA4B,OAAA"}
@@ -13,7 +13,7 @@ const generateResolutionJoinPaths = (baseDataSourceName, resolutionConfig, baseT
13
13
  on: (0, member_formatters_1.constructAlias)({
14
14
  name: config.name,
15
15
  alias: (_a = (0, find_in_table_schema_1.findInSchemas)(config.name, baseTableSchemas)) === null || _a === void 0 ? void 0 : _a.alias,
16
- aliasContext: { isAstIdentifier: false },
16
+ aliasContext: { isTableSchemaAlias: true },
17
17
  }),
18
18
  },
19
19
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"generate-resolution-join-paths.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/resolution/generators/generate-resolution-join-paths.ts"],"names":[],"mappings":";;;AAAA,+DAA6E;AAG7E,2EAAiE;AAG1D,MAAM,2BAA2B,GAAG,CACzC,kBAA0B,EAC1B,gBAAkC,EAClC,gBAA+B,EACnB,EAAE;IACd,OAAO,gBAAgB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;;QAAC,OAAA;YACpD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,KAAK,EAAE,IAAA,sCAAkB,EAAC,MAAM,CAAC,IAAI,CAAC;gBACtC,EAAE,EAAE,IAAA,kCAAc,EAAC;oBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,MAAA,IAAA,oCAAa,EAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,0CAAE,KAAK;oBAC1D,YAAY,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE;iBACzC,CAAC;aACH;SACF,CAAA;KAAA,CAAC,CAAC;AACL,CAAC,CAAC;AAhBW,QAAA,2BAA2B,+BAgBtC"}
1
+ {"version":3,"file":"generate-resolution-join-paths.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/resolution/generators/generate-resolution-join-paths.ts"],"names":[],"mappings":";;;AAAA,+DAA6E;AAG7E,2EAAiE;AAG1D,MAAM,2BAA2B,GAAG,CACzC,kBAA0B,EAC1B,gBAAkC,EAClC,gBAA+B,EACnB,EAAE;IACd,OAAO,gBAAgB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;;QAAC,OAAA;YACpD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,KAAK,EAAE,IAAA,sCAAkB,EAAC,MAAM,CAAC,IAAI,CAAC;gBACtC,EAAE,EAAE,IAAA,kCAAc,EAAC;oBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,MAAA,IAAA,oCAAa,EAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,0CAAE,KAAK;oBAC1D,YAAY,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE;iBAC3C,CAAC;aACH;SACF,CAAA;KAAA,CAAC,CAAC;AACL,CAAC,CAAC;AAhBW,QAAA,2BAA2B,+BAgBtC"}
@@ -35,11 +35,7 @@ const generateResolutionSchemas = (config, baseTableSchemas) => {
35
35
  name: (0, member_formatters_1.memberKeyToSafeKey)((0, member_formatters_1.getNamespacedKey)(colConfig.name, col)),
36
36
  sql: `${baseName}.${col}`,
37
37
  type: dimension.type,
38
- alias: `${baseAlias} - ${(0, member_formatters_1.constructAlias)({
39
- name: col,
40
- alias: dimension.alias,
41
- aliasContext: { isTableSchemaAlias: true },
42
- })}`,
38
+ alias: (0, member_formatters_1.memberKeyToSafeKey)((0, member_formatters_1.getNamespacedKey)(colConfig.name, col)),
43
39
  };
44
40
  }),
45
41
  };
@@ -1 +1 @@
1
- {"version":3,"file":"generate-resolution-schemas.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/resolution/generators/generate-resolution-schemas.ts"],"names":[],"mappings":";;;AAAA,+DAIiC;AAEjC,2EAG0C;AAGnC,MAAM,yBAAyB,GAAG,CACvC,MAAwB,EACxB,gBAA+B,EAC/B,EAAE;IACF,MAAM,iBAAiB,GAAkB,EAAE,CAAC;IAC5C,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;;QACzC,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAC1C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,CACrC,CAAC;QACF,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;SACnE;QAED,MAAM,QAAQ,GAAG,IAAA,sCAAkB,EAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,IAAA,kCAAc,EAAC;YAC/B,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,KAAK,EAAE,MAAA,IAAA,oCAAa,EAAC,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAC,0CAAE,KAAK;YAC7D,YAAY,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE;SAC3C,CAAC,CAAC;QAEH,yFAAyF;QACzF,2EAA2E;QAC3E,sBAAsB;QACtB,MAAM,gBAAgB,GAAgB;YACpC,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,WAAW,CAAC,GAAG;YACpB,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBAClD,MAAM,SAAS,GAAG,IAAA,6CAAsB,EACtC,IAAA,oCAAgB,EAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,EACvC,MAAM,CAAC,YAAY,CACpB,CAAC;gBACF,IAAI,CAAC,SAAS,EAAE;oBACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;iBAChD;gBACD,OAAO;oBACL,wDAAwD;oBACxD,yEAAyE;oBACzE,IAAI,EAAE,IAAA,sCAAkB,EAAC,IAAA,oCAAgB,EAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAC/D,GAAG,EAAE,GAAG,QAAQ,IAAI,GAAG,EAAE;oBACzB,IAAI,EAAE,SAAS,CAAC,IAAI;oBACpB,KAAK,EAAE,GAAG,SAAS,MAAM,IAAA,kCAAc,EAAC;wBACtC,IAAI,EAAE,GAAG;wBACT,KAAK,EAAE,SAAS,CAAC,KAAK;wBACtB,YAAY,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE;qBAC3C,CAAC,EAAE;iBACL,CAAC;YACJ,CAAC,CAAC;SACH,CAAC;QAEF,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AAtDW,QAAA,yBAAyB,6BAsDpC"}
1
+ {"version":3,"file":"generate-resolution-schemas.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/resolution/generators/generate-resolution-schemas.ts"],"names":[],"mappings":";;;AAAA,+DAIiC;AAEjC,2EAG0C;AAGnC,MAAM,yBAAyB,GAAG,CACvC,MAAwB,EACxB,gBAA+B,EAC/B,EAAE;IACF,MAAM,iBAAiB,GAAkB,EAAE,CAAC;IAC5C,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;;QACzC,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAC1C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,CACrC,CAAC;QACF,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;SACnE;QAED,MAAM,QAAQ,GAAG,IAAA,sCAAkB,EAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,IAAA,kCAAc,EAAC;YAC/B,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,KAAK,EAAE,MAAA,IAAA,oCAAa,EAAC,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAC,0CAAE,KAAK;YAC7D,YAAY,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE;SAC3C,CAAC,CAAC;QAEH,yFAAyF;QACzF,2EAA2E;QAC3E,sBAAsB;QACtB,MAAM,gBAAgB,GAAgB;YACpC,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,WAAW,CAAC,GAAG;YACpB,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBAClD,MAAM,SAAS,GAAG,IAAA,6CAAsB,EACtC,IAAA,oCAAgB,EAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,EACvC,MAAM,CAAC,YAAY,CACpB,CAAC;gBACF,IAAI,CAAC,SAAS,EAAE;oBACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;iBAChD;gBACD,OAAO;oBACL,wDAAwD;oBACxD,yEAAyE;oBACzE,IAAI,EAAE,IAAA,sCAAkB,EAAC,IAAA,oCAAgB,EAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAC/D,GAAG,EAAE,GAAG,QAAQ,IAAI,GAAG,EAAE;oBACzB,IAAI,EAAE,SAAS,CAAC,IAAI;oBACpB,KAAK,EAAE,IAAA,sCAAkB,EAAC,IAAA,oCAAgB,EAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;iBACjE,CAAC;YACJ,CAAC,CAAC;SACH,CAAC;QAEF,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AAlDW,QAAA,yBAAyB,6BAkDpC"}
@@ -21,4 +21,4 @@ export declare const getAggregatedSql: ({ resolvedTableSchema, resolutionConfig,
21
21
  tableSchemas: TableSchema[];
22
22
  contextParams?: ContextParams | undefined;
23
23
  }) => Promise<string>;
24
- }) => Promise<string>;
24
+ }) => Promise<TableSchema>;
@@ -75,8 +75,9 @@ const getAggregatedSql = ({ resolvedTableSchema, resolutionConfig, contextParams
75
75
  tableSchemas: [schemaWithAggregation],
76
76
  contextParams,
77
77
  });
78
+ const tableSchema = (0, index_1.createWrapperTableSchema)(aggregatedSql, schemaWithAggregation);
78
79
  // Order by row_id to maintain consistent ordering before excluding it
79
- return (0, index_1.wrapWithRowIdOrderingAndExclusion)(aggregatedSql, index_1.ROW_ID_DIMENSION_NAME);
80
+ return tableSchema;
80
81
  });
81
82
  exports.getAggregatedSql = getAggregatedSql;
82
83
  //# sourceMappingURL=aggregation-step.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"aggregation-step.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/resolution/steps/aggregation-step.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aggregation-step.js","sourceRoot":"","sources":["../../../../../meerkat-core/src/resolution/steps/aggregation-step.ts"],"names":[],"mappings":"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"}
@@ -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,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyAliases = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const member_formatters_1 = require("../../member-formatters");
6
+ const get_alias_1 = require("../../member-formatters/get-alias");
7
+ const get_namespaced_key_1 = require("../../member-formatters/get-namespaced-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((config) => [config.name, config])) || []);
33
+ const tableSchemaMap = new Map(resolutionConfig.tableSchemas.map((schema) => [schema.name, schema]));
34
+ // Helper function to process dimensions or measures and populate the alias map
35
+ const processMembers = (members, schemaName) => {
36
+ members.forEach((member) => {
37
+ var _a;
38
+ if (!member.alias)
39
+ return;
40
+ const columnName = (0, member_formatters_1.memberKeyToSafeKey)(`${schemaName}.${member.name}`);
41
+ const columnConfig = columnConfigMap.get(columnName);
42
+ // No resolution config - use original alias
43
+ if (!columnConfig) {
44
+ aliasMap.set(columnName, member.alias);
45
+ return;
46
+ }
47
+ const joinedTableName = columnName;
48
+ // Single resolution column - use original alias
49
+ if (columnConfig.resolutionColumns.length === 1) {
50
+ aliasMap.set((0, member_formatters_1.memberKeyToSafeKey)((0, get_namespaced_key_1.getNamespacedKey)(joinedTableName, columnConfig.resolutionColumns[0])), member.alias);
51
+ return;
52
+ }
53
+ // Multiple resolution columns - create compound aliases
54
+ const sourceTableSchema = tableSchemaMap.get(columnConfig.source);
55
+ if (!sourceTableSchema) {
56
+ throw new Error(`Source table schema not found for ${columnConfig.source}`);
57
+ }
58
+ for (const resolutionColumn of columnConfig.resolutionColumns) {
59
+ const sourceFieldAlias = (_a = sourceTableSchema.dimensions.find((dimension) => dimension.name === resolutionColumn)) === null || _a === void 0 ? void 0 : _a.alias;
60
+ if (!sourceFieldAlias) {
61
+ throw new Error(`Source field alias not found for ${resolutionColumn}`);
62
+ }
63
+ aliasMap.set((0, member_formatters_1.memberKeyToSafeKey)((0, get_namespaced_key_1.getNamespacedKey)(joinedTableName, resolutionColumn)), (0, get_alias_1.constructCompoundAlias)(member.alias, sourceFieldAlias));
64
+ }
65
+ });
66
+ };
67
+ originalTableSchemas.forEach((schema) => {
68
+ processMembers(schema.dimensions, schema.name);
69
+ processMembers(schema.measures, schema.name);
70
+ });
71
+ // Create a new schema with restored aliases
72
+ const schemaWithAliases = Object.assign(Object.assign({}, aggregatedTableSchema), { dimensions: [
73
+ ...aggregatedTableSchema.dimensions.map((dim) => {
74
+ var _a;
75
+ return (Object.assign(Object.assign({}, dim), { alias: aliasMap.get((_a = dim.alias) !== null && _a !== void 0 ? _a : '') || dim.alias }));
76
+ }),
77
+ ...aggregatedTableSchema.measures.map((measure) => {
78
+ var _a;
79
+ return (Object.assign(Object.assign({}, measure), { alias: aliasMap.get((_a = measure.alias) !== null && _a !== void 0 ? _a : '') || measure.alias }));
80
+ }),
81
+ ], measures: [] });
82
+ // Generate final SQL with aliases
83
+ const sqlWithAliases = yield cubeQueryToSQL({
84
+ query: {
85
+ dimensions: [
86
+ ...schemaWithAliases.dimensions.map((d) => (0, get_namespaced_key_1.getNamespacedKey)(schemaWithAliases.name, d.name)),
87
+ ],
88
+ measures: [],
89
+ },
90
+ tableSchemas: [schemaWithAliases],
91
+ contextParams,
92
+ });
93
+ return sqlWithAliases;
94
+ });
95
+ exports.applyAliases = applyAliases;
96
+ //# 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,39 @@
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 (datasource__fieldname).
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 automatically 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
+ * // issues.priority_tags gets automatically replaced with issues__priority_tags
37
+ * ```
38
+ */
39
+ export declare const applySqlOverrides: (baseSchema: TableSchema, resolutionConfig: ResolutionConfig) => TableSchema;
@@ -0,0 +1,83 @@
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 (datasource__fieldname).
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 automatically 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
+ * // issues.priority_tags gets automatically replaced with issues__priority_tags
39
+ * ```
40
+ */
41
+ const applySqlOverrides = (baseSchema, resolutionConfig) => {
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., 'issues.priority' -> 'issues__priority'
59
+ const safeFieldName = (0, member_formatters_1.memberKeyToSafeKey)(overrideConfig.fieldName);
60
+ // Check dimensions in base schema
61
+ const dimensionIndex = updatedSchema.dimensions.findIndex((dim) => dim.name === safeFieldName);
62
+ if (dimensionIndex !== -1) {
63
+ const originalDimension = updatedSchema.dimensions[dimensionIndex];
64
+ // Replace datasource.fieldName with datasource__fieldName in the SQL
65
+ // e.g., "issues.priority" -> "issues__priority"
66
+ const fieldNamePattern = overrideConfig.fieldName.replace(/\./g, '\\.'); // Escape dots for regex
67
+ const finalSql = overrideConfig.overrideSql.replace(new RegExp(`\\b${fieldNamePattern}\\b`, 'g'), // Word boundary to match exact field names
68
+ safeFieldName);
69
+ updatedSchema.dimensions[dimensionIndex] = Object.assign(Object.assign({}, originalDimension), { sql: finalSql, type: overrideConfig.type });
70
+ }
71
+ // Check measures in base schema
72
+ const measureIndex = updatedSchema.measures.findIndex((measure) => measure.name === safeFieldName);
73
+ if (measureIndex !== -1) {
74
+ const originalMeasure = updatedSchema.measures[measureIndex];
75
+ const fieldNamePattern = overrideConfig.fieldName.replace(/\./g, '\\.');
76
+ const finalSql = overrideConfig.overrideSql.replace(new RegExp(`\\b${fieldNamePattern}\\b`, 'g'), safeFieldName);
77
+ updatedSchema.measures[measureIndex] = Object.assign(Object.assign({}, originalMeasure), { sql: finalSql, type: overrideConfig.type });
78
+ }
79
+ });
80
+ return updatedSchema;
81
+ };
82
+ exports.applySqlOverrides = applySqlOverrides;
83
+ //# 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":";;;AAAA,+DAA6D;AAI7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACI,MAAM,iBAAiB,GAAG,CAC/B,UAAuB,EACvB,gBAAkC,EACrB,EAAE;IACf,IACE,CAAC,gBAAgB,CAAC,kBAAkB;QACpC,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAChD;QACA,OAAO,UAAU,CAAC;KACnB;IAED,uEAAuE;IACvE,gBAAgB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;QAC7D,0EAA0E;QAC1E,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;YAClE,MAAM,IAAI,KAAK,CACb,2BAA2B,cAAc,CAAC,SAAS,yCAAyC;gBAC1F,gBAAgB,cAAc,CAAC,WAAW,EAAE,CAC/C,CAAC;SACH;IACH,CAAC,CAAC,CAAC;IAEH,0DAA0D;IAC1D,MAAM,aAAa,mCACd,UAAU,KACb,UAAU,EAAE,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,EACtC,QAAQ,EAAE,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,GACnC,CAAC;IAEF,gBAAgB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;QAC7D,sDAAsD;QACtD,gDAAgD;QAChD,MAAM,aAAa,GAAG,IAAA,sCAAkB,EAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAEnE,kCAAkC;QAClC,MAAM,cAAc,GAAG,aAAa,CAAC,UAAU,CAAC,SAAS,CACvD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa,CACpC,CAAC;QAEF,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;YACzB,MAAM,iBAAiB,GAAG,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAEnE,qEAAqE;YACrE,gDAAgD;YAChD,MAAM,gBAAgB,GAAG,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,wBAAwB;YAEjG,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,OAAO,CACjD,IAAI,MAAM,CAAC,MAAM,gBAAgB,KAAK,EAAE,GAAG,CAAC,EAAE,2CAA2C;YACzF,aAAa,CACd,CAAC;YAEF,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,mCACnC,iBAAiB,KACpB,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,cAAc,CAAC,IAAI,GAC1B,CAAC;SACH;QAED,gCAAgC;QAChC,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,CAAC,SAAS,CACnD,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,aAAa,CAC5C,CAAC;QAEF,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;YACvB,MAAM,eAAe,GAAG,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAE7D,MAAM,gBAAgB,GAAG,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAExE,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,OAAO,CACjD,IAAI,MAAM,CAAC,MAAM,gBAAgB,KAAK,EAAE,GAAG,CAAC,EAC5C,aAAa,CACd,CAAC;YAEF,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,mCAC/B,eAAe,KAClB,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,cAAc,CAAC,IAAI,GAC1B,CAAC;SACH;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AAlFW,QAAA,iBAAiB,qBAkF5B"}
@@ -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"}