diff --git a/packages/cubejs-schema-compiler/test/integration/clickhouse/ClickHouseDbRunner.js b/packages/cubejs-schema-compiler/test/integration/clickhouse/ClickHouseDbRunner.js index d7cb4a295cc85..6e35eebf96a25 100644 --- a/packages/cubejs-schema-compiler/test/integration/clickhouse/ClickHouseDbRunner.js +++ b/packages/cubejs-schema-compiler/test/integration/clickhouse/ClickHouseDbRunner.js @@ -136,6 +136,8 @@ export class ClickHouseDbRunner extends BaseDbRunner { } : {}; for (const [query, params] of queries) { + console.log("ClickHOuse testQueries", query, params); + console.log("ClickHOuse prepared", formatSql(query, params)); requests.push(clickHouse.querying(formatSql(query, params), { dataObjects: true, queryOptions: { diff --git a/packages/cubejs-schema-compiler/test/integration/clickhouse/clickhouse-dataschema-compiler.test.ts b/packages/cubejs-schema-compiler/test/integration/clickhouse/clickhouse-dataschema-compiler.test.ts index 1d2cc00e649df..f15138020598b 100644 --- a/packages/cubejs-schema-compiler/test/integration/clickhouse/clickhouse-dataschema-compiler.test.ts +++ b/packages/cubejs-schema-compiler/test/integration/clickhouse/clickhouse-dataschema-compiler.test.ts @@ -506,4 +506,84 @@ describe('ClickHouse DataSchemaCompiler', () => { ]); } ); + + it('question mark filter', () => { + const { compiler, cubeEvaluator, joinGraph } = testPrepareCompiler(` + cube('visitors', { + sql: \` + select * from visitors + \`, + + measures: { + visitor_count: { + type: 'count', + sql: 'id' + }, + visitor_revenue: { + type: 'sum', + sql: 'amount' + }, + per_visitor_revenue: { + type: 'number', + sql: visitor_revenue + "/" + visitor_count + } + }, + + dimensions: { + source: { + type: 'string', + sql: 'source' + }, + created_at: { + type: 'time', + sql: 'created_at' + }, + updated_at: { + type: 'time', + sql: 'updated_at' + }, + questionMark: { + sql: \`replace('some string question string ? ? ? ???', 'string', 'with some ? ? ? ???')\`, + type: 'string' + } + } + }) + `); + const result = compiler.compile().then(() => { + const query = new ClickHouseQuery({ joinGraph, cubeEvaluator, compiler }, { + measures: ['visitors.visitor_count'], + dimensions: [], + timeDimensions: [], + timezone: 'America/Los_Angeles', + filters: [{ + or: [{ + member: 'visitors.questionMark', + operator: 'contains', + values: ['with some'] + }, { + member: 'visitors.questionMark', + operator: 'equals', + values: [null] + }, { + member: 'visitors.questionMark', + operator: 'equals', + values: [null, 'with some'] + }] + }], + order: [] + }); + + logSqlAndParams(query); + + return dbRunner.testQuery(query.buildSqlAndParams()).then((res: any) => { + expect(res).toEqual( + [ + { visitors__visitor_count_foo_bar: '6' } + ] + ); + }); + }); + + return result; + }); });