diff --git a/meerkat-browser/package.json b/meerkat-browser/package.json index e8d72931..d69a2e51 100644 --- a/meerkat-browser/package.json +++ b/meerkat-browser/package.json @@ -1,6 +1,6 @@ { "name": "@devrev/meerkat-browser", - "version": "0.0.135", + "version": "0.0.136", "dependencies": { "tslib": "^2.3.0", "@devrev/meerkat-core": "*", diff --git a/meerkat-core/package.json b/meerkat-core/package.json index 7d9c217d..44f087ce 100644 --- a/meerkat-core/package.json +++ b/meerkat-core/package.json @@ -1,6 +1,6 @@ { "name": "@devrev/meerkat-core", - "version": "0.0.135", + "version": "0.0.136", "dependencies": { "tslib": "^2.3.0" }, diff --git a/meerkat-core/src/cube-measure-transformer/cube-measure-transformer.spec.ts b/meerkat-core/src/cube-measure-transformer/cube-measure-transformer.spec.ts index 0fd699a3..e4c22181 100644 --- a/meerkat-core/src/cube-measure-transformer/cube-measure-transformer.spec.ts +++ b/meerkat-core/src/cube-measure-transformer/cube-measure-transformer.spec.ts @@ -120,6 +120,13 @@ describe('cubeMeasureToSQLSelectString', () => { ); }); + it('should not emit a leading comma when an earlier dimension fails to resolve', () => { + const dimensions: Member[] = ['temp.unknown_dimension', 'temp.dimension1']; + const sqlToReplace = 'SELECT * FROM (SELECT * FROM TABLE_1)'; + const result = applyProjectionToSQLQuery(dimensions, [], [tableSchema], sqlToReplace); + expect(result).toBe(`SELECT temp__dimension1 FROM (SELECT * FROM TABLE_1)`); + }); + it('should use aliases when provided', () => { const measures: Member[] = ['temp.measure1', 'temp.measure2']; const sqlToReplace = 'SELECT * FROM my_table'; diff --git a/meerkat-core/src/cube-measure-transformer/cube-measure-transformer.ts b/meerkat-core/src/cube-measure-transformer/cube-measure-transformer.ts index 460ec812..f4aa94c5 100644 --- a/meerkat-core/src/cube-measure-transformer/cube-measure-transformer.ts +++ b/meerkat-core/src/cube-measure-transformer/cube-measure-transformer.ts @@ -98,12 +98,9 @@ const addDimensionToSQLProjection = ( selectString: string, tableSchemas: TableSchema[] ) => { - if (dimensions.length === 0) { - return selectString; - } - let newSelectString = selectString; - for (let i = 0; i < dimensions.length; i++) { - const dimension = dimensions[i]; + const entries: string[] = []; + + for (const dimension of dimensions) { const resolved = findSchemaForMember(dimension, tableSchemas); if (!resolved) { continue; @@ -122,13 +119,11 @@ const addDimensionToSQLProjection = ( if (!dimensionSchema) { continue; } - if (i > 0) { - newSelectString += ','; - } // since alias key is expected to have been unfurled in the base query, we can just use it as is. - newSelectString += ` ${aliasKey}`; + entries.push(` ${aliasKey}`); } - return newSelectString; + + return selectString + entries.join(','); }; export const getSelectReplacedSql = (sql: string, selectString: string) => { diff --git a/meerkat-node/package.json b/meerkat-node/package.json index 8e7c8878..8944df68 100644 --- a/meerkat-node/package.json +++ b/meerkat-node/package.json @@ -1,6 +1,6 @@ { "name": "@devrev/meerkat-node", - "version": "0.0.135", + "version": "0.0.136", "dependencies": { "@devrev/meerkat-core": "*", "@swc/helpers": "~0.5.0",