From c34d3af7941edec8f73b98436efbac83d133f4d5 Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Thu, 17 Oct 2024 12:11:15 -0400 Subject: [PATCH] [CALCITE-6633] Add CEILING to MSSQL dialect Indentation and minor changes. [CALCITE-6633] Add CEILING to MSSQL dialect Add Jira link to test. [CALCITE-6633] Add CEILING to MSSQL dialect Add CEILING to MSSQL dialect --- .../apache/calcite/sql/dialect/MssqlSqlDialect.java | 5 +++++ .../calcite/rel/rel2sql/RelToSqlConverterTest.java | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/core/src/main/java/org/apache/calcite/sql/dialect/MssqlSqlDialect.java b/core/src/main/java/org/apache/calcite/sql/dialect/MssqlSqlDialect.java index 6f32a33a4a90..02163c170d3a 100644 --- a/core/src/main/java/org/apache/calcite/sql/dialect/MssqlSqlDialect.java +++ b/core/src/main/java/org/apache/calcite/sql/dialect/MssqlSqlDialect.java @@ -163,6 +163,11 @@ public MssqlSqlDialect(Context context) { throw new IllegalArgumentException("MSSQL SUBSTRING requires FROM and FOR arguments"); } SqlUtil.unparseFunctionSyntax(MSSQL_SUBSTRING, writer, call, false); + } else if (call.getOperator().equals(SqlStdOperatorTable.CEIL)) { + // CEILING is supported but not CEIL in MS SQL + final SqlWriter.Frame frame = writer.startFunCall("CEILING"); + call.operand(0).unparse(writer, leftPrec, rightPrec); + writer.endFunCall(frame); } else { switch (call.getKind()) { case FLOOR: diff --git a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java index 67fd701f225a..259af4b1560c 100644 --- a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java +++ b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java @@ -8696,6 +8696,18 @@ private void checkLiteral2(String expression, String expected) { sql(query).withPostgresql().ok(expectedQuery); } + /** Test case for + * [CALCITE-6633] + * MSSQL Dialect does not generate CEILING function. + */ + @Test void testMSSQLCeiling() { + final String query = "select 1.24, FLOOR(1.24), CEILING(1.24)"; + final String mssqlExpected = "SELECT 1.24, FLOOR(1.24), CEILING(1.24)\n" + + "FROM (VALUES (0)) AS [t] ([ZERO])"; + sql(query) + .dialect(MssqlSqlDialect.DEFAULT).ok(mssqlExpected); + } + /** Fluid interface to run tests. */ static class Sql { private final CalciteAssert.SchemaSpec schemaSpec;