diff --git a/packages/cubejs-schema-compiler/src/adapter/BigqueryQuery.ts b/packages/cubejs-schema-compiler/src/adapter/BigqueryQuery.ts index df71822d98cc0..6e7ae2d2524f5 100644 --- a/packages/cubejs-schema-compiler/src/adapter/BigqueryQuery.ts +++ b/packages/cubejs-schema-compiler/src/adapter/BigqueryQuery.ts @@ -24,6 +24,8 @@ class BigqueryFilter extends BaseFilter { public castParameter() { if (this.definition().type === 'boolean') { return 'CAST(? AS BOOL)'; + } else if (this.definition().type === 'time') { + return 'CAST(? AS TIMESTAMP)'; } else if (this.measure || this.definition().type === 'number') { // TODO here can be measure type of string actually return 'CAST(? AS FLOAT64)'; @@ -347,6 +349,7 @@ export class BigqueryQuery extends BaseQuery { // DATEADD is being rewritten to DATE_ADD templates.functions.DATE_ADD = 'DATETIME_ADD(DATETIME({{ args[0] }}), INTERVAL {{ interval }} {{ date_part }})'; templates.functions.CURRENTDATE = 'CURRENT_DATE'; + templates.functions.DATE = 'TIMESTAMP({{ args_concat }})'; delete templates.functions.TO_CHAR; delete templates.functions.PERCENTILECONT; templates.expressions.binary = '{% if op == \'%\' %}MOD({{ left }}, {{ right }}){% else %}({{ left }} {{ op }} {{ right }}){% endif %}'; diff --git a/packages/cubejs-testing-drivers/fixtures/mssql.json b/packages/cubejs-testing-drivers/fixtures/mssql.json index ace65c8dc3910..7afd45fe890f7 100644 --- a/packages/cubejs-testing-drivers/fixtures/mssql.json +++ b/packages/cubejs-testing-drivers/fixtures/mssql.json @@ -177,6 +177,8 @@ "SQL API: SQL push down push to cube quoted alias", "SQL API: Date/time comparison with SQL push down", "SQL API: Date/time comparison with date_trunc with SQL push down", + "SQL API: Date/time comparison with DATE() function in SQL push down", + "SQL API: Date/time comparison with DATE() function using COUNT push down", "---------------------------------------", "Error during rewrite: Can't detect Cube query and it may be not supported yet.", @@ -228,6 +230,8 @@ "SQL API: SQL push down push to cube quoted alias", "SQL API: Date/time comparison with SQL push down", "SQL API: Date/time comparison with date_trunc with SQL push down", + "SQL API: Date/time comparison with DATE() function in SQL push down", + "SQL API: Date/time comparison with DATE() function using COUNT push down", "---------------------------------------", "Error during rewrite: Can't detect Cube query and it may be not supported yet.", diff --git a/packages/cubejs-testing-drivers/src/tests/testQueries.ts b/packages/cubejs-testing-drivers/src/tests/testQueries.ts index 8a97514618b96..a95b052c6f6ba 100644 --- a/packages/cubejs-testing-drivers/src/tests/testQueries.ts +++ b/packages/cubejs-testing-drivers/src/tests/testQueries.ts @@ -2610,5 +2610,26 @@ from `); expect(res.rows).toMatchSnapshot(); }); + + executePg('SQL API: Date/time comparison with DATE() function in SQL push down', async (connection) => { + const res = await connection.query(` + SELECT MEASURE(BigECommerce.totalQuantity) as qty + FROM BigECommerce + WHERE CAST(BigECommerce.orderDate AS DATE) = DATE('2020-01-01') + `); + expect(res.rows).toMatchSnapshot(); + }); + + executePg('SQL API: Date/time comparison with DATE() function using COUNT push down', async (connection) => { + const res = await connection.query(` + SELECT + CAST(BigECommerce.orderDate AS DATE) as order_day, + COUNT(1) as cnt + FROM BigECommerce + WHERE CAST(BigECommerce.orderDate AS DATE) = DATE('2020-01-01') + GROUP BY 1 + `); + expect(res.rows).toMatchSnapshot(); + }); }); }