Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

OOF_ramBackend Class Reference
[OOFILE Database backend for simple streamable RAM databases.OOFILE Implementation Classes]

#include <ooframx.h>

Inheritance diagram for OOF_ramBackend:

Inheritance graph
[legend]
Collaboration diagram for OOF_ramBackend:

Collaboration graph
[legend]
List of all members.

Detailed Description

implementation of RAM-based database.

Reuses OOF_recordCache to also manage the entire database store. Doesn't provide any indexing. Suitable for collections of hundreds, maybe thousands of records depending on available memory. Quite fast to iterate.

Note:
often used to create a new temporary database for a report or list in GUI.

Todo:
packing of records in the cache to avoid wasting space used for alignment and padding.


OID generation

virtual oidT currentOID ()
virtual oidT oidOfRecord (unsigned long)

selection manipulation

virtual unsigned long recordNumber () const
virtual unsigned long recordNumberOfOID (oidT inOID)
 Implement dbTable::recordNumberOfOID.

virtual void selectAll ()
virtual void selectNone ()
virtual void invert ()
virtual void difference_with (const OOF_tableBackend *)
virtual void difference_with (const dbSelection &)
virtual void intersection_with (const OOF_tableBackend *)
virtual void intersection_with (const dbSelection &)
virtual void union_with (const OOF_tableBackend *)
virtual void union_with (const dbSelection &)
virtual void union_with_no_overlap (const OOF_tableBackend *)
virtual void union_with_no_overlap (const dbSelection &)

public search functions

virtual bool search (const dbQueryClause *qClause)
virtual unsigned long recordNumberMatching (const dbQueryClause *qClause, bool *outFoundIt=0) const
virtual bool checkDuplicate (const dbQueryClause *)
virtual bool searchSelection (const dbQueryClause *)
virtual bool searchEqual (const dbField *, const char *, bool matchEntireKey=true)
virtual bool searchEqual (const dbField *, const void *)
virtual bool searchSelContainsAnyDelimited (const dbField *schField, const char *schStr, char delim)
virtual bool searchSelContainsAnyOf (const dbField *schField, const char **schStrs, unsigned long count)
virtual bool searchSelContainsAllDelimited (const dbField *schField, const char *schStr, char delim)
virtual bool searchSelContainsAllOf (const dbField *schField, const char **schStrs, unsigned long count)
virtual bool loadRelatedContextJoiningFromTo (const dbField *, const dbField *)
 Implements relationships via searching.


field-level data access

virtual bool readBool (const dbField *) const
 Assumes bools stored as unsigned short, 0==false.

virtual short readShort (const dbField *) const
virtual long readLong (const dbField *) const
virtual double readDouble (const dbField *) const
virtual const char * readChars (const dbField *) const
virtual oofString readString (const dbField *) const
 Copy field data into a string.

virtual void writeBool (bool, const dbField *)
 Encode bool as short to be decoded by readBool.

virtual void writeShort (short, const dbField *)
virtual void writeLong (long, const dbField *)
virtual void writeDouble (double, const dbField *)
virtual void writeChars (const char *, long numChars, long maxLen, const dbField *, long startIndex=0)
virtual void writeBytes (const char *inBuf, long inLen, const dbField *inField)
virtual char * getByteWriteAddress (unsigned long, const dbField *)

recordwise access

virtual bool atFirst () const
virtual bool atLast () const
virtual bool atRelative (unsigned long) const
virtual void prev ()
virtual bool more () const
virtual unsigned long count () const
void gotoBOF ()

record-level data access

virtual void newRecord ()
 Sets up a new record ready to enter data On exit the state is: Selection state is aboutToDirty Selection Set record state to New Set dirty to false Clear buffer Append new record to selection.

virtual void saveRecord ()
 Save current main record and any cached dirty records.

virtual void unloadRecord ()
virtual void unloadCache ()
virtual void revertRecord ()
virtual void pack ()

sorting public interface

virtual void setSortOrder (dbSorter *adoptSorter)
virtual dbSortersorter () const
virtual void sortSelectionNow (fieldNumT)
virtual void sortSelectionNow (const dbSorter *)
virtual void sortSelectionInverseNow (fieldNumT)

reflective operators

