00001 #ifndef DBIRESULT_H
00002 #define DBIRESULT_H
00003
00028 #include <map>
00029 #include <string>
00030 using std::string;
00031
00032 #include "DatabaseInterface/Dbi.h"
00033 #include "DatabaseInterface/DbiExceptionLog.h"
00034 #include "DatabaseInterface/DbiValidityRec.h"
00035
00036 typedef std::map<UInt_t,const DbiTableRow*> IndexToRow_t;
00037
00038 class DbiBinaryFile;
00039 class DbiResultKey;
00040 class DbiResult;
00041 class DbiResultSet;
00042 class DbiTableRow;
00043 class VldContext;
00044
00045 DbiBinaryFile& operator<<(DbiBinaryFile& bf, const DbiResult& res);
00046 DbiBinaryFile& operator>>(DbiBinaryFile& bf, DbiResult& res);
00047
00048 class DbiResult
00049 {
00050
00051 public:
00052
00053
00054 DbiResult(DbiResultSet* resultSet = 0,
00055 const DbiValidityRec* vrec = 0,
00056 const string& sqlQualifiers = "");
00057 virtual ~DbiResult();
00058
00059
00060
00061 virtual Bool_t CanReuse() const { return fCanReuse; }
00062 virtual Bool_t CanSave() const { return kTRUE; }
00063 virtual void Connect() const { ++fNumClients; }
00064 virtual DbiResultKey* CreateKey() const = 0;
00065 virtual void Disconnect() const { --fNumClients; }
00066 const DbiExceptionLog& GetExceptionLog() const { return fExceptionLog; }
00067 Int_t GetID() const { return fID; }
00068 virtual const DbiResultKey* GetKey() const;
00069 virtual UInt_t GetNumAggregates() const =0;
00070 virtual UInt_t GetNumClients() const {
00071 return fNumClients; }
00072 virtual UInt_t GetNumRows() const =0;
00073 const string& GetSqlQualifiers() const { return fSqlQualifiers; }
00074 virtual const DbiTableRow* GetTableRow(UInt_t rowNum) const =0;
00075 virtual const DbiTableRow* GetTableRowByIndex(UInt_t index) const;
00076 virtual const DbiValidityRec& GetValidityRec(
00077 const DbiTableRow* = 0) const {
00078 return GetValidityRecGlobal(); }
00079 virtual const DbiValidityRec& GetValidityRecGlobal() const {
00080 return fEffVRec; }
00081 Bool_t IsExtendedContext() const {
00082 return this->GetSqlQualifiers() != ""; }
00083 virtual Bool_t Owns(const DbiTableRow* ) const { return kFALSE; }
00084 Bool_t ResultsFromDb() const { return fResultsFromDb; }
00085 virtual const string& TableName() const { return fTableName; }
00086
00087
00088 void CaptureExceptionLog(UInt_t startFrom);
00089
00091 virtual Bool_t CanDelete(const DbiResult* res = 0);
00092
00095 virtual Bool_t Satisfies(const VldContext& vc,
00096 const Dbi::Task& task);
00099 virtual Bool_t Satisfies(const string&) {return kFALSE;}
00100 virtual Bool_t Satisfies(const DbiValidityRec&,
00101 const string& = "") {return kFALSE;}
00102
00104 virtual void DeRegisterKey();
00105 virtual void RegisterKey();
00106
00107 virtual void Streamer(DbiBinaryFile& file);
00108 virtual void SetCanReuse(Bool_t reuse) { fCanReuse = reuse ; }
00109
00110 protected:
00111 void SetResultsFromDb() { fResultsFromDb = kTRUE; }
00112
00113
00114
00115 void BuildLookUpTable() const;
00116 Bool_t LookUpBuilt() const { return fIndexKeys.size() > 0; }
00117
00118
00119
00120 virtual void SetTableName(const string& tableName) {
00121 fTableName = tableName; }
00122 virtual void SetValidityRec(const DbiValidityRec& vRec) {
00123 fEffVRec = vRec; }
00124
00125
00126 private:
00127
00128
00129
00131 Int_t fID;
00132
00134 Bool_t fCanReuse;
00135
00137 DbiValidityRec fEffVRec;
00138
00140 mutable IndexToRow_t fIndexKeys;
00141
00143 const DbiResultKey* fKey;
00144
00146 Bool_t fResultsFromDb;
00148 mutable Int_t fNumClients;
00149
00151 string fTableName;
00152
00155 string fSqlQualifiers;
00156
00158 DbiExceptionLog fExceptionLog;
00159
00160
00162 static Int_t fgLastID;
00163
00164
00165 ClassDef(DbiResult,0)
00166
00167 };
00168
00169
00170 #endif // DBIRESULT_H