On 2/13/06, Daniel John Debrunner (JIRA) <[email protected]> wrote:
>     [ 
> http://issues.apache.org/jira/browse/DERBY-210?page=comments#action_12366232 ]
>
> Daniel John Debrunner commented on DERBY-210:
> ---------------------------------------------
>
> The use of close() for close and reset is confusing (I know it's existing 
> code).
>
> Your addition is now the only  code in close() that actually generates new 
> objects. This code
> will be called even when the statement is being closed in order that it no 
> longer be used.
> This might have a performance impact, I don't know how often in a well 
> behaved application
> this internal close method would be called. Once per statement execution or 
> creation?
>
> I'm unclear on what this patch ('derby-210-patch3.diff') is addrressing. The 
> comments for
> item 10) above don't actually help me much. Was the old code successfully 
> re-using the old
> DRDAResultSet() but now for some reason we force it to use a new one every 
> time?
>

The old code was successfully re-using DRDAResultSet. This patch will
be required after my changes to the finalization code in client
driver. With these changes, a CLSQRY is not sent for each result set
to network server during finalization. The cleanup of result sets is
expected to happen when the DRDAStatement is reset. But this was not
happening and I was getting a failure in derbynet/prepStmt.java when I
was running tests with the full set of changes. One solution to this
was to create a new DRDAResultSet, same as what would be done for a
new statement. I added this and a comment to say "close() method is
also called before re-using a statement in the method
Database.newDRDAStatement. It has to ensure that the statement state
is restored. ". I hope this explains the reason for this patch.

As I mentioned before, I was thinking if it was okay to add a "new"
into the close method. I did not see any performance impact since
close() gets called when re-using statements or when the session is
closed. During a session, DRDAStatement.close() method gets called
only when the statement is re-used. When session is closed,
DRDAStatement.close() gets called for each statement in the statement
table and the statement also gets removed from the hash table. From
what I understood, I think there is no performance impact because of
this change. Please correct me if I am wrong here.

Still, it looks confusing to be doing "new" inside the close() method.
One easy option I can think of is to separate close and reset as 2
methods. I was also trying to see if I can reset any variables inside
the DRDAResultSet to restore its state. I have been trying to see if
this is possible but not successful. I will look into this some more.
Any suggestions are welcome.

Thanks,
Deepa

Reply via email to