[ 
https://issues.apache.org/jira/browse/CALCITE-7078?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17986768#comment-17986768
 ] 

Yu Xu edited comment on CALCITE-7078 at 6/29/25 9:04 AM:
---------------------------------------------------------

I changed in convertLiteral:
{code:java}
case CHAR:
  return rexBuilder.makePreciseStringLiteral(new 
ByteString(literal.toValue().getBytes(StandardCharsets.UTF_8)), "UTF8", 
SqlCollation.IMPLICIT); {code}
then execute:
{code:java}
select to_base64('aaa'); {code}
would error out for:
{code:java}
> java.lang.AssertionError: to CHAR(11) from _UTF-8'aaa'
>     at org.apache.calcite.rel.core.Values.assertRowType(Values.java:184)
>     at org.apache.calcite.rel.core.Values.<init>(Values.java:98)
>     at 
> org.apache.calcite.rel.logical.LogicalValues.<init>(LogicalValues.java:67)
>     at 
> org.apache.calcite.rel.logical.LogicalValues.<init>(LogicalValues.java:86)
>     at 
> org.apache.calcite.rel.logical.LogicalValues.create(LogicalValues.java:114)
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertRowValues(SqlToRelConverter.java:1952)
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertValuesImpl(SqlToRelConverter.java:4948)
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2492)
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2397)
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2359)
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:755)
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:735)
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3939)
>  {code}
execute Value##assertRowType, one is char(3) iso-8859-1, the other is char(3) 
UTF-8. [~mbudiu] 


was (Author: JIRAUSER307770):
 
{code:java}
select to_base64('aaa'); {code}
would error out for:
{code:java}
> java.lang.AssertionError: to CHAR(11) from _UTF-8'aaa'
>     at org.apache.calcite.rel.core.Values.assertRowType(Values.java:184)
>     at org.apache.calcite.rel.core.Values.<init>(Values.java:98)
>     at 
> org.apache.calcite.rel.logical.LogicalValues.<init>(LogicalValues.java:67)
>     at 
> org.apache.calcite.rel.logical.LogicalValues.<init>(LogicalValues.java:86)
>     at 
> org.apache.calcite.rel.logical.LogicalValues.create(LogicalValues.java:114)
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertRowValues(SqlToRelConverter.java:1952)
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertValuesImpl(SqlToRelConverter.java:4948)
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2492)
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2397)
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2359)
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:755)
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:735)
>     at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3939)
>  {code}
execute Value##assertRowType, one is char(3) iso-8859-1, the other is char(3) 
UTF-8. [~mbudiu] 

> Character literal can not support Chinese
> -----------------------------------------
>
>                 Key: CALCITE-7078
>                 URL: https://issues.apache.org/jira/browse/CALCITE-7078
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.40.0
>            Reporter: Yu Xu
>            Priority: Major
>             Fix For: 1.41.0
>
>
> Currently we call function in quidem test can not use Chinese, reproduce as:
> in function.iq, we execute:
> {code:java}
> SELECT to_base64('方解石'); {code}
> would error out(other all varchar argument function would error):
> {code:java}
> > Caused by: org.apache.calcite.runtime.CalciteException: Failed to encode 
> > '方解石' in character set 'ISO-8859-1'
> >     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> >     at 
> > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
> >     at 
> > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
> >     at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
> >     at 
> > org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:511)
> >     at org.apache.calcite.runtime.Resources$ExInst.ex(Resources.java:605)
> >     at org.apache.calcite.util.NlsString.<init>(NlsString.java:155)
> >     at org.apache.calcite.util.NlsString.<init>(NlsString.java:123)
> >     at org.apache.calcite.rex.RexBuilder.makeLiteral(RexBuilder.java:1321)
> >     at 
> > org.apache.calcite.rex.RexBuilder.makeCharLiteral(RexBuilder.java:1609)
> >     at 
> > org.apache.calcite.sql2rel.SqlNodeToRexConverterImpl.convertLiteral(SqlNodeToRexConverterImpl.java:110)
> >     at 
> > org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:5906)
> >     at 
> > org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:5084)
> >     at org.apache.calcite.sql.SqlLiteral.accept(SqlLiteral.java:596)
> >     at 
> > org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:5735)
> >     at 
> > org.apache.calcite.sql2rel.StandardConvertletTable.convertOperands(StandardConver
> >  (stack truncated) {code}
>  
> but in other datasystem such as MySQL is OK:
> {code:java}
> mysql> select to_base64('方解石');
> +------------------------+
> | to_base64('方解石')    |
> +------------------------+
> | 5pa56Kej55+z           |
> +------------------------+
> 1 row in set (0.01 sec)
>  {code}
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to