Chris Rice created CALCITE-5885:
-----------------------------------

             Summary: SqlNode#toSqlString() does not honor dialect's 
supportsCharSet() flag on nested types
                 Key: CALCITE-5885
                 URL: https://issues.apache.org/jira/browse/CALCITE-5885
             Project: Calcite
          Issue Type: Bug
          Components: core
            Reporter: Chris Rice


Say we generate a RelNode corresponding to
{code:java}
SELECT CAST(c AS VARCHAR) FROM t
{code}
and we were to "unparse" that rel node back into the Postgres SQL dialect using
{code:java}
var converter = new RelToSqlConverter(PostgresqlSqlDialect.DEFAULT);
SqlImplementor.Result result = converter.visitRoot(rel);
SqlNode sqlNode = result.asStatement();
var sql = sqlNode.toSqlString(PostgresqlSqlDialect.DEFAULT).getSql();
{code}
it would generate something like:
{code:java}
SELECT CAST("c" AS VARCHAR) AS "c"
FROM "t"
{code}
Note that there is no charset information included in the cast, since the 
{{PostgresSqlDialect}} specifies that it does not support char sets:
{code:java}
  @Override public boolean supportsCharSet() {
    return false;
  }
{code}
Given that, we would expect that unparsing
{code:java}
SELECT CAST(c AS VARCHAR ARRAY) FROM t
{code}
back into SQL would also generate a type with no charset specified, but it in 
fact generates
{code:java}
SELECT CAST("c" AS VARCHAR CHARACTER SET "ISO-8859-1" ARRAY) AS "c"
FROM "t"
{code}

This seems to come from the way `SqlTypeUtil.convertTypeToSpec()` handles 
collection types.



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

Reply via email to