Skip to content

Commit fa4a911

Browse files
committed
add a fallback workaround for joins as object in js models
1 parent d0cd6ef commit fa4a911

File tree

1 file changed

+28
-13
lines changed

1 file changed

+28
-13
lines changed

packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -422,33 +422,48 @@ export class CubeEvaluator extends CubeSymbols {
422422
}
423423
}
424424

425-
protected prepareJoins(cube: any, _errorReporter: ErrorReporter) {
425+
protected prepareJoins(cube: any, errorReporter: ErrorReporter) {
426426
if (!cube.joins) {
427427
return;
428428
}
429429

430-
const joins: JoinDefinition[] = Array.isArray(cube.joins) ? cube.joins : Object.values(cube.joins);
431-
432-
joins.forEach(join => {
433-
// eslint-disable-next-line default-case
434-
switch (join.relationship) {
430+
const transformRelationship = (relationship: string): string => {
431+
switch (relationship) {
435432
case 'belongs_to':
436433
case 'many_to_one':
437434
case 'manyToOne':
438-
join.relationship = 'belongsTo';
439-
break;
435+
return 'belongsTo';
440436
case 'has_many':
441437
case 'one_to_many':
442438
case 'oneToMany':
443-
join.relationship = 'hasMany';
444-
break;
439+
return 'hasMany';
445440
case 'has_one':
446441
case 'one_to_one':
447442
case 'oneToOne':
448-
join.relationship = 'hasOne';
449-
break;
443+
return 'hasOne';
444+
default:
445+
return relationship;
450446
}
451-
});
447+
};
448+
449+
let joins: JoinDefinition[] = [];
450+
451+
if (Array.isArray(cube.joins)) {
452+
joins = cube.joins.map((join: JoinDefinition) => {
453+
join.relationship = transformRelationship(join.relationship);
454+
return join;
455+
});
456+
} else if (typeof cube.joins === 'object') {
457+
joins = Object.entries(cube.joins).map(([name, join]: [string, any]) => {
458+
join.relationship = transformRelationship(join.relationship);
459+
join.name = name;
460+
return join as JoinDefinition;
461+
});
462+
} else {
463+
errorReporter.error(`Invalid joins definition for cube '${cube.name}': expected an array or an object.`);
464+
}
465+
466+
cube.joins = joins;
452467
}
453468

454469
protected preparePreAggregations(cube: any, errorReporter: ErrorReporter) {

0 commit comments

Comments
 (0)