[
https://issues.apache.org/jira/browse/DERBY-3115?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12533297
]
Dag H. Wanvik commented on DERBY-3115:
--------------------------------------
think the leniency ("implementation defined") in Dan's quote is there
to allow for implementations that do not heed the SQL standard; that
roll back an uncommitted transaction when closing the connection.
In any case, for non auto-commit, Derby throws an exception when
closing a connection while a transaction is active (although with
different SQL states in network end embedded drivers, cf DERBY-2065).
For auto-commit, neither the network client, nor embedded throws an
exception, but behave differently (commit, rollback, respectively),
which is confusing. We have three options to harmonize behavior:
1a) Continue to not throw an exception under auto-commit, but make
embedded commit as the network client does.
1b) Continue to not throw an exception under auto-commit, but make
network client roll back changes also.
2) Make both clients throw on close when open transaction also under
autocommit (as per SQL Standard 17.3 GR 6).
I think 1a) fits well with the auto-commit paradigm and is goes well
with the JDBC4 model: close connection closes statements which in turn
close result sets which in turn completes the SELECT statements,
triggering auto-commit as per section 10.1 in JDBC4. Option 2) is also OK.
I would recommend against 1b).
What do you think?
> With embedded driver and autocommit, when closing a connection, updates on
> updatable result set are lost, unless result set is closed
> -------------------------------------------------------------------------------------------------------------------------------------
>
> Key: DERBY-3115
> URL: https://issues.apache.org/jira/browse/DERBY-3115
> Project: Derby
> Issue Type: Bug
> Components: JDBC
> Affects Versions: 10.3.1.4
> Reporter: Dag H. Wanvik
> Attachments: Main.java
>
>
> With autocommit, if an application neglects to close the result set
> and/or the statement, the closing of the connection will lose any
> updates performed via an updatable result set.
> If autocommit is false, SQL state 25000 invalid transaction state will
> be thrown, however.
> The JDBC standard requires that statements be closed when the
> connection is closed, cf. JDBC 4, section 9.4.4: "All Statement
> objects created from a given Connection object will be closed when the
> close method for the object is called." For updatable result sets,
> closing the statement would lead to a closing of the result set, and
> hence a commit of the updates.
> For the network client it works as expected.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.