db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bernt M. Johnsen (JIRA)" <j...@apache.org>
Subject [jira] Commented: (DERBY-3609) Wrong functionality of auto-generated keys support
Date Wed, 09 Apr 2008 14:04:24 GMT

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

Bernt M. Johnsen commented on DERBY-3609:
-----------------------------------------

Formally, Derby does not support getGeneratedKeys since DatabaseMetaData.supportsGetGeneratedKeys()
returns false. However, Statement.getGeneratedKeys() is partially implemented, and behaves
very similar to IDENTITY_VAL_LOCAL()  since it will only return a meaningful result when an
single row insert is done with INSERT...VALUES. However, you have to specify Statement.RETURN_GENERATED_KEYS,
e.g. like this

        s.executeUpdate("insert into t(i) values (1)", Statement.RETURN_GENERATED_KEYS);

I agree that returning null from getGeneratedKeys is not according to spec and that an ResultSet
with no rows would be more appropriate. Also, the docs for "Autogenerated keys" in the ref.man.
would need a rewrite to be comprehendable. Another quirk is that getGeneratedKeys() will return
a resultset with one row with an SQL null-value if the statement was an insert of multiple
rows, and not like DENTITY_VAL_LOCAL() which returns the value of the generated key from the
last single-row insert.

> 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
>
> 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 is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message