ATLAS Offline Software
Loading...
Searching...
No Matches
Database Class Referencefinal

#include <Database.h>

Inheritance diagram for Database:
Collaboration diagram for Database:

Classes

struct  Specification

Public Member Functions

 Database (SessionTool &session, const std::string &name, const Specification::NameType nameType)
 Constructor.
 ~Database ()
 Destructor.
void connectForRead ()
 Connects explicitly to the database for read operations.
void * readObject (const Token &token, void *object=0)
 Reads an object given a token.
void connectForWrite ()
 Connects explicitly to the database for write/update operations.
Token * writeObject (const std::string &containerName, long minorTechnology, const void *object, const RootType &type)
 Writes an object and returns a token.
void disconnect ()
 Disconnects from the database.
Io::IoFlag openMode () const
 Returns the opening mode. It can be used to check whether the database is connected.
const std::string & fid ()
 Returns the file identifier of this database.
const std::string & pfn ()
 Returns the physical file name of this database.
bool setTechnology (long technology)
 Sets the technology identifier for this database.
std::vector< std::string > containers ()
 Returns the names of the containers in this database.
Container * containerHandle (const std::string &name)
 Returns a pointer to a container object. The user acquires ownership of that object.
pool::FileDescriptor * fileDescriptor ()
bool attributeOfType (const std::string &attributeName, void *data, const std::type_info &typeInfo, const std::string &option)
bool setAttributeOfType (const std::string &attributeName, const void *data, const std::type_info &typeInfo, const std::string &option)
bool msgLvl (const MSG::Level lvl) const
 Test the output level.
MsgStream & msg () const
 The standard message stream.
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream.
void setLevel (MSG::Level lvl)
 Change the current logging level.

Private Member Functions

bool checkInRegistry ()
 Checks in the registry if the database handler already exists.
void initMessaging () const
 Initialize our message level and MessageSvc.

Private Attributes

SessionTool & m_session
 Reference to the session.
Gaudi::IFileCatalog & m_catalog
 Reference to the file catalog.
Io::IoFlag m_transactionType
 Transaction type (read/update).
DatabaseRegistry & m_registry
 Reference to the database registry.
std::string m_name
 The database name.
Specification::NameType m_nameType
 The database name spacification.
long m_technology
 The technology identifier of the database.
bool m_technologySet
 Checks if the technology identifier has been set.
DatabaseHandler * m_databaseHandler
 The underlying database handler.
Io::IoFlag m_openMode
 Current open mode.
bool m_alreadyConnected
 Flag indicating whether a connection has been already made once.
std::string m_the_fid
 Other names used.
std::string m_the_pfn
std::string m_nm
 Message source name.
boost::thread_specific_ptr< MsgStream > m_msg_tls
 MsgStream instance (a std::cout like with print-out levels).
std::atomic< IMessageSvc * > m_imsg { nullptr }
 MessageSvc pointer.
std::atomic< MSG::Level > m_lvl { MSG::NIL }
 Current logging level.
std::atomic_flag m_initialized ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
 Messaging initialized (initMessaging).

Detailed Description

Definition at line 27 of file Database/AthenaPOOL/PoolSvc/src/Database.h.

Constructor & Destructor Documentation

◆ Database()

Database::Database ( SessionTool & session,
const std::string & name,
const Specification::NameType nameType )

Constructor.

Definition at line 19 of file Database/AthenaPOOL/PoolSvc/src/Database.cxx.

21 :
22 AthMessaging("PoolSvc.Database"),
23 m_session( session ),
24 m_catalog( session.fileCatalog() ),
25 m_transactionType( session.openMode() ),
26 m_registry( session.registry() ),
27 m_name( name ),
28 m_nameType( nameType ),
29 m_technology( 0 ),
30 m_technologySet( false ),
32 m_openMode( Io::INVALID ),
33 m_alreadyConnected( false ),
34 m_the_fid( "" ),
35 m_the_pfn( "" )
36{
37 this->checkInRegistry();
38}
AthMessaging()
Default constructor:
Specification::NameType m_nameType
The database name spacification.
long m_technology
The technology identifier of the database.
Io::IoFlag m_openMode
Current open mode.
bool checkInRegistry()
Checks in the registry if the database handler already exists.
std::string m_name
The database name.
SessionTool & m_session
Reference to the session.
DatabaseRegistry & m_registry
Reference to the database registry.
std::string m_the_fid
Other names used.
DatabaseHandler * m_databaseHandler
The underlying database handler.
bool m_alreadyConnected
Flag indicating whether a connection has been already made once.
Io::IoFlag m_transactionType
Transaction type (read/update).
Gaudi::IFileCatalog & m_catalog
Reference to the file catalog.
bool m_technologySet
Checks if the technology identifier has been set.
virtual Io::IoFlag openMode() const
Returns the transaction type.
Definition SessionTool.h:90
DatabaseRegistry & registry()
Definition SessionTool.h:73
virtual Gaudi::IFileCatalog & fileCatalog()
Returns the file catalog in use.

