Belle II Software  release-06-02-00
LocalMetadataProvider.cc
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 
9 #include <framework/database/LocalMetadataProvider.h>
10 
11 #include <framework/logging/Logger.h>
12 
13 namespace Belle2::Conditions {
14 
15  LocalMetadataProvider::LocalMetadataProvider(std::string filename, const std::set<std::string>& usableTagStates):
16  MetadataProvider(usableTagStates), m_filename{std::move(filename)}, m_connection{m_filename},
17  m_globaltagStatus{m_connection, "SELECT globalTagStatus FROM globaltags WHERE globalTagName=:globaltag", true},
18  m_selectPayloads{m_connection, R"SQL(
19  SELECT
20  payloadName, globalTagName, payloadUrl, baseUrl, checksum,
21  firstExp, firstRun, finalExp, finalRun, revision
22  FROM iov_payloads
23  WHERE globalTagName=:globaltag AND
24  ((firstExp==:exp AND firstRun<=:run) OR firstExp<:exp) AND
25  (finalExp<0 OR (finalRun<0 AND finalExp>=:exp) OR finalExp>:exp OR (finalExp==:exp AND finalRun>=:run));
26  )SQL", true}
27  {}
28 
29  std::string LocalMetadataProvider::getGlobaltagStatus(const std::string& globaltag)
30  {
31  try {
32  if (m_globaltagStatus.execute(globaltag).step()) {
33  return m_globaltagStatus.getRow();
34  }
35  B2ERROR("Local Database: Global tag does not exist"
36  << LogVar("database", m_filename) << LogVar("globaltag", globaltag));
37  } catch (std::exception& e) {
38  B2ERROR("Local Database: Error checking globaltag"
39  << LogVar("database", m_filename) << LogVar("globaltag", globaltag) << LogVar("error", e.what()));
40  }
41  return "";
42  }
43 
44  bool LocalMetadataProvider::updatePayloads(const std::string& globaltag, int exp, int run)
45  {
46  try {
47  for (auto && row : m_selectPayloads.execute(globaltag, exp, run)) {
48  addPayload(std::move(row), "Local Database");
49  }
50  } catch (std::exception& e) {
51  B2ERROR("Local Database: Error obtaining payloads"
52  << LogVar("database", m_filename) << LogVar("globaltag", globaltag) << LogVar("error", e.what()));
53  return false;
54  }
55  return true;
56  }
57 } // Belle2::Conditions namespace
LocalMetadataProvider(std::string filename, const std::set< std::string > &usableTagStates)
Construct with the name of the sqlite file.
bool updatePayloads(const std::string &globaltag, int exp, int run) override
Update the list of existing payloads from a given globaltag, exp and run combination.
sqlite::ObjectStatement< PayloadMetadata, std::string, std::string, std::string, std::string, std::string, int, int, int, int, int > m_selectPayloads
SQLite statement to return all payloads for a given globaltag, exp, run.
std::string getGlobaltagStatus(const std::string &globaltag) override
Return the status of the given globaltag.
sqlite::SimpleStatement< std::string > m_globaltagStatus
SQLite statement to return the status of a global tag.
std::string m_filename
Filename for the sqlite database file.
Base class for a payload metadata provider.
void addPayload(PayloadMetadata &&payload, const std::string &messagePrefix="")
Add a payload information to the internal list.
Class to store variables with their name which were sent to the logging service.