/search.css" rel="stylesheet" type="text/css"/> /search.js">
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 Context; 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 // Constructors and destructors. 00054 DbiResult(DbiResultSet* resultSet = 0, 00055 const DbiValidityRec* vrec = 0, 00056 const string& sqlQualifiers = ""); 00057 virtual ~DbiResult(); 00058 00059 // State testing member functions 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* /* row */ = 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* /* row */) const { return kFALSE; } 00084 Bool_t ResultsFromDb() const { return fResultsFromDb; } 00085 virtual const string& TableName() const { return fTableName; } 00086 00087 // State changing member functions 00088 void CaptureExceptionLog(UInt_t startFrom); 00089 00091 virtual Bool_t CanDelete(const DbiResult* res = 0); 00092 00095 virtual Bool_t Satisfies(const Context& vc, 00096 const Dbi::SubSite& subsite, 00097 const Dbi::Task& task); 00100 virtual Bool_t Satisfies(const string&) {return kFALSE;} 00101 virtual Bool_t Satisfies(const DbiValidityRec&, 00102 const string& = "") {return kFALSE;} 00103 00105 virtual void DeRegisterKey(); 00106 virtual void RegisterKey(); 00107 00108 virtual void Streamer(DbiBinaryFile& file); 00109 virtual void SetCanReuse(Bool_t reuse) { fCanReuse = reuse ; } 00110 00111 protected: 00112 void SetResultsFromDb() { fResultsFromDb = kTRUE; } 00113 00114 // State testing member functions 00115 00116 void BuildLookUpTable() const; 00117 Bool_t LookUpBuilt() const { return fIndexKeys.size() > 0; } 00118 00119 // State changing member functions. 00120 00121 virtual void SetTableName(const string& tableName) { 00122 fTableName = tableName; } 00123 virtual void SetValidityRec(const DbiValidityRec& vRec) { 00124 fEffVRec = vRec; } 00125 00126 00127 private: 00128 00129 // Data members 00130 00132 Int_t fID; 00133 00135 Bool_t fCanReuse; 00136 00138 DbiValidityRec fEffVRec; 00139 00141 mutable IndexToRow_t fIndexKeys; 00142 00144 const DbiResultKey* fKey; 00145 00147 Bool_t fResultsFromDb; 00149 mutable Int_t fNumClients; 00150 00152 string fTableName; 00153 00156 string fSqlQualifiers; 00157 00159 DbiExceptionLog fExceptionLog; 00160 00161 00163 static Int_t fgLastID; 00164 00165 00166 // Removed: ClassDef(DbiResult,0) //Abstract base representing query result 00167 00168 }; 00169 00170 00171 #endif // DBIRESULT_H