◆ ~Database()

Database::~Database ( )

Destructor.

Definition at line 41 of file Database/AthenaPOOL/PoolSvc/src/Database.cxx.

42{}

Member Function Documentation

◆ attributeOfType()

bool Database::attributeOfType ( const std::string & attributeName,
void * data,
const std::type_info & typeInfo,
const std::string & option )

Definition at line 362 of file Database/AthenaPOOL/PoolSvc/src/Database.cxx.

366{
367 if ( ! m_databaseHandler ) return false;
368 else return m_databaseHandler->attribute( attributeName, data, typeInfo, option );
369}

◆ checkInRegistry()

bool Database::checkInRegistry ( )
private

Checks in the registry if the database handler already exists.

Definition at line 326 of file Database/AthenaPOOL/PoolSvc/src/Database.cxx.

327{
328 // Check first if the database is already connected.
329 switch( m_nameType ) {
331 m_databaseHandler = m_registry.lookupByPFN( m_name );
332 break;
334 m_databaseHandler = m_registry.lookupByFID( m_name );
335 break;
337 m_databaseHandler = m_registry.lookupByLFN( m_name );
338 break;
339 default:
340 throw std::runtime_error( "Only PFN, LFN and FID database types are currently supported (APR: \" Database::checkInRegistry \" from \" PersistencySvc \")" );
341 };
342 if ( m_databaseHandler ) {
343 m_alreadyConnected = true;
344 m_technology = m_databaseHandler->technology();
345 m_openMode = m_databaseHandler->accessMode();
349 return true;
350 }
351 else return false;
352}

◆ connectForRead()

void Database::connectForRead ( )

Connects explicitly to the database for read operations.

Definition at line 46 of file Database/AthenaPOOL/PoolSvc/src/Database.cxx.

47{
48 if( !m_databaseHandler && m_transactionType != Io::INVALID ) {
49 // Check if the database is already connected
50 if( !checkInRegistry() ) {
51 // It is not. Connect !
52 switch( m_nameType ) {
54 if ( this->fid().empty() ) {
55 throw std::runtime_error( "PFN \"" + m_name + "\" is not existing (APR: \" Database::connectForRead \" from \" PersistencySvc \")" );
56 }
57 break;
58
60 if ( this->pfn().empty() ) {
61 throw std::runtime_error( "FID \"" + m_name + "\" is not existing in the catalog (APR: \" Database::connectForRead \" from \" PersistencySvc \")" );
62 }
63 break;
65 {
66 std::string lfn = m_name;
67 if ( this->fid().empty() ) {
68 throw std::runtime_error( "LFN \"" + m_name + "\" is not existing in the catalog (APR: \" Database::connectForRead \" from \" PersistencySvc \")" );
69 }
70 this->connectForRead();
71 m_registry.registerDatabaseHandler( m_databaseHandler, lfn );
72 }
73 return;
74 break;
75 default:
76 throw std::runtime_error( "Unknown database name type (APR: \" Database::connectForRead \" from \" PersistencySvc \")" );
77 };
78
79 // Now we have all the usefull information to open the file.
80 // Check the registry now that we have the FID (in case of ambiguous PFNs)
81 m_databaseHandler = m_registry.lookupByFID( m_the_fid );
82 if( !m_databaseHandler ) {
83 // still no luck - make a new connection
85 }
86 if( m_databaseHandler ) {
87 m_openMode = Io::READ;
88 }
89 else {
90 throw std::runtime_error( "Could not connect to the file (APR: \" Database::connectForRead \" from \" PersistencySvc \")" );
91 }
92 }
93 }
94}
static const Attributes_t empty
void connectForRead()
Connects explicitly to the database for read operations.
const std::string & fid()
Returns the file identifier of this database.
const std::string & pfn()
Returns the physical file name of this database.

