Skip to content

Commit 1a3344a

Browse files
KSDaemonmarianore-muttdata
authored andcommitted
fix(schema-compiler): Fix not working timeshift in views (cube-js#9504)
* fix(schema-compiler): Fix not working timeshift in views * add tests
1 parent f2733fe commit 1a3344a

File tree

5 files changed

+93
-6
lines changed

5 files changed

+93
-6
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -541,22 +541,28 @@ export class CubeSymbols {
541541
title: resolvedMember.title,
542542
description: resolvedMember.description,
543543
format: resolvedMember.format,
544+
...(resolvedMember.multiStage && { multiStage: resolvedMember.multiStage }),
545+
...(resolvedMember.timeShift && { timeShift: resolvedMember.timeShift }),
546+
...(resolvedMember.orderBy && { orderBy: resolvedMember.orderBy }),
544547
};
545548
} else if (type === 'dimensions') {
546549
memberDefinition = {
547-
...(resolvedMember.granularities ? { granularities: resolvedMember.granularities } : {}),
548550
sql,
549551
type: resolvedMember.type,
550552
meta: resolvedMember.meta,
551553
title: resolvedMember.title,
552554
description: resolvedMember.description,
553555
format: resolvedMember.format,
556+
...(resolvedMember.granularities ? { granularities: resolvedMember.granularities } : {}),
557+
...(resolvedMember.multiStage && { multiStage: resolvedMember.multiStage }),
554558
};
555559
} else if (type === 'segments') {
556560
memberDefinition = {
557561
sql,
558562
meta: resolvedMember.meta,
563+
title: resolvedMember.title,
559564
description: resolvedMember.description,
565+
aliases: resolvedMember.aliases,
560566
};
561567
} else if (type === 'hierarchies') {
562568
memberDefinition = {

packages/cubejs-schema-compiler/test/unit/__snapshots__/schema.test.ts.snap

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1347,3 +1347,64 @@ Array [
13471347
},
13481348
]
13491349
`;
1350+
1351+
exports[`Schema Testing Views extends custom granularities and timeshifts 1`] = `
1352+
Object {
1353+
"aliasMember": "orders.createdAt",
1354+
"description": undefined,
1355+
"format": undefined,
1356+
"granularities": Object {
1357+
"half_year": Object {
1358+
"interval": "6 months",
1359+
"title": "6 month intervals",
1360+
},
1361+
"half_year_by_1st_april": Object {
1362+
"interval": "6 months",
1363+
"offset": "3 months",
1364+
"title": "Half year from Apr to Oct",
1365+
},
1366+
"half_year_by_1st_june": Object {
1367+
"interval": "6 months",
1368+
"origin": "2020-06-01 10:00:00",
1369+
},
1370+
"half_year_by_1st_march": Object {
1371+
"interval": "6 months",
1372+
"origin": "2020-03-01",
1373+
},
1374+
},
1375+
"meta": undefined,
1376+
"ownedByCube": false,
1377+
"sql": [Function],
1378+
"title": undefined,
1379+
"type": "time",
1380+
}
1381+
`;
1382+
1383+
exports[`Schema Testing Views extends custom granularities and timeshifts 2`] = `
1384+
Object {
1385+
"aggType": "count",
1386+
"aliasMember": "orders.count_shifted_year",
1387+
"description": undefined,
1388+
"format": undefined,
1389+
"meta": undefined,
1390+
"multiStage": true,
1391+
"ownedByCube": false,
1392+
"sql": [Function],
1393+
"timeShift": Array [
1394+
Object {
1395+
"interval": "1 year",
1396+
"timeDimension": [Function],
1397+
"type": "prior",
1398+
},
1399+
],
1400+
"timeShiftReferences": Array [
1401+
Object {
1402+
"interval": "1 year",
1403+
"timeDimension": "createdAt",
1404+
"type": "prior",
1405+
},
1406+
],
1407+
"title": undefined,
1408+
"type": "number",
1409+
}
1410+
`;

packages/cubejs-schema-compiler/test/unit/base-query.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { BaseQuery, PostgresQuery, MssqlQuery, UserError, CubeStoreQuery } from
33
import { prepareJsCompiler, prepareYamlCompiler } from './PrepareCompiler';
44
import {
55
createCubeSchema,
6-
createCubeSchemaWithCustomGranularities,
6+
createCubeSchemaWithCustomGranularitiesAndTimeShift,
77
createCubeSchemaYaml,
88
createECommerceSchema,
99
createJoinedCubesSchema,
@@ -421,7 +421,7 @@ describe('SQL Generation', () => {
421421

422422
describe('Custom granularities', () => {
423423
const compilers = /** @type Compilers */ prepareJsCompiler(
424-
createCubeSchemaWithCustomGranularities('orders')
424+
createCubeSchemaWithCustomGranularitiesAndTimeShift('orders')
425425
);
426426

427427
const granularityQueries = [

packages/cubejs-schema-compiler/test/unit/schema.test.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import fs from 'fs';
22
import path from 'path';
33
import { prepareCompiler, prepareJsCompiler } from './PrepareCompiler';
4-
import { createCubeSchema, createCubeSchemaWithCustomGranularities, createCubeSchemaWithAccessPolicy } from './utils';
4+
import { createCubeSchema, createCubeSchemaWithCustomGranularitiesAndTimeShift, createCubeSchemaWithAccessPolicy } from './utils';
55

66
const CUBE_COMPONENTS = ['dimensions', 'measures', 'segments', 'hierarchies', 'preAggregations', 'accessPolicy'];
77

@@ -382,7 +382,7 @@ describe('Schema Testing', () => {
382382

383383
it('custom granularities in meta', async () => {
384384
const { compiler, metaTransformer } = prepareJsCompiler([
385-
createCubeSchemaWithCustomGranularities('orders')
385+
createCubeSchemaWithCustomGranularitiesAndTimeShift('orders')
386386
]);
387387
await compiler.compile();
388388

@@ -521,6 +521,17 @@ describe('Schema Testing', () => {
521521
});
522522

523523
describe('Views', () => {
524+
it('extends custom granularities and timeshifts', async () => {
525+
const { compiler, metaTransformer } = prepareJsCompiler([
526+
createCubeSchemaWithCustomGranularitiesAndTimeShift('orders')
527+
]);
528+
await compiler.compile();
529+
530+
const { measures, dimensions } = metaTransformer.cubeEvaluator.evaluatedCubes.orders_view;
531+
expect(dimensions.createdAt).toMatchSnapshot();
532+
expect(measures.count_shifted_year).toMatchSnapshot();
533+
});
534+
524535
it('throws errors for incorrect referenced includes members', async () => {
525536
const orders = fs.readFileSync(
526537
path.join(process.cwd(), '/test/unit/fixtures/orders.js'),

packages/cubejs-schema-compiler/test/unit/utils.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ export function createCubeSchemaWithAccessPolicy(name: string, extraPolicies: st
224224
`;
225225
}
226226

227-
export function createCubeSchemaWithCustomGranularities(name: string): string {
227+
export function createCubeSchemaWithCustomGranularitiesAndTimeShift(name: string): string {
228228
return `cube('${name}', {
229229
sql: 'select * from orders',
230230
public: true,
@@ -293,6 +293,15 @@ export function createCubeSchemaWithCustomGranularities(name: string): string {
293293
count: {
294294
type: 'count'
295295
},
296+
count_shifted_year: {
297+
type: 'count',
298+
multiStage: true,
299+
timeShift: [{
300+
timeDimension: \`createdAt\`,
301+
interval: '1 year',
302+
type: 'prior'
303+
}]
304+
},
296305
rollingCountByTrailing2Day: {
297306
type: 'count',
298307
rollingWindow: {

0 commit comments

Comments
 (0)