db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Knut Anders Hatlen (JIRA)" <j...@apache.org>
Subject [jira] Updated: (DERBY-4433) Cannot insert from EXCEPT/INTERSECT when target table has more columns than the source
Date Fri, 20 Nov 2009 10:47:39 GMT

     [ https://issues.apache.org/jira/browse/DERBY-4433?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Knut Anders Hatlen updated DERBY-4433:
--------------------------------------

    Attachment: prn3.diff

The root cause of NPE was that the code currently on trunk that reorders and enhances the
RCL is only meant to be used for replacing the RCL in a node. It does not account for the
extra level in the tree caused by inserting a ProjectRestrictNode.

This was easily solved by reviving more of the pre-DERBY-1644 code in SetOperatorNode, since
that code used to insert a PRN and correctly adjusted the nesting levels of the RCs. The old
code used the method ResultColumn.getExpressionType(), which does not exist anymore, but I
think it should work fine to use ResultColumn.getType() instead.

This solved the NPE in union.sql. I'll start the regression tests to see if it has introduced
any new problems.

(Updated patch attached as prn3.diff.)

> Cannot insert from EXCEPT/INTERSECT when target table has more columns than the source
> --------------------------------------------------------------------------------------
>
>                 Key: DERBY-4433
>                 URL: https://issues.apache.org/jira/browse/DERBY-4433
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.6.0.0
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>         Attachments: prn.diff, prn2.diff, prn3.diff
>
>
> If an INSERT statement takes the rows to insert from an EXCEPT query or an INTERSECT
query, the statement fails with "Column position 'X' out of range" if the target table contains
more columns than the result returned from EXCEPT or INTERSECT.
> Example:
> ij> create table t (x int, y int);
> 0 rows inserted/updated/deleted
> ij> insert into t(x) select x from t except select x from t;
> ERROR 42X77: Column position '2' is out of range for the query expression.
> ij> insert into t(x) select x from t intersect select x from t;
> ERROR 42X77: Column position '2' is out of range for the query expression.
> The corresponding UNION query works:
> ij> insert into t(x) select x from t union select x from t;
> 0 rows inserted/updated/deleted

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message