This is an automated email from the ASF dual-hosted git repository.

xiong pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/main by this push:
     new 9a52add23e [CALCITE-6847] ClickHouse doesn't support TRUE/FALSE 
keywords in its Join predicate
9a52add23e is described below

commit 9a52add23eef1c1e175e293e92160d479a7dde97
Author: xuyu <[email protected]>
AuthorDate: Wed Feb 19 22:00:55 2025 +0800

    [CALCITE-6847] ClickHouse doesn't support TRUE/FALSE keywords in its Join 
predicate
---
 .../calcite/sql/dialect/ClickHouseSqlDialect.java  | 11 +++++
 .../calcite/rel/rel2sql/RelToSqlConverterTest.java | 50 +++++++++++++++++++---
 2 files changed, 56 insertions(+), 5 deletions(-)

diff --git 
a/core/src/main/java/org/apache/calcite/sql/dialect/ClickHouseSqlDialect.java 
b/core/src/main/java/org/apache/calcite/sql/dialect/ClickHouseSqlDialect.java
index 9fc3618924..ee692380f1 100644
--- 
a/core/src/main/java/org/apache/calcite/sql/dialect/ClickHouseSqlDialect.java
+++ 
b/core/src/main/java/org/apache/calcite/sql/dialect/ClickHouseSqlDialect.java
@@ -36,6 +36,8 @@
 
 import org.checkerframework.checker.nullness.qual.Nullable;
 
+import static 
org.apache.calcite.util.RelToSqlConverterUtil.unparseBoolLiteralToCondition;
+
 import static java.util.Objects.requireNonNull;
 
 /**
@@ -138,6 +140,15 @@ private static SqlDataTypeSpec 
createSqlDataTypeSpecByName(String typeAlias,
     writer.literal(toFunc + "('" + literal.toFormattedString() + "')");
   }
 
+  @Override public void unparseBoolLiteral(SqlWriter writer, SqlLiteral 
literal, int leftPrec,
+      int rightPrec) {
+    Boolean value = (Boolean) literal.getValue();
+    if (value == null) {
+      return;
+    }
+    unparseBoolLiteralToCondition(writer, value);
+  }
+
   @Override public void unparseOffsetFetch(SqlWriter writer, @Nullable SqlNode 
offset,
       @Nullable SqlNode fetch) {
     requireNonNull(fetch, "fetch");
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 1d9d3cfd40..6d59536d23 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
@@ -57,6 +57,7 @@
 import org.apache.calcite.sql.dialect.AnsiSqlDialect;
 import org.apache.calcite.sql.dialect.BigQuerySqlDialect;
 import org.apache.calcite.sql.dialect.CalciteSqlDialect;
+import org.apache.calcite.sql.dialect.ClickHouseSqlDialect;
 import org.apache.calcite.sql.dialect.HiveSqlDialect;
 import org.apache.calcite.sql.dialect.JethroDataSqlDialect;
 import org.apache.calcite.sql.dialect.MssqlSqlDialect;
@@ -8229,24 +8230,63 @@ private void checkLiteral2(String expression, String 
expected) {
   }
 
   /** Test case for
-   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-6819";>[CALCITE-6819]
-   * MSSQL doesn't support TRUE/FALSE keywords in its Join predicate</a>. */
-  @Test void testJoinBoolLiteralMSSQL() {
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-6847";>[CALCITE-6847]
+   * ClickHouse doesn't support TRUE/FALSE keywords in its Join predicate</a>. 
*/
+  @Test void testJoinBoolLiteral() {
     final String queryTrue = "SELECT \"hire_date\", \"department_description\" 
FROM \"employee\" "
         + "LEFT JOIN \"department\" ON TRUE";
+    final String queryFalse = "SELECT \"hire_date\", 
\"department_description\" FROM \"employee\" "
+        + "LEFT JOIN \"department\" ON False";
+
+    final String queryTrue1 = "SELECT \"hire_date\", 
\"department_description\" FROM \"employee\" "
+        + "LEFT JOIN \"department\" ON 1 = 1";
+    final String queryFalse1 = "SELECT \"hire_date\", 
\"department_description\" FROM \"employee\" "
+        + "LEFT JOIN \"department\" ON 1 = 0";
+
+    final String queryTrue2 = "select true from \"employee\"";
+    final String queryFalse2 = "select false from \"employee\"";
+
+    // mssql test
     final String mssqlExpected1 = "SELECT [employee].[hire_date],"
         + " [department].[department_description]\nFROM 
[foodmart].[employee]\nLEFT JOIN"
         + " [foodmart].[department] ON (1 = 1)";
     sql(queryTrue)
         .dialect(MssqlSqlDialect.DEFAULT).ok(mssqlExpected1);
+    sql(queryTrue1)
+        .dialect(MssqlSqlDialect.DEFAULT).ok(mssqlExpected1);
+
 
-    final String queryFalse = "SELECT \"hire_date\", 
\"department_description\" FROM \"employee\" "
-        + "LEFT JOIN \"department\" ON False";
     final String mssqlExpected2 = "SELECT [employee].[hire_date],"
         + " [department].[department_description]\nFROM 
[foodmart].[employee]\nLEFT JOIN"
         + " [foodmart].[department] ON (1 = 0)";
     sql(queryFalse)
         .dialect(MssqlSqlDialect.DEFAULT).ok(mssqlExpected2);
+    sql(queryFalse1)
+        .dialect(MssqlSqlDialect.DEFAULT).ok(mssqlExpected2);
+
+    // clickhouse test
+    final String clickhouseExpected1 = "SELECT `employee`.`hire_date`,"
+        + " `department`.`department_description`\nFROM `foodmart`"
+        + ".`employee`\nLEFT JOIN"
+        + " `foodmart`.`department` ON (1 = 1)";
+    sql(queryTrue)
+        .dialect(ClickHouseSqlDialect.DEFAULT).ok(clickhouseExpected1);
+    sql(queryTrue1)
+        .dialect(ClickHouseSqlDialect.DEFAULT).ok(clickhouseExpected1);
+
+    final String clickhouseExpected2 = "SELECT `employee`.`hire_date`,"
+        + " `department`.`department_description`\nFROM `foodmart`"
+        + ".`employee`\nLEFT JOIN"
+        + " `foodmart`.`department` ON (1 = 0)";
+    sql(queryFalse)
+        .dialect(ClickHouseSqlDialect.DEFAULT).ok(clickhouseExpected2);
+    sql(queryFalse1)
+        .dialect(ClickHouseSqlDialect.DEFAULT).ok(clickhouseExpected2);
+
+    sql(queryTrue2).dialect(ClickHouseSqlDialect.DEFAULT)
+        .ok("SELECT (1 = 1)\nFROM `foodmart`.`employee`");
+    sql(queryFalse2).dialect(ClickHouseSqlDialect.DEFAULT)
+        .ok("SELECT (1 = 0)\nFROM `foodmart`.`employee`");
   }
 
   /** Test case for

Reply via email to