From e031ec8bffd8f60361b65983e80b608ef41178ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludvig=20Fischerstr=C3=B6m?= Date: Mon, 6 Jan 2025 01:03:34 +0100 Subject: [PATCH 1/4] fix: allow dimensions with quarter granularity --- packages/cubejs-api-gateway/src/query.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cubejs-api-gateway/src/query.js b/packages/cubejs-api-gateway/src/query.js index b83148c80c668..faea7670028ef 100644 --- a/packages/cubejs-api-gateway/src/query.js +++ b/packages/cubejs-api-gateway/src/query.js @@ -40,7 +40,7 @@ const getPivotQuery = (queryType, queries) => { const id = Joi.string().regex(/^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+$/); const idOrMemberExpressionName = Joi.string().regex(/^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+$|^[a-zA-Z0-9_]+$/); -const dimensionWithTime = Joi.string().regex(/^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+(\.(second|minute|hour|day|week|month|year))?$/); +const dimensionWithTime = Joi.string().regex(/^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+(\.(second|minute|hour|day|week|month|quarter|year))?$/); const parsedMemberExpression = Joi.object().keys({ expression: Joi.array().items(Joi.string()).min(1).required(), cubeName: Joi.string().required(), From 489e54b01720089b4fcf2dd2a7c4ed6f01ec4c4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludvig=20Fischerstr=C3=B6m?= Date: Tue, 14 Jan 2025 21:29:19 +0100 Subject: [PATCH 2/4] Update packages/cubejs-api-gateway/src/query.js Co-authored-by: Konstantin Burkalev --- packages/cubejs-api-gateway/src/query.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cubejs-api-gateway/src/query.js b/packages/cubejs-api-gateway/src/query.js index faea7670028ef..19bb9c3b43406 100644 --- a/packages/cubejs-api-gateway/src/query.js +++ b/packages/cubejs-api-gateway/src/query.js @@ -40,7 +40,7 @@ const getPivotQuery = (queryType, queries) => { const id = Joi.string().regex(/^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+$/); const idOrMemberExpressionName = Joi.string().regex(/^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+$|^[a-zA-Z0-9_]+$/); -const dimensionWithTime = Joi.string().regex(/^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+(\.(second|minute|hour|day|week|month|quarter|year))?$/); +const dimensionWithTime = Joi.string().regex(/^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)?$/); const parsedMemberExpression = Joi.object().keys({ expression: Joi.array().items(Joi.string()).min(1).required(), cubeName: Joi.string().required(), From 9767f336fce07d37593f755b44155f8251440224 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludvig=20Fischerstr=C3=B6m?= Date: Tue, 14 Jan 2025 21:52:51 +0100 Subject: [PATCH 3/4] Add test for custom granularities from dimensions --- .../cubejs-api-gateway/test/index.test.ts | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/cubejs-api-gateway/test/index.test.ts b/packages/cubejs-api-gateway/test/index.test.ts index bdff7907ee703..7db78f5111df6 100644 --- a/packages/cubejs-api-gateway/test/index.test.ts +++ b/packages/cubejs-api-gateway/test/index.test.ts @@ -316,7 +316,7 @@ describe('API Gateway', () => { expect(res.body && res.body.data).toStrictEqual([{ 'Foo.bar': 42 }]); }); - test('custom granularities in annotation', async () => { + test('custom granularities in annotation from timeDimensions', async () => { const { app } = await createApiGateway(); const res = await request(app) @@ -338,6 +338,29 @@ describe('API Gateway', () => { }); }); + + test('custom granularities in annotation from dimensions', async () => { + const { app } = await createApiGateway(); + + const res = await request(app) + .get( + '/cubejs-api/v1/load?query={"measures":["Foo.bar"],"dimensions":["Foo.timeGranularities.half_year_by_1st_april"]}' + ) + .set('Authorization', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e30.t-IDcSemACt8x4iTMCda8Yhe3iZaWbvV5XKSTbuAn0M') + .expect(200); + console.log(res.body); + expect(res.body && res.body.data).toStrictEqual([{ 'Foo.bar': 42 }]); + expect(res.body.annotation.timeDimensions['Foo.timeGranularities.half_year_by_1st_april']) + .toStrictEqual({ + granularity: { + name: 'half_year_by_1st_april', + title: 'Half Year By1 St April', + interval: '6 months', + offset: '3 months', + } + }); + }); + test('dry-run', async () => { const { app } = await createApiGateway(); From d1ec482e3460fd667ec076afbc14a93504f3c482 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludvig=20Fischerstr=C3=B6m?= Date: Wed, 15 Jan 2025 10:43:21 +0100 Subject: [PATCH 4/4] fix --- packages/cubejs-api-gateway/test/index.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/cubejs-api-gateway/test/index.test.ts b/packages/cubejs-api-gateway/test/index.test.ts index 7db78f5111df6..b7436e3093cae 100644 --- a/packages/cubejs-api-gateway/test/index.test.ts +++ b/packages/cubejs-api-gateway/test/index.test.ts @@ -338,7 +338,6 @@ describe('API Gateway', () => { }); }); - test('custom granularities in annotation from dimensions', async () => { const { app } = await createApiGateway();