#ifndef __TABLE_RELATION__
#define __TABLE_RELATION__
#include "PartialRelation.h"
class TableUniqueIdentifier : public UniqueIdentifier
{
protected:
uint32 mTupleNumber;
public:
TableUniqueIdentifier (CSSM_DB_RECORDTYPE recordType, int mTupleNumber);
virtual void Export (CSSM_DB_UNIQUE_RECORD &record);
int GetTupleNumber () {return mTupleNumber;}
};
class TableRelation : public PartialRelation
{
protected:
int mNumberOfTuples;
Value** mData;
public:
TableRelation (CSSM_DB_RECORDTYPE recordType, int numberOfColumns, columnInfoLoader *theColumnInfo);
virtual ~TableRelation ();
void AddTuple (Value* column0Value, ...);
virtual Query* MakeQuery (const CSSM_QUERY* query);
virtual Tuple* GetTupleFromUniqueIdentifier (UniqueIdentifier* uniqueID);
virtual Tuple* GetTuple (int i);
virtual UniqueIdentifier* ImportUniqueIdentifier (CSSM_DB_UNIQUE_RECORD *uniqueRecord);
int GetNumberOfTuples () {return mNumberOfTuples;}
};
class TableTuple : public Tuple
{
protected:
Value** mValues;
int mNumValues;
public:
TableTuple (Value** offset, int numValues);
virtual int GetNumberOfValues () {return mNumValues;}
virtual Value* GetValue (int which) {return mValues[which];}
virtual void GetData (CSSM_DATA &data);
};
class TableQuery : public Query
{
protected:
TableRelation* mRelation;
int mCurrentRecord;
public:
TableQuery (TableRelation* relation, const CSSM_QUERY *queryBase);
~TableQuery ();
virtual Tuple* GetNextTuple (UniqueIdentifier *&id);
};
#endif