Class DMLWriteGeneratedColumnsResultSet
java.lang.Object
org.apache.derby.impl.sql.execute.NoRowsResultSetImpl
org.apache.derby.impl.sql.execute.DMLWriteResultSet
org.apache.derby.impl.sql.execute.DMLWriteGeneratedColumnsResultSet
- All Implemented Interfaces:
ResultSet
- Direct Known Subclasses:
InsertResultSet, UpdateResultSet
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected DataValueDescriptor[]keeps track of autoincrement values that are generated by getSetAutoincrementValues.protected int[]protected ResultSetprotected TemporaryRowHolderImplprotected booleanIf set to true, implies that Derby has generated autoincrement values for this (rep)resultset.protected Stringprotected longprotected booleanprotected NoPutResultSetFields inherited from class DMLWriteResultSet
baseRowReadMap, cachedDestinations, constantAction, heapDCOCI, indexDCOCIs, resultDescription, rowCount, streamStorableHeapColIdsFields inherited from class NoRowsResultSetImpl
activation, beginExecutionTime, beginTime, endExecutionTime, endTime, lccFields inherited from interface ResultSet
CURRENT_RESULTSET_ONLY, ENTIRE_RESULTSET_TREE, ISAFTERLAST, ISBEFOREFIRST, ISFIRST, ISLAST -
Constructor Summary
ConstructorsConstructorDescriptionDMLWriteGeneratedColumnsResultSet(Activation activation) ConstructorDMLWriteGeneratedColumnsResultSet(Activation activation, ConstantAction constantAction) -
Method Summary
Modifier and TypeMethodDescriptionprotected voidfirstExecuteSpecialHandlingAutoGen(boolean firstExecute, RowChanger rowChanger, UUID targetUUID) private int[]generatedColumnPositionsArray(UUID targetUUID) If user didn't provide columns list for auto-generated columns, then only include columns with auto-generated values in the resultset.ResultSet for rows inserted into the table (contains auto-generated keys columns only)protected ExecRowgetCompactRow(ExecRow inputRow, int[] columnIndexes) Take the input row and return a new compact ExecRow using the column positions provided in columnIndexes.getSetAutoincrementValue(int columnPosition, long increment) getSetAutoincrementValue will get the autoincrement value of the columnPosition specified for the target table.voidsaveAIcacheInformation(String schemaName, String tableName, String[] columnNames) private int[]uniqueColumnPositionArray(int[] columnIndexes, UUID targetUUID) Remove duplicate columns from the array.private booleanCheck that the received ColumnDescriptor corresponds to a column for which it is possible to fetch auto-generated keys.private voidverifyAutoGeneratedColumnsIndexes(int[] columnIndexes, UUID targetUUID) Verify that the auto-generated columns list (by position) has valid column positions for the table.private voidverifyAutoGeneratedColumnsNames(String[] columnNames, UUID targetUUID) Verify that the auto-generated columns list (by name) has valid column names for the table.protected voidverifyAutoGeneratedRScolumnsList(UUID targetUUID) Methods inherited from class DMLWriteResultSet
decodeLockMode, getIndexNameFromCID, getNextRowCore, getResultDescription, makeDeferredSparseRow, modifiedRowCount, normalizeRow, rememberConstraintMethods inherited from class NoRowsResultSetImpl
addWarning, checkRowPosition, clearCurrentRow, close, doesCommit, evaluateGenerationClauses, finish, getAbsoluteRow, getActivation, getBeginExecutionTimestamp, getCurrentTimeMillis, getCursorName, getEndExecutionTimestamp, getExecuteTime, getFirstRow, getLastRow, getNextRow, getPreviousRow, getQueryPlanText, getRelativeRow, getRowNumber, getSubqueryTrackingArray, getTimeSpent, getWarnings, isClosed, returnsRows, setAfterLastRow, setBeforeFirstRow, setup, toXML
-
Field Details
-
aiCache
keeps track of autoincrement values that are generated by getSetAutoincrementValues. -
identitySequenceUUIDString
-
sourceResultSet
-
autoGeneratedKeysResultSet
-
autoGeneratedKeysRowsHolder
-
autoGeneratedKeysColumnIndexes
protected int[] autoGeneratedKeysColumnIndexes -
autoincrementGenerated
protected boolean autoincrementGeneratedIf set to true, implies that Derby has generated autoincrement values for this (rep)resultset. During refresh for example, the autoincrement values are not generated but sent from the source to target or vice-versa. -
identityVal
protected long identityVal -
setIdentity
protected boolean setIdentity
-
-
Constructor Details
-
DMLWriteGeneratedColumnsResultSet
DMLWriteGeneratedColumnsResultSet(Activation activation) throws StandardException Constructor- Parameters:
activation- an activation- Throws:
StandardException- on error
-
DMLWriteGeneratedColumnsResultSet
DMLWriteGeneratedColumnsResultSet(Activation activation, ConstantAction constantAction) throws StandardException - Throws:
StandardException
-
-
Method Details
-
getSetAutoincrementValue
public NumberDataValue getSetAutoincrementValue(int columnPosition, long increment) throws StandardException getSetAutoincrementValue will get the autoincrement value of the columnPosition specified for the target table. If increment is non-zero we will also update the autoincrement value.- Parameters:
columnPosition- position of the column in the table (1-based)increment- amount of increment.- Throws:
StandardException- if anything goes wrong.
-
saveAIcacheInformation
public void saveAIcacheInformation(String schemaName, String tableName, String[] columnNames) throws StandardException - Throws:
StandardException
-
verifyAutoGeneratedRScolumnsList
- Throws:
StandardException
-
verifyAutoGeneratedColumnsIndexes
private void verifyAutoGeneratedColumnsIndexes(int[] columnIndexes, UUID targetUUID) throws StandardException Verify that the auto-generated columns list (by position) has valid column positions for the table.- Throws:
StandardException
-
verifyAutoGeneratedColumnsNames
private void verifyAutoGeneratedColumnsNames(String[] columnNames, UUID targetUUID) throws StandardException Verify that the auto-generated columns list (by name) has valid column names for the table. If all the column names are valid, convert column names array to corresponding column positions array Save that column positions array in activation. We do this to simplify the rest of the logic(it only has to deal with column positions here after).- Throws:
StandardException- Thrown on error if invalid column name in the list.
-
verifyAutoGenColumn
Check that the received ColumnDescriptor corresponds to a column for which it is possible to fetch auto-generated keys. -
firstExecuteSpecialHandlingAutoGen
protected void firstExecuteSpecialHandlingAutoGen(boolean firstExecute, RowChanger rowChanger, UUID targetUUID) throws StandardException - Throws:
StandardException
-
generatedColumnPositionsArray
If user didn't provide columns list for auto-generated columns, then only include columns with auto-generated values in the resultset. Those columns would be ones with default value defined.- Throws:
StandardException
-
uniqueColumnPositionArray
private int[] uniqueColumnPositionArray(int[] columnIndexes, UUID targetUUID) throws StandardException Remove duplicate columns from the array. Then use this array to generate a sub-set of insert resultset to be returned for JDBC3.0 getGeneratedKeys() call.- Throws:
StandardException
-
getCompactRow
Take the input row and return a new compact ExecRow using the column positions provided in columnIndexes. Copies references, no cloning.- Throws:
StandardException
-
getAutoGeneratedKeysResultset
Description copied from interface:ResultSetResultSet for rows inserted into the table (contains auto-generated keys columns only)- Specified by:
getAutoGeneratedKeysResultsetin interfaceResultSet- Overrides:
getAutoGeneratedKeysResultsetin classNoRowsResultSetImpl- Returns:
- NoPutResultSet NoPutResultSets for rows inserted into the table.
- See Also:
-