[jira] [Commented] (DERBY-6952) Regression on Statement.getGeneratedKeys() on UPDATE statements

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[jira] [Commented] (DERBY-6952) Regression on Statement.getGeneratedKeys() on UPDATE statements

JIRA jira@apache.org

    [ https://issues.apache.org/jira/browse/DERBY-6952?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16097090#comment-16097090 ]

Bryan Pendleton commented on DERBY-6952:
----------------------------------------

I'm not sure what 10.13 change might have caused this. Thanks very much for the
concise repro program; it should make it possible to bisect the source changes and
determine where the behavior change arose.

I agree with the other commenters about the general state of of this feature in Derby,
and I also think that, in the particular case of your repro program, no new values
for the column 'ID' are generated, so if anything it seems to me that the returned
generated keys should have been an empty set, not "0" nor "1"; see DERBY-6849
for a similar  though not identical case.

> Regression on Statement.getGeneratedKeys() on UPDATE statements
> ---------------------------------------------------------------
>
>                 Key: DERBY-6952
>                 URL: https://issues.apache.org/jira/browse/DERBY-6952
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.13.1.1
>            Reporter: Lukas Eder
>
> Consider this program:
> {code}
> import java.sql.Connection;
> import java.sql.PreparedStatement;
> import java.sql.ResultSet;
> import java.sql.Statement;
> import java.util.Properties;
> import org.apache.derby.jdbc.EmbeddedDriver;
> public class Derby {
>     public static void main(String[] args) throws Exception {
>         try (Connection c1 = new EmbeddedDriver().connect("jdbc:derby:memory:test;create=true", new Properties());
>              Statement s = c1.createStatement()) {
>             s.execute(
>                 "CREATE TABLE test ("
>                     + "id INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY,"
>                     + "val INT)");
>             try {
>                 s.executeUpdate("INSERT INTO test (val) VALUES (1)");
>                 try (PreparedStatement p = c1.prepareStatement("UPDATE test SET val = 2 WHERE id = 1", Statement.RETURN_GENERATED_KEYS)) {
>                     p.executeUpdate();
>                     try (ResultSet rs = p.getGeneratedKeys()) {
>                         while (rs.next())
>                             System.out.println(rs.getString(1));
>                     }
>                 }
>             }
>             finally {
>                 s.execute("DROP TABLE test");
>             }
>         }
>     }
> }
> {code}
> Running this with Derby version 10.12.1.1 yields
> 1
> With 10.13.1.1, it yields:
> 0
> I'm not sure if this is (supposed to be) working at all, but the change is certainly a bit confusing.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
Loading...