ATLAS Offline Software
SqliteReadSvc.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
13 #include "SqliteReadSvc.h"
14 #include "SqliteRecordset.h"
15 #include <sqlite3.h>
16 
17 #include "RDBQuery.h"
18 
19 SqliteReadSvc::SqliteReadSvc(const std::string& name, ISvcLocator* svc)
21 {
22 }
23 
25 {
26  m_recordsets.clear();
27  shutdown("");
28 
29  return StatusCode::SUCCESS;
30 }
31 
32 StatusCode SqliteReadSvc::queryInterface(const InterfaceID& riid, void** ppvInterface)
33 {
34  if (IID_IRDBAccessSvc == riid) {
35  *ppvInterface = (IRDBAccessSvc*)this;
36  }
37  else {
38  return AthService::queryInterface(riid, ppvInterface);
39  }
40 
41  addRef();
42  return StatusCode::SUCCESS;
43 }
44 
45 bool SqliteReadSvc::connect(const std::string& connName)
46 {
47  std::lock_guard<std::mutex> guard(m_sessionMutex);
48  if(!m_db) {
49  int res = sqlite3_open(connName.c_str(), &m_db);
50  if (res != SQLITE_OK) {
51  ATH_MSG_FATAL("Failed to open " << connName << ". " << sqlite3_errmsg(m_db));
52  return false;
53  }
54  }
55  return true;
56 }
57 
58 bool SqliteReadSvc::disconnect(const std::string&)
59 {
60  // Dummy implementation
61  return true;
62 }
63 
64 bool SqliteReadSvc::shutdown(const std::string&)
65 {
66  std::lock_guard<std::mutex> guard(m_sessionMutex);
67  if(m_db) {
68  sqlite3_close(m_db);
69  m_db = nullptr;
70  }
71  return true;
72 }
73 
74 
76  , const std::string&
77  , const std::string&
78  , const std::string& )
79 {
80  ATH_MSG_DEBUG("Getting RecordsetPtr with key " << node);
81 
82  std::lock_guard<std::mutex> guard(m_recordsetMutex);
83  if(!m_db) {
84  ATH_MSG_ERROR("Connection to the SQLite database not open. Returning empty recordset");
85  return IRDBRecordset_ptr(new SqliteRecordset());
86  }
87 
88  auto itRecordset = m_recordsets.find(node);
89  if(itRecordset!=m_recordsets.end()) {
90  ATH_MSG_DEBUG("Reusing an existing recordset");
91  return itRecordset->second;
92  }
93 
94  SqliteRecordset* recConcrete = new SqliteRecordset();
95  recConcrete->getData(m_db,node);
96  IRDBRecordset_ptr rec(recConcrete);
97  m_recordsets.emplace(node,rec);
98  return rec;
99 }
100 
101 std::unique_ptr<IRDBQuery> SqliteReadSvc::getQuery(const std::string& node
102  , const std::string& tag
103  , const std::string& tag2node
104  , const std::string& connName)
105 {
106  ATH_MSG_DEBUG("getQuery (" << node << "," << tag << "," << tag2node << "," << connName << ")");
107  ATH_MSG_WARNING("SqliteReadSvc::getQuery is a dummy method");
108 
109  return std::unique_ptr<IRDBQuery>();
110 }
111 
112 std::string SqliteReadSvc::getChildTag(const std::string& childNode
113  , const std::string& parentTag
114  , const std::string& parentNode
115  , const std::string& )
116 {
117  ATH_MSG_DEBUG("getChildTag for " << childNode << " " << parentTag << " " << parentNode);
118  ATH_MSG_WARNING("SqliteReadSvc::getChildTag is a dummy method");
119  return std::string();
120 }
121 
123  , const std::string& tag
124  , const std::string& )
125 {
126  ATH_MSG_DEBUG("getTagDetails for tag: " << tag);
127  ATH_MSG_WARNING("SqliteReadSvc::getTagDetails is a dummy method");
128  return;
129 }
SqliteReadSvc::getChildTag
std::string getChildTag(const std::string &childNode, const std::string &, const std::string &, const std::string &) override
Dummy overrider of the virtual function.
Definition: SqliteReadSvc.cxx:112
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
SqliteRecordset.h
Declaration of the SqliteRecordset class.
SqliteReadSvc::m_db
sqlite3 * m_db
Definition: SqliteReadSvc.h:97
SqliteReadSvc::queryInterface
StatusCode queryInterface(const InterfaceID &riid, void **ppvInterface) override
Definition: SqliteReadSvc.cxx:32
SqliteReadSvc::getTagDetails
void getTagDetails(RDBTagDetails &tagDetails, const std::string &tag, const std::string &) override
Dummy overrider of the virtual function.
Definition: SqliteReadSvc.cxx:122
SqliteReadSvc.h
Declaration of SqliteReadSvc class.
SqliteRecordset::getData
void getData(sqlite3 *db, const std::string &nodeName)
Constructs SQL query and retrieves data from the DB.
Definition: SqliteRecordset.cxx:25
SqliteReadSvc::getRecordsetPtr
IRDBRecordset_ptr getRecordsetPtr(const std::string &node, const std::string &, const std::string &, const std::string &) override
Provides access to the Recordset object containing HVS-tagged data.
Definition: SqliteReadSvc.cxx:75
SqliteReadSvc::SqliteReadSvc
SqliteReadSvc(const std::string &name, ISvcLocator *svc)
Standard Service Constructor.
Definition: SqliteReadSvc.cxx:19
SqliteReadSvc::disconnect
bool disconnect(const std::string &) override
Dummy overrider of the virtual function.
Definition: SqliteReadSvc.cxx:58
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
IRDBAccessSvc
IRDBAccessSvc is an abstract interface to the athena service that provides the following functionalit...
Definition: IRDBAccessSvc.h:45
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AthService
Definition: AthService.h:32
res
std::pair< std::vector< unsigned int >, bool > res
Definition: JetGroupProductTest.cxx:14
Handler::svc
AthROOTErrorHandlerSvc * svc
Definition: AthROOTErrorHandlerSvc.cxx:10
IRDBRecordset_ptr
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
Definition: IRDBAccessSvc.h:25
SqliteReadSvc::m_recordsetMutex
std::mutex m_recordsetMutex
Definition: SqliteReadSvc.h:98
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
RDBQuery.h
SqliteReadSvc::m_recordsets
RecordsetPtrMap m_recordsets
Definition: SqliteReadSvc.h:96
SqliteReadSvc::connect
bool connect(const std::string &connName) override
Open the SQLite database This method has no effect if the connection has already been opened.
Definition: SqliteReadSvc.cxx:45
RDBTagDetails
coral::AttributeList RDBTagDetails
Definition: IRDBAccessSvc.h:29
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
SqliteRecordset
SqliteRecordset implements IRDBRecordset interface. It is a container of records read from an SQLite ...
Definition: SqliteRecordset.h:31
SqliteReadSvc::shutdown
bool shutdown(const std::string &) override
Closes the database connection.
Definition: SqliteReadSvc.cxx:64
SqliteReadSvc::getQuery
std::unique_ptr< IRDBQuery > getQuery(const std::string &node, const std::string &, const std::string &, const std::string &) override
Dummy overrider of the virtual function (for now)
Definition: SqliteReadSvc.cxx:101
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:24
SqliteReadSvc::finalize
StatusCode finalize() override
Definition: SqliteReadSvc.cxx:24
node
Definition: memory_hooks-stdcmalloc.h:74
SqliteReadSvc::m_sessionMutex
std::mutex m_sessionMutex
Definition: SqliteReadSvc.h:99