From 442ee9f5e53a8564bbb5f645701cd84ec3e0c7cc Mon Sep 17 00:00:00 2001 From: Alexandr Romanenko Date: Wed, 15 Oct 2025 18:09:06 +0200 Subject: [PATCH 1/6] fix(cube): Meta type for switch dimension --- .../src/compiler/CubeToMetaTransformer.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/cubejs-schema-compiler/src/compiler/CubeToMetaTransformer.js b/packages/cubejs-schema-compiler/src/compiler/CubeToMetaTransformer.js index 798b14faf2b3d..44cb5c87ae635 100644 --- a/packages/cubejs-schema-compiler/src/compiler/CubeToMetaTransformer.js +++ b/packages/cubejs-schema-compiler/src/compiler/CubeToMetaTransformer.js @@ -103,7 +103,7 @@ export class CubeToMetaTransformer { R.map((nameToDimension) => ({ name: `${cube.name}.${nameToDimension[0]}`, title: this.title(cubeTitle, nameToDimension), - type: nameToDimension[1].type, + type: this.dimensionDataType(nameToDimension[1].type), description: nameToDimension[1].description, shortTitle: this.title(cubeTitle, nameToDimension, true), suggestFilterValues: @@ -197,6 +197,10 @@ export class CubeToMetaTransformer { return defaultValue; } + dimensionDataType(dimensionType) { + dimensionType == 'switch' ? 'string' : dimensionType; + } + measureConfig(cubeName, cubeTitle, nameToMetric) { const name = `${cubeName}.${nameToMetric[0]}`; // Support both old 'drillMemberReferences' and new 'drillMembers' keys From 3b7d76803702a81bbc071c834b784923f7fa06c7 Mon Sep 17 00:00:00 2001 From: Alexandr Romanenko Date: Wed, 15 Oct 2025 18:11:34 +0200 Subject: [PATCH 2/6] upd --- .../src/compiler/CubeToMetaTransformer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cubejs-schema-compiler/src/compiler/CubeToMetaTransformer.js b/packages/cubejs-schema-compiler/src/compiler/CubeToMetaTransformer.js index 44cb5c87ae635..db405923524ce 100644 --- a/packages/cubejs-schema-compiler/src/compiler/CubeToMetaTransformer.js +++ b/packages/cubejs-schema-compiler/src/compiler/CubeToMetaTransformer.js @@ -198,7 +198,7 @@ export class CubeToMetaTransformer { } dimensionDataType(dimensionType) { - dimensionType == 'switch' ? 'string' : dimensionType; + dimensionType === 'switch' ? 'string' : dimensionType; } measureConfig(cubeName, cubeTitle, nameToMetric) { From 19f081af9fc2bbc91a58a6ec0eacb045e6f99d69 Mon Sep 17 00:00:00 2001 From: Alexandr Romanenko Date: Thu, 16 Oct 2025 14:05:35 +0200 Subject: [PATCH 3/6] fix --- .../src/compiler/CubeToMetaTransformer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cubejs-schema-compiler/src/compiler/CubeToMetaTransformer.js b/packages/cubejs-schema-compiler/src/compiler/CubeToMetaTransformer.js index db405923524ce..91bfe840cc74b 100644 --- a/packages/cubejs-schema-compiler/src/compiler/CubeToMetaTransformer.js +++ b/packages/cubejs-schema-compiler/src/compiler/CubeToMetaTransformer.js @@ -198,7 +198,7 @@ export class CubeToMetaTransformer { } dimensionDataType(dimensionType) { - dimensionType === 'switch' ? 'string' : dimensionType; + return dimensionType === 'switch' ? 'string' : dimensionType; } measureConfig(cubeName, cubeTitle, nameToMetric) { From fbd2bf0d234b3169f67e036cac732a316b2624fd Mon Sep 17 00:00:00 2001 From: Alexandr Romanenko Date: Thu, 16 Oct 2025 15:23:14 +0200 Subject: [PATCH 4/6] test --- .../test/unit/fixtures/switch-dimension.yml | 28 +++++++++++++++++++ .../test/unit/switch-dimension.test.ts | 27 ++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 packages/cubejs-schema-compiler/test/unit/fixtures/switch-dimension.yml create mode 100644 packages/cubejs-schema-compiler/test/unit/switch-dimension.test.ts diff --git a/packages/cubejs-schema-compiler/test/unit/fixtures/switch-dimension.yml b/packages/cubejs-schema-compiler/test/unit/fixtures/switch-dimension.yml new file mode 100644 index 0000000000000..d39c004238d9d --- /dev/null +++ b/packages/cubejs-schema-compiler/test/unit/fixtures/switch-dimension.yml @@ -0,0 +1,28 @@ +cubes: + - name: orders + sql: SELECT * FROM orders + + measures: + - name: count + sql: id + type: count + dimensions: + - name: id + sql: id + type: number + primary_key: true + + - name: number + sql: number + type: number + + - name: currency + type: switch + values: + - USD + - EUR + - GBP + + - name: status + sql: status + type: string diff --git a/packages/cubejs-schema-compiler/test/unit/switch-dimension.test.ts b/packages/cubejs-schema-compiler/test/unit/switch-dimension.test.ts new file mode 100644 index 0000000000000..677f73cb16565 --- /dev/null +++ b/packages/cubejs-schema-compiler/test/unit/switch-dimension.test.ts @@ -0,0 +1,27 @@ +import fs from 'fs'; +import path from 'path'; + +import { CubeToMetaTransformer } from 'src/compiler/CubeToMetaTransformer'; +import { prepareYamlCompiler } from './PrepareCompiler'; + +describe('Switch Dimension', () => { + it('Switch dimension meta type', async () => { + const modelContent = fs.readFileSync( + path.join(process.cwd(), '/test/unit/fixtures/switch-dimension.yml'), + 'utf8' + ); + const prepared = prepareYamlCompiler(modelContent); + const { metaTransformer } = prepared; + const { compiler } = prepared; + await compiler.compile(); + + const cube = metaTransformer.cubes[0]; + const numberDim = cube.config.dimensions.find((d) => d.name === 'orders.number'); + const statusDim = cube.config.dimensions.find((d) => d.name === 'orders.status'); + const currencyDim = cube.config.dimensions.find((d) => d.name === 'orders.currency'); + + expect(numberDim.type).toBe('number'); + expect(statusDim.type).toBe('string'); + expect(currencyDim.type).toBe('string'); + }); +}); From a5c32ccbd94497b70e480ece7c5592e4963af121 Mon Sep 17 00:00:00 2001 From: Alexandr Romanenko Date: Thu, 16 Oct 2025 15:32:08 +0200 Subject: [PATCH 5/6] fix --- .../cubejs-schema-compiler/test/unit/switch-dimension.test.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/cubejs-schema-compiler/test/unit/switch-dimension.test.ts b/packages/cubejs-schema-compiler/test/unit/switch-dimension.test.ts index 677f73cb16565..1941dfd7fe684 100644 --- a/packages/cubejs-schema-compiler/test/unit/switch-dimension.test.ts +++ b/packages/cubejs-schema-compiler/test/unit/switch-dimension.test.ts @@ -10,9 +10,7 @@ describe('Switch Dimension', () => { path.join(process.cwd(), '/test/unit/fixtures/switch-dimension.yml'), 'utf8' ); - const prepared = prepareYamlCompiler(modelContent); - const { metaTransformer } = prepared; - const { compiler } = prepared; + const { metaTransformer, compiler } = prepareYamlCompiler(modelContent); await compiler.compile(); const cube = metaTransformer.cubes[0]; From 7e7b15c82804b59fd0e97388a0e45d478567e31e Mon Sep 17 00:00:00 2001 From: Alexandr Romanenko Date: Thu, 16 Oct 2025 15:43:37 +0200 Subject: [PATCH 6/6] fix lint --- .../cubejs-schema-compiler/test/unit/switch-dimension.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cubejs-schema-compiler/test/unit/switch-dimension.test.ts b/packages/cubejs-schema-compiler/test/unit/switch-dimension.test.ts index 1941dfd7fe684..d95d7b222b56c 100644 --- a/packages/cubejs-schema-compiler/test/unit/switch-dimension.test.ts +++ b/packages/cubejs-schema-compiler/test/unit/switch-dimension.test.ts @@ -10,7 +10,7 @@ describe('Switch Dimension', () => { path.join(process.cwd(), '/test/unit/fixtures/switch-dimension.yml'), 'utf8' ); - const { metaTransformer, compiler } = prepareYamlCompiler(modelContent); + const { metaTransformer, compiler } = prepareYamlCompiler(modelContent); await compiler.compile(); const cube = metaTransformer.cubes[0];