00001 #ifndef DBIRESULTPTR_H
00002 #define DBIRESULTPTR_H
00003
00028 #include <map>
00029 #include <string>
00030 using std::string;
00031
00032 #include "DatabaseInterface/Dbi.h"
00033 #include "DatabaseInterface/DbiResult.h"
00034 #include "DatabaseInterface/DbiTableProxyRegistry.h"
00035 #include "DatabaseInterface/DbiValidityRec.h"
00036 #include "Validity/VldContext.h"
00037
00038 class DbiResult;
00039 class DbiResultKey;
00040 class DbiSqlContext;
00041 class DbiTableProxy;
00042
00043 template <class T> class DbiResultPtr
00044 {
00045
00046 public:
00047
00048
00049 DbiResultPtr();
00050 DbiResultPtr(const DbiResultPtr& that);
00051 DbiResultPtr(const VldContext& vc,
00052 Dbi::Task task = Dbi::kDefaultTask,
00053 Dbi::AbortTest abortTest = Dbi::kTableMissing,
00054 Bool_t findFullTimeWindow = true);
00055 DbiResultPtr(const string& tableName,
00056 const VldContext& vc,
00057 Dbi::Task task = Dbi::kDefaultTask,
00058 Dbi::AbortTest abortTest = Dbi::kTableMissing,
00059 Bool_t findFullTimeWindow = true);
00060 DbiResultPtr(const string& tableName,
00061 const DbiSqlContext& context,
00062 const Dbi::Task& task = Dbi::kAnyTask,
00063 const string& data = "",
00064 const string& fillOpts = "",
00065 Dbi::AbortTest abortTest = Dbi::kTableMissing);
00066 DbiResultPtr(const string& tableName,
00067 const DbiValidityRec& vrec,
00068 Dbi::AbortTest abortTest = Dbi::kTableMissing);
00069 DbiResultPtr(const string& tableName,
00070 UInt_t seqNo,
00071 UInt_t dbNo,
00072 Dbi::AbortTest abortTest = Dbi::kTableMissing);
00073 virtual ~DbiResultPtr();
00074
00075
00076
00077 const DbiResultKey* GetKey() const;
00078 UInt_t GetNumRows() const;
00079 const DbiResult* GetResult() const { return fResult; }
00080 Int_t GetResultID() const;
00081 const T* GetRow(UInt_t rowNum) const;
00082 const T* GetRowByIndex(UInt_t index) const;
00083 const DbiValidityRec* GetValidityRec(const DbiTableRow* row=0) const;
00084 DbiTableProxy& TableProxy() const;
00085 Bool_t ResultsFromDb() const;
00086
00087 static DbiTableProxy& GetTableProxy();
00088 static DbiTableProxy& GetTableProxy(const string& tableName);
00089
00090
00091 UInt_t NextQuery(Bool_t forwards = kTRUE);
00092 UInt_t NewQuery(VldContext vc,
00093 Dbi::Task task=0,
00094 Bool_t findFullTimeWindow = true);
00095 UInt_t NewQuery(const DbiSqlContext& context,
00096 const Dbi::Task& task = 0,
00097 const string& data = "",
00098 const string& fillOpts = "");
00099 UInt_t NewQuery(const DbiValidityRec& vrec);
00100 UInt_t NewQuery(UInt_t seqNo,UInt_t dbNo);
00101
00102
00103 private:
00104 void Disconnect();
00105 void SetContext(const DbiValidityRec& vrec);
00106 Bool_t ApplyAbortTest();
00107
00108
00109 DbiResultPtr& operator=(const DbiResultPtr&);
00110
00111
00112
00113
00115 Dbi::AbortTest fAbortTest;
00116
00118 DbiTableProxy& fTableProxy;
00119
00120
00121
00122
00124 const DbiResult* fResult;
00125
00127 Detector::Detector_t fDetType;
00128
00130 SimFlag::SimFlag_t fSimType;
00131
00132 #ifndef __CINT__ // Hide map from CINT; it complains about missing Streamer() etc.
00133 static std::map<string,DbiTableProxy*> fgNameToProxy;
00134 #endif // __CINT__
00135 static DbiTableProxy* fgTableProxy;
00136
00137 ClassDefT(DbiResultPtr<T>,0)
00138
00139 };
00140 ClassDefT2(DbiResultPtr,T)
00141
00142 #endif