From 9cfdc5a5bb43b34189b94b4d0158a7f30dc21e41 Mon Sep 17 00:00:00 2001 From: Konstantin Burkalev Date: Mon, 14 Apr 2025 17:30:22 +0300 Subject: [PATCH] fix(schema-compiler): Fix incorrect transpilation of yaml models --- .../src/compiler/YamlCompiler.ts | 29 ++----- .../test/unit/yaml-schema.test.ts | 77 +++++++++++++++++++ 2 files changed, 83 insertions(+), 23 deletions(-) diff --git a/packages/cubejs-schema-compiler/src/compiler/YamlCompiler.ts b/packages/cubejs-schema-compiler/src/compiler/YamlCompiler.ts index 322cdc84f1aa4..30933af64df3d 100644 --- a/packages/cubejs-schema-compiler/src/compiler/YamlCompiler.ts +++ b/packages/cubejs-schema-compiler/src/compiler/YamlCompiler.ts @@ -127,29 +127,12 @@ export class YamlCompiler { private transformYamlCubeObj(cubeObj, errorsReport: ErrorReporter) { camelizeCube(cubeObj); - if (cubeObj.measures) { - cubeObj.measures = this.yamlArrayToObj(cubeObj.measures, 'measure', errorsReport); - } - - if (cubeObj.dimensions) { - cubeObj.dimensions = this.yamlArrayToObj(cubeObj.dimensions, 'dimension', errorsReport); - } - - if (cubeObj.segments) { - cubeObj.segments = this.yamlArrayToObj(cubeObj.segments, 'segment', errorsReport); - } - - if (cubeObj.preAggregations) { - cubeObj.preAggregations = this.yamlArrayToObj(cubeObj.preAggregations, 'preAggregation', errorsReport); - } - - if (cubeObj.joins) { - cubeObj.joins = this.yamlArrayToObj(cubeObj.joins, 'join', errorsReport); - } - - if (cubeObj.hierarchies) { - cubeObj.hierarchies = this.yamlArrayToObj(cubeObj.hierarchies, 'hierarchies', errorsReport); - } + cubeObj.measures = this.yamlArrayToObj(cubeObj.measures || [], 'measure', errorsReport); + cubeObj.dimensions = this.yamlArrayToObj(cubeObj.dimensions || [], 'dimension', errorsReport); + cubeObj.segments = this.yamlArrayToObj(cubeObj.segments || [], 'segment', errorsReport); + cubeObj.preAggregations = this.yamlArrayToObj(cubeObj.preAggregations || [], 'preAggregation', errorsReport); + cubeObj.joins = this.yamlArrayToObj(cubeObj.joins || [], 'join', errorsReport); + cubeObj.hierarchies = this.yamlArrayToObj(cubeObj.hierarchies || [], 'hierarchies', errorsReport); return this.transpileYaml(cubeObj, [], cubeObj.name, errorsReport); } diff --git a/packages/cubejs-schema-compiler/test/unit/yaml-schema.test.ts b/packages/cubejs-schema-compiler/test/unit/yaml-schema.test.ts index 2acd7fa25ce1a..5fbe4f18f1100 100644 --- a/packages/cubejs-schema-compiler/test/unit/yaml-schema.test.ts +++ b/packages/cubejs-schema-compiler/test/unit/yaml-schema.test.ts @@ -128,6 +128,83 @@ describe('Yaml Schema Testing', () => { } }); + it('empty (null) dimensions', async () => { + const { compiler } = prepareYamlCompiler( + `cubes: + - name: Users + sql: SELECT * FROM e2e.users + dimensions: + ` + ); + + await compiler.compile(); + }); + + it('empty (null) measures', async () => { + const { compiler } = prepareYamlCompiler( + `cubes: + - name: Users + sql: SELECT * FROM e2e.users + measures: + ` + ); + + await compiler.compile(); + }); + + it('empty (null) segments', async () => { + const { compiler } = prepareYamlCompiler( + `cubes: + - name: Users + sql: SELECT * FROM e2e.users + segments: + ` + ); + + await compiler.compile(); + }); + + it('empty (null) preAggregations', async () => { + const { compiler } = prepareYamlCompiler( + `cubes: + - name: Users + sql: SELECT * FROM e2e.users + dimensions: [] + measures: [] + segments: [] + preAggregations: + joins: [] + hierarchies: [] + ` + ); + + await compiler.compile(); + }); + + it('empty (null) joins', async () => { + const { compiler } = prepareYamlCompiler( + `cubes: + - name: Users + sql: SELECT * FROM e2e.users + joins: + ` + ); + + await compiler.compile(); + }); + + it('empty (null) hierarchies', async () => { + const { compiler } = prepareYamlCompiler( + `cubes: + - name: Users + sql: SELECT * FROM e2e.users + hierarchies: + ` + ); + + await compiler.compile(); + }); + it('unnamed measure', async () => { const { compiler } = prepareYamlCompiler( `cubes: