0

Does Calcite support UPDATE with inner SQL?

it seems that calcite support update with inner sql https://issues.apache.org/jira/browse/CALCITE-2427

but

Sample 1

    update lk.request
    set step_id ='12ef237a-4038-41dd-aad3-e67cff4c2a16'
    where id='c50e3cfc-7bc9-4f18-be48-db2dae91e7ea'

works fine

Sample 2

     update lk.request set step_id = (select  '12ef237a-4038-41dd-aad3-e67cff4c2a16') 
     where id='c50e3cfc-7bc9-4f18-be48-db2dae91e7ea'

throw exception

java.lang.AssertionError: UPDATE
    at org.apache.calcite.adapter.enumerable.EnumerableTableModify.implement(EnumerableTableModify.java:139) ~[calcite-core-1.30.0.jar:1.30.0]
    at org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.implementRoot(EnumerableRelImplementor.java:111) ~[calcite-core-1.30.0.jar:1.30.0]
    at org.apache.calcite.adapter.enumerable.EnumerableInterpretable.toBindable(EnumerableInterpretable.java:114) ~[calcite-core-1.30.0.jar:1.30.0]
    at org.apache.calcite.prepare.CalcitePrepareImpl$CalcitePreparingStmt.implement(CalcitePrepareImpl.java:1131) ~[calcite-core-1.30.0.jar:1.30.0]
    at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:324) ~[calcite-core-1.30.0.jar:1.30.0]
    at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:220) ~[calcite-core-1.30.0.jar:1.30.0]
    at org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:648) ~[calcite-core-1.30.0.jar:1.30.0]
    at org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:514) ~[calcite-core-1.30.0.jar:1.30.0]
    at org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:484) ~[calcite-core-1.30.0.jar:1.30.0]
    at org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:234) ~[calcite-core-1.30.0.jar:1.30.0]
    at org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement_(CalciteConnectionImpl.java:214) ~[calcite-core-1.30.0.jar:1.30.0]
    at org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:203) ~[calcite-core-1.30.0.jar:1.30.0]
    at org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:99) ~[calcite-core-1.30.0.jar:1.30.0]
    at org.apache.calcite.avatica.AvaticaConnection.prepareStatement(AvaticaConnection.java:175) ~[avatica-core-1.20.0.jar:1.20.0]
    at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:337) ~[HikariCP-4.0.3.jar:na]
    at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) ~[HikariCP-4.0.3.jar:na]
    at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.createPreparedStatement(PreparedStatementCreatorFactory.java:235) ~[spring-jdbc-5.3.22.jar:5.3.22]
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:649) ~[spring-jdbc-5.3.22.jar:5.3.22]
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:960) ~[spring-jdbc-5.3.22.jar:5.3.22]
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:981) ~[spring-jdbc-5.3.22.jar:5.3.22]
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:328) ~[spring-jdbc-5.3.22.jar:5.3.22]
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:333) ~[spring-jdbc-5.3.22.jar:5.3.22]


simplify sql, expect that update will works as SQL92

kometen
  • 6,536
  • 6
  • 41
  • 51

0 Answers0