/search.css" rel="stylesheet" type="text/css"/> /search.js">
00001 #ifndef DBIWRITER_H 00002 #define DBIWRITER_H 00003 00032 #include <list> 00033 #include <string> 00034 00035 #include "DatabaseInterface/Dbi.h" 00036 #include "DatabaseInterface/DbiLogEntry.h" 00037 #include "DatabaseInterface/DbiTableProxyRegistry.h" 00038 #include "Context/ContextRange.h" 00039 #include "Context/TimeStamp.h" 00040 00041 class DbiSqlValPacket; 00042 class DbiTableProxy; 00043 class DbiValidityRec; 00044 00045 template <class T> class DbiWriter 00046 { 00047 00048 public: 00049 00050 // Constructors and destructors. 00051 DbiWriter(); 00052 DbiWriter(const ContextRange& vr, 00053 Int_t aggNo, 00054 Dbi::SubSite subsite, 00055 Dbi::Task task, 00056 TimeStamp versionDate, 00057 const std::string& dbName, 00058 const std::string& logComment = "", 00059 const std::string& tableName = ""); 00060 DbiWriter(const ContextRange& vr, 00061 Int_t aggNo, 00062 Dbi::SubSite subsite = 0, 00063 Dbi::Task task = 0, 00064 TimeStamp versionDate = TimeStamp(0,0), 00065 UInt_t dbNo = 0, 00066 const std::string& logComment = "", 00067 const std::string& tableName = ""); 00068 DbiWriter(const DbiValidityRec& vrec, 00069 const std::string& dbName, 00070 const std::string& logComment = ""); 00071 DbiWriter(const DbiValidityRec& vrec, 00072 UInt_t dbNo = 0, 00073 const std::string& logComment = ""); 00074 00075 virtual ~DbiWriter(); 00076 00078 void Init(); 00079 00080 // State testing member functions 00081 00082 DbiTableProxy& TableProxy() const; 00083 00085 Bool_t IsOpen(Bool_t reportErrors = kTRUE) const; 00087 Bool_t CanOutput(Bool_t reportErrors = kTRUE) const; 00088 // Number of SQL statements collected 00089 UInt_t GetNumSqlStmts() const; 00090 // ValidityRec, exposed for debugging 00091 DbiValidityRec* GetValidityRec() const; 00092 // SEQNO from the last Close, exposed for debugging 00093 UInt_t GetLastSeqnoClosed() const; 00094 00095 // State changing member functions 00096 00097 void SetDbNo(UInt_t dbNo) { fDbNo = dbNo;} 00098 void SetDbName(const string& dbName); 00099 void SetLogComment(const std::string& reason); 00100 // For setting of requireGlobal see DbiCascader::AllocateSeqNo 00101 void SetRequireGlobalSeqno(Int_t requireGlobal) {fRequireGlobalSeqno = requireGlobal;} 00102 void SetOverlayVersionDate() {fUseOverlayVersionDate = kTRUE;} 00103 00104 // avoid versiondate crowding on the very first TIMESTART in always overlaying situation 00105 // 00106 void SetTimeStartFlooredVersionDate(Bool_t tfvd){ fTimeStartFlooredVersionDate = tfvd;} 00107 Bool_t GetTimeStartFlooredVersionDate(){ return fTimeStartFlooredVersionDate ; } 00108 00109 // switch on versionDate uniqing 00110 // 00111 void SetRequireUniqueVersionDate(Bool_t requireUnique ){fRequireUniqueVersionDate = requireUnique ; } 00112 Bool_t GetRequireUniqueVersionDate(){ return fRequireUniqueVersionDate ; } 00113 // 00114 // versionDate uniqing config, 00115 // ctor defaults are full masks for the safest uniqing 00116 // if will never need to read from a wider context than are writing into 00117 // then setting the uniqing masks to zero will perform uniqing only within 00118 // the specific written contexts 00119 // 00120 void SetUniqueVersionDateSiteMask(UInt_t siteMask){fUniqueVersionDateSiteMask = siteMask ; } 00121 void SetUniqueVersionDateSimMask( UInt_t simMask){ fUniqueVersionDateSimMask = simMask ; } 00122 UInt_t GetUniqueVersionDateSiteMask(){ return fUniqueVersionDateSiteMask ; } 00123 UInt_t GetUniqueVersionDateSimMask(){ return fUniqueVersionDateSimMask ; } 00124 00125 00126 // I/O functions 00127 void Abort() { Reset(); } 00128 Bool_t Close(const char* fileSpec=0); 00129 Bool_t Open(const ContextRange& vr, 00130 Int_t aggNo, 00131 Dbi::SubSite subsite, 00132 Dbi::Task task, 00133 TimeStamp versionDate, 00134 const string& dbName, 00135 const std::string& logComment = ""); 00136 Bool_t Open(const ContextRange& vr, 00137 Int_t aggNo, 00138 Dbi::SubSite subsite = 0, 00139 Dbi::Task task = 0, 00140 TimeStamp versionDate = TimeStamp(), 00141 UInt_t dbNo = 0, 00142 const std::string& logComment = ""); 00143 Bool_t Open(const DbiValidityRec& vrec, 00144 const string& dbName, 00145 const std::string& logComment = ""); 00146 Bool_t Open(const DbiValidityRec& vrec, 00147 UInt_t dbNo = 0, 00148 const std::string& logComment = ""); 00149 00150 DbiWriter<T>& operator<<(const T& row); 00151 00152 private: 00153 00154 // State testing member functions 00155 00156 Bool_t NeedsLogEntry() const; 00157 Bool_t WritingToMaster() const; 00158 00159 // State changing member functions 00160 00161 DbiWriter(const DbiWriter&); // Forbidden 00162 DbiWriter& operator=(const DbiWriter&); // Forbidden 00163 00164 void CompleteOpen(UInt_t dbNo = 0, 00165 const std::string& logComment = ""); 00166 void Reset(); 00167 00168 static DbiTableProxy& GetTableProxy(); 00169 static DbiTableProxy& GetTableProxy(const std::string& tableName); 00170 00171 // Data members 00172 00174 Int_t fAggregateNo; 00175 00177 UInt_t fDbNo; 00178 00180 DbiSqlValPacket* fPacket; 00181 00183 Int_t fRequireGlobalSeqno; 00184 00186 DbiTableProxy* fTableProxy; 00187 00189 std::string fTableName; 00190 00192 Bool_t fUseOverlayVersionDate; 00193 00195 DbiValidityRec* fValidRec; 00196 00198 DbiLogEntry fLogEntry; 00199 00201 UInt_t fLastSeqnoClosed; 00202 00204 Bool_t fRequireUniqueVersionDate ; 00205 00207 UInt_t fUniqueVersionDateSiteMask ; 00208 00210 UInt_t fUniqueVersionDateSimMask ; 00211 00213 Bool_t fTimeStartFlooredVersionDate ; 00214 00215 00216 // Removed: ClassDefT(DbiWriter<T>,0) // Writer for specific database table. 00217 00218 }; 00219 // Removed: ClassDefT2(DbiWriter,T) 00220 00221 #endif // DBIWRITER_H 00222 00223