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 "Context/Context.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 Context& vc,
00052 Dbi::SubSite subsite = Dbi::kDefaultSubSite,
00053 Dbi::Task task = Dbi::kDefaultTask,
00054 Dbi::AbortTest abortTest = Dbi::kTableMissing,
00055 Bool_t findFullTimeWindow = true);
00056 DbiResultPtr(const string& tableName,
00057 const Context& vc,
00058 Dbi::SubSite subsite = Dbi::kDefaultSubSite,
00059 Dbi::Task task = Dbi::kDefaultTask,
00060 Dbi::AbortTest abortTest = Dbi::kTableMissing,
00061 Bool_t findFullTimeWindow = true);
00062 DbiResultPtr(const string& tableName,
00063 const DbiSqlContext& context,
00064 const Dbi::SubSite& subsite = Dbi::kAnySubSite,
00065 const Dbi::Task& task = Dbi::kAnyTask,
00066 const string& data = "",
00067 const string& fillOpts = "",
00068 Dbi::AbortTest abortTest = Dbi::kTableMissing);
00069 DbiResultPtr(const string& tableName,
00070 const DbiValidityRec& vrec,
00071 Dbi::AbortTest abortTest = Dbi::kTableMissing);
00072 DbiResultPtr(const string& tableName,
00073 UInt_t seqNo,
00074 UInt_t dbNo,
00075 Dbi::AbortTest abortTest = Dbi::kTableMissing);
00076 virtual ~DbiResultPtr();
00077
00078
00079
00080 const DbiResultKey* GetKey() const;
00081 UInt_t GetNumRows() const;
00082 const DbiResult* GetResult() const { return fResult; }
00083 Int_t GetResultID() const;
00084 const T* GetRow(UInt_t rowNum) const;
00085 const T* GetRowByIndex(UInt_t index) const;
00086 const DbiValidityRec* GetValidityRec(const DbiTableRow* row=0) const;
00087 DbiTableProxy& TableProxy() const;
00088 Bool_t ResultsFromDb() const;
00089
00090 static DbiTableProxy& GetTableProxy();
00091 static DbiTableProxy& GetTableProxy(const string& tableName);
00092
00093
00094 UInt_t NextQuery(Bool_t forwards = kTRUE);
00095 UInt_t NewQuery(Context vc,
00096 Dbi::SubSite subsite=0,
00097 Dbi::Task task=0,
00098 Bool_t findFullTimeWindow = true);
00099 UInt_t NewQuery(const DbiSqlContext& context,
00100 const Dbi::SubSite& subsite = 0,
00101 const Dbi::Task& task = 0,
00102 const string& data = "",
00103 const string& fillOpts = "");
00104 UInt_t NewQuery(const DbiValidityRec& vrec);
00105 UInt_t NewQuery(UInt_t seqNo,UInt_t dbNo);
00106
00107
00108 private:
00109 void Disconnect();
00110 void SetContext(const DbiValidityRec& vrec);
00111 Bool_t ApplyAbortTest();
00112
00113
00114 DbiResultPtr& operator=(const DbiResultPtr&);
00115
00116
00117
00118
00120 Dbi::AbortTest fAbortTest;
00121
00123 DbiTableProxy& fTableProxy;
00124
00125
00126
00127
00129 const DbiResult* fResult;
00130
00132 Site::Site_t fSiteType;
00133
00135 SimFlag::SimFlag_t fSimType;
00136
00137 #ifndef __CINT__ // Hide map from CINT; it complains about missing Streamer() etc.
00138 static std::map<string,DbiTableProxy*> fgNameToProxy;
00139 #endif // __CINT__
00140 static DbiTableProxy* fgTableProxy;
00141
00142
00143
00144 };
00145
00146
00147 #endif // DBIRESULTPTR_H