virtual unsigned long fieldDataLen (const dbField *) const
virtual bool fieldIsDirty (fieldNumT) const
virtual bool isNewRecord () const
virtual unsigned int numIndexes () const
virtual unsigned int numFiles () const
virtual unsigned long blobPointerReferenceSize () const
virtual bool allSelected () const
virtual bool contains (oidT) const

getting & saving selections as lightweight objects

virtual dbSelection currentSelection () const
virtual dbSelection makeEmptySelection () const
virtual void setSelection (const dbSelection &)
virtual void setSelection (const OOF_Selection *)

selection of specific contexts

virtual bool selectJustOID (oidT)
virtual void selectJustCurrent ()

locking

virtual void lockRecord ()
virtual void unlockRecord ()

transactions

virtual void beginTransaction (short tMode)
virtual void abortTransaction (short rMode)
virtual void commitTransaction (short rMode)

record-level data access

bool isDirty () const
void markDirty ()

reflective operators

void fieldHasDefaultCalculator (dbField *)
void fieldHasStoredCalculator (dbField *)
dbTabletable () const
dbFieldfield (fieldNumT) const

Ken's wildcard header bits

enum  OOF_wctype {
  prefix, single, multiple, singlefinal,
  multiplefinal
}

high-level search redirectors

virtual bool SearchBinaryFieldToLiteral (const dbQueryBinary *)
virtual bool SearchTrinaryFieldToLiterals (const dbQueryTrinary *)
virtual bool SearchCombineSubclauses (const dbQueryBinaryCombo *, bool searchSel)
virtual bool SearchSelectionBinaryFieldToLiteral (const dbQueryBinary *)

Non-Indexed searches

bool SearchEqualNonIndexed (const dbField *, const char *, bool matchEntireKey=true)
bool SearchEqualNonIndexed (const dbField *, const void *)
bool SearchWordNonIndexed (const dbField *, const char *, bool startsWith=false)
bool SearchNotEqualNonIndexed (const dbField *, const char *, bool matchEntireKey=true)
bool SearchNotEqualNonIndexed (const dbField *, const void *)
bool SearchBetweenNonIndexed (const dbField *, const char *, const char *)
bool SearchBetweenNonIndexed (const dbField *, const void *, const void *)
bool SearchOutsideNonIndexed (const dbField *, const char *, const char *)
bool SearchOutsideNonIndexed (const dbField *, const void *, const void *)
bool SearchComparativeNonIndexed (const dbField *, const char *, dbQueryClause::BinaryQueryOps)
bool SearchComparativeNonIndexed (const dbField *, const void *, dbQueryClause::BinaryQueryOps)
bool SearchSelectionTrinaryFieldToLiterals (const dbQueryTrinary *)

Non-Indexed wildcard Searches

bool SearchEqualNonIndexedWildcard (const dbField *schField, const char *schStr, bool matchEntireKey=true)
bool SearchNotEqualNonIndexedWildcard (const dbField *schField, const char *schStr, bool matchEntireKey=true)

Sort implementations

void SortSelectionNow (const dbUlong *theFld)
void SortSelectionNow (const dbLong *theFld)
void SortSelectionNow (const dbUshort *theFld)
void SortSelectionNow (const dbShort *theFld)
void SortSelectionNow (const dbReal *theFld)
void SortSelectionNow (const dbChar *theFld)
void SortSelectionNow (const dbText *theFld)
void SortSelectionNow (const dbField *theFld, unsigned long fixedBinaryLength)
void SortSelectionInverseNow (const dbUlong *theFld)
void SortSelectionInverseNow (const dbLong *theFld)
void SortSelectionInverseNow (const dbUshort *theFld)
void SortSelectionInverseNow (const dbShort *theFld)
void SortSelectionInverseNow (const dbReal *theFld)
void SortSelectionInverseNow (const dbChar *theFld)
void SortSelectionInverseNow (const dbText *theFld)
void SortSelectionInverseNow (const dbField *theFld, unsigned long fixedBinaryLength)
void SubSort (const dbSorter *theSorter, const unsigned long level, unsigned long *theData, const unsigned long count)
 Now we're sorting at the recursive level of partitioning in a nested sort !


Public Types

enum  ERecordState { eNew, eLoaded, eUnloaded }

Public Member Functions

