[
https://issues.apache.org/jira/browse/CALCITE-3826?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17046517#comment-17046517
]
Stamatis Zampetakis edited comment on CALCITE-3826 at 2/27/20 11:23 AM:
------------------------------------------------------------------------
Hey [~eolivelli], from what I can see the UPDATE operation is not really
implemented in the Enumerable convention. {{EnumerableTableModify}} throws an
[AssertionError|https://github.com/apache/calcite/blob/153923bb92110c0b97ae46f45917ce3b94347291/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableModify.java#L137]
for the case of the UPDATE. How did you manage to execute a plan like the one
you have in the description?
was (Author: zabetak):
Hey [~eolivelli], from what I can see the UPDATE operation is not really
implemented in the Enumerable convention. {{EnumerableTableModify}} throws an
{{AssertionError}} for the case of the UPDATE
[1|https://github.com/apache/calcite/blob/153923bb92110c0b97ae46f45917ce3b94347291/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableModify.java#L137].
How did you manage to execute a plan like the one you have in the description?
> UPDATE assigns wrong type to bind variables
> -------------------------------------------
>
> Key: CALCITE-3826
> URL: https://issues.apache.org/jira/browse/CALCITE-3826
> Project: Calcite
> Issue Type: Bug
> Components: core
> Affects Versions: 1.22.0
> Reporter: Enrico Olivelli
> Priority: Blocker
>
> In 1.22.0rc1 I have found a problem about
> EnumerableTableModify#getSourceExpressionList
> It looks like it is not mapping correctly the expected datatypes of
> bind variables in queries like UPDATE table set a=?,b=? where pk=?.
> You can see the full SQL here in this commit in my test branch here
> https://github.com/diennea/herddb/pull/563/commits/157f927c9efe85cf7cac1370e1637b1c7ec46dff#diff-5d7594bc81ae0c92bbd33dee6c0d189aR2301
> My case is the following:
> Create a table:
> CREATE TABLE t1 (
> field0 int PRIMARY KEY,
> field1 VARCHAR(10),
> field2 VARCHAR(10),
> field3 INT,
> field4 INT,
> field5 VARCHAR(10)
> )
> UPDATE t1 SET field3 =?, field2=?, field4=?, field5=? where field0=?
> The Update maps to this Calcite plan:
> EnumerableTableModify(table=[[tblspace1, ip]], operation=[UPDATE],
> updateColumnList=[[field3, field2, field4, field5]],
> sourceExpressionList=[[?0, ?1, ?2, ?3]], flattened=[true]): rowcount =
> 1.0, cumulative cost = {2.5 rows, 10.5 cpu, 0.0 io}, id = 62
> EnumerableProject(field0=[$0], field1=[$1], field2=[$2],
> field3=[$3], field4=[$4], field5=[$5], EXPR$0=[?0], EXPR$1=[?1],
> EXPR$2=[?2], EXPR$3=[?3]): rowcount = 1.0, cumulative cost = {1.5
> rows, 10.5 cpu, 0.0 io}, id = 61
> EnumerableInterpreter: rowcount = 1.0, cumulative cost = {0.5
> rows, 0.5 cpu, 0.0 io}, id = 60
> BindableTableScan(table=[[tblspace1, ip]], filters=[[=($0,
> ?4)]]): rowcount = 1.0, cumulative cost = {0.005 rows, 0.01 cpu, 0.0
> io}, id = 45
> In particular the obeserved problem is:
> - the updateColumnList field is: field3, field2, field4, field5
> - but the bind variables have wrong type: VARCHAR, VARCHAR, INT, INT,
> expecting INT VARCHAR, INT VARCHAR
> even by changing the UPDATE command the types of bind variables stays the
> same,
> and they are the in the same order as in the CREATE TABLE STATEMENT,
> skipping the PK.
> It may be a regression of CALCITE-3672
--
This message was sent by Atlassian Jira
(v8.3.4#803005)