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

libenchao 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 d9dd3ac8a9 [CALCITE-5988] SqlImplementor.toSql cannot emit VARBINARY 
literals
d9dd3ac8a9 is described below

commit d9dd3ac8a9f695e111a0a5e77f45b61b90f4b5b6
Author: Mihai Budiu <[email protected]>
AuthorDate: Mon Sep 11 11:38:41 2023 -0700

    [CALCITE-5988] SqlImplementor.toSql cannot emit VARBINARY literals
    
    Close apache/calcite#3419
---
 .../org/apache/calcite/rel/rel2sql/SqlImplementor.java     |  2 ++
 .../apache/calcite/rel/rel2sql/RelToSqlConverterTest.java  | 14 ++++++++++++++
 2 files changed, 16 insertions(+)

diff --git 
a/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java 
b/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
index 4c535c14e3..16455ff2f6 100644
--- a/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
+++ b/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
@@ -1437,6 +1437,8 @@ public abstract class SqlImplementor {
       return SqlLiteral.createTimestamp(typeName,
           castNonNull(literal.getValueAs(TimestampString.class)),
           literal.getType().getPrecision(), POS);
+    case BINARY:
+      return 
SqlLiteral.createBinaryString(castNonNull(literal.getValueAs(byte[].class)), 
POS);
     case ANY:
     case NULL:
       switch (typeName) {
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 f78751841e..212336abf6 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
@@ -220,6 +220,20 @@ class RelToSqlConverterTest {
         .getSql();
   }
 
+  /**
+   * Test for <a 
href="https://issues.apache.org/jira/browse/CALCITE-5988";>[CALCITE-5988]</a>
+   * SqlImplementor.toSql cannot emit VARBINARY literals.
+   */
+  @Test void testBinaryLiteral() {
+    String query = "SELECT x'ABCD'";
+    String expected = "SELECT X'ABCD'";
+    // We use Mysql here because using the default Calcite dialect
+    // the expected string is a bit too verbose:
+    // "SELECT *\nFROM (VALUES (X'ABCD')) AS \"t\" (\"EXPR$0\")"
+    sql(query).withMysql().ok(expected);
+    sql("SELECT cast(null as binary)").withMysql().ok("SELECT NULL");
+  }
+
   @Test void testGroupByBooleanLiteral() {
     String query = "select avg(\"salary\") from \"employee\" group by true";
     String expectedRedshift = "SELECT AVG(\"employee\".\"salary\")\n"

Reply via email to