PayloadReader

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
#ifndef CondCore_CondDB_PayloadReader_h
#define CondCore_CondDB_PayloadReader_h
//
// Package:     CondDB
// Class  :     PayloadReader
//
/**\class PayloadReader PayloadReader.h CondCore/CondDB/interface/PayloadReader.h
   Description: service for accessing conditions payloads from DB.  
*/
//
// Author:      Giacomo Govi
// Created:     Jul 2015
//

#include "CondCore/CondDB/interface/ConnectionPool.h"

#include <memory>

namespace cond {

  namespace persistency {

    class PayloadReader {
    public:
      static constexpr const char* const PRODUCTION_DB = "oracle://cms_orcon_adg/CMS_CONDITIONS";

    public:
      // default constructor
      PayloadReader();

      //
      PayloadReader(const PayloadReader& rhs);

      //
      virtual ~PayloadReader();

      //
      PayloadReader& operator=(const PayloadReader& rhs);

      //
      ConnectionPool& connection();

      //
      void open(const std::string& connectionString);

      //
      void open();

      //
      void close();

      //
      template <typename T>
      std::shared_ptr<T> fetch(const cond::Hash& payloadHash);

    private:
      std::shared_ptr<ConnectionPool> m_connection;
      Session m_session;
    };

    template <typename T>
    inline std::shared_ptr<T> PayloadReader::fetch(const cond::Hash& payloadHash) {
      std::shared_ptr<T> ret;
      if (m_session.connectionString().empty())
        open(PRODUCTION_DB);
      m_session.transaction().start(true);
      ret = m_session.fetchPayload<T>(payloadHash);
      m_session.transaction().commit();
      return ret;
    }

  }  // namespace persistency
}  // namespace cond
#endif  // CondCore_CondDB_PayloadReader_h