CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch9/src/CondCore/ORA/src/PoolDatabaseSchema.h

Go to the documentation of this file.
00001 #ifndef INCLUDE_ORA_POOLDATABASESCHEMA_H
00002 #define INCLUDE_ORA_POOLDATABASESCHEMA_H
00003 
00004 #include "IDatabaseSchema.h"
00005 // externals
00006 #include "CoralBase/AttributeList.h"
00007 
00008 namespace ora {
00009 
00010     struct PoolDbCacheData {
00011       PoolDbCacheData();
00012         
00013       PoolDbCacheData( int id, const std::string& name, const std::string& className,
00014                        const std::string& mappingVersion, unsigned int nobjWritten );
00015 
00016       ~PoolDbCacheData();
00017 
00018       PoolDbCacheData( const PoolDbCacheData& rhs );
00019 
00020       PoolDbCacheData& operator=( const PoolDbCacheData& rhs );
00021 
00022       int m_id;
00023       std::string m_name;
00024       std::string m_className;
00025       std::string m_mappingVersion;
00026       unsigned int m_nobjWr;
00027   };
00028   
00029   class PoolDbCache {
00030     public:
00031     PoolDbCache();
00032     ~PoolDbCache();
00033     void add( int id, const PoolDbCacheData& data );
00034     const std::string& nameById( int id );
00035     int idByName( const std::string& name );
00036     PoolDbCacheData& find( int id );
00037     void remove( int id );
00038     std::map<std::string,PoolDbCacheData* >& sequences();
00039     void clear();
00040     
00041     private:
00042     PoolDbCacheData m_databaseData;
00043     PoolDbCacheData m_mappingData;
00044     std::map<int,PoolDbCacheData > m_idMap;
00045     std::map<std::string,PoolDbCacheData* > m_sequences;
00046   };
00047 
00048   class PoolMainTable: public IMainTable {
00049     public:
00050     static std::string tableName();
00051     public:
00052     explicit PoolMainTable( coral::ISchema& dbSchema );
00053     virtual ~PoolMainTable();
00054     bool getParameters( std::map<std::string,std::string>& destination );
00055     std::string schemaVersion();
00056     public:
00057     bool exists();
00058     void create();
00059     void drop();
00060     private:
00061     coral::ISchema& m_schema;
00062   };
00063 
00064   
00065   class PoolSequenceTable : public ISequenceTable{
00066     public:
00067     static std::string tableName();
00068     static std::string sequenceNameColumn();
00069     static std::string sequenceValueColumn();    
00070     public:
00071     explicit PoolSequenceTable( coral::ISchema& dbSchema );
00072     virtual ~PoolSequenceTable();
00073     void init( PoolDbCache& dbCache );
00074     bool add( const std::string& sequenceName );
00075     bool getLastId( const std::string& sequenceName, int& lastId );
00076     void sinchronize( const std::string& sequenceName, int lastValue );
00077     void erase( const std::string& sequenceName );
00078     public:
00079     bool exists();
00080     void create();
00081     void drop();    
00082     private:
00083     coral::ISchema& m_schema;
00084     PoolDbCache* m_dbCache;
00085   };
00086 
00087   class PoolMappingVersionTable: public IDatabaseTable {
00088     public:
00089     static std::string tableName();
00090     static std::string mappingVersionColumn();
00091     static std::string containerNameColumn();
00092     public:
00093     explicit PoolMappingVersionTable( coral::ISchema& dbSchema  );
00094     virtual ~PoolMappingVersionTable();
00095     public:
00096     bool exists();
00097     void create();
00098     void drop();
00099     private:
00100     coral::ISchema& m_schema;
00101   };
00102   
00103   class PoolMappingElementTable: public IDatabaseTable {
00104     public:
00105     static std::string tableName();
00106     static std::string mappingVersionColumn();
00107     static std::string elementIdColumn();
00108     static std::string elementTypeColumn();
00109     static std::string scopeNameColumn();
00110     static std::string variableNameColumn();
00111     static std::string variableParIndexColumn();
00112     static std::string variableTypeColumn();
00113     static std::string tableNameColumn();
00114     static std::string columnNameColumn();
00115     public:
00116     explicit PoolMappingElementTable( coral::ISchema& dbSchema  );
00117     virtual ~PoolMappingElementTable();
00118     public:
00119     bool exists();
00120     void create();
00121     void drop();
00122     private:
00123     coral::ISchema& m_schema;
00124   };
00125   
00126   class PoolContainerHeaderTable: public IContainerHeaderTable {
00127     public:
00128     static std::string tableName();
00129     static std::string containerIdColumn();
00130     static std::string containerNameColumn();
00131     static std::string containerTypeColumn();
00132     static std::string tableNameColumn();
00133     static std::string classNameColumn();
00134     static std::string baseMappingVersionColumn();
00135     static std::string numberOfWrittenObjectsColumn();
00136     static std::string numberOfDeletedObjectsColumn();
00137     static std::string homogeneousContainerType();
00138     public:
00139     explicit PoolContainerHeaderTable( coral::ISchema& dbSchema );
00140     virtual ~PoolContainerHeaderTable();
00141     void init( PoolDbCache& dbCache );
00142     bool getContainerData( std::map<std::string, ContainerHeaderData>& destination );
00143     void addContainer( int id, const std::string& containerName, const std::string& className );
00144     void removeContainer( int id );
00145     void incrementNumberOfObjects( int id  );
00146     void decrementNumberOfObjects( int id  );
00147     void updateNumberOfObjects( const std::map<int,unsigned int>& numberOfObjectsForContainerIds );
00148     public:
00149     bool exists();
00150     void create();
00151     void drop();
00152     private:
00153     coral::ISchema& m_schema;
00154     PoolDbCache* m_dbCache;
00155   };
00156 
00157   class PoolClassVersionTable: public IDatabaseTable {
00158     public:
00159     static std::string tableName();
00160     static std::string classVersionColumn();
00161     static std::string containerNameColumn();
00162     static std::string mappingVersionColumn();
00163     public:
00164     explicit PoolClassVersionTable( coral::ISchema& dbSchema  );
00165     virtual ~PoolClassVersionTable();
00166     public:
00167     bool exists();
00168     void create();
00169     void drop();
00170     private:
00171     coral::ISchema& m_schema;
00172   };
00173 
00174   class PoolMappingSchema: public IMappingSchema {
00175     public:
00176     static std::string emptyScope();
00177     public:
00178     explicit PoolMappingSchema( coral::ISchema& dbSchema );
00179     virtual ~PoolMappingSchema();
00180     void init( PoolDbCache& dbCache );
00181     public:
00182     bool getVersionList( std::set<std::string>& destination );
00183     bool getMapping( const std::string& version, MappingRawData& destination );
00184     void storeMapping( const MappingRawData& mapping );
00185     void removeMapping( const std::string& version );
00186     bool getContainerTableMap( std::map<std::string, int>& destination );
00187     bool getMappingVersionListForContainer( int containerId, std::set<std::string>& destination, bool onlyDependency=false );
00188     bool getMappingVersionListForTable( const std::string& tableName, std::set<std::string>& destination );
00189     bool getDependentClassesInContainerMapping( int containerId, std::set<std::string>& destination );
00190     bool getClassVersionListForMappingVersion( const std::string& mappingVersion, std::set<std::string>& destination );
00191     bool getClassVersionListForContainer( int containerId, std::map<std::string,std::string>& versionMap );
00192     bool selectMappingVersion( const std::string& classId, int containerId, std::string& destination );
00193     bool containerForMappingVersion( const std::string& mappingVersion, int& destination );
00194     void insertClassVersion( const std::string& className, const std::string& classVersion, const std::string& classId,
00195                              int dependencyIndex, int containerId, const std::string& mappingVersion );
00196     void setMappingVersion( const std::string& classId, int containerId, const std::string& mappingVersion );
00197     private:
00198     coral::ISchema& m_schema;
00199     PoolDbCache* m_dbCache;
00200   };
00201 
00202   class CondMetadataTable : public INamingServiceTable {
00203     public:
00204     static std::string& tableName();
00205     static std::string& objectNameColumn();
00206     static std::string& tokenColumn();
00207     static std::string& timetypeColumn();
00208    public: 
00209     CondMetadataTable( coral::ISchema& dbSchema, PoolDbCache& dbCache );
00210     virtual ~CondMetadataTable();
00211     void setObjectName( const std::string& name, int contId, int itemId );
00212     bool eraseObjectName( const std::string& name );
00213     bool eraseAllNames();
00214     bool getObjectByName( const std::string& name, std::pair<int,int>& destination );
00215     bool getNamesForObject( int contId, int itemId, std::vector<std::string>& destination );
00216     bool getNamesForContainer( int contId, std::vector<std::string>& destination );
00217     bool getAllNames( std::vector<std::string>& destination );
00218    public:
00219     bool exists();
00220     void create();
00221     void drop();    
00222   private:
00223     coral::ISchema& m_schema; 
00224     PoolDbCache& m_dbCache;
00225   };
00226   
00227   class PoolDatabaseSchema: public IDatabaseSchema {
00228     public:
00229     static bool existsMainTable( coral::ISchema& dbSchema );
00230     public:
00231     explicit PoolDatabaseSchema( coral::ISchema& dbSchema );
00232     virtual ~PoolDatabaseSchema();
00233 
00234     bool exists();
00235     void create();
00236     void drop();
00237 
00238     IMainTable& mainTable();
00239     ISequenceTable& sequenceTable();
00240     IDatabaseTable& mappingVersionTable();
00241     IDatabaseTable& mappingElementTable();
00242     IContainerHeaderTable& containerHeaderTable();
00243     IDatabaseTable& classVersionTable();
00244     IMappingSchema& mappingSchema();
00245     INamingServiceTable& namingServiceTable();
00246 
00247     private:
00248     coral::ISchema& m_schema;
00249     PoolDbCache m_dbCache;
00250     PoolMainTable m_mainTable;
00251     PoolSequenceTable m_sequenceTable;
00252     PoolMappingVersionTable m_mappingVersionTable;
00253     PoolMappingElementTable m_mappingElementTable;
00254     PoolContainerHeaderTable m_containerHeaderTable;
00255     PoolClassVersionTable m_classVersionTable;
00256     PoolMappingSchema m_mappingSchema;
00257     CondMetadataTable m_metadataTable;
00258   };  
00259   
00260 }
00261 
00262 #endif
00263   
00264