◆ connectForWrite()

void Database::connectForWrite ( )

Connects explicitly to the database for write/update operations.

Definition at line 108 of file Database/AthenaPOOL/PoolSvc/src/Database.cxx.

109{
110 if( !m_databaseHandler && m_transactionType != Io::INVALID ) {
111 if ( m_transactionType != Io::WRITE && m_transactionType != Io::APPEND ) {
112 throw std::runtime_error( "Could not open a database for write outside an update transaction. (APR: \" Database::connectForWrite \" from \" PersistencySvc \")" );
113 }
114
115 if ( this->checkInRegistry() ) {
116 if ( m_openMode == Io::READ ) {
117 throw std::runtime_error( "Could not open a database for write that is already connected for read. (APR: \" Database::connectForWrite \" from \" PersistencySvc \")" );
118 }
119 }
120 else { // The database is not yet connected.
121 bool dbRegistered = false;
122 switch( m_nameType ) {
125 if ( this->fid().empty() ) {
126 // Check if the technology is already set
127 if( ! m_technologySet ) {
128 throw std::runtime_error( "The back end technology has not been specified (APR: \" Database::connectForWrite \" from \" PersistencySvc \")" );
129 }
130 // register in the catalog
131 pool::DbType dbType( m_technology );
132 pool::DbType dbTypeMajor( dbType.majorType() );
133 FileCatalogUtils::registerPFN( m_catalog, m_the_pfn.substr(0, m_the_pfn.find('?')), dbTypeMajor.storageName(), m_the_fid );
134 ATH_MSG_DEBUG("registered PFN: " << m_the_pfn << " with FID:" << m_the_fid);
135 dbRegistered = true;
136 }
137 break;
140 if ( this->pfn().empty() ) {
141 throw std::runtime_error( "Could not find the FID \"" + m_name + "\" in the file catalog (APR: \" Database::connectForWrite \" from \" PersistencySvc \")" );
142 }
143 break;
145 {
146 std::string lfn = m_name;
147 if ( this->fid().empty() ) {
148 throw std::runtime_error( "Could not find the LFN \"" + m_name + "\" in the file catalog (APR: \" Database::connectForWrite \" from \" PersistencySvc \")" );
149 }
150 this->connectForWrite();
151 m_registry.registerDatabaseHandler( m_databaseHandler, lfn );
152 }
153 return;
154 break;
155 default:
156 throw std::runtime_error( "Unknown database name type (APR: \" Database::connectForWrite \" from \" PersistencySvc \")" );
157 };
158
159 m_databaseHandler = m_session.microSessionManager( m_technology ).connect( m_transactionType, m_the_fid, m_the_pfn );
160 if( !m_databaseHandler ) {
161 if( dbRegistered ) {
162 // creation failed, remove entry from the in-memory catalog
163 m_catalog.deleteFID( m_the_fid );
164 }
165 throw std::runtime_error( "Could not connect to the file (APR: \" Database::connectForWrite \" from \" PersistencySvc \")" );
166 }
167 m_openMode = m_transactionType == Io::WRITE ? Io::WRITE : Io::APPEND;
168 } // Connection established
169
170 } // Database handler retrieved
171}
#define ATH_MSG_DEBUG(x,...)
void connectForWrite()
Connects explicitly to the database for write/update operations.
void registerPFN(Gaudi::IFileCatalog &fc, const std::string &pfn, const std::string &ftype, std::string &fid)
Register PFN, assign new FID if not given. Throws if the PFN is already registered.

◆ containerHandle()

Container * Database::containerHandle ( const std::string & name)

Returns a pointer to a container object. The user acquires ownership of that object.

Definition at line 315 of file Database/AthenaPOOL/PoolSvc/src/Database.cxx.

316{
317 Container* container = 0;
318 if ( m_databaseHandler ) {
319 container = m_databaseHandler->container( name );
320 }
321 return container;
322}
const SG::AuxVectorData * container() const
Return the container holding this element.

◆ containers()

std::vector< std::string > Database::containers ( )

