/search.css" rel="stylesheet" type="text/css"/> /search.js">
00001 #ifndef DBITABLEPROXYREGISTRY_H 00002 #define DBITABLEPROXYREGISTRY_H 00003 00025 #if !defined(__CINT__) || defined(__MAKECINT__) 00026 #include "Rtypes.h" 00027 #endif 00028 #include <map> 00029 #include <string> 00030 #include "DatabaseInterface/DbiRollbackDates.h" 00031 #include "DatabaseInterface/DbiExtraConditions.h" 00032 00033 class DbiCascader; 00034 class DbiTableProxy; 00035 class DbiTableRow; 00036 class DbiValidate; 00037 class DbiSvc; 00038 class DybDbi; 00039 00040 class DbiTableProxyRegistry 00041 { 00042 00043 friend class DybDbi; 00044 friend class DbiSvc; 00045 friend class DbiValidate; //Allow DbiValidate access to dtor and 00046 // fCascader 00047 public: 00048 00049 // State testing member functions 00050 void ShowStatistics() const; 00051 00052 // State changing member functions 00053 static DbiTableProxyRegistry& Instance(); 00054 static Bool_t IsActive() { return fgInstance ? kTRUE: kFALSE; } 00055 00056 00057 // Configuration calls: 00058 void ConfigExtraConditions(const std::string& str); 00059 void ClearExtraConditions(); 00060 00061 void ConfigRollback(const std::string& str); 00062 void ConfigRollback(const std::vector<std::string>& rollbacks); 00063 void ClearRollbackDates(); 00064 00065 void ConfigLevel2Cache(const std::string& cachedir=""); 00066 void ConfigConnectionsPermanent(Bool_t permanent); 00067 void ConfigOrderContextQuery(Bool_t on); 00068 00069 DbiExtraConditions& GetExtraConditions(){ return fExtraConditions ;} 00070 DbiRollbackDates& GetRollbackDates(){ return fRollbackDates ;} 00071 00072 DbiCascader& GetCascader() { return *fCascader; } 00073 DbiTableProxy& GetTableProxy(const std::string& tableName, 00074 const DbiTableRow* tableRow) ; 00075 Bool_t HasRowCounter(const std::string& tableName); 00076 void PurgeCaches(); 00077 void RefreshMetaData(const std::string& tableName); 00078 void SetSqlCondition(const std::string& sql=""); // global baseline condition 00079 00080 std::string FormSqlCondition(DbiTableProxy* proxy) const; 00081 void ShowSqlConditions() const; 00082 00083 protected: 00084 00085 // Constructors (protected because singleton). 00086 DbiTableProxyRegistry(); 00087 virtual ~DbiTableProxyRegistry(); 00088 00089 private: 00090 00091 // State changing member functions 00092 00093 // Disabled (not implemented) copy constructor and asignment. 00094 00095 DbiTableProxyRegistry(const DbiTableProxyRegistry&) {}; 00096 DbiTableProxyRegistry& operator=(const DbiTableProxyRegistry&) { return *this; }; 00097 00098 // State testing member functions 00099 void ApplySqlCondition() const; 00100 void ApplySqlCondition(DbiTableProxy* proxy) const; 00101 00102 // Data members 00103 // Helper class to handle deletion of singleton 00104 public: // work around dicitonary problem see #470 comment 11 00105 struct Cleaner { 00106 static int fgCount; // counts #includes 00107 Cleaner() { this->Increment(); } 00108 ~Cleaner() { 00109 if (--fgCount==0 && DbiTableProxyRegistry::fgInstance!=0) { 00110 delete DbiTableProxyRegistry::fgInstance; 00111 DbiTableProxyRegistry::fgInstance = 0; 00112 } 00113 } 00114 void Increment() { ++fgCount; }; 00115 }; 00116 private: 00117 friend class Cleaner; 00118 00120 DbiCascader* fCascader; 00121 00123 std::string fSqlCondition; 00124 00125 #ifndef __CINT__ // Hide map from CINT; complains: missing Streamer() etc. 00126 00127 std::map<std::string,DbiTableProxy*> fTPmap; 00128 #endif // __CINT__ 00129 00131 DbiRollbackDates fRollbackDates; 00132 00134 DbiExtraConditions fExtraConditions; 00135 00136 00138 static DbiTableProxyRegistry* fgInstance; 00139 00140 00141 // Removed: ClassDef(DbiTableProxyRegistry,0) // Singleton register DbiTableProxys. 00142 00143 }; 00144 00145 00146 #endif // DBITABLEPROXYREGISTRY_H