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
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