From 9e69002d703200fe27e998ff0a74e3748bedca29 Mon Sep 17 00:00:00 2001 From: jipeli <54889677+jipeli@users.noreply.github.com> Date: Thu, 28 Dec 2023 18:32:21 +0800 Subject: [PATCH] [improvement][headless] fixed sql optimizer utf8 error (#580) --- .../query/parser/calcite/Configuration.java | 7 +++---- .../schema/HeadlessSqlTypeFactoryImpl.java | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/HeadlessSqlTypeFactoryImpl.java diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/Configuration.java b/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/Configuration.java index a9407b1ba..c3e021d30 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/Configuration.java +++ b/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/Configuration.java @@ -1,6 +1,7 @@ package com.tencent.supersonic.headless.query.parser.calcite; +import com.tencent.supersonic.headless.query.parser.calcite.schema.HeadlessSqlTypeFactoryImpl; import com.tencent.supersonic.headless.query.parser.calcite.schema.SemanticSqlDialect; import com.tencent.supersonic.headless.query.parser.calcite.schema.ViewExpanderImpl; import java.util.ArrayList; @@ -27,9 +28,7 @@ import org.apache.calcite.sql.SqlOperatorTable; import org.apache.calcite.sql.fun.SqlStdOperatorTable; import org.apache.calcite.sql.parser.SqlParser; import org.apache.calcite.sql.parser.impl.SqlParserImpl; -import org.apache.calcite.sql.type.SqlTypeFactoryImpl; import org.apache.calcite.sql.util.ChainedSqlOperatorTable; -import org.apache.calcite.sql.validate.SqlConformanceEnum; import org.apache.calcite.sql.validate.SqlValidator; import org.apache.calcite.sql.validate.SqlValidatorScope; import org.apache.calcite.sql.validate.SqlValidatorUtil; @@ -40,7 +39,7 @@ import org.apache.calcite.tools.Frameworks; public class Configuration { public static Properties configProperties = new Properties(); - public static RelDataTypeFactory typeFactory = new SqlTypeFactoryImpl(RelDataTypeSystem.DEFAULT); + public static RelDataTypeFactory typeFactory = new HeadlessSqlTypeFactoryImpl(RelDataTypeSystem.DEFAULT); public static SqlOperatorTable operatorTable = SqlStdOperatorTable.instance(); public static CalciteConnectionConfig config = new CalciteConnectionConfigImpl(configProperties); public static SqlValidator.Config validatorConfig = SqlValidator.Config.DEFAULT @@ -69,7 +68,7 @@ public class Configuration { .setQuoting(Quoting.SINGLE_QUOTE) .setQuotedCasing(Casing.TO_UPPER) .setUnquotedCasing(Casing.TO_UPPER) - .setConformance(SqlConformanceEnum.MYSQL_5) + .setConformance(SemanticSqlDialect.DEFAULT.getConformance()) .setLex(Lex.BIG_QUERY); return parserConfig.build(); } diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/HeadlessSqlTypeFactoryImpl.java b/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/HeadlessSqlTypeFactoryImpl.java new file mode 100644 index 000000000..50d29dd33 --- /dev/null +++ b/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/HeadlessSqlTypeFactoryImpl.java @@ -0,0 +1,17 @@ +package com.tencent.supersonic.headless.query.parser.calcite.schema; + +import java.nio.charset.Charset; +import org.apache.calcite.rel.type.RelDataTypeSystem; +import org.apache.calcite.sql.type.SqlTypeFactoryImpl; + +public class HeadlessSqlTypeFactoryImpl extends SqlTypeFactoryImpl { + + public HeadlessSqlTypeFactoryImpl(RelDataTypeSystem typeSystem) { + super(typeSystem); + } + + @Override + public Charset getDefaultCharset() { + return Charset.forName("UTF8"); + } +}