virtual void addIndices (const char *newIDXname)
virtual void suppressIndices ()
virtual void rebuild ()
virtual void close ()
virtual void createTableInConnection (const dbConnect *)
virtual bool openTableInConnection (const dbConnect *, const bool createIfMissing=false)
virtual OOF_tableBackendclone (dbTable::selSharingT, dbTable *) const
virtual void start ()
virtual void next ()
virtual unsigned long countAll () const
virtual void deleteRecord ()
virtual void loadBlob (const dbBLOB *)
virtual unsigned long sequenceNumber () const
virtual bool gotoRecord (unsigned long relativeNum)
virtual void buildSchema (bool rebuilding=false)
virtual void describeState (std::ostream &) const
virtual void setFileExtensions (const char *, const char *)
virtual void ignoreDuplicateRecords ()
virtual void noticeDuplicateRecords ()
virtual bool reloadRecord ()
virtual bool isRecordLoaded () const
virtual void setBlobLength (fieldNumT, unsigned long len)
virtual bool addOIDtoSelection (oidT)
virtual void dropRecordFromSelection (unsigned long)
void describeInvariant (std::ostream &) const
 debugging

virtual void deleteStorage ()
void copyFrom (const OOF_recordBufferedContext *)
virtual void copyFrom (const OOF_recordBufferedContext &)
unsigned long currentOffset () const
 operator unsigned long () const
bool operator== (unsigned long) const
bool operator== (const OOF_recordBufferedContext &) const
bool isNew () const
char * buffer () const

Protected Types


Protected Member Functions

 OOF_ramBackend (dbTable *)
 OOF_ramBackend (const OOF_ramBackend &, dbTable *, dbTable::selSharingT)
virtual ~OOF_ramBackend ()
virtual void BuildBackendtables (bool rebuilding)
 backend construction

virtual void LoadRecordAtOffset (unsigned long offset)
virtual void SaveContext ()
void DeleteBlobBodies (char *inBuffer)
void * GetFieldWriteDest (const dbField *)
void * GetFieldReadFrom (fieldNumT) const
bool Invariant (const char *optionalComment=0) const
 Check combination of member variables defining Invariant state.

oofString InvariantDescription () const
unsigned long state () const
unsigned long PadFieldWidthForAlignment (const dbField *fld) const
unsigned int FieldAlignsTo (const dbField *) const
virtual void CachingContextChange ()
virtual void ContextChange ()
virtual bool CanUseIndex (const dbField *, dbQueryClause::BinaryQueryOps=dbQueryClause::equals) const
bool IgnoringDuplicateRecords () const
unsigned long BlobLenFromBuffer (const dbField *, const char *theirBuffer) const
unsigned long BlobLenFromBuffer (fieldNumT, const char *theirBuffer) const
unsigned long BlobPosFromBuffer (const dbField *fld, const char *theirBuffer) const
unsigned long BlobPosFromBuffer (fieldNumT, const char *theirBuffer) const
void SetBlobLenInBuffer (fieldNumT, unsigned long len, const char *theirBuffer) const
void SetBlobPosInBuffer (fieldNumT, unsigned long pos, const char *theirBuffer) const
bool MaybeLoadRecordFromCache (unsigned long offset)
bool CommonSimpleDelete ()
bool GotoRecordForAllUnindexed (unsigned long relativeNum)
void AdoptBuffer (OOF_recordBufferedContext *)
void DonateBlobBodiesTo (OOF_recordBufferedContext *)
void CacheDirtyCurrentRecord ()
void ResetBlobs ()
bool tableCachesDirtyRecords () const
void AllocBuffer ()

Protected Attributes

OOF_recordSelection mSelection
OOF_recordFieldEntrymFieldBufMap
unsigned int * mFieldBufMapRefCount
unsigned short mNumFiles
unsigned short mNumIndexes
unsigned short mOverheadLeadingBytes
OOF_ExpandableLongArraymBlobFieldNums
OOF_recordCachemDirtyRecordCache
bool mIgnoreDuplicateRecords
OOF_Dictionary mFields
dbTablemTable
bool mDirty
bool mHasDefaultCalculators
bool mHasStoredCalculators
ERecordState mRecordState
unsigned long mCurrLoadedRecOffset
unsigned long mRecBufLen
char * mBuffer
OOF_ExpandableLongArraymBlobFieldBodies
OOF_dirtyFieldMap mDirtyMap

