Top Description Fields Constructors Methods
org.apache.derby.client.am

pack-priv Class LOBStateTracker

extends Object
Class Inheritance
Imports
java.util.Arrays

An object that tracks the state of large objects (LOBs) for the current row in a result set.

A LOB's state is either unpublished or published. When a LOB is published, it means that the end-user has been given a reference to the LOB object. This implies that the LOB cannot be automatically freed/released when the result set position changes (i.e. typically rs.next()), because the LOB object must be kept valid/alive until the transaction is ended or the LOB object is explicitly freed.

This class covers two types of functionality regarding LOBs;

Both functionalities will be disabled if the server doesn't support locators. If locators are enabled, they will be freed when checkCurrentRow is called.

The tracker has a notion of current row. The current row is changed by calling checkCurrentRow. The owner of the tracker is repsonsible for invoking the method at the correct time, and only when the cursor is positioned on a valid data row. The method must be invoked before the cursor changes the position. Note that calling the method discardState makes checkCurrentRow ignore all LOBs on the subsequent call.

Field Summary

Modifier and TypeField and Description
private final int[]
columns

1-based column indexes for the LOBs to track.

private final boolean
doRelease

Tells whether locators shall be released.

private final boolean[]
isBlob

Tells whether the LOB is Blob or a Clob.

private final int[]
lastLocatorSeen

The last locator values seen when releasing.

public static final LOBStateTracker
NO_OP_TRACKER

Instance to use when there are no LOBs in the result set, or when the server doesn't support locators.

private final boolean[]
published

Tells whether the LOB colum has been published for the current row.

Constructor Summary

AccessConstructor and Description
pack-priv
LOBStateTracker(int[]
the 1-based indexes of the LOB columns
lobIndexes
,
boolean[]
whether the LOB is a Blob or a Clob
isBlob
,
boolean
whether locators shall be released
doRelease
)

Creates a LOB state tracker for the specified configuration.

Method Summary

Modifier and TypeMethod and Description
pack-priv void
checkCurrentRow(Cursor
the cursor object to use for releasing the locators
cursor
)

Checks the current row, updating state and releasing locators on the server as required.

pack-priv void
discardState()

Discards all recorded dynamic state about LOBs.

pack-priv void
markAsPublished(int
1-based column index
index
)

Marks the specified column of the current row as published, which implies that the tracker should not release the associated locator.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

columnsback to summary
private final int[] columns

1-based column indexes for the LOBs to track.

doReleaseback to summary
private final boolean doRelease

Tells whether locators shall be released. This will be false if locators are not supported by the server.

isBlobback to summary
private final boolean[] isBlob

Tells whether the LOB is Blob or a Clob.

lastLocatorSeenback to summary
private final int[] lastLocatorSeen

The last locator values seen when releasing. These values are used to detect if checkCurrentRow is being executed more than once on the same row.

NO_OP_TRACKERback to summary
public static final LOBStateTracker NO_OP_TRACKER

Instance to use when there are no LOBs in the result set, or when the server doesn't support locators.

publishedback to summary
private final boolean[] published

Tells whether the LOB colum has been published for the current row.

Constructor Detail

LOBStateTrackerback to summary
pack-priv LOBStateTracker(int[] lobIndexes, boolean[] isBlob, boolean doRelease)

Creates a LOB state tracker for the specified configuration.

Parameters
lobIndexes:int[]

the 1-based indexes of the LOB columns

isBlob:boolean[]

whether the LOB is a Blob or a Clob

doRelease:boolean

whether locators shall be released

See Also
NO_OP_TRACKER

Method Detail

checkCurrentRowback to summary
pack-priv void checkCurrentRow(Cursor cursor) throws SqlException

Checks the current row, updating state and releasing locators on the server as required.

This method should only be called once per valid row in the result set.

Parameters
cursor:Cursor

the cursor object to use for releasing the locators

Exceptions
SqlException:
if releasing the locators on the server fails
discardStateback to summary
pack-priv void discardState()

Discards all recorded dynamic state about LOBs.

Typically called after connection commit or rollback, as those operations will release all locators on the server automatically. There is no need to release them from the client side in this case.

markAsPublishedback to summary
pack-priv void markAsPublished(int index)

Marks the specified column of the current row as published, which implies that the tracker should not release the associated locator.

Columns must be marked as published when a LOB object is created on the client, to avoid releasing the corresponding locator too early.

Parameters
index:int

1-based column index