Belle II Software  release-05-02-19
LocalMetadataProvider.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2019 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Martin Ritter *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <framework/database/LocalMetadataProvider.h>
12 
13 #include <framework/logging/Logger.h>
14 
15 namespace Belle2::Conditions {
16 
17  LocalMetadataProvider::LocalMetadataProvider(std::string filename, const std::set<std::string>& usableTagStates):
18  MetadataProvider(usableTagStates), m_filename{std::move(filename)}, m_connection{m_filename},
19  m_globaltagStatus{m_connection, "SELECT globalTagStatus FROM globaltags WHERE globalTagName=:globaltag", true},
20  m_selectPayloads{m_connection, R"SQL(
21  SELECT
22  payloadName, globalTagName, payloadUrl, baseUrl, checksum,
23  firstExp, firstRun, finalExp, finalRun, revision
24  FROM iov_payloads
25  WHERE globalTagName=:globaltag AND
26  ((firstExp==:exp AND firstRun<=:run) OR firstExp<:exp) AND
27  (finalExp<0 OR (finalRun<0 AND finalExp>=:exp) OR finalExp>:exp OR (finalExp==:exp AND finalRun>=:run));
28  )SQL", true}
29  {}
30 
31  std::string LocalMetadataProvider::getGlobaltagStatus(const std::string& globaltag)
32  {
33  try {
34  if (m_globaltagStatus.execute(globaltag).step()) {
35  return m_globaltagStatus.getRow();
36  }
37  B2ERROR("Local Database: Global tag does not exist"
38  << LogVar("database", m_filename) << LogVar("globaltag", globaltag));
39  } catch (std::exception& e) {
40  B2ERROR("Local Database: Error checking globaltag"
41  << LogVar("database", m_filename) << LogVar("globaltag", globaltag) << LogVar("error", e.what()));
42  }
43  return "";
44  }
45 
46  bool LocalMetadataProvider::updatePayloads(const std::string& globaltag, int exp, int run)
47  {
48  try {
49  for (auto && row : m_selectPayloads.execute(globaltag, exp, run)) {
50  addPayload(std::move(row), "Local Database");
51  }
52  } catch (std::exception& e) {
53  B2ERROR("Local Database: Error obtaining payloads"
54  << LogVar("database", m_filename) << LogVar("globaltag", globaltag) << LogVar("error", e.what()));
55  return false;
56  }
57  return true;
58  }
59 } // Belle2::Conditions namespace
Belle2::Conditions::LocalMetadataProvider::LocalMetadataProvider
LocalMetadataProvider(std::string filename, const std::set< std::string > &usableTagStates)
Construct with the name of the sqlite file.
Definition: LocalMetadataProvider.cc:25
LogVar
Class to store variables with their name which were sent to the logging service.
Definition: LogVariableStream.h:24