Skip to content

Commit

Permalink
[CALCITE-6699] Invalid unparse for Varchar in StarRocksDialect
Browse files Browse the repository at this point in the history
  • Loading branch information
xiaochen-zhou authored and mihaibudiu committed Jan 8, 2025
1 parent d0384ce commit c7724b4
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
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;
Expand All @@ -41,9 +43,33 @@
*/
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);
Expand Down Expand Up @@ -128,6 +154,10 @@ public StarRocksSqlDialect(Context context) {
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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3771,6 +3771,39 @@ private SqlDialect nonOrdinalDialect() {
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>. */
Expand Down

0 comments on commit c7724b4

Please sign in to comment.