[
https://issues.apache.org/jira/browse/CALCITE-3030?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16829056#comment-16829056
]
Danny Chan commented on CALCITE-3030:
-------------------------------------
[~zabetak] I think this is bug, we can reproduce the bug with this test in
SqlParserTest
{code:java}
@Test public void testMergeSelectSource() {
final String sql = "merge into emps e "
+ "using (select * from tempemps where deptno is null) t "
+ "on e.empno = t.empno "
+ "when matched then update "
+ "set e.name = t.name, e.deptno = t.deptno, e.salary = t.salary * .1 "
+ "when not matched then insert (name, dept, salary) "
+ "values(t.name, 10, t.salary * .15)";
final String expected = "MERGE INTO `EMPS` AS `E`\n"
+ "USING (SELECT *\n"
+ "FROM `TEMPEMPS`\n"
+ "WHERE (`DEPTNO` IS NULL)) AS `T`\n"
+ "ON (`E`.`EMPNO` = `T`.`EMPNO`)\n"
+ "WHEN MATCHED THEN UPDATE SET `NAME` = `T`.`NAME`\n"
+ ", `DEPTNO` = `T`.`DEPTNO`\n"
+ ", `SALARY` = (`T`.`SALARY` * 0.1)\n"
+ "WHEN NOT MATCHED THEN INSERT (`NAME`, `DEPT`, `SALARY`) "
+ "(VALUES (ROW(`T`.`NAME`, 10, (`T`.`SALARY` * 0.15))))";
sql(sql).ok(expected)
.node(not(isDdl()));
}
{code}
I will fix it.
> SqlParseException when using aliases in merge statements
> --------------------------------------------------------
>
> Key: CALCITE-3030
> URL: https://issues.apache.org/jira/browse/CALCITE-3030
> Project: Calcite
> Issue Type: Bug
> Components: core
> Affects Versions: 1.19.0
> Environment: OS: win10 (17763)
> JDK: 1.7
> Reporter: wuzq
> Assignee: Danny Chan
> Priority: Major
> Attachments: [email protected]
>
>
> The update section of "merge SQL" reports an error when using an alias
> {code:java}
> // if i replace red code with "b = '123456'", I don't get an error
> String sql = "merge into xxx as t1 using yyy as t2 on t1.a = t2.a when
> matched then update set t1.b = '123456'" ;
> SqlParser.ConfigBuilder configBuilder = SqlParser.configBuilder();
> configBuilder.setCaseSensitive(false);
> SqlParser.Config config = configBuilder.build();
> SqlParser parser = SqlParser.create(sql, config);
> SqlNode node = parser.parseQuery();
> {code}
> the error
> {code:java}
> //代码占位符
> Exception in thread "main" org.apache.calcite.sql.parser.SqlParseException:
> Encountered "." at line 1, column 84.
> Was expecting:
> "=" ...
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.convertException(SqlParserImpl.java:355)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.normalizeException(SqlParserImpl.java:143)
> at org.apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:156)
> at com.yatop.Calcite.main(Calcite.java:39)
> Caused by: org.apache.calcite.sql.parser.impl.ParseException: Encountered "."
> at line 1, column 84.
> Was expecting:
> "=" ...
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.generateParseException(SqlParserImpl.java:25299)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_consume_token(SqlParserImpl.java:25116)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.WhenMatchedClause(SqlParserImpl.java:1414)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.SqlMerge(SqlParserImpl.java:1383)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.SqlStmt(SqlParserImpl.java:861)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.SqlStmtEof(SqlParserImpl.java:877)
> at
> org.apache.calcite.sql.parser.impl.SqlParserImpl.parseSqlStmtEof(SqlParserImpl.java:199)
> at org.apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:148)
> ... 1 more
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)