Hi,

We are planning on using RowLocation to position the cursor when doing scrollable updatable cursors (i.e when navigating backwards in the resultset) - see http://permalink.gmane.org/gmane.comp.apache.db.derby.devel/10028 for more details.

The fact that the RowLocation could become invalid, do worry me a bit.

I did a test on a simple select statement, using transaction level read-uncommitted.

T1: select * from testtable

Then (before doing commit) I called on another connection:

T2: call SYSCS_UTIL.SYSCS_COMPRESS_TABLE("APP", "TESTTABLE", 0)
T2: Got exception:The exception 'SQL Exception: A lock could not be obtained within the time requested' was thrown while evaluating an expression.

So even in read-uncommitted mode, a lock intent level lock on the table is set (good), and it seems to be held until I close the resultset or commit the transaction T1.

The problem I then see is for cursors that are held over commit (ResultSet.HOLD_CURSORS_OVER_COMMIT). Maybe we should not support it for scrollable updatable resultsets.

Anyway , we would really appreciate to get some comments on the specification Dag sent out two days ago, to ensure that we are on the right track.

Thanks

-- Andreas

Mike Matrigali wrote:
Assuming row is not deleted, the question can only be answered
knowing the isolation level.  Basically the RowLocation can only
be counted on while a lock intent level lock is held on the table.
Intent table locks may be released as soon as a statement is
completed, or may be held to end of transaction depending on
the type of statement and type of isolation level.

The thing that may move an existing row in a heap are the compress
table system procedures.

If a row is deleted then there are other factors.

Rick Hillegas wrote:

Hello Store experts,

How long is a RowLocation in a Heap good for? Provided that the row is not deleted, can you count on its RowLocation reliably identifying the row for the duration of a Statement, a Transaction, a Connection? Forever?

Thanks,
-Rick




Reply via email to