[ 
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)

Reply via email to