12 #include "RelationalAccess/IConnectionServiceConfiguration.h"
13 #include "RelationalAccess/ISessionProxy.h"
14 #include "RelationalAccess/ITransaction.h"
25 std::map<int, unsigned int>::iterator iC = m_table.find( contId );
26 if( iC == m_table.end() ){
27 iC = m_table.insert( std::make_pair( contId, 0 ) ).first;
43 m_connectionString(
"" ),
48 m_containerUpdateTable(),
55 m_connectionPool( connectionPool ),
57 m_connectionString(
"" ),
62 m_containerUpdateTable(),
72 m_dbSession = m_connectionPool->connect( connectionString, readOnly?coral::ReadOnly:coral::Update );
73 if(m_dbSession.isValid()) {
74 m_connectionString = connectionString;
80 m_transactionCache.reset();
82 m_contIdSequence.reset();
84 m_containerUpdateTable.clear();
89 if( isTransactionActive()) rollbackTransaction();
93 m_connectionString.clear();
97 return m_dbSession.isValid();
101 return m_connectionString;
105 if( !m_transactionCache.get() ){
106 m_dbSession.get().transaction().start( readOnly );
115 if( m_transactionCache.get() ){
116 m_schema->containerHeaderTable().updateNumberOfObjects( m_containerUpdateTable.table() );
117 m_dbSession.get().transaction().commit();
123 if( m_transactionCache.get() ){
124 m_dbSession.get().transaction().rollback();
131 if( m_dbSession.get().transaction().isActive() ){
132 if( checkIfReadOnly ){
133 if( m_dbSession.get().transaction().isReadOnly() ) ret =
true;
142 if(!m_transactionCache->dbExistsLoaded()){
143 m_transactionCache->setDbExists( m_schema->exists() );
145 return m_transactionCache->dbExists();
150 m_transactionCache->setDbExists(
true );
155 m_transactionCache->setDbExists(
false );
159 if(!m_transactionCache->isLoaded()){
160 std::map<std::string, ContainerHeaderData> containersData;
161 m_schema->containerHeaderTable().getContainerData( containersData );
162 for(std::map<std::string, ContainerHeaderData>::iterator iC = containersData.begin();
163 iC != containersData.end(); ++iC){
165 iC->second.className,
166 iC->second.numberOfObjects, *
this ) );
167 m_transactionCache->addContainer( iC->second.id, iC->first, container );
169 m_transactionCache->setLoaded();
175 int newContId = m_contIdSequence->getNextId(
true );
176 m_schema->containerHeaderTable().addContainer( newContId, containerName, className );
178 className, 0, *
this ) );
179 m_transactionCache->addContainer( newContId, containerName, container );
186 int newContId = m_contIdSequence->getNextId(
true );
188 m_transactionCache->addContainer( newContId, containerName, newCont );
189 m_schema->containerHeaderTable().addContainer( newContId, containerName, newCont->
className() );
197 m_transactionCache->eraseContainer( cont->
id(),
name );
198 m_schema->containerHeaderTable().removeContainer( cont->
id() );
202 return m_transactionCache->getContainer( name );
206 return m_transactionCache->getContainer( contId );
210 return m_transactionCache->containers();
216 m_schema->namingServiceTable().setObjectName( name, containerId, itemId );
220 return m_schema->namingServiceTable().eraseObjectName( name );
224 return m_schema->namingServiceTable().eraseAllNames();
229 std::pair<int,int> oid;
230 if( m_schema->namingServiceTable().getObjectByName( name, oid ) ){
238 std::pair<int,int> oidData;
239 if( m_schema->namingServiceTable().getObjectByName( name, oidData ) ){
240 destination =
OId( oidData.first, oidData.second );
248 boost::shared_ptr<void>
ret = m_transactionCache->getNamedReference( name );
250 std::pair<int,int> oid;
251 if( m_schema->namingServiceTable().getObjectByName( name, oid ) ){
256 if( ptr) ret = boost::shared_ptr<void>( ptr,
RflxDeleter( cont->
type() ) );
259 if( ret.get() ) m_transactionCache->setNamedReference( name, ret );
265 std::vector<std::string>& destination ){
266 return m_schema->namingServiceTable().getNamesForContainer( containerId, destination );
271 std::vector<std::string>& destination ){
272 return m_schema->namingServiceTable().getNamesForObject( containerId, itemId, destination );
277 return m_schema->namingServiceTable().getAllNames( destination );
281 if( !m_transactionCache->utility() ){
283 m_transactionCache->setUtility( util );
285 return m_transactionCache->utility();
293 return *m_contIdSequence;
301 return m_configuration;
309 return m_connectionPool;
313 return m_containerUpdateTable;
Handle< DatabaseContainer > containerHandle(const std::string &name)
const std::string & connectionString()
To be moved in DBCommon, has to serve also the pure coral use case.
const Reflex::Type & type()
Object fetchObjectByName(const std::string &name)
bool listObjectNames(std::vector< std::string > &destination)
void takeNote(int contId, unsigned int size)
SharedSession & storageAccessSession()
boost::shared_ptr< ConnectionPool > & connectionPool()
bool getItemId(const std::string &name, OId &destination)
void dropContainer(const std::string &name)
boost::shared_ptr< void > fetchTypedObjectByName(const std::string &name, const Reflex::Type &asType)
const std::map< int, unsigned int > & table()
bool eraseObjectName(const std::string &name)
bool connect(const std::string &connectionString, bool readOnly)
IDatabaseSchema & schema()
bool getNamesForContainer(int containerId, std::vector< std::string > &destination)
Handle< DatabaseUtilitySession > utility()
ContainerUpdateTable & containerUpdateTable()
void setObjectName(const std::string &name, int containerId, int itemId)
bool getNamesForObject(int containerId, int itemId, std::vector< std::string > &destination)
const std::map< int, Handle< DatabaseContainer > > & containers()
static IDatabaseSchema * createSchemaHandle(coral::ISchema &schema)
const std::string & className()
void startTransaction(bool readOnly)
virtual ~DatabaseSession()
NamedSequence & containerIdSequence()
MappingDatabase & mappingDatabase()
bool isTransactionActive(bool checkIfReadOnly=false)
Handle< DatabaseContainer > createContainer(const std::string &containerName, const Reflex::Type &type)
void * fetchItem(int itemId)
Configuration & configuration()
void rollbackTransaction()
void * fetchItemAsType(int itemId, const Reflex::Type &asType)
static std::string sequenceNameForContainerId()
sequence names
tuple size
Write out results.
std::string className(const T &t)
boost::shared_ptr< ConnectionPool > m_connectionPool
Handle< ora::DatabaseContainer > addContainer(const std::string &containerName, const std::string &className)