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";