Skip to content

Commit 2c5db32

Browse files
authored
feat(api-gateway, server-core): Added dataSources list to extended meta (#5743)
1 parent 03f0cb1 commit 2c5db32

File tree

3 files changed

+59
-3
lines changed

3 files changed

+59
-3
lines changed

packages/cubejs-api-gateway/src/gateway.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ class ApiGateway {
461461
const metaConfigExtended = await this.getCompilerApi(context).metaConfigExtended({
462462
requestId: context.requestId,
463463
});
464-
const { metaConfig, cubeDefinitions } = metaConfigExtended;
464+
const { metaConfig, cubeDefinitions, dataSources } = metaConfigExtended;
465465

466466
const cubes = this.filterVisibleItemsInMeta(context, metaConfig)
467467
.map((meta) => meta.config)
@@ -479,7 +479,7 @@ class ApiGateway {
479479
joins: transformJoins(cubeDefinitions[cube.name]?.joins),
480480
preAggregations: transformPreAggregations(cubeDefinitions[cube.name]?.preAggregations),
481481
}));
482-
res({ cubes });
482+
res({ cubes, dataSources });
483483
} catch (e) {
484484
this.handleError({
485485
e,

packages/cubejs-server-core/src/core/CompilerApi.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ export class CompilerApi {
6666
return this.compilers;
6767
}
6868

69+
async getDataSources(cubeEvaluator) {
70+
return Promise.all(cubeEvaluator.cubeNames().map(async cube => cubeEvaluator.cubeFromPath(cube).dataSource ?? 'default'));
71+
}
72+
6973
async createQueryFactory(compilers) {
7074
const { cubeEvaluator } = compilers;
7175

@@ -180,9 +184,10 @@ export class CompilerApi {
180184
}
181185

182186
async metaConfigExtended(options) {
183-
const { metaTransformer } = await this.getCompilers(options);
187+
const { metaTransformer, cubeEvaluator } = await this.getCompilers(options);
184188
return {
185189
metaConfig: metaTransformer?.cubes,
190+
dataSources: await this.getDataSources(cubeEvaluator),
186191
cubeDefinitions: metaTransformer?.cubeEvaluator?.cubeDefinitions,
187192
};
188193
}

packages/cubejs-server-core/test/unit/index.test.ts

+51
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,34 @@ cube('Bar', {
5252
]),
5353
};
5454

55+
const repositoryWithDataSource: SchemaFileRepository = {
56+
localPath: () => __dirname,
57+
dataSchemaFiles: () => Promise.resolve([
58+
{
59+
fileName: 'main.js', content: `
60+
cube('Bar', {
61+
sql: 'select * from bar',
62+
63+
measures: {
64+
count: {
65+
type: 'count'
66+
}
67+
},
68+
69+
dataSource: 'dataSource',
70+
71+
dimensions: {
72+
time: {
73+
sql: 'timestamp',
74+
type: 'time'
75+
}
76+
}
77+
});
78+
`,
79+
},
80+
]),
81+
};
82+
5583
const repositoryWithoutContent: SchemaFileRepository = {
5684
localPath: () => __dirname,
5785
dataSchemaFiles: () => Promise.resolve([{ fileName: 'main.js', content: '' }]),
@@ -335,6 +363,29 @@ describe('index.test', () => {
335363
expect(metaConfigExtended).toHaveProperty('metaConfig');
336364
expect(metaConfigExtended.metaConfig.length).toBeGreaterThan(0);
337365
expect(metaConfigExtended).toHaveProperty('cubeDefinitions');
366+
expect(metaConfigExtended).toHaveProperty('dataSources');
367+
expect(metaConfigExtended.dataSources).toEqual(['default']);
368+
expect(metaConfigExtendedSpy).toHaveBeenCalled();
369+
metaConfigExtendedSpy.mockClear();
370+
});
371+
});
372+
373+
describe('CompilerApi with dataSource', () => {
374+
const logger = jest.fn(() => {});
375+
const compilerApi = new CompilerApi(
376+
repositoryWithDataSource,
377+
async () => 'mysql',
378+
{ logger }
379+
);
380+
const metaConfigExtendedSpy = jest.spyOn(compilerApi, 'metaConfigExtended');
381+
382+
test('CompilerApi metaConfigExtended', async () => {
383+
const metaConfigExtended = await compilerApi.metaConfigExtended({ requestId: 'XXX' });
384+
expect(metaConfigExtended).toHaveProperty('metaConfig');
385+
expect(metaConfigExtended.metaConfig.length).toBeGreaterThan(0);
386+
expect(metaConfigExtended).toHaveProperty('cubeDefinitions');
387+
expect(metaConfigExtended).toHaveProperty('dataSources');
388+
expect(metaConfigExtended.dataSources).toEqual(['dataSource']);
338389
expect(metaConfigExtendedSpy).toHaveBeenCalled();
339390
metaConfigExtendedSpy.mockClear();
340391
});

0 commit comments

Comments
 (0)