You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by ji...@apache.org on 2023/10/13 02:01:01 UTC
[calcite] branch main updated: [CALCITE-6006] RelToSqlConverter loses charset information
This is an automated email from the ASF dual-hosted git repository.
jiajunxie 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 485a5d0ae3 [CALCITE-6006] RelToSqlConverter loses charset information
485a5d0ae3 is described below
commit 485a5d0ae3274a83a36788290b3bdc4d973387b4
Author: Mihai Budiu <mb...@gmail.com>
AuthorDate: Thu Oct 12 13:25:57 2023 -0700
[CALCITE-6006] RelToSqlConverter loses charset information
Signed-off-by: Mihai Budiu <mb...@gmail.com>
---
.../org/apache/calcite/rel/rel2sql/SqlImplementor.java | 16 +++++++++++++++-
.../calcite/rel/rel2sql/RelToSqlConverterTest.java | 12 ++++++++++++
2 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java b/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
index 16455ff2f6..573c497885 100644
--- a/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
+++ b/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
@@ -16,6 +16,7 @@
*/
package org.apache.calcite.rel.rel2sql;
+import org.apache.calcite.config.CalciteSystemProperty;
import org.apache.calcite.linq4j.Ord;
import org.apache.calcite.linq4j.tree.Expressions;
import org.apache.calcite.plan.RelOptUtil;
@@ -90,6 +91,7 @@ import org.apache.calcite.sql.type.SqlTypeName;
import org.apache.calcite.sql.validate.SqlValidatorUtil;
import org.apache.calcite.util.DateString;
import org.apache.calcite.util.ImmutableBitSet;
+import org.apache.calcite.util.NlsString;
import org.apache.calcite.util.Pair;
import org.apache.calcite.util.RangeSets;
import org.apache.calcite.util.Sarg;
@@ -1409,8 +1411,20 @@ public abstract class SqlImplementor {
() -> "literal " + literal
+ " has null SqlTypeFamily, and is SqlTypeName is " + typeName);
switch (family) {
- case CHARACTER:
+ case CHARACTER: {
+ final NlsString value = literal.getValueAs(NlsString.class);
+ if (value != null) {
+ final String defaultCharset = CalciteSystemProperty.DEFAULT_CHARSET.value();
+ final String charsetName = value.getCharsetName();
+ if (!defaultCharset.equals(charsetName)) {
+ // Set the charset only if it is not the same as the default charset
+ return SqlLiteral.createCharString(
+ castNonNull(value).getValue(), charsetName, POS);
+ }
+ }
+ // Create a string without specifying a charset
return SqlLiteral.createCharString((String) castNonNull(literal.getValue2()), POS);
+ }
case NUMERIC:
case EXACT_NUMERIC:
return SqlLiteral.createExactNumeric(
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 661f7163cb..0e97580cb6 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
@@ -83,6 +83,7 @@ import org.apache.calcite.tools.Programs;
import org.apache.calcite.tools.RelBuilder;
import org.apache.calcite.tools.RuleSet;
import org.apache.calcite.tools.RuleSets;
+import org.apache.calcite.util.ConversionUtil;
import org.apache.calcite.util.ImmutableBitSet;
import org.apache.calcite.util.TestUtil;
import org.apache.calcite.util.Util;
@@ -282,6 +283,17 @@ class RelToSqlConverterTest {
sql(query).ok(expected);
}
+ /** Test case for <a href="https://issues.apache.org/jira/browse/CALCITE-6006">[CALCITE-6006]</a>
+ * RelToSqlConverter loses charset information. */
+ @Test void testCharset() {
+ sql("select _UTF8'\u4F60\u597D'")
+ .withMysql() // produces a simpler output query
+ .ok("SELECT _UTF-8'\u4F60\u597D'");
+ sql("select _UTF16'" + ConversionUtil.TEST_UNICODE_STRING + "'")
+ .withMysql()
+ .ok("SELECT _UTF-16LE'" + ConversionUtil.TEST_UNICODE_STRING + "'");
+ }
+
/** Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-4321">[CALCITE-4321]
* JDBC adapter omits FILTER (WHERE ...) expressions when generating SQL</a>