ATLAS Offline Software
Loading...
Searching...
No Matches
SqliteReadSvc.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5
12
13#include "SqliteReadSvc.h"
14#include "SqliteRecordset.h"
15#include <sqlite3.h>
16
17#include "RDBQuery.h"
18
19SqliteReadSvc::SqliteReadSvc(const std::string& name, ISvcLocator* svc)
20 : base_class(name,svc)
21{
22}
23
25{
26 m_recordsets.clear();
27 shutdown("");
28
29 return StatusCode::SUCCESS;
30}
31
32bool SqliteReadSvc::connect(const std::string& connName)
33{
34 std::lock_guard<std::mutex> guard(m_sessionMutex);
35 if(!m_db) {
36 int res = sqlite3_open(connName.c_str(), &m_db);
37 if (res != SQLITE_OK) {
38 ATH_MSG_FATAL("Failed to open " << connName << ". " << sqlite3_errmsg(m_db));
39 return false;
40 }
41 }
42 return true;
43}
44
45bool SqliteReadSvc::disconnect(const std::string&)
46{
47 // Dummy implementation
48 return true;
49}
50
51bool SqliteReadSvc::shutdown(const std::string&)
52{
53 std::lock_guard<std::mutex> guard(m_sessionMutex);
54 if(m_db) {
55 sqlite3_close(m_db);
56 m_db = nullptr;
57 }
58 return true;
59}
60
61
63 , const std::string&
64 , const std::string&
65 , const std::string& )
66{
67 ATH_MSG_DEBUG("Getting RecordsetPtr with key " << node);
68
69 std::lock_guard<std::mutex> guard(m_sessionMutex);
70 if(!m_db) {
71 ATH_MSG_ERROR("Connection to the SQLite database not open. Returning empty recordset");
73 }
74
75 auto itRecordset = m_recordsets.find(node);
76 if(itRecordset!=m_recordsets.end()) {
77 ATH_MSG_DEBUG("Reusing an existing recordset");
78 return itRecordset->second;
79 }
80
81 SqliteRecordset* recConcrete = new SqliteRecordset();
82 recConcrete->getData(m_db,node);
83 IRDBRecordset_ptr rec(recConcrete);
84 m_recordsets.emplace(node,rec);
85 return rec;
86}
87
88std::unique_ptr<IRDBQuery> SqliteReadSvc::getQuery(const std::string& node
89 , const std::string& tag
90 , const std::string& tag2node
91 , const std::string& connName)
92{
93 ATH_MSG_DEBUG("getQuery (" << node << "," << tag << "," << tag2node << "," << connName << ")");
94 ATH_MSG_WARNING("SqliteReadSvc::getQuery is a dummy method");
95
96 return std::unique_ptr<IRDBQuery>();
97}
98
99std::string SqliteReadSvc::getChildTag(const std::string& childNode
100 , const std::string& parentTag
101 , const std::string& parentNode
102 , const std::string& )
103{
104 ATH_MSG_DEBUG("getChildTag for " << childNode << " " << parentTag << " " << parentNode);
105 ATH_MSG_WARNING("SqliteReadSvc::getChildTag is a dummy method");
106 return std::string();
107}
108
110 , const std::string& tag
111 , const std::string& )
112{
113 ATH_MSG_DEBUG("getTagDetails for tag: " << tag);
114 ATH_MSG_WARNING("SqliteReadSvc::getTagDetails is a dummy method");
115 return;
116}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
coral::AttributeList RDBTagDetails
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
std::pair< std::vector< unsigned int >, bool > res
Declaration of SqliteReadSvc class.
Declaration of the SqliteRecordset class.
std::string getChildTag(const std::string &childNode, const std::string &, const std::string &, const std::string &) override
Dummy overrider of the virtual function.
RecordsetPtrMap m_recordsets
bool disconnect(const std::string &) override
Dummy overrider of the virtual function.
SqliteReadSvc(const std::string &name, ISvcLocator *svc)
Standard Service Constructor.
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.
StatusCode finalize() override
sqlite3 * m_db
std::mutex m_sessionMutex
void getTagDetails(RDBTagDetails &tagDetails, const std::string &tag, const std::string &) override
Dummy overrider of the virtual function.
bool shutdown(const std::string &) override
Closes the database connection.
bool connect(const std::string &connName) override
Open the SQLite database This method has no effect if the connection has already been opened.
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)
SqliteRecordset implements IRDBRecordset interface.
void getData(sqlite3 *db, const std::string &nodeName)
Constructs SQL query and retrieves data from the DB.
Definition node.h:24