Example #1
0
 @Override
 public OperationStatus write(WriteOperation builder, List<? extends T> t) {
   // TODO: need to gather operation results and return
   OperationStatus status = new OperationStatus();
   if (t.size() == 1) {
     service.index(
         getIndex(),
         getType(),
         mapping.get(t.get(0)),
         AnnotationHelper.getDocumentId(t.get(0), getIdField()));
   } else if (t.size() > 1) {
     List<String> list = new ArrayList<String>();
     for (T o : t) {
       list.add(mapping.get(o));
       // TODO: what do we do with null ids? bail with exception? Report the error with
       // OperationStatus?
     }
     service.bulkIndex(getIndex(), getType(), list.toArray(new String[list.size()]), getIdField());
   }
   status.setSucceeded(true);
   return status;
 }
Example #2
0
 @Override
 public OperationStatus write(T... t) {
   // TODO: Need to gather results from index operation
   OperationStatus status = new OperationStatus();
   if (t.length == 1) {
     service.index(
         getIndex(),
         getType(),
         mapping.get(t[0]),
         AnnotationHelper.getDocumentId(t[0], getIdField()));
   } else if (t.length > 1) {
     List<String> list = new ArrayList<String>();
     for (T o : t) {
       list.add(mapping.get(o));
       // TODO: what do we do with null ids? bail with exception? Report the error with
       // OperationStatus?
     }
     service.bulkIndex(getIndex(), getType(), list.toArray(new String[list.size()]), getIdField());
   }
   status.setSucceeded(true);
   return status;
 }
  /**
   * Retrieves the key/data pair with the given key. If the matching key has duplicate values, the
   * first data item in the set of duplicates is returned. Retrieval of duplicates requires the use
   * of {@link Cursor} operations.
   *
   * <p>
   *
   * @param txn For a transactional database, an explicit transaction may be specified to
   *     transaction-protect the operation, or null may be specified to perform the operation
   *     without transaction protection. For a non-transactional database, null must be specified.
   *     <p>
   * @param key the secondary key used as input. It must be initialized with a non-null byte array
   *     by the caller.
   *     <p>
   * @param pKey the primary key returned as output. Its byte array does not need to be initialized
   *     by the caller.
   *     <p>
   * @param data the primary data returned as output. Its byte array does not need to be initialized
   *     by the caller.
   *     <p>
   * @param lockMode the locking attributes; if null, default attributes are used.
   *     <p>
   * @return {@link com.sleepycat.db.OperationStatus#NOTFOUND OperationStatus.NOTFOUND} if no
   *     matching key/data pair is found; {@link com.sleepycat.db.OperationStatus#KEYEMPTY
   *     OperationStatus.KEYEMPTY} if the database is a Queue or Recno database and the specified
   *     key exists, but was never explicitly created by the application or was later deleted;
   *     otherwise, {@link com.sleepycat.db.OperationStatus#SUCCESS OperationStatus.SUCCESS}.
   *     <p>
   *     <p>
   * @throws DeadlockException if the operation was selected to resolve a deadlock.
   *     <p>
   * @throws IllegalArgumentException if an invalid parameter was specified.
   *     <p>
   * @throws DatabaseException if a failure occurs.
   */
  public OperationStatus get(
      final Transaction txn,
      final DatabaseEntry key,
      final DatabaseEntry pKey,
      final DatabaseEntry data,
      final LockMode lockMode)
      throws DatabaseException {

    return OperationStatus.fromInt(
        db.pget(
            (txn == null) ? null : txn.txn,
            key,
            pKey,
            data,
            LockMode.getFlag(lockMode) | ((data == null) ? 0 : data.getMultiFlag())));
  }
  /**
   * Retrieves the key/data pair associated with the specific numbered record of the database.
   *
   * <p>The data field of the specified key must be a byte array containing a record number, as
   * described in {@link com.sleepycat.db.DatabaseEntry DatabaseEntry}. This determines the record
   * to be retrieved.
   *
   * <p>For this method to be called, the underlying database must be of type Btree, and it must
   * have been configured to support record numbers.
   *
   * <p>If this method fails for any reason, the position of the cursor will be unchanged.
   *
   * @throws NullPointerException if a DatabaseEntry parameter is null or does not contain a
   *     required non-null byte array.
   *     <p>
   * @throws DeadlockException if the operation was selected to resolve a deadlock.
   *     <p>
   * @throws IllegalArgumentException if an invalid parameter was specified.
   *     <p>
   * @throws DatabaseException if a failure occurs.
   *     <p>
   * @param key the secondary key returned as output. Its byte array does not need to be initialized
   *     by the caller.
   * @param pKey the primary key returned as output. Its byte array does not need to be initialized
   *     by the caller.
   * @param data the primary data returned as output. Multiple results can be retrieved by passing
   *     an object that is a subclass of {@link com.sleepycat.db.MultipleEntry MultipleEntry},
   *     otherwise its byte array does not need to be initialized by the caller.
   * @param lockMode the locking attributes; if null, default attributes are used.
   * @return {@link com.sleepycat.db.OperationStatus#NOTFOUND OperationStatus.NOTFOUND} if no
   *     matching key/data pair is found; {@link com.sleepycat.db.OperationStatus#KEYEMPTY
   *     OperationStatus.KEYEMPTY} if the database is a Queue or Recno database and the specified
   *     key exists, but was never explicitly created by the application or was later deleted;
   *     otherwise, {@link com.sleepycat.db.OperationStatus#SUCCESS OperationStatus.SUCCESS}.
   */
  public OperationStatus getSearchRecordNumber(
      final Transaction txn,
      final DatabaseEntry key,
      final DatabaseEntry pKey,
      final DatabaseEntry data,
      final LockMode lockMode)
      throws DatabaseException {

    return OperationStatus.fromInt(
        db.pget(
            (txn == null) ? null : txn.txn,
            key,
            pKey,
            data,
            DbConstants.DB_SET_RECNO
                | LockMode.getFlag(lockMode)
                | ((data == null) ? 0 : data.getMultiFlag())));
  }
Example #5
0
 @Override
 public boolean flushBulk() {
   OperationStatus status = write(bulk);
   bulk.clear();
   return status.succeeded();
 }
Example #6
0
  /**
   * Return the next LogSequenceNumber and log record.
   *
   * <p>The current log position is advanced to the next record in the log, and its
   * LogSequenceNumber and data are returned. If the cursor has not been initialized, the first
   * available log record in the log will be returned.
   *
   * <p>
   *
   * @param lsn The returned LogSequenceNumber.
   *     <p>
   * @param data The returned log record.
   *     <p>
   * @return The status of the operation; a return of NOTFOUND indicates the last log record has
   *     already been returned or the log is empty.
   *     <p>
   *     <p>
   * @throws DatabaseException if a failure occurs.
   */
  public OperationStatus getNext(final LogSequenceNumber lsn, final DatabaseEntry data)
      throws DatabaseException {

    return OperationStatus.fromInt(logc.get(lsn, data, DbConstants.DB_NEXT));
  }