From be42298801fb8f3d7ce49e109538f3fa4d3391c6 Mon Sep 17 00:00:00 2001 From: Pavel Tiunov Date: Mon, 23 Mar 2020 18:38:37 -0700 Subject: [PATCH] fix: MySQL segment references support --- .../adapter/MysqlQuery.js | 4 ++ .../test/MySqlPreAggregationsTest.js | 52 ++++++++++++++++++- 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/packages/cubejs-schema-compiler/adapter/MysqlQuery.js b/packages/cubejs-schema-compiler/adapter/MysqlQuery.js index 26fb8b630d2c5..6429ae5b65128 100644 --- a/packages/cubejs-schema-compiler/adapter/MysqlQuery.js +++ b/packages/cubejs-schema-compiler/adapter/MysqlQuery.js @@ -70,6 +70,10 @@ class MysqlQuery extends BaseQuery { unixTimestampSql() { return `UNIX_TIMESTAMP()`; } + + wrapSegmentForDimensionSelect(sql) { + return `IF(${sql}, 1, 0)`; + } } module.exports = MysqlQuery; diff --git a/packages/cubejs-schema-compiler/test/MySqlPreAggregationsTest.js b/packages/cubejs-schema-compiler/test/MySqlPreAggregationsTest.js index b96a326232994..1894a366ac916 100644 --- a/packages/cubejs-schema-compiler/test/MySqlPreAggregationsTest.js +++ b/packages/cubejs-schema-compiler/test/MySqlPreAggregationsTest.js @@ -77,7 +77,14 @@ describe('MySqlPreAggregations', function test() { timeDimensionReference: createdAt, granularity: 'day', partitionGranularity: 'month' - } + }, + googleRollup: { + type: 'rollup', + measureReferences: [count], + segmentReferences: [google], + timeDimensionReference: createdAt, + granularity: 'day', + }, } }) `); @@ -163,4 +170,47 @@ describe('MySqlPreAggregations', function test() { }); }); }); + + it('segment', () => compiler.compile().then(() => { + const query = new MySqlQuery({ joinGraph, cubeEvaluator, compiler }, { + measures: [ + 'visitors.count' + ], + dimensions: [], + segments: ['visitors.google'], + timezone: 'UTC', + preAggregationsSchema: '', + timeDimensions: [{ + dimension: 'visitors.createdAt', + granularity: 'day', + dateRange: ['2016-12-30', '2017-01-06'] + }], + order: [{ + id: 'visitors.createdAt' + }], + }); + + const queryAndParams = query.buildSqlAndParams(); + console.log(queryAndParams); + const preAggregationsDescription = query.preAggregations.preAggregationsDescription(); + console.log(preAggregationsDescription); + + const queries = tempTablePreAggregations(preAggregationsDescription); + + console.log(JSON.stringify(queries.concat(queryAndParams))); + + return dbRunner.testQueries( + queries.concat([queryAndParams]).map(q => replaceTableName(q, preAggregationsDescription, 142)) + ).then(res => { + console.log(JSON.stringify(res)); + res.should.be.deepEqual( + [ + { + "visitors__created_at_day": "2017-01-06T00:00:00.000", + "visitors__count": 1 + } + ] + ); + }); + })); });