8#include "RelationalAccess/ITransaction.h"
9#include "RelationalAccess/ICursor.h"
10#include "RelationalAccess/IQuery.h"
11#include "RelationalAccess/ITable.h"
12#include "RelationalAccess/ISchema.h"
13#include "RelationalAccess/SchemaException.h"
15#include <CoralBase/Attribute.h>
16#include <CoralBase/AttributeList.h>
37 if ( !
m_session.transaction().isActive() ) {
80std::tuple<unsigned int,unsigned int>
83 const static auto versions = [&]() -> std::tuple<unsigned int,unsigned int> {
84 bool mySession =
false;
85 if ( !
m_session.transaction().isActive() ) {
90 std::unique_ptr< coral::IQuery > q(
m_session.nominalSchema().tableHandle(
"TRIGGER_SCHEMA").newQuery() );
91 q->setRowCacheSize( 1 );
94 coral::AttributeList attList;
95 attList.extend<
int>(
"TS_ID" );
96 q->defineOutput(attList);
97 q->addToOutputList(
"TS_ID" );
99 q->addToOrderList(
"TS_ID desc");
100 coral::ICursor& cursor = q->execute();
102 if ( ! cursor.next() ) {
104 if ( mySession )
m_session.transaction().commit();
105 throw std::runtime_error(
"DBLoader::loadSchemaVersion() >> Table TRIGGER_SCHEMA is not filled" );
108 const coral::AttributeList& row = cursor.currentRow();
113 const unsigned int run =
m_session.nominalSchema().existsTable(
"ACTIVE_MASTERS" ) ? 2 : 1;
119 if ( mySession )
m_session.transaction().commit();
132 unique_ptr< coral::IQuery > q(
m_session.nominalSchema().tableHandle(
"SUPER_MASTER_TABLE").newQuery() );
133 q->setRowCacheSize( 5 );
136 coral::AttributeList bindings;
137 bindings.extend<
int>(
"smtid");
138 bindings[0].data<
int>() = smk;
139 q->setCondition(
"SMT_ID = :smtid", bindings );
142 coral::AttributeList attList;
143 attList.extend<
int>(
"SMT_L1_MASTER_TABLE_ID" );
146 coral::ICursor& cursor = q->execute();
147 if ( ! cursor.next() ) {
148 msg() <<
"DBLoader: No such SuperMaster key exists " << smk << endl;
149 throw runtime_error(
"DBLoader: SuperMasterKey not available" );
152 const coral::AttributeList& row = cursor.currentRow();
153 Lvl1MasterKey = row[
"SMT_L1_MASTER_TABLE_ID"].data<
int>();
155 catch(
const std::exception& e ) {
157 msg() <<
"DBLoader: C++ exception: " << e.what() << std::endl;
175 unique_ptr< coral::IQuery > q(
m_session.nominalSchema().tableHandle(
"L1_MASTER_TABLE").newQuery() );
176 q->setRowCacheSize( 5 );
179 coral::AttributeList bindings;
180 bindings.extend<
int>(
"l1mtid");
181 bindings[0].data<
int>() = l1Master;
182 q->setCondition(
"L1MT_ID = :l1mtid" , bindings );
185 coral::AttributeList attList;
186 attList.extend<
int>(
"L1MT_TRIGGER_MENU_ID" );
187 q->defineOutput(attList);
188 q->addToOutputList(
"L1MT_TRIGGER_MENU_ID" );
190 coral::ICursor& cursor = q->execute();
191 if ( ! cursor.next() ) {
192 msg() <<
"DBLoader >> No such L1 Master key exists " << l1Master << std::endl;
193 throw std::runtime_error(
"DBLoader >> L1MasterKey not available" );
197 const coral::AttributeList& row = cursor.currentRow();
198 Lvl1MenuKey = row[
"L1MT_TRIGGER_MENU_ID"].data<
int>();
203 catch(
const std::exception& e ) {
204 msg() <<
"DBLoader >> Standard C++ exception: " << e.what() << std::endl;
bool loadL1MasterKey(int SuperMasterKey, int &Lvl1MasterKey)
get l1 master from super master
StorageMgr & m_storageMgr
reference to the storage manager
DBLoader(StorageMgr &sm, coral::ISessionProxy &session)
constructor
void commitSession()
commit session if not already done
bool m_sessionOwner
remember if the loader started the session in the first place
virtual void setLevel(MSGTC::Level lvl) override
access to output stream
coral::ISessionProxy & m_session
CORAL interface to database session.
unsigned int triggerDBSchemaVersion()
std::tuple< unsigned int, unsigned int > loadSchemaVersion() const
get DB schema version and run number
void startSession()
start session if not already active
bool loadL1MenuKey(int SuperMasterKey, int &Lvl1MenuKey)
get l1 menu id from super master
void setLevel(MSGTC::Level lvl)
Set message level of stream.
Database Storage Manager, controls the database session and the different loader classes for DB acces...
MsgStreamTC & msg() const
The standard message stream.
TrigConfMessaging(const std::string &name)
Constructor with parameters.
Forward iterator to traverse the main components of the trigger configuration.
void fillQuery(coral::IQuery *q, coral::AttributeList &attList)