Returns the names of the containers in this database.

Definition at line 304 of file Database/AthenaPOOL/PoolSvc/src/Database.cxx.

305{
306 std::vector< std::string > containers;
307 if ( m_databaseHandler ) {
308 containers = m_databaseHandler->containers();
309 }
310 return containers;
311}
std::vector< std::string > containers()
Returns the names of the containers in this database.

◆ disconnect()

void Database::disconnect ( )

Disconnects from the database.

Definition at line 188 of file Database/AthenaPOOL/PoolSvc/src/Database.cxx.

189{
190 if ( m_databaseHandler ) {
191 m_session.microSessionManager( m_technology ).disconnect( m_databaseHandler );
192 m_openMode = Io::INVALID;
193 }
194}

◆ fid()

const std::string & Database::fid ( )

Returns the file identifier of this database.

Definition at line 205 of file Database/AthenaPOOL/PoolSvc/src/Database.cxx.

206{
207 if ( m_databaseHandler ) return m_databaseHandler->fid();
208 else {
209 if ( m_nameType == Specification::FID ) return m_name;
210 else if ( !m_the_fid.empty() ) return m_the_fid;
211 else {
213 std::string technology;
214 FileCatalogUtils::lookupFileByPFN( m_catalog, m_name.substr(0, m_name.find('?')), m_the_fid, technology );
215 ATH_MSG_DEBUG("lookupPFN: " << m_name << " returned FID: '" << m_the_fid << "' tech=" << technology);
216 if ( ! m_the_fid.empty() ) {
217 if( technology.empty() ) {
219 ATH_MSG_DEBUG("Retrying 'connect' using assumed PFN " << m_name << " as LFN (no tech found in PFC)" );
220 return m_the_fid;
221 }
224 m_alreadyConnected = true;
225 }
226 else {
227 if( m_transactionType != Io::WRITE ) { // Fetch the FID from the db itself !
228 if( !m_technologySet ) {
229 ATH_MSG_DEBUG("Opening database '" << m_name << "' with no technology set");
231 m_technologySet = true;
232 }
233 m_the_fid = m_session.microSessionManager( m_technology ).fidForPfn( m_name );
234 if( ! m_the_fid.empty() ) {
235 // sanity check - verify that the FID is not registered in PFC under a different name
236 std::string pfn, tech;
238 if( !pfn.empty() ) {
239 ATH_MSG_WARNING("Opening file '" << m_name << "' which is already registered in the Catalog as '" << pfn
240 <<"' (GUID " << m_the_fid << ") - this is not supported and may even lead to a crash!" );
241 }
243 m_alreadyConnected = true;
244 }
245 }
246 }
247 } /* not PFN */
248 else if ( m_nameType == Specification::LFN ) {
249 m_the_fid = m_catalog.lookupLFN( m_name );
250 }
251 if ( ! m_the_fid.empty() ) {
254 }
255 return m_the_fid;
256 }
257 return emptyString;
258 }
259}
#define ATH_MSG_WARNING(x,...)
static const std::string & emptyString
int majorType() const
Access to major type.
Definition DbType.h:67
int type() const
Access to full type.
Definition DbType.h:65
static DbType getType(const std::string &name)
Access known storage type object by name.
void lookupFileByPFN(const Gaudi::IFileCatalog &fc, const std::string &pfn, std::string &fid, std::string &tech)
Get FID and filetype for a given PFN.
void getFirstPFN(const Gaudi::IFileCatalog &fc, const std::string &fid, std::string &pfn, std::string &tech)
Get the first PFN + filetype for the given FID.
static const DbType ROOT_StorageType
Definition DbType.h:85

◆ fileDescriptor()

pool::FileDescriptor * Database::fileDescriptor ( )

Definition at line 355 of file Database/AthenaPOOL/PoolSvc/src/Database.cxx.

356{
357 return m_databaseHandler? &m_databaseHandler->fileDescriptor() : nullptr;
358}

◆ initMessaging()

void AthMessaging::initMessaging ( ) const
privateinherited

Initialize our message level and MessageSvc.

This method should only be called once.

Definition at line 39 of file AthMessaging.cxx.

