[ https://issues.apache.org/jira/browse/CALCITE-6046?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17774304#comment-17774304 ]
xiaogang zhou commented on CALCITE-6046: ---------------------------------------- [~julianhyde] Hi, I found this problem when I used below code to split SQL statements. the process is SQL string -> SqlNode -> SQL String {code:java} // code placeholder SqlParser.Config parserConfig = getCurrentSqlParserConfig(sqlDialect); SqlParser sqlParser = SqlParser.create(sqlContent, parserConfig); SqlNodeList sqlNodeList = sqlParser.parseStmtList(); sqlParser.parse(sqlNodeList.get(0));{code} the Dialect/ SqlConformance is a costumed one: [https://github.com/apache/flink/blob/master/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/validate/FlinkSqlConformance.java] then I found below SQL {code:java} // code placeholder CREATE TABLE source ( a BIGINT ) comment '测试test' WITH ( 'connector' = 'test' ); {code} transformed to {code:java} // code placeholder CREATE TABLE `source` ( `a` BIGINT ) COMMENT u&'\5218\51eftest' WITH ( 'connector' = 'test' ) {code} and the SQL parser template is like {code:java} // code placeholder SqlCreate SqlCreateTable(Span s, boolean replace, boolean isTemporary) : { final SqlParserPos startPos = s.pos(); boolean ifNotExists = false; SqlIdentifier tableName; List<SqlTableConstraint> constraints = new ArrayList<SqlTableConstraint>(); SqlWatermark watermark = null; SqlNodeList columnList = SqlNodeList.EMPTY; SqlCharStringLiteral comment = null; SqlTableLike tableLike = null; SqlNode asQuery = null; SqlNodeList propertyList = SqlNodeList.EMPTY; SqlNodeList partitionColumns = SqlNodeList.EMPTY; SqlParserPos pos = startPos; } { <TABLE> ifNotExists = IfNotExistsOpt() tableName = CompoundIdentifier() [ <LPAREN> { pos = getPos(); TableCreationContext ctx = new TableCreationContext();} TableColumn(ctx) ( <COMMA> TableColumn(ctx) )* { pos = pos.plus(getPos()); columnList = new SqlNodeList(ctx.columnList, pos); constraints = ctx.constraints; watermark = ctx.watermark; } <RPAREN> ] [ <COMMENT> <QUOTED_STRING> { String p = SqlParserUtil.parseString(token.image); comment = SqlLiteral.createCharString(p, getPos()); }] [ <PARTITIONED> <BY> partitionColumns = ParenthesizedSimpleIdentifierList() ] [ <WITH> propertyList = TableProperties() ] [ <LIKE> tableLike = SqlTableLike(getPos()) { return new SqlCreateTableLike(startPos.plus(getPos()), tableName, columnList, constraints, propertyList, partitionColumns, watermark, comment, tableLike, isTemporary, ifNotExists); } | <AS> asQuery = OrderedQueryOrExpr(ExprContext.ACCEPT_QUERY) { return new SqlCreateTableAs(startPos.plus(getPos()), tableName, columnList, constraints, propertyList, partitionColumns, watermark, comment, asQuery, isTemporary, ifNotExists); } ] { return new SqlCreateTable(startPos.plus(getPos()), tableName, columnList, constraints, propertyList, partitionColumns, watermark, comment, isTemporary, ifNotExists); } } {code} will give a exception : Caused by: org.apache.calcite.sql.parser.SqlParseException: Encountered "u&\'\\5218\\51eftest\'" at line 4, column 9. Was expecting: <QUOTED_STRING> ... > quoteStringLiteralUnicode returns unparsed string with u&' prefix, which will > cause the SqlLiteral > -------------------------------------------------------------------------------------------------- > > Key: CALCITE-6046 > URL: https://issues.apache.org/jira/browse/CALCITE-6046 > Project: Calcite > Issue Type: Improvement > Components: core > Affects Versions: 1.35.0 > Reporter: xiaogang zhou > Priority: Major > Fix For: 1.36.0 > > > quoteStringLiteralUnicode returns unparsed string with u&' prefix, which will > cause the SqlLiteral > > for example with a SQL > > {code:java} > // code placeholder > CREATE TABLE source ( > a BIGINT > ) comment '测试test' > WITH ( > 'connector' = 'test' > ); {code} > with a parsed Sqlnode, the toString will create a SQL like below, which is > not parsable again. > > {code:java} > // code placeholder > CREATE TABLE `source` ( > `a` BIGINT > ) > COMMENT u&'\5218\51eftest' WITH ( > 'connector' = 'test' > ) {code} > I think this is caused by > {code:java} > // code placeholder > public void quoteStringLiteralUnicode(StringBuilder buf, String val) { > buf.append("u&'"); {code} > not sure if I misconfigured something. Is it possiable to remove the > buf.append("u&'"); ? -- This message was sent by Atlassian Jira (v8.20.10#820010)