Class MemConnection

java.lang.Object
org.nuxeo.ecm.core.storage.dbs.DBSConnectionBase
org.nuxeo.ecm.core.storage.mem.MemConnection
All Implemented Interfaces:
AutoCloseable, LockManager, DBSConnection

public class MemConnection extends DBSConnectionBase
In-memory implementation of a DBSConnection.
Since:
11.1 (introduced in 5.9.4 as MemRepository)
  • Field Details

  • Constructor Details

  • Method Details

    • begin

      public void begin()
      Description copied from interface: DBSConnection
      Starts a new transaction.
      See Also:
    • commit

      public void commit()
      Description copied from interface: DBSConnection
      Commits the current transaction.
      See Also:
    • rollback

      public void rollback()
      Description copied from interface: DBSConnection
      Rolls back the current transaction.
      See Also:
    • initRepository

      protected void initRepository()
    • close

      public void close()
      Description copied from interface: DBSConnection
      Closes this connection.
    • generateNewId

      public String generateNewId()
      Description copied from interface: DBSConnection
      Generates a new id for a document.
      Returns:
      the new id
    • readState

      public State readState(String id)
      Description copied from interface: DBSConnection
      Reads the state of a document.
      Parameters:
      id - the document id
      Returns:
      the document state, or null if not found
    • readPartialState

      public State readPartialState(String id, Collection<String> keys)
      Description copied from interface: DBSConnection
      Reads the partial state of a document.
      Parameters:
      id - the document id
      keys - the keys to read
      Returns:
      the document partial state, or null if not found
    • readStates

      public List<State> readStates(List<String> ids)
      Description copied from interface: DBSConnection
      Reads the states of several documents.

      The returned states may be in a different order than the ids.

      Parameters:
      ids - the document ids
      Returns:
      the document states, an element by be null if not found
    • createState

      public void createState(State state)
      Description copied from interface: DBSConnection
      Creates a document.
      Parameters:
      state - the document state
    • updateState

      public void updateState(String id, State.StateDiff diff, DBSTransactionState.ConditionalUpdates conditionalUpdates)
      Description copied from interface: DBSConnection
      Updates a document.
      Parameters:
      id - the document id
      diff - the diff to apply
      conditionalUpdates - the conditional updates, or null
    • deleteStates

      public void deleteStates(Set<String> ids)
      Description copied from interface: DBSConnection
      Deletes a set of document.
      Parameters:
      ids - the document ids
    • readChildState

      public State readChildState(String parentId, String name, Set<String> ignored)
      Description copied from interface: DBSConnection
      Reads the state of a child document.
      Parameters:
      parentId - the parent document id
      name - the name of the child
      ignored - a set of document ids that should not be considered
      Returns:
      the state of the child document, or null if not found
    • hasChild

      public boolean hasChild(String parentId, String name, Set<String> ignored)
      Description copied from interface: DBSConnection
      Checks if a document has a child with the given name
      Parameters:
      parentId - the parent document id
      name - the name of the child
      ignored - a set of document ids that should not be considered
      Returns:
      true if the child exists, false if not
    • queryKeyValue

      public List<State> queryKeyValue(String key, Object value, Set<String> ignored)
      Description copied from interface: DBSConnection
      Queries the repository for documents having key = value.
      Parameters:
      key - the key
      value - the value
      ignored - a set of document ids that should not be considered
      Returns:
      the document states matching the query
    • queryKeyValue

      public List<State> queryKeyValue(String key1, Object value1, String key2, Object value2, Set<String> ignored)
      Description copied from interface: DBSConnection
      Queries the repository for documents having key1 = value1 and key2 = value2.
      Parameters:
      key1 - the first key
      value1 - the first value
      key2 - the second key
      value2 - the second value
      ignored - a set of document ids that should not be considered
      Returns:
      the document states matching the query
    • getDescendants

      public Stream<State> getDescendants(String rootId, Set<String> keys)
      Description copied from interface: DBSConnection
      Returns a stream of descendants from a given root document, in no particular order. This does not include information about the root document itself.

      THE STREAM MUST BE CLOSED WHEN DONE to release resources.

      Parameters:
      rootId - the root document id
      keys - what to collect about the descendants in addition to their ids
      Returns:
      a stream of States; THE STREAM MUST BE CLOSED WHEN DONE
    • getDescendants

      public Stream<State> getDescendants(String rootId, Set<String> keys, int limit)
      Description copied from interface: DBSConnection
      Returns a stream of descendants from a given root document, in no particular order. This does not include information about the root document itself.

      THE STREAM MUST BE CLOSED WHEN DONE to release resources.

      Parameters:
      rootId - the root document id
      keys - what to collect about the descendants in addition to their ids
      limit - the maximum number of descendants to return
      Returns:
      a stream of States; THE STREAM MUST BE CLOSED WHEN DONE
    • hasAncestor

      protected static boolean hasAncestor(State state, String id)
    • queryKeyValuePresence

      public boolean queryKeyValuePresence(String key, String value, Set<String> ignored)
      Description copied from interface: DBSConnection
      Queries the repository to check if there are documents having key = value.
      Parameters:
      key - the key
      value - the value
      ignored - a set of document ids that should not be considered
      Returns:
      true if the query matches at least one document, false if the query matches nothing
    • queryAndFetch

      public PartialList<Map<String,Serializable>> queryAndFetch(DBSExpressionEvaluator evaluator, OrderByClause orderByClause, boolean distinctDocuments, int limit, int offset, int countUpTo)
      Description copied from interface: DBSConnection
      Queries the repository for documents matching a NXQL query, and returns a projection of the documents.
      Parameters:
      evaluator - the map-based evaluator for the query
      orderByClause - an ORDER BY clause
      distinctDocuments - true if the projection should return a maximum of one row per document
      limit - the limit on the number of documents to return
      offset - the offset in the list of documents to return
      countUpTo - if -1, count the total size without offset/limit.
      If 0, don't count the total size, set it to -1 .
      If n, count the total number if there are less than n documents otherwise set the total size to -2.
      Returns:
      a partial list of maps containing the NXQL projections requested, and the total size according to countUpTo
    • scroll

      public ScrollResult<String> scroll(DBSExpressionEvaluator evaluator, int batchSize, int keepAliveSeconds)
      Description copied from interface: DBSConnection
      Executes the given query and returns the first batch of results containing id of documents, next batch must be requested within the keepAliveSeconds delay.
    • scroll

      public ScrollResult<String> scroll(String scrollId)
      Description copied from interface: DBSConnection
      Get the next batch of results containing id of documents, the scrollId is part of the previous ScrollResult response.
    • applyDiff

      public static void applyDiff(State state, State.StateDiff stateDiff)
      Applies a State.StateDiff in-place onto a base State.

      Uses thread-safe datastructures.

    • applyDiff

      protected static void applyDiff(State state, String key, Serializable value)
      Applies a key/value diff in-place onto a base State.

      Uses thread-safe datastructures.

    • applyDiff

      public static Serializable applyDiff(Serializable value, State.ListDiff listDiff)
      Applies a State.ListDiff onto an array or List, and returns the resulting value.

      Uses thread-safe datastructures.

    • getLock

      public Lock getLock(String id)
      Description copied from interface: LockManager
      Gets the lock on a document.

      If the document does not exist, null is returned.

      Parameters:
      id - the document id
      Returns:
      the existing lock, or null when there is no lock
    • setLock

      public Lock setLock(String id, Lock lock)
      Description copied from interface: LockManager
      Sets a lock on a document.

      If the document is already locked, returns its existing lock status (there is no re-locking, LockManager.removeLock(java.lang.String, java.lang.String) must be called first).

      Parameters:
      id - the document id
      lock - the lock to set
      Returns:
      null if locking succeeded, or the existing lock if locking failed
    • removeLock

      public Lock removeLock(String id, String owner)
      Description copied from interface: LockManager
      Removes the lock from a document.

      The previous lock is returned.

      If owner is null then the lock is unconditionally removed.

      If owner is not null, it must match the existing lock owner for the lock to be removed. If it doesn't match, the returned lock will return true for Lock.getFailed().

      Parameters:
      id - the document id
      owner - the owner to check, or null for no check
      Returns:
      the previous lock (may be null), with a failed flag if locking failed
    • queryKeyValueWithOperator

      public List<State> queryKeyValueWithOperator(String key1, Object value1, String key2, DBSConnection.DBSQueryOperator operator, Object value2, Set<String> ignored)
      Description copied from interface: DBSConnection
      Queries the repository for documents having key1 = value1 and key2 ${operator} value2.
      Parameters:
      key1 - the first key
      value1 - the first value
      key2 - the second key
      operator - the operator to apply between key2 and value2
      value2 - the second value
      ignored - a set of document ids that should not be considered
      Returns:
      the document states matching the query