I haven't reviewed the patch fully, but some comments I see are:
  1. I don't see any test cases added to show the new behavior. I am not sure if the cancel() part is working... Having test cases would show the behavior.
  2. DMLs statements could also use timeouts... especially the searched ones. I think we should handle executeUpdate() methods too.
  3. Shouldn't we put timer checking in a try/catch block? If the query raises SQLException, could we leave the block without resetting timer?
  4. Shouldn't we handle the cases of PreparedStatement and CallableStatement as well?
  5. Could we use java.util.TimerTask for timing part?
Satheesh

Shreyas Kaushik wrote:
I have implemented this for a SQL Query timeout. I thought this is not applicable to insert and update timeouts ( I donno
if there is something like that and how do we set that ). This is for *queries only* .

What my patch addresses is the closing of the activation for that statement when there is a timeout. It is the activation that
holds the key to all the stuff below it( includes the ResultSets) so by closing the activation all the tree of ResultSet and
other resources should get released. I did a memory profiling after doing this patch and it did not detect any memory leaks.

thanks
Shreyas

Ali Demir wrote:

Thank you!

How does the internals work? Does the cancelled query release all the locks it might have been holding? Does it only work for this kind of select? What if it were waiting for another insert/update transaction? Would it still be able to cancel the select and return?

Regards,
Ali


At 09:28 PM 2/23/2005, you wrote:

     [ http://issues.apache.org/jira/browse/DERBY-31?page=history ]

Shreyas Kaushik updated DERBY-31:
---------------------------------

    Attachment: Derby-31.patch

This is the patch for implementing setQueryTimeout() in  EmbedStatement.java . I clsoe the activation for the statement when the query times out so that the query stops executing. I tested this by inserting data into a table continuosly for about 12 hours and then doing a select * on it by setting the time out to 1 sec. It worked fine by cancelling the statement execution when the timeout happened.

> Statement.setQueryTimeout() support.
> ------------------------------------
>
>          Key: DERBY-31
>          URL: http://issues.apache.org/jira/browse/DERBY-31
>      Project: Derby
>         Type: New Feature
>   Components: JDBC
>  Environment: ALL
>     Reporter: Ali Demir
>  Attachments: Derby-31.patch, QueryTimer.java
>
> Calling Statement.setQueryTimeout() throws exception saying that function is not supported. This is an important JDBC feature and is limiting our options to use Derby with our JDBC code. Implementing this JDBC function would make Derby much easier to adopt.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira





Reply via email to