This is an automated email from the ASF dual-hosted git repository.
mbudiu 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 c7724b46df [CALCITE-6699] Invalid unparse for Varchar in
StarRocksDialect
c7724b46df is described below
commit c7724b46dfab279fcc8281d491e85c778163dfb1
Author: ClownXC <[email protected]>
AuthorDate: Sat Jan 4 19:31:30 2025 +0800
[CALCITE-6699] Invalid unparse for Varchar in StarRocksDialect
---
.../calcite/sql/dialect/StarRocksSqlDialect.java | 30 ++++++++++++++++++++
.../calcite/rel/rel2sql/RelToSqlConverterTest.java | 33 ++++++++++++++++++++++
2 files changed, 63 insertions(+)
diff --git
a/core/src/main/java/org/apache/calcite/sql/dialect/StarRocksSqlDialect.java
b/core/src/main/java/org/apache/calcite/sql/dialect/StarRocksSqlDialect.java
index ded2bbf96e..e22b63b13d 100644
--- a/core/src/main/java/org/apache/calcite/sql/dialect/StarRocksSqlDialect.java
+++ b/core/src/main/java/org/apache/calcite/sql/dialect/StarRocksSqlDialect.java
@@ -19,6 +19,8 @@ package org.apache.calcite.sql.dialect;
import org.apache.calcite.avatica.util.TimeUnitRange;
import org.apache.calcite.config.NullCollation;
import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rel.type.RelDataTypeSystem;
+import org.apache.calcite.rel.type.RelDataTypeSystemImpl;
import org.apache.calcite.sql.SqlAbstractDateTimeLiteral;
import org.apache.calcite.sql.SqlAlienSystemTypeNameSpec;
import org.apache.calcite.sql.SqlBasicTypeNameSpec;
@@ -41,9 +43,33 @@ import static
org.apache.calcite.util.RelToSqlConverterUtil.unparseHiveTrim;
*/
public class StarRocksSqlDialect extends MysqlSqlDialect {
+ /** StarRocks type system. */
+ public static final RelDataTypeSystem STARROCKS_TYPE_SYSTEM =
+ new RelDataTypeSystemImpl() {
+ @Override public int getMaxPrecision(SqlTypeName typeName) {
+ switch (typeName) {
+ case CHAR:
+ return 255;
+ case VARCHAR:
+ return 65533;
+ case VARBINARY:
+ return 1048576;
+ default:
+ 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
.withDatabaseProduct(SqlDialect.DatabaseProduct.STARROCKS)
.withIdentifierQuoteString("`")
+ .withDataTypeSystem(STARROCKS_TYPE_SYSTEM)
.withNullCollation(NullCollation.LOW);
public static final SqlDialect DEFAULT = new
StarRocksSqlDialect(DEFAULT_CONTEXT);
@@ -128,6 +154,10 @@ public class StarRocksSqlDialect extends MysqlSqlDialect {
type.getSqlTypeName(),
SqlParserPos.ZERO),
SqlParserPos.ZERO);
+ case VARCHAR:
+ return new SqlDataTypeSpec(
+ new SqlBasicTypeNameSpec(SqlTypeName.VARCHAR, type.getPrecision(),
SqlParserPos.ZERO),
+ SqlParserPos.ZERO);
default:
return super.getCastSpec(type);
}
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 628d29db79..d757deec68 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
@@ -3771,6 +3771,39 @@ class RelToSqlConverterTest {
sql(query).dialect(mySqlDialect(NullCollation.LAST)).ok(expected);
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6699">[CALCITE-6699]
+ * Invalid unparse for Varchar in StarRocksDialect </a>. */
+ @Test void testStarRocksCastToVarcharWithLessThanMaxPrecision() {
+ final String query = "select cast(\"product_id\" as varchar(50)),
\"product_id\" "
+ + "from \"product\" ";
+ final String expected = "SELECT CAST(`product_id` AS VARCHAR(50)),
`product_id`\n"
+ + "FROM `foodmart`.`product`";
+ sql(query).withStarRocks().ok(expected);
+ }
+
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6699">[CALCITE-6699]
+ * Invalid unparse for Varchar in StarRocksDialect </a>. */
+ @Test void testStarRocksCastToVarcharWithGreaterThanMaxPrecision() {
+ final String query = "select cast(\"product_id\" as varchar(150000)),
\"product_id\" "
+ + "from \"product\" ";
+ final String expected = "SELECT CAST(`product_id` AS VARCHAR(65533)),
`product_id`\n"
+ + "FROM `foodmart`.`product`";
+ sql(query).withStarRocks().ok(expected);
+ }
+
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6699">[CALCITE-6699]
+ * Invalid unparse for Varchar in StarRocksDialect </a>. */
+ @Test void testStarRocksCastToVarcharWithDefaultPrecision() {
+ final String query = "select cast(\"product_id\" as varchar),
\"product_id\" "
+ + "from \"product\" ";
+ final String expected = "SELECT CAST(`product_id` AS VARCHAR),
`product_id`\n"
+ + "FROM `foodmart`.`product`";
+ sql(query).withStarRocks().ok(expected);
+ }
+
/** Test case for
* <a
href="https://issues.apache.org/jira/browse/CALCITE-6419">[CALCITE-6419]
* Invalid unparse for VARCHAR without precision in HiveSqlDialect And
SparkSqlDialect</a>. */