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"