Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

DbiCascader.h

Go to the documentation of this file.
00001 
00002 #ifndef DBICASCADER_H
00003 #define DBICASCADER_H
00004 
00005 
00009 
00033 #include <map>
00034 #include <ostream>
00035 using std::ostream;
00036 #include <string>
00037 using std::string;
00038 #include <vector>
00039 using std::vector;
00040 
00041 #if !defined(__CINT__) || defined(__MAKECINT__)
00042 #include "Rtypes.h"
00043 #endif
00044 
00045 #include "DatabaseInterface/DbiConnection.h"
00046 #include "DatabaseInterface/DbiStatement.h"
00047 
00048 class DbiCascader;
00049 class TSQL_Statement;
00050 
00051 class DbiCascader
00052 {
00053 
00054   friend class DbiTableProxyRegistry;  //Only it can create
00055   friend ostream& operator<<(ostream& s, const DbiCascader& cascader);    
00056 
00057 public:
00058 
00059   friend class DbiValidate;      //Allow DbiValidate access SetAuthorisingEntry
00060 
00061   enum Status { kFailed, kClosed, kOpen };
00062 
00063 // State testing member functions
00064 
00065 // Cascade entry-specific getters.
00066 
00068  DbiStatement* CreateStatement(UInt_t dbNo) const;
00069 
00071 const DbiConnection* 
00072                GetConnection(UInt_t dbNo) const;
00073       DbiConnection* 
00074                GetConnection(UInt_t dbNo) ;
00075 
00076         string GetDbName(UInt_t dbNo) const;
00077          Int_t GetDbNo(const string& dbName) const;
00078          Int_t GetStatus(UInt_t dbNo) const {
00079                  if ( dbNo >= GetNumDb() || ! fConnections[dbNo]  ) return kFailed;
00080                  return fConnections[dbNo]->IsClosed() ? kClosed : kOpen; } 
00081         string GetStatusAsString(UInt_t dbNo) const ;
00082         string GetURL(UInt_t dbNo) const {
00083                       return ( dbNo < GetNumDb() ) ? fConnections[dbNo]-> GetUrl(): ""; }
00084         Bool_t IsTemporaryTable(const string& tableName,
00085                                 Int_t dbNo) const;
00086 // Cascade-wide getters.
00087 
00088          Int_t AllocateSeqNo(const string& tableName,
00089                              Int_t requireGlobal = 0,
00090                              Int_t dbNo = 0) const;
00091          Int_t GetAuthorisingDbNo() const { return fGlobalSeqNoDbNo; }
00092         UInt_t GetNumDb() const {return fConnections.size();}
00093         Int_t  GetTableDbNo(const string& tableName, Int_t selectDbNo = -1) const;        
00094         Bool_t TableExists(const string& tableName, Int_t selectDbNo = -1) const { 
00095                             return this->GetTableDbNo(tableName,selectDbNo) >= 0; }
00096 
00097 // State changing member functions
00098 
00099            Int_t CreateTemporaryTable(const string& tableName,
00100                                       const string& tableDescr);
00101            void HoldConnections();
00102            void ReleaseConnections();
00103            void SetPermanent(UInt_t dbNo, Bool_t permanent = true);
00104 
00105 protected:
00106 
00107 private:  
00108 
00109      Int_t ReserveNextSeqNo(const string& tableName,
00110                             Bool_t isGlobal,
00111                             UInt_t dbNo) const;
00112      void SetAuthorisingEntry(Int_t entry) {fGlobalSeqNoDbNo = entry;}
00113 
00114 // Constructors and destructors.
00115            DbiCascader();
00116   virtual ~DbiCascader();
00117 DbiCascader(const DbiCascader&);  // Not implemented
00118 
00119 // Data members
00120 
00122   Int_t fGlobalSeqNoDbNo;
00123                                 
00125   vector<DbiConnection*> fConnections; 
00126 
00128   std::map<string,Int_t> fTemporaryTables;
00129                                 
00130 
00131 // Private Locker object
00132 
00133 class Lock {
00134 
00135 public:
00136        Lock(DbiStatement* stmtDB, const string& seqnoTable, const string& dataTable);
00137       ~Lock();
00138 
00139 Bool_t IsLocked() const { return fLocked; }
00140 
00141 private:
00142 
00143   void SetLock(Bool_t setting = kTRUE);
00144 
00145    DbiStatement* fStmt;            // Statement to be used to issue lock
00146           string fSeqnoTableName;  // The SEQNO table that is locked
00147           string fDataTableName;   // The data table that is locked
00148           Bool_t fLocked;          // Lock status
00149 
00150 };
00151 
00152  ClassDef(DbiCascader,0)     //A cascade of DbiConnectionss 
00153 
00154 };
00155 
00156 
00157 #endif  // DBISKEL_H

Generated on Mon Feb 15 11:06:34 2010 for loon by  doxygen 1.3.9.1