Skip to content

Commit ea4f27c

Browse files
committed
add CUBEJS_NESTED_FOLDERS_DELIMITER env and related flow
1 parent adda302 commit ea4f27c

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

packages/cubejs-backend-shared/src/env.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,9 @@ const variables: Record<string, (...args: any) => any> = {
240240
transpilationNative: () => get('CUBEJS_TRANSPILATION_NATIVE')
241241
.default('false')
242242
.asBoolStrict(),
243+
nestedFoldersDelimiter: () => get('CUBEJS_NESTED_FOLDERS_DELIMITER')
244+
.default('')
245+
.asString(),
243246

244247
/** ****************************************************************
245248
* Common db options *

packages/cubejs-schema-compiler/src/compiler/CubeToMetaTransformer.js

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import inflection from 'inflection';
22
import R from 'ramda';
33
import camelCase from 'camelcase';
44

5+
import { getEnv } from '@cubejs-backend/shared';
56
import { CubeSymbols } from './CubeSymbols';
67
import { UserError } from './UserError';
78
import { BaseMeasure } from '../adapter';
@@ -43,25 +44,34 @@ export class CubeToMetaTransformer {
4344

4445
const isCubeVisible = this.isVisible(cube, true);
4546

46-
const flatFolderSeparator = '/';
47+
const flatFolderSeparator = getEnv('nestedFoldersDelimiter');
4748
const flatFolders = [];
4849

49-
const processFolder = (folder, path = []) => {
50+
const processFolder = (folder, path = [], mergedMembers = []) => {
5051
const flatMembers = [];
5152
const nestedMembers = folder.includes.map(member => {
5253
if (member.type === 'folder') {
53-
return processFolder(member, [...path, folder.name]);
54+
return processFolder(member, [...path, folder.name], flatMembers);
5455
}
5556
const memberName = `${cube.name}.${member.name}`;
5657
flatMembers.push(memberName);
5758

58-
return `${cube.name}.${member.name}`;
59+
return memberName;
5960
});
6061

61-
flatFolders.push({
62-
name: [...path, folder.name].join(flatFolderSeparator),
63-
members: flatMembers,
64-
});
62+
if (flatFolderSeparator !== '') {
63+
flatFolders.push({
64+
name: [...path, folder.name].join(flatFolderSeparator),
65+
members: flatMembers,
66+
});
67+
} else if (path.length > 0) {
68+
mergedMembers.push(...flatMembers);
69+
} else { // We're at the root level
70+
flatFolders.push({
71+
name: folder.name,
72+
members: flatMembers,
73+
});
74+
}
6575

6676
return {
6777
name: folder.name,

0 commit comments

Comments
 (0)