40{
42 // If user did not set an explicit level, set a default
43 if (m_lvl == MSG::NIL) {
44 m_lvl = m_imsg ?
45 static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
46 MSG::INFO;
47 }
48}
std::string m_nm
Message source name.
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
std::atomic< MSG::Level > m_lvl
Current logging level.
IMessageSvc * getMessageSvc(bool quiet=false)
int outputLevel(const IMessageSvc *ims, const std::string &source)

◆ msg() [1/2]

MsgStream & AthMessaging::msg ( ) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 167 of file AthMessaging.h.

168{
169 MsgStream* ms = m_msg_tls.get();
170 if (!ms) {
171 if (!m_initialized.test_and_set()) initMessaging();
172 ms = new MsgStream(m_imsg,m_nm);
173 m_msg_tls.reset( ms );
174 }
175
176 ms->setLevel (m_lvl);
177 return *ms;
178}
boost::thread_specific_ptr< MsgStream > m_msg_tls
MsgStream instance (a std::cout like with print-out levels).
void initMessaging() const
Initialize our message level and MessageSvc.

◆ msg() [2/2]

MsgStream & AthMessaging::msg ( const MSG::Level lvl) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 182 of file AthMessaging.h.

183{ return msg() << lvl; }
MsgStream & msg() const
The standard message stream.

◆ msgLvl()

bool AthMessaging::msgLvl ( const MSG::Level lvl) const
inlineinherited

Test the output level.

Parameters
lvlThe message level to test against
Returns
boolean Indicating if messages at given level will be printed
Return values
trueMessages at level "lvl" will be printed

Definition at line 151 of file AthMessaging.h.

152{
153 // If user did not set explicit message level we have to initialize
154 // the messaging and retrieve the default via the MessageSvc.
155 if (m_lvl==MSG::NIL && !m_initialized.test_and_set()) initMessaging();
156
157 if (m_lvl <= lvl) {
158 msg() << lvl;
159 return true;
160 } else {
161 return false;
162 }
163}

◆ openMode()

Io::IoFlag Database::openMode ( ) const

Returns the opening mode. It can be used to check whether the database is connected.

Definition at line 198 of file Database/AthenaPOOL/PoolSvc/src/Database.cxx.

199{
200 return m_openMode;
201}

◆ pfn()

const std::string & Database::pfn ( )

Returns the physical file name of this database.

Definition at line 263 of file Database/AthenaPOOL/PoolSvc/src/Database.cxx.

264{
265 if( m_databaseHandler ) return m_databaseHandler->pfn();
266 if( m_nameType == Specification::PFN ) return m_name;
267 if( ! m_the_pfn.empty() ) return m_the_pfn;
268
270 m_the_fid = m_catalog.lookupLFN( m_name );
271 if ( ! m_the_fid.empty() ) {
274 // go from FID=>PFN in the next step
275 }
276 }
278 std::string technology;
280 if( !m_the_pfn.empty() ) {
283 m_alreadyConnected = true;
284 }
285 return m_the_pfn;
286 }
287 return emptyString;
288}

◆ readObject()

void * Database::readObject ( const Token & token,
void * object = 0 )

Reads an object given a token.

Definition at line 98 of file Database/AthenaPOOL/PoolSvc/src/Database.cxx.

99{
100 if( !m_databaseHandler) {
101 throw std::runtime_error( "Could not open a database for read object. (APR: \" Database::connectForWrite \" from \" PersistencySvc \")" );
102 }
103 return m_databaseHandler->readObject( token, object );
104}

◆ setAttributeOfType()

bool Database::setAttributeOfType ( const std::string & attributeName,
const void * data,
const std::type_info & typeInfo,
const std::string & option )

Definition at line 373 of file Database/AthenaPOOL/PoolSvc/src/Database.cxx.

377{
378 if ( ! m_databaseHandler ) return false;
379 else return m_databaseHandler->setAttribute( attributeName, data, typeInfo, option );
380}

◆ setLevel()

void AthMessaging::setLevel ( MSG::Level lvl)
inherited

Change the current logging level.

Use this rather than msg().setLevel() for proper operation with MT.

Definition at line 28 of file AthMessaging.cxx.

29{
30 m_lvl = lvl;
31}

◆ setTechnology()

bool Database::setTechnology ( long technology)

Sets the technology identifier for this database.

This can only be called for newly created databases before the connect method is called. Otherwise false is returned.

