/search.css" rel="stylesheet" type="text/css"/> /search.js">
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

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   enum Status { kFailed, kClosed, kOpen };
00060 
00061 // State testing member functions
00062 
00063 // Cascade entry-specific getters.
00064 
00066  DbiStatement* CreateStatement(UInt_t dbNo) const;
00067 
00069 const DbiConnection* 
00070                GetConnection(UInt_t dbNo) const;
00071       DbiConnection* 
00072                GetConnection(UInt_t dbNo) ;
00073 
00074         string GetDbName(UInt_t dbNo) const;
00075          Int_t GetDbNo(const string& dbName) const;
00076          Int_t GetStatus(UInt_t dbNo) const {
00077                  if ( dbNo >= GetNumDb() || ! fConnections[dbNo]  ) return kFailed;
00078                  return fConnections[dbNo]->IsClosed() ? kClosed : kOpen; } 
00079         string GetStatusAsString(UInt_t dbNo) const ;
00080         string GetURL(UInt_t dbNo) const {
00081                       return ( dbNo < GetNumDb() ) ? fConnections[dbNo]-> GetUrl(): ""; }
00082         Bool_t IsTemporaryTable(const string& tableName,
00083                                 Int_t dbNo) const;
00084 // Cascade-wide getters.
00085 
00086          Int_t AllocateSeqNo(const string& tableName,
00087                              Int_t requireGlobal = 0,
00088                              Int_t dbNo = 0) const;
00089          Int_t GetAuthorisingDbNo() const { return fGlobalSeqNoDbNo; }
00090         UInt_t GetNumDb() const {return fConnections.size();}
00091         Int_t  GetTableDbNo(const string& tableName, Int_t selectDbNo = -1) const;        
00092         Bool_t TableExists(const string& tableName, Int_t selectDbNo = -1) const { 
00093                             return this->GetTableDbNo(tableName,selectDbNo) >= 0; }
00094 
00095 // State changing member functions
00096 
00097            Int_t CreateTemporaryTable(const string& tableName,
00098                                       const string& tableDescr);
00099            void HoldConnections();
00100            void ReleaseConnections();
00101            void SetPermanent(UInt_t dbNo);
00102 
00103            // NJT: Make this public.
00104            void SetAuthorisingEntry(Int_t entry) {fGlobalSeqNoDbNo = entry;}
00105 
00106 protected:
00107 
00108 private:  
00109 
00110      Int_t ReserveNextSeqNo(const string& tableName,
00111                             Bool_t isGlobal,
00112                             UInt_t dbNo) const;
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  // Removed: ClassDef(DbiCascader,0)     //A cascade of DbiConnectionss 
00153 
00154 };
00155 
00156 
00157 #endif  // DBISKEL_H
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Fri May 16 2014 09:56:45 for DatabaseInterface by doxygen 1.7.4