ATLAS Offline Software
DbContainerImp.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 //====================================================================
6 //
7 // Package : StorageSvc (The POOL project)
8 //
9 // @author M.Frank
10 //====================================================================
11 #ifndef POOL_DBCONTAINERIMP_H
12 #define POOL_DBCONTAINERIMP_H 1
13 
17 
18 // STL include files
19 #include <map>
20 #include <vector>
21 #include <utility>
22 
23 /*
24  * POOL namespace declaration
25  */
26 namespace pool {
27 
28  // Forward declarations
29  class IDbContainer;
30 
42  class DbContainerImp : virtual public IDbContainer
43  {
44  protected:
45 
47  struct DbAction {
48  const void* object;
49  const Shape* shape;
52 
53  DbAction() : object(nullptr), shape(nullptr), action(NONE) { }
54  DbAction(const void* obj, const Shape* s, const Token::OID_t& l, AccessMode a)
55  : object(obj), shape(s), link(l), action(a) { }
56 
57  const void* dataAtOffset(size_t offset) {
58  return static_cast<const char*>(object) + offset;
59  }
60  };
61 
62  typedef std::vector< DbAction > ActionList;
63 
64  private:
68  size_t m_size;
70  size_t m_writeSize;
73  protected:
75  std::string m_name;
80 
82  virtual ~DbContainerImp();
84  int stackType() const
85  { return m_stackType; }
87  size_t stackSize() const
88  { return m_size; }
90  virtual bool updatesPending() const override
91  { return m_size > 0; }
93  ActionList::value_type* stackEntry(size_t which)
94  { return (which <= m_size) ? &(*(m_stack.begin()+which)) : 0; }
96  virtual DbStatus destroyObject(ActionList::value_type& /* entry */)
97  { return Error; }
99  virtual DbStatus updateObject(ActionList::value_type& /* entry */)
100  { return Error; }
102  virtual DbStatus writeObject(ActionList::value_type& /* entry */)
103  { return Error; }
106 
107  public:
110  virtual void release() override { delete this; }
112  virtual uint64_t size() override;
114  virtual std::string name() const override
115  { return m_name; }
117  virtual uint64_t nextRecordId() override;
119  virtual void useNextRecordId(uint64_t) override {};
121  virtual DbStatus close() override;
122 
124 
128  virtual DbStatus getOption(DbOption& opt) override;
129 
131 
135  virtual DbStatus setOption(const DbOption& opt) override;
136 
140  virtual void* allocate( unsigned long siz,
141  DbContainer& cntH,
142  ShapeH shape) override;
144  virtual DbStatus allocate(DbContainer& cntH,
145  const void* object,
146  ShapeH shape,
147  Token::OID_t& oid) override;
149  virtual DbStatus free( void* ptr,
150  DbContainer& cntH) override;
152  virtual DbStatus fetch(DbSelect& sel) override;
154  virtual DbStatus destroy(const Token::OID_t& lnkH) override;
156 
162  virtual DbStatus update(DbContainer& cntH,
163  const void* object,
164  ShapeH shape,
165  const Token::OID_t& linkH) override;
167 
173  virtual DbStatus update(DbContainer& cntH,
174  const void* object,
175  ShapeH shape,
176  const DbObjectHandle<DbObject>& objH) override;
178  virtual DbStatus save( DbObjectHandle<DbObject>& objH) override;
179 
181 
186  virtual DbStatus save(DbContainer& cntH,
187  const void* object,
188  ShapeH shape,
189  Token::OID_t& linkH) override;
190 
192 
201  virtual DbStatus load( void** ptr, ShapeH shape,
202  const Token::OID_t& lnkH,
203  Token::OID_t& oid,
204  bool any_next) override;
206  virtual DbStatus clearStack();
208  virtual DbStatus fetch(const Token::OID_t& linkH, Token::OID_t& stmt);
209 
211 
217  virtual DbStatus loadObject(void** ptr, ShapeH shape, Token::OID_t& oid) = 0;
218 
219  };
220 } // End namespace pool
221 #endif // POOL_DBCONTAINERIMP_H
pool::DbContainerImp::DbAction
List of actions to execute at commit.
Definition: DbContainerImp.h:47
createCoolChannelIdFile.stmt
stmt
Definition: createCoolChannelIdFile.py:41
pool::DbContainerImp::name
virtual std::string name() const override
Get container name.
Definition: DbContainerImp.h:114
pool::DbContainerImp::update
virtual DbStatus update(DbContainer &cntH, const void *object, ShapeH shape, const DbObjectHandle< DbObject > &objH) override
Update existing object in the container.
pool::DbStatus
Definition: DbStatus.h:67
pool::DbContainerImp::commitTransaction
virtual DbStatus commitTransaction()
Execute object modification requests during a transaction.
pool::DbContainerImp::clearStack
virtual DbStatus clearStack()
Clear Transaction stack containing transaction requests.
make_coralServer_rep.opt
opt
Definition: make_coralServer_rep.py:19
pool::DbContainerImp::m_size
size_t m_size
Current size of the transaction stack.
Definition: DbContainerImp.h:68
pool::DbContainerImp::fetch
virtual DbStatus fetch(const Token::OID_t &linkH, Token::OID_t &stmt)
Fetch refined object address. Default implementation returns identity.
pool::DbContainerImp::fetch
virtual DbStatus fetch(DbSelect &sel) override
Fetch next object address of the selection to set token.
pool::DbContainerImp::stackSize
size_t stackSize() const
Access stack size.
Definition: DbContainerImp.h:87
pool::DbContainerImp::DbAction::DbAction
DbAction(const void *obj, const Shape *s, const Token::OID_t &l, AccessMode a)
Definition: DbContainerImp.h:54
pool
pool namespace
Definition: libname.h:15
pool::IDbContainer
Definition: IDbContainer.h:46
pool::DbContainerImp::save
virtual DbStatus save(DbObjectHandle< DbObject > &objH) override
Add single entry to container.
pool::DbObjectHandle
Definition: DbContainer.h:37
UploadAMITag.l
list l
Definition: UploadAMITag.larcaf.py:157
pool::DbContainerImp::free
virtual DbStatus free(void *ptr, DbContainer &cntH) override
In place deletion of raw memory.
pool::DbContainerImp::update
virtual DbStatus update(DbContainer &cntH, const void *object, ShapeH shape, const Token::OID_t &linkH) override
Update existing object in the container.
pool::DbContainerImp::m_name
std::string m_name
Container name.
Definition: DbContainerImp.h:75
pool::DbContainerImp::nextRecordId
virtual uint64_t nextRecordId() override
Number of next record in the container (=size if no delete is allowed)
dbg::ptr
void * ptr(T *p)
Definition: SGImplSvc.cxx:74
pool::Shape
Definition: Shape.h:35
pool::DbContainerImp::useNextRecordId
virtual void useNextRecordId(uint64_t) override
Suggest next Record ID for tbe next object written - used only with synced indexes.
Definition: DbContainerImp.h:119
pool::DbContainerImp::updateObject
virtual DbStatus updateObject(ActionList::value_type &)
Update persistent object in the container.
Definition: DbContainerImp.h:99
Token::OID_t
Definition: Token.h:24
pool::DbContainerImp::transAct
virtual DbStatus transAct(Transaction::Action) override
Execute Transaction Action.
pool::ShapeH
const class Shape * ShapeH
Definition: DbContainerObj.h:26
pool::DbContainerImp::writeObject
virtual DbStatus writeObject(ActionList::value_type &)
Commit single entry to container.
Definition: DbContainerImp.h:102
pool::DbOption
Definition: DbOption.h:36
pool::DbContainerImp::~DbContainerImp
virtual ~DbContainerImp()
Standard destructor.
sel
sel
Definition: SUSYToolsTester.cxx:92
pool::DbContainerImp::DbAction::action
AccessMode action
Definition: DbContainerImp.h:51
pool::DbSelect
Definition: DbSelect.h:43
pool::DbContainerImp::save
virtual DbStatus save(DbContainer &cntH, const void *object, ShapeH shape, Token::OID_t &linkH) override
Save new object in the container and return its handle.
pool::DbContainerImp::loadObject
virtual DbStatus loadObject(void **ptr, ShapeH shape, Token::OID_t &oid)=0
Find object by object identifier and load it into memory.
pool::DbContainerImp::close
virtual DbStatus close() override
Close the container and deallocate resources.
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
pool::DbContainerImp::setOption
virtual DbStatus setOption(const DbOption &opt) override
Set options.
pool::DbContainerImp::m_canUpdate
bool m_canUpdate
Flag to indicate if object updates are supported.
Definition: DbContainerImp.h:77
pool::AccessMode
AccessMode
Definition of access modes.
Definition: Database/APR/StorageSvc/StorageSvc/pool.h:42
python.Utils.unixtools.which
def which(filename, env=os.environ)
UNIX-style which ---------------------------------------------------------—.
Definition: unixtools.py:39
pool::DbContainerImp::DbAction::link
Token::OID_t link
Definition: DbContainerImp.h:50
pool::DbContainerImp::ActionList
std::vector< DbAction > ActionList
Definition: DbContainerImp.h:62
pool::DbContainerImp::DbAction::dataAtOffset
const void * dataAtOffset(size_t offset)
Definition: DbContainerImp.h:57
pool::DbContainerImp::updatesPending
virtual bool updatesPending() const override
Query the pending transaction stack.
Definition: DbContainerImp.h:90
pool::NONE
@ NONE
Definition: Database/APR/StorageSvc/StorageSvc/pool.h:43
pool::DbContainerImp::m_stackType
int m_stackType
Accumulated stack entry types.
Definition: DbContainerImp.h:72
pool::DbContainerImp::size
virtual uint64_t size() override
Size of the container.
pool::DbContainerImp::stackEntry
ActionList::value_type * stackEntry(size_t which)
Internal: get access to stack entry.
Definition: DbContainerImp.h:93
pool::Transaction::Action
Action
Definition: Transaction.h:34
pool::DbContainerImp::m_canDestroy
bool m_canDestroy
Flag to indicate if object removals are supported.
Definition: DbContainerImp.h:79
pool::DbContainerImp::m_writeSize
size_t m_writeSize
Number of objects to be written out during open transaction.
Definition: DbContainerImp.h:70
pool::DbContainerImp::allocate
virtual void * allocate(unsigned long siz, DbContainer &cntH, ShapeH shape) override
In place allocation of raw memory for the transient object.
pool::DbContainerImp::destroyObject
virtual DbStatus destroyObject(ActionList::value_type &)
Destroy persistent object in the container; does not touch transient!
Definition: DbContainerImp.h:96
pool::DbContainerImp::getOption
virtual DbStatus getOption(DbOption &opt) override
Access options.
pool::DbContainer
Definition: DbContainer.h:51
a
TList * a
Definition: liststreamerinfos.cxx:10
pool::DbContainerImp::m_stack
ActionList m_stack
Transaction fifo storage for writing.
Definition: DbContainerImp.h:66
pool::DbContainerImp::release
virtual void release() override
Release instance (Abstract interfaces do not expose destructor!)
Definition: DbContainerImp.h:110
pool::DbContainerImp::DbAction::object
const void * object
Definition: DbContainerImp.h:48
convertTimingResiduals.offset
offset
Definition: convertTimingResiduals.py:71
pool::DbContainerImp::allocate
virtual DbStatus allocate(DbContainer &cntH, const void *object, ShapeH shape, Token::OID_t &oid) override
In place allocation of object location.
python.SystemOfUnits.s
float s
Definition: SystemOfUnits.py:147
pool::DbContainerImp::DbContainerImp
DbContainerImp()
pool::DbContainerImp::stackType
int stackType() const
Access accumulated stack entry types.
Definition: DbContainerImp.h:84
pool::DbContainerImp
Definition: DbContainerImp.h:43
IDbContainer.h
python.PyAthena.obj
obj
Definition: PyAthena.py:132
Token.h
This file contains the class definition for the Token class (migrated from POOL).
pool::DbContainerImp::DbAction::DbAction
DbAction()
Definition: DbContainerImp.h:53
pool::DbContainerImp::load
virtual DbStatus load(void **ptr, ShapeH shape, const Token::OID_t &lnkH, Token::OID_t &oid, bool any_next) override
Find object within the container and load it into memory.
pool::DbContainerImp::destroy
virtual DbStatus destroy(const Token::OID_t &lnkH) override
Add the specified object to the delete stack.
pool::DbContainerImp::DbAction::shape
const Shape * shape
Definition: DbContainerImp.h:49