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

Knut Anders Hatlen updated DERBY-3609:
--------------------------------------

    Attachment: generated-keys.diff

It turns out Derby does actually collect all generated keys during inserts, 
also for multi-row inserts. It just doesn't expose theses values and returns 
the result of calling VALUES IDENTITY_VAL_LOCAL().

The attached patch (generated-keys.diff) shows how 
EmbedStatement.getGeneratedKeys() can be made to return the collected keys. In 
my small experiments this appears to make getGeneratedKeys() work for multi-row 
inserts.

> Wrong functionality of auto-generated keys support
> --------------------------------------------------
>
>                 Key: DERBY-3609
>                 URL: https://issues.apache.org/jira/browse/DERBY-3609
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.3.2.1
>         Environment: N/A
>            Reporter: Oleksandr Alesinskyy
>              Labels: derby_triage10_11
>         Attachments: generated-keys.diff, TestGeneratedKeys.java
>
>
> Currently support for autogeneration key retrieval in JDBC driver 
> (java.sql.Statement) relies on IDENTITY_VAL_LOCAL function, which means that 
> for multi-row INSERT... VALUES statements as well as for INSERT...AS SELECT 
> statement wrong result are returned (key generated of last executed 
> single-row INSERT...VALUES statement or NULL otherwise). While this 
> functionality is documented in the Reference description of  
> IDENTITY_VAL_LOCAL it is not so clearly documented in "autogenerated keys" 
> subchapter of JDBC 3.0 Features (the only vague hint is "Calling 
> ResultSet.getMetaData on the ResultSet object returned by getGeneratedKeys 
> produces a ResultSetMetaData object that is similar to that returned by 
> IDENTITY_VAL_LOCAL.").
> Moreover, as far as I understant it diverge from JDBC specification. IMHO or 
> this functionality shal lbe implemented completely, or exception shall be 
> thrown if for given statement functionality is not supported (e.g. "Feature 
> not supported").



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to