Friends

OOF_tableBackenddbConnect_ram::justMakeTableBackend (dbTable *)
class OOF_recordCacheCopier
class OOF_simpleRecordBackend
class dbTable


Member Enumeration Documentation

enum OOF_recordBufferedContext::ERecordState [inherited]
 

Enumeration values:
eNew 
eLoaded 
eUnloaded 

enum OOF_simpleRecordBackend::OOF_wctype [protected, inherited]
 

Enumeration values:
prefix 
single 
multiple 
singlefinal 
multiplefinal 


Constructor & Destructor Documentation

OOF_ramBackend::OOF_ramBackend dbTable  )  [protected]
 

OOF_ramBackend::OOF_ramBackend const OOF_ramBackend ,
dbTable ,
dbTable::selSharingT 
[protected]
 

OOF_ramBackend::~OOF_ramBackend  )  [protected, virtual]
 


Member Function Documentation

void OOF_simpleRecordBackend::abortTransaction short  rMode  )  [virtual, inherited]
 

Implements OOF_tableBackend.

void OOF_ramBackend::addIndices const char *  newIDXname  )  [virtual]
 

Implements OOF_tableBackend.

bool OOF_simpleRecordBackend::addOIDtoSelection oidT   )  [virtual, inherited]
 

Implements OOF_tableBackend.

void OOF_simpleRecordBackend::AdoptBuffer OOF_recordBufferedContext  )  [protected, inherited]
 

void OOF_recordBufferedContext::AllocBuffer  )  [protected, inherited]
 

bool OOF_simpleRecordBackend::allSelected  )  const [virtual, inherited]
 

Implements OOF_tableBackend.

bool OOF_simpleRecordBackend::atFirst  )  const [virtual, inherited]
 

Implements OOF_tableBackend.

bool OOF_simpleRecordBackend::atLast  )  const [virtual, inherited]
 

Implements OOF_tableBackend.

bool OOF_simpleRecordBackend::atRelative unsigned  long  )  const [virtual, inherited]
 

Implements OOF_tableBackend.

void OOF_simpleRecordBackend::beginTransaction short  tMode  )  [virtual, inherited]
 

Implements OOF_tableBackend.

unsigned long OOF_simpleRecordBackend::BlobLenFromBuffer fieldNumT  ,
const char *  theirBuffer
const [protected, inherited]
 

unsigned long OOF_simpleRecordBackend::BlobLenFromBuffer const dbField ,
const char *  theirBuffer
const [inline, protected, inherited]
 

unsigned long OOF_simpleRecordBackend::blobPointerReferenceSize  )  const [virtual, inherited]
 

Implements OOF_tableBackend.

unsigned long OOF_simpleRecordBackend::BlobPosFromBuffer fieldNumT  ,
const char *  theirBuffer
const [protected, inherited]
 

unsigned long OOF_simpleRecordBackend::BlobPosFromBuffer const dbField fld,
const char *  theirBuffer
const [inline, protected, inherited]
 

char * OOF_recordBufferedContext::buffer  )  const [inline, inherited]
 

void OOF_ramBackend::BuildBackendtables bool  rebuilding  )  [protected, virtual]
 

backend construction

Implements OOF_simpleRecordBackend.

void OOF_simpleRecordBackend::buildSchema bool  rebuilding = false  )  [virtual, inherited]
 

Implements OOF_tableBackend.

Reimplemented in OOF_ctreeBackend, and OOF_FServBackend.

void OOF_simpleRecordBackend::CacheDirtyCurrentRecord  )  [protected, inherited]
 

void OOF_simpleRecordBackend::CachingContextChange  )  [protected, virtual, inherited]
 

Implements OOF_tableBackend.

bool OOF_simpleRecordBackend::CanUseIndex const dbField ,
dbQueryClause::BinaryQueryOps  = dbQueryClause::equals
const [protected, virtual, inherited]
 

Reimplemented in OOF_ctreeBackend, and OOF_FServBackend.

bool OOF_simpleRecordBackend::checkDuplicate const dbQueryClause  )  [virtual, inherited]
 

Implements OOF_tableBackend.

