Class JDBCRowMapper
- All Implemented Interfaces:
RowMapper
- Direct Known Subclasses:
JDBCMapper
JDBCRowMapper
maps Row
s to and from a JDBC database.-
Nested Class Summary
Nested classes/interfaces inherited from interface org.nuxeo.ecm.core.storage.sql.RowMapper
RowMapper.CopyResult, RowMapper.IdWithTypes, RowMapper.NodeInfo, RowMapper.RowBatch, RowMapper.RowUpdate
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
Property to determine whether collection appends delete all then re-insert, or are optimized for append.static final int
static final int
Fields inherited from class org.nuxeo.ecm.core.storage.sql.jdbc.JDBCConnection
connection, countExecutes, dialect, executeCount, logger, model, setClientInfo, sqlInfo, supportsBatchUpdates
-
Constructor Summary
ConstructorDescriptionJDBCRowMapper
(Model model, SQLInfo sqlInfo, VCSClusterInvalidator clusterInvalidator, VCSInvalidationsPropagator invalidationsPropagator) -
Method Summary
Modifier and TypeMethodDescriptionint
cleanupDeletedRows
(int max, Calendar beforeTime) Clean up soft-deleted rows.void
Clears the mapper's cache (if any)copy
(RowMapper.IdWithTypes source, Serializable destParentId, String destName, Row overwriteRow, boolean excludeSpecialChildren, boolean excludeACL) Copies the hierarchy starting from a given row to a new parent with a new name.protected Serializable
copyHier
(Serializable id, Serializable parentId, String name, boolean resetVersion, Map<Serializable, Serializable> idMap) Copies hierarchy from id to a new child of parentId.protected Serializable
copyHierRecursive
(RowMapper.IdWithTypes source, Serializable parentId, String name, Serializable overwriteId, boolean resetVersion, Map<Serializable, Serializable> idMap, Map<Serializable, RowMapper.IdWithTypes> idToTypes, Set<Serializable> recordIds, boolean excludeSpecialChildren) Copies hierarchy from id to parentId, and recurses.protected Boolean
copyRows
(String tableName, Set<Serializable> ids, Map<Serializable, Serializable> idMap, Serializable overwriteId) Copy the rows from tableName with given ids into new ones with new ids given by idMap.protected void
deleteRows
(String tableName, Set<Serializable> ids) Deletes multiple rows, all for the same table.protected void
deleteRowsDirect
(String tableName, Collection<Serializable> ids) protected void
deleteRowsSoft
(List<RowMapper.NodeInfo> nodeInfos) protected void
doSoftDeleteRows
(List<Serializable> ids) Computes a new unique id.getBinaryFulltext
(RowId rowId) Gets the fulltext extracted from the binary fields.long
Evaluate the cached elements sizeprotected List<RowMapper.IdWithTypes>
getChildrenIdsWithTypes
(Serializable id, boolean excludeSpecialChildren, boolean excludeRegularChildren) Gets the children ids and types of a node.protected List<RowMapper.NodeInfo>
Gets the children of a node as a list of NodeInfo.protected CollectionIO
getCollectionIO
(String tableName) getDescendantsInfo
(Serializable rootId) Gets descendants infos from a given root node.protected List<RowMapper.NodeInfo>
protected RowMapper.NodeInfo
getNodeInfo
(ResultSet rs, List<Column> columns) getSelectRows
(String tableName, SQLInfo.SQLInfoSelect select, Map<String, Serializable> criteriaMap, Map<String, Serializable> joinMap, boolean limitToOne) Fetches the rows for a select with fixed criteria given as two maps (a criteriaMap whose values and up in the returned rows, and a joinMap for other criteria).protected void
insertCollectionRows
(String tableName, List<RowMapper.RowUpdate> rowus) Updates multiple collection rows, all for the same table.protected void
insertSimpleRows
(String tableName, List<Row> rows) Inserts multiple rows, all for the same table.protected Serializable
newIdArray
(Collection<Serializable> ids) read
(Collection<RowId> rowIds, boolean cacheOnly) Reads a set of rows for the givenRowId
s.readCollectionArrays
(String tableName, Collection<Serializable> ids) Reads several collection rows, given a table name and the ids.readCollectionRowArray
(RowId rowId) Gets an array for aCollectionFragment
from the database, given its table name and id.readSelectionRows
(SelectionType selType, Serializable selId, Serializable filter, Serializable criterion, boolean limitToOne) Reads the rows corresponding to a selection.readSelectionsIds
(SelectionType selType, List<Serializable> values) Gets all the selection ids for a given list of values.readSimpleRow
(RowId rowId) Gets a row for aSimpleFragment
from the database, given its table name and id.readSimpleRows
(String tableName, Collection<Serializable> ids) Gets a list of rows forSimpleFragment
s from the database, given the table name and the ids.Processes and returns the invalidations queued for processing by the cache (if any).void
remove
(Serializable rootId, List<RowMapper.NodeInfo> nodeInfos) Deletes a hierarchy.void
rollback()
Rollback the transaction.void
sendInvalidations
(VCSInvalidations invalidations) Post-transaction invalidations notification.protected void
setToPreparedStatementIdArray
(PreparedStatement ps, int index, Serializable idArray) protected void
updateCollectionRows
(String tableName, List<RowMapper.RowUpdate> rowus) protected void
updateSimpleRows
(String tableName, List<RowMapper.RowUpdate> rows) Updates multiple simple rows, all for the same table.protected void
updateSimpleRowWithValues
(String tableName, Row row) Updates a row in the database with given explicit values.void
write
(RowMapper.RowBatch batch) Writes a set of rows.protected void
writeCreates
(List<Row> creates) protected void
writeDeletes
(Collection<RowId> deletes) protected void
writeUpdates
(Set<RowMapper.RowUpdate> updates) Methods inherited from class org.nuxeo.ecm.core.storage.sql.jdbc.JDBCConnection
checkConcurrentUpdate, closeConnection, connect, countExecute, getDataSourceName, getIdentification, getRepositoryName
-
Field Details
-
UPDATE_BATCH_SIZE
public static final int UPDATE_BATCH_SIZE- See Also:
-
DEBUG_MAX_TREE
public static final int DEBUG_MAX_TREE- See Also:
-
COLLECTION_DELETE_BEFORE_APPEND_PROP
Property to determine whether collection appends delete all then re-insert, or are optimized for append.- See Also:
-
-
Constructor Details
-
JDBCRowMapper
public JDBCRowMapper(Model model, SQLInfo sqlInfo, VCSClusterInvalidator clusterInvalidator, VCSInvalidationsPropagator invalidationsPropagator)
-
-
Method Details
-
receiveInvalidations
Description copied from interface:RowMapper
Processes and returns the invalidations queued for processing by the cache (if any).Called pre-transaction by session start or transactionless save;
- Specified by:
receiveInvalidations
in interfaceRowMapper
- Returns:
- the invalidations, or
null
-
sendInvalidations
Description copied from interface:RowMapper
Post-transaction invalidations notification.Called post-transaction by session commit/rollback or transactionless save.
- Specified by:
sendInvalidations
in interfaceRowMapper
- Parameters:
invalidations
- the known invalidations to send to others, ornull
-
clearCache
public void clearCache()Description copied from interface:RowMapper
Clears the mapper's cache (if any)Called after a rollback, or a manual clear through RepositoryStatus MBean.
- Specified by:
clearCache
in interfaceRowMapper
-
getCacheSize
public long getCacheSize()Description copied from interface:RowMapper
Evaluate the cached elements size- Specified by:
getCacheSize
in interfaceRowMapper
-
rollback
public void rollback()Description copied from interface:RowMapper
Rollback the transaction.This is in the
RowMapper
interface because on rollback the cache must be invalidated. -
getCollectionIO
-
generateNewId
Description copied from interface:RowMapper
Computes a new unique id.- Specified by:
generateNewId
in interfaceRowMapper
- Returns:
- a new unique id
-
read
Description copied from interface:RowMapper
-
readSimpleRows
Gets a list of rows forSimpleFragment
s from the database, given the table name and the ids.- Parameters:
tableName
- the table nameids
- the ids- Returns:
- the list of rows, without the missing ones
-
readCollectionArrays
Reads several collection rows, given a table name and the ids.- Parameters:
tableName
- the table nameids
- the ids
-
getSelectRows
protected List<Row> getSelectRows(String tableName, SQLInfo.SQLInfoSelect select, Map<String, Serializable> criteriaMap, Map<String, Serializable> joinMap, boolean limitToOne) Fetches the rows for a select with fixed criteria given as two maps (a criteriaMap whose values and up in the returned rows, and a joinMap for other criteria). -
write
Description copied from interface:RowMapper
Writes a set of rows. This includes creating, updating and deleting rows. -
writeCreates
-
writeUpdates
-
writeDeletes
-
insertSimpleRows
Inserts multiple rows, all for the same table. -
insertCollectionRows
Updates multiple collection rows, all for the same table. -
updateSimpleRows
Updates multiple simple rows, all for the same table. -
updateCollectionRows
-
deleteRows
Deletes multiple rows, all for the same table. -
deleteRowsSoft
-
doSoftDeleteRows
- Throws:
SQLException
-
newIdArray
-
setToPreparedStatementIdArray
protected void setToPreparedStatementIdArray(PreparedStatement ps, int index, Serializable idArray) throws SQLException - Throws:
SQLException
-
cleanupDeletedRows
Clean up soft-deleted rows.Rows deleted more recently than the beforeTime are left alone. Only a limited number of rows may be deleted, to prevent transaction during too long.
- Parameters:
max
- the maximum number of rows to delete at a timebeforeTime
- the maximum deletion time of the rows to delete- Returns:
- the number of rows deleted
-
deleteRowsDirect
-
readSimpleRow
Description copied from interface:RowMapper
Gets a row for aSimpleFragment
from the database, given its table name and id. If the row doesn't exist,null
is returned.- Specified by:
readSimpleRow
in interfaceRowMapper
- Parameters:
rowId
- the row id- Returns:
- the row, or
null
-
getBinaryFulltext
Description copied from interface:RowMapper
Gets the fulltext extracted from the binary fields.- Specified by:
getBinaryFulltext
in interfaceRowMapper
- Parameters:
rowId
- the row id- Returns:
- the fulltext string representation or
null
if unsupported
-
readCollectionRowArray
Description copied from interface:RowMapper
Gets an array for aCollectionFragment
from the database, given its table name and id. If no rows are found, an empty array is returned.- Specified by:
readCollectionRowArray
in interfaceRowMapper
- Parameters:
rowId
- the row id- Returns:
- the array
-
readSelectionRows
public List<Row> readSelectionRows(SelectionType selType, Serializable selId, Serializable filter, Serializable criterion, boolean limitToOne) Description copied from interface:RowMapper
Reads the rows corresponding to a selection.- Specified by:
readSelectionRows
in interfaceRowMapper
- Parameters:
selType
- the selection typeselId
- the selection id (parent id for a hierarchy selection)filter
- the filter value (name for a hierarchy selection)criterion
- an optional additional criterion depending on the selection type (complex prop flag for a hierarchy selection)limitToOne
- whether to stop after one row retrieved- Returns:
- the list of rows
-
readSelectionsIds
Description copied from interface:RowMapper
Gets all the selection ids for a given list of values.- Specified by:
readSelectionsIds
in interfaceRowMapper
-
copy
public RowMapper.CopyResult copy(RowMapper.IdWithTypes source, Serializable destParentId, String destName, Row overwriteRow, boolean excludeSpecialChildren, boolean excludeACL) Description copied from interface:RowMapper
Copies the hierarchy starting from a given row to a new parent with a new name.If the new parent is
null
, then this is a version creation, which doesn't recurse in regular children.If
overwriteRow
is passed, the copy is done onto this existing node as its root (version restore) instead of creating a new node in the parent.- Specified by:
copy
in interfaceRowMapper
- Parameters:
source
- the id, primary type and mixin types of the row to copydestParentId
- the new parent id, ornull
destName
- the new nameoverwriteRow
- when notnull
, the copy is done onto this existing row, and the values are set in hierarchyexcludeSpecialChildren
- the flag to exclude special children from copyexcludeACL
- the flag to exclude ACL from copy- Returns:
- info about the copy
-
updateSimpleRowWithValues
Updates a row in the database with given explicit values. -
copyHierRecursive
protected Serializable copyHierRecursive(RowMapper.IdWithTypes source, Serializable parentId, String name, Serializable overwriteId, boolean resetVersion, Map<Serializable, Serializable> idMap, Map<Serializable, throws SQLExceptionRowMapper.IdWithTypes> idToTypes, Set<Serializable> recordIds, boolean excludeSpecialChildren) Copies hierarchy from id to parentId, and recurses.If name is
null
, then the original name is kept.idMap
is filled with info about the correspondence between original and copied ids.idToTypes
is filled with the type of each (source) fragment.recordIds
is filled with the copied ids of documents that used to be records.TODO: this should be optimized to use a stored procedure.
- Parameters:
overwriteId
- when notnull
, the copy is done onto this existing node (skipped)- Returns:
- the new root id
- Throws:
SQLException
-
copyHier
protected Serializable copyHier(Serializable id, Serializable parentId, String name, boolean resetVersion, Map<Serializable, Serializable> idMap) throws SQLExceptionCopies hierarchy from id to a new child of parentId.If name is
null
, then the original name is kept.idMap
is filled with info about the correspondence between original and copied ids.- Returns:
- the new id
- Throws:
SQLException
-
getChildrenIdsWithTypes
protected List<RowMapper.IdWithTypes> getChildrenIdsWithTypes(Serializable id, boolean excludeSpecialChildren, boolean excludeRegularChildren) throws SQLException Gets the children ids and types of a node.- Throws:
SQLException
-
copyRows
protected Boolean copyRows(String tableName, Set<Serializable> ids, Map<Serializable, Serializable> idMap, Serializable overwriteId) throws SQLExceptionCopy the rows from tableName with given ids into new ones with new ids given by idMap.A new row with id
overwriteId
is first deleted.- Returns:
Boolean.TRUE
for a modification or creation,Boolean.FALSE
for a deletion,null
otherwise (still absent)- Throws:
SQLException
-
remove
Description copied from interface:RowMapper
Deletes a hierarchy. -
getDescendantsInfo
Description copied from interface:RowMapper
Gets descendants infos from a given root node. This does not include information about the root node itself.- Specified by:
getDescendantsInfo
in interfaceRowMapper
- Parameters:
rootId
- the root node id from which to get descendants info- Returns:
- the list of descendant nodes info
-
getDescendantsInfoIterative
-
getChildrenNodeInfos
Gets the children of a node as a list of NodeInfo. -
getNodeInfo
- Throws:
SQLException
-