Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-12-17 09:20:07

0001 #include "InttOdbcQuery.h"
0002 
0003 #include <fun4all/DBInterface.h>
0004 
0005 #include <phool/phool.h>
0006 
0007 #include <odbc++/resultset.h>
0008 #include <odbc++/statement.h>
0009 
0010 #include <filesystem>
0011 #include <iostream>
0012 #include <memory>
0013 #include <sstream>
0014 
0015 int InttOdbcQuery::Query(int runnumber)
0016 {
0017   m_query_successful = false;
0018 
0019 // statement will be deleted by DBInterface
0020   odbc::Statement* statement = DBInterface::instance()->getStatement("daq");
0021 
0022   int iret = 0;
0023   iret += (QueryStreaming(statement, runnumber) != 0);
0024   //...
0025 
0026   m_query_successful = (iret == 0);
0027 
0028   return iret;
0029 }
0030 
0031 int InttOdbcQuery::QueryStreaming(odbc::Statement *statement, int runnumber)
0032 {
0033   std::unique_ptr<odbc::ResultSet> result_set;
0034 
0035   std::string sched_data;
0036   try
0037   {
0038     std::string sql = "SELECT sched_data FROM gtm_scheduler WHERE vgtm=1 AND sched_entry = 1 AND runnumber = " + std::to_string(runnumber) + ";";
0039     result_set = std::unique_ptr<odbc::ResultSet>(statement->executeQuery(sql));
0040     if (result_set && result_set->next())
0041     {
0042       sched_data = result_set->getString("sched_data");
0043     }
0044   }
0045   catch (odbc::SQLException& e)
0046   {
0047     std::cerr << PHWHERE << "\n"
0048               << "\tSQL Exception:\n"
0049               << "\t" << e.getMessage() << std::endl;
0050     return 1;
0051   }
0052 
0053   if (std::string{"{17,55,24,54}"} == sched_data)
0054   {
0055     /// Streaming
0056     m_is_streaming = true;
0057   }
0058   else if (std::string{"{0,54,91,53}"} == sched_data)
0059   {
0060     /// Triggered
0061     m_is_streaming = false;
0062   }
0063   else
0064   {
0065     std::cerr << PHWHERE << "\n"
0066               << "\tUnexpected value for sched_data: '" << sched_data << "'" << std::endl;
0067     return 1;
0068   }
0069 
0070   if (m_verbosity)
0071   {
0072     std::cout << "\tsched_data: '" << sched_data << "'" << std::endl;
0073   }
0074 
0075   return 0;
0076 }
0077 
0078 int InttOdbcQuery::QueryType(odbc::Statement *statement, int runnumber)
0079 {
0080   std::unique_ptr<odbc::ResultSet> result_set;
0081   m_type = "";
0082 
0083   try
0084   {
0085     std::string sql = "SELECT runtype FROM run WHERE runnumber = " + std::to_string(runnumber) + ";";
0086     result_set = std::unique_ptr<odbc::ResultSet>(statement->executeQuery(sql));
0087     if (result_set && result_set->next())
0088     {
0089       m_type = result_set->getString("runtype");
0090     }
0091   }
0092   catch (odbc::SQLException& e)
0093   {
0094     std::cerr << PHWHERE << "\n"
0095               << "\tSQL Exception:\n"
0096               << "\t" << e.getMessage() << std::endl;
0097     return 1;
0098   }
0099 
0100   if (m_verbosity)
0101   {
0102     std::cout << "\trun type: " << m_type << std::endl;
0103   }
0104 
0105   return 0;
0106 }