Definition at line 291 of file Database/AthenaPOOL/PoolSvc/src/Database.cxx.

292{
293 if ( m_alreadyConnected ) return false;
294 else {
295 pool::DbType dbType( technology );
296 m_technology = dbType.majorType();
297 m_technologySet = true;
298 return true;
299 }
300}

◆ writeObject()

Token * Database::writeObject ( const std::string & containerName,
long minorTechnology,
const void * object,
const RootType & type )

Writes an object and returns a token.

Definition at line 175 of file Database/AthenaPOOL/PoolSvc/src/Database.cxx.

179{
180 if( !m_databaseHandler) {
181 throw std::runtime_error( "Could not open a database for write object. (APR: \" Database::connectForWrite \" from \" PersistencySvc \")" );
182 }
183 return m_databaseHandler->writeObject( containerName, minorTechnology, object, type );
184}

Member Data Documentation

◆ ATLAS_THREAD_SAFE

std::atomic_flag m_initialized AthMessaging::ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
mutableprivateinherited

Messaging initialized (initMessaging).

Definition at line 141 of file AthMessaging.h.

◆ m_alreadyConnected

bool Database::m_alreadyConnected
private

Flag indicating whether a connection has been already made once.

Definition at line 122 of file Database/AthenaPOOL/PoolSvc/src/Database.h.

◆ m_catalog

Gaudi::IFileCatalog& Database::m_catalog
private

Reference to the file catalog.

Definition at line 104 of file Database/AthenaPOOL/PoolSvc/src/Database.h.

◆ m_databaseHandler

DatabaseHandler* Database::m_databaseHandler
private

The underlying database handler.

Definition at line 118 of file Database/AthenaPOOL/PoolSvc/src/Database.h.

◆ m_imsg

std::atomic<IMessageSvc*> AthMessaging::m_imsg { nullptr }
mutableprivateinherited

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

135{ nullptr };

◆ m_lvl

std::atomic<MSG::Level> AthMessaging::m_lvl { MSG::NIL }
mutableprivateinherited

Current logging level.

Definition at line 138 of file AthMessaging.h.

138{ MSG::NIL };

◆ m_msg_tls

boost::thread_specific_ptr<MsgStream> AthMessaging::m_msg_tls
mutableprivateinherited

MsgStream instance (a std::cout like with print-out levels).

Definition at line 132 of file AthMessaging.h.

◆ m_name

std::string Database::m_name
private

The database name.

Definition at line 110 of file Database/AthenaPOOL/PoolSvc/src/Database.h.

◆ m_nameType

Specification::NameType Database::m_nameType
private

The database name spacification.

Definition at line 112 of file Database/AthenaPOOL/PoolSvc/src/Database.h.

◆ m_nm

std::string AthMessaging::m_nm
privateinherited

Message source name.

Definition at line 129 of file AthMessaging.h.

◆ m_openMode

Io::IoFlag Database::m_openMode
private

Current open mode.

Definition at line 120 of file Database/AthenaPOOL/PoolSvc/src/Database.h.

◆ m_registry

DatabaseRegistry& Database::m_registry
private

Reference to the database registry.

Definition at line 108 of file Database/AthenaPOOL/PoolSvc/src/Database.h.

◆ m_session

SessionTool& Database::m_session
private

Reference to the session.

Definition at line 102 of file Database/AthenaPOOL/PoolSvc/src/Database.h.

◆ m_technology

long Database::m_technology
private

The technology identifier of the database.

Definition at line 114 of file Database/AthenaPOOL/PoolSvc/src/Database.h.

◆ m_technologySet

bool Database::m_technologySet
private

Checks if the technology identifier has been set.

Definition at line 116 of file Database/AthenaPOOL/PoolSvc/src/Database.h.

◆ m_the_fid

std::string Database::m_the_fid
private

Other names used.

Definition at line 124 of file Database/AthenaPOOL/PoolSvc/src/Database.h.

◆ m_the_pfn

std::string Database::m_the_pfn
private

Definition at line 125 of file Database/AthenaPOOL/PoolSvc/src/Database.h.

◆ m_transactionType

Io::IoFlag Database::m_transactionType
private

Transaction type (read/update).

Definition at line 106 of file Database/AthenaPOOL/PoolSvc/src/Database.h.


The documentation for this class was generated from the following files: