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 d1ebe165ac [CALCITE-6423] Invalid unparse for CHAR without precision 
in MySQLDialect
d1ebe165ac is described below

commit d1ebe165ac1a1d60528d6ae26de45b8d38186fa4
Author: Xiong Duan <[email protected]>
AuthorDate: Thu May 30 18:53:49 2024 +0800

    [CALCITE-6423] Invalid unparse for CHAR without precision in MySQLDialect
---
 .../main/java/org/apache/calcite/sql/dialect/HiveSqlDialect.java    | 2 +-
 .../main/java/org/apache/calcite/sql/dialect/MysqlSqlDialect.java   | 6 ++++++
 .../java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java  | 2 +-
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git 
a/core/src/main/java/org/apache/calcite/sql/dialect/HiveSqlDialect.java 
b/core/src/main/java/org/apache/calcite/sql/dialect/HiveSqlDialect.java
index f6a69beae2..cfce5bb25c 100644
--- a/core/src/main/java/org/apache/calcite/sql/dialect/HiveSqlDialect.java
+++ b/core/src/main/java/org/apache/calcite/sql/dialect/HiveSqlDialect.java
@@ -142,7 +142,7 @@ public class HiveSqlDialect extends SqlDialect {
                 SqlParserPos.ZERO);
         return new SqlDataTypeSpec(typeNameSpec, SqlParserPos.ZERO);
       case VARCHAR:
-        if (type.getPrecision() == -1) {
+        if (type.getPrecision() == RelDataType.PRECISION_NOT_SPECIFIED) {
           return new SqlDataTypeSpec(
               new SqlAlienSystemTypeNameSpec("STRING", type.getSqlTypeName(),
                   SqlParserPos.ZERO), SqlParserPos.ZERO);
diff --git 
a/core/src/main/java/org/apache/calcite/sql/dialect/MysqlSqlDialect.java 
b/core/src/main/java/org/apache/calcite/sql/dialect/MysqlSqlDialect.java
index 1bccbc552d..f86f0b0dfc 100644
--- a/core/src/main/java/org/apache/calcite/sql/dialect/MysqlSqlDialect.java
+++ b/core/src/main/java/org/apache/calcite/sql/dialect/MysqlSqlDialect.java
@@ -74,6 +74,12 @@ public class MysqlSqlDialect extends SqlDialect {
             return super.getMaxPrecision(typeName);
           }
         }
+        @Override public int getDefaultPrecision(SqlTypeName typeName) {
+          if (typeName == SqlTypeName.CHAR) {
+            return RelDataType.PRECISION_NOT_SPECIFIED;
+          }
+          return super.getDefaultPrecision(typeName);
+        }
       };
 
   public static final SqlDialect.Context DEFAULT_CONTEXT = 
SqlDialect.EMPTY_CONTEXT
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 9412625a91..1add2c2aa6 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
@@ -3549,7 +3549,7 @@ class RelToSqlConverterTest {
 
   @Test void testCastToChar() {
     String query = "select cast(\"product_id\" as char) from \"product\"";
-    final String expectedMysql = "SELECT CAST(`product_id` AS CHAR(1))\n"
+    final String expectedMysql = "SELECT CAST(`product_id` AS CHAR)\n"
         + "FROM `foodmart`.`product`";
     final String expectedHive = "SELECT CAST(product_id AS CHAR(1))\n"
         + "FROM foodmart.product";

Reply via email to