/*! @header BDBDatabase @abstract Contains a class representing a database @availability OS X, GNUstep @copyright (C) 2004, 2005, 2006 Oliver Langer Author: Oliver Langer This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  -------------------------------------------------------------------------
  Modification history

  09.12.2005 ola     initial version
  22.08.2006 ola     license changed
  -------------------------------------------------------------------------
  
******************************************************************************/ #if !defined(__BDBDATABASE_H) #define __BDBDATABASE_H #include #include #include #include #include #include #include #include #include #include /*! * @class BDBDatabase * @abstract Wrapper for a DB instance * @discussion Use instances of this class to load/store values */ @interface BDBDatabase : BDBObject { @private /** * Underlying berkeley handle */ DB *db; /** * Database configuration */ BDBDatabaseConfig *dbConfig; /** * Name (not filename) of the database. May equal nil. */ NSString *databaseName; } + (void) initialize; /*! * @method initWithFilename * @abstract open a database with the given file name, database name * and configuration. * @discussion Depending on the configuration the database may be * created if not existent. Also, the configuration determines the kind of * database to use. * @param fileName name of database file * @param databaseName name of database. Useful if multiple databases will * be used within a single file. May equal nil. If nil is given * during creation then subsequent calls with values different from nil * will be ignored. * @param aDbConfig configuration parameters * */ + (BDBDatabase *) initWithFilename: (NSString *) fileName databaseName: (NSString *) databaseName databaseConfig: (BDBDatabaseConfig *) aDbConfig; - init; /** * Used to close the database if opened at this stage */ - (void) dealloc; /*! * @method appendEntry * @abstract appends the given entry to the end of the database * @discussion This method is only defined for one of the modes * {@link #BDB_RECNO}, {@link #BDB_QUEUE} * @param transaction transaction to use * @param entryToAppend value to add * @param recordNr will contain the record number after appending the value. * The underlying database entry instance has to be instantiated by the * caller. If nil is passed then no record number will be returned this way. * @result status of the operation * @throws ECIllegalArgumentException if the given database entry contains no * data. * @throws ECIllegalOperationException if the database type is wrong or if * an attempt was made to modify a read-only database. * @throws DB_REP_HANDLE_DEAD invalid database handle due to a replication * which unrolled a committed transaction. * @throws DB_LOCK_DEADLOCK * @throws DB_LOCK_NOTGRANTED * @throws EINVAL The operation failed because of an invalid length of * an record (in fixed record mode); OR attempt was made to append data to a * secondary index. * @throws BDBBtreeMaximumDepthReachedException */ - (BDBOperationStatus) appendEntryWithTransaction: (BDBTransaction *) transaction entryToAppend: (BDBDatabaseEntryData *) entryToAppend resultingRecordNr: (BDBDatabaseRecordNumber *) recordNr; /*! * Closes the database. After this call all settings related to the database * are being invalidated. The previously hand-off configuration may be reused. */ - close; /*! * @method deleteEntryWithTransaction * @discussion In case of duplicate entries specified by the key * all entries will be removed. * @param transaction * @param key key specifying the entry to be deleted * @result status which may equal BDB_STATUS_NOTFOUND, BDB_STATUS_KEYEMPTY * or BDB_STATUS_SUCCESS * @throws BDBDeadLockExcepion * @throws BDBException */ - (BDBOperationStatus) deleteEntryWithTransaction:( BDBTransaction *) transaction key: (BDBDatabaseEntryData *) key; /*! * @param transaction underlying transaction. May equal nil * @param key key to look for * @param data entry to fill with the found data entry * @return status of the operation * @see BDBOperationStatus * @throws BDBDeadLockException * @throws BDBLockNotGrantedException * @throws BDBIllegalIndexReference * @throws BDBNoValueForKeyException */ - (BDBOperationStatus) getEntryWithTransaction: (BDBTransaction *) transaction key: (BDBDatabaseEntryData *) key data: (BDBDatabaseEntryData *) data; /*! * @method getEntryWithTransaction * @abstract retriev a value by its record number * @param transaction underlying transaction. May equal nil * @param key key to look for * @param data entry to fill with the found data entry * @return status of the operation * @throws BDBDeadLockException * @throws BDBLockNotGrantedException * @throws BDBIllegalIndexReference * @throws BDBNoValueForKeyException */ - (BDBOperationStatus) getEntryWithTransaction: (BDBTransaction *) transaction recordNumber: (BDBDatabaseRecordNumber *) recNo data: (BDBDatabaseEntryData *) data; /*! * @method openCursor * @abstract open and return a cursor used. * @param transaction underlying transaction. May be nil * @param config settings for the cursor to be created * ®result related cursor * @throws BDBException * @throws ECIllegalArgumentException */ - (BDBCursor *) openCursor: (BDBTransaction *) transaction cursorConfig: (BDBCursorConfig *) config; /*! * @method putEntryWithTransaction * @abstract Stores an entry in the database. * @param key value for the key to be used. The handling of duplicates depends * on the the configuration previously being set. * @param value * @result status of operation * @throws BDBDeadLockException * @throws BDBLockNotGrantedException * @throws BDBException */ - (BDBOperationStatus) putEntryWithTransaction: (BDBTransaction *) transaction key: (BDBDatabaseEntryData *) key value: (BDBDatabaseEntryData *) value; /*! * Stores an entry in the database * @param key may not be null. The handling of duplicates depends * on the the configuration previously being set. * @param value may not be null. * @throws BDBDeadLockException * @throws BDBLockNotGrantedException * @throws BDBException */ - (BDBOperationStatus) putDataWithTransaction: (BDBTransaction *) transaction key: (NSData *) key value: (NSData *) value; @end #endif