Reimplemented in OOF_ctreeBackend, and OOF_FServBackend.

OOF_tableBackend * OOF_ramBackend::clone dbTable::selSharingT  ,
dbTable
const [virtual]
 

Implements OOF_simpleRecordBackend.

Reimplemented in OOF_rampBackend.

void OOF_ramBackend::close  )  [virtual]
 

Implements OOF_tableBackend.

Reimplemented in OOF_rampBackend.

void OOF_simpleRecordBackend::commitTransaction short  rMode  )  [virtual, inherited]
 

Implements OOF_tableBackend.

bool OOF_simpleRecordBackend::CommonSimpleDelete  )  [protected, inherited]
 

bool OOF_simpleRecordBackend::contains oidT   )  const [virtual, inherited]
 

Implements OOF_tableBackend.

void OOF_simpleRecordBackend::ContextChange  )  [protected, virtual, inherited]
 

Implements OOF_tableBackend.

void OOF_recordBufferedContext::copyFrom const OOF_recordBufferedContext  )  [virtual, inherited]
 

void OOF_recordBufferedContext::copyFrom const OOF_recordBufferedContext  )  [inline, inherited]
 

unsigned long OOF_simpleRecordBackend::count  )  const [virtual, inherited]
 

See also:
countAll

Implements OOF_tableBackend.

unsigned long OOF_ramBackend::countAll  )  const [virtual]
 

Implements OOF_tableBackend.

void OOF_ramBackend::createTableInConnection const dbConnect  )  [virtual]
 

Implements OOF_tableBackend.

unsigned long OOF_recordBufferedContext::currentOffset  )  const [inline, inherited]
 

oidT OOF_simpleRecordBackend::currentOID  )  [virtual, inherited]
 

Implements OOF_tableBackend.

dbSelection OOF_simpleRecordBackend::currentSelection  )  const [virtual, inherited]
 

Implements OOF_tableBackend.

void OOF_ramBackend::DeleteBlobBodies char *  inBuffer  )  [protected]
 

void OOF_ramBackend::deleteRecord  )  [virtual]
 

Implements OOF_tableBackend.

void OOF_tableBackend::deleteStorage  )  [virtual, inherited]
 

Reimplemented in OOF_ctreeBackend, OOF_dbaseBackend, and OOF_FServBackend.

void OOF_simpleRecordBackend::describeInvariant std::ostream &   )  const [virtual, inherited]
 

debugging

Implements OOF_tableBackend.

void OOF_simpleRecordBackend::describeState std::ostream &   )  const [virtual, inherited]
 

Implements OOF_tableBackend.

void OOF_simpleRecordBackend::difference_with const dbSelection  )  [virtual, inherited]
 

Implements OOF_tableBackend.

void OOF_simpleRecordBackend::difference_with const OOF_tableBackend  )  [virtual, inherited]
 

Implements OOF_tableBackend.

void OOF_simpleRecordBackend::DonateBlobBodiesTo OOF_recordBufferedContext  )  [protected, inherited]
 

void OOF_simpleRecordBackend::dropRecordFromSelection unsigned  long  )  [virtual, inherited]
 

Implements OOF_tableBackend.

dbField * OOF_tableBackend::field fieldNumT   )  const [inline, inherited]
 

unsigned int OOF_simpleRecordBackend::FieldAlignsTo const dbField  )  const [protected, inherited]
 

unsigned long OOF_simpleRecordBackend::fieldDataLen const dbField  )  const [virtual, inherited]
 

Implements OOF_tableBackend.

void OOF_tableBackend::fieldHasDefaultCalculator dbField  )  [inline, inherited]
 

void OOF_tableBackend::fieldHasStoredCalculator dbField  )  [inline, inherited]
 

bool OOF_simpleRecordBackend::fieldIsDirty fieldNumT   )  const [virtual, inherited]
 

Implements OOF_tableBackend.

char * OOF_simpleRecordBackend::getByteWriteAddress unsigned  long,
const dbField
[virtual, inherited]
 

Implements OOF_tableBackend.

void * OOF_simpleRecordBackend::GetFieldReadFrom fieldNumT   )  const [protected, inherited]
 

void * OOF_simpleRecordBackend::GetFieldWriteDest const dbField  )  [protected, inherited]