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
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
0056 m_is_streaming = true;
0057 }
0058 else if (std::string{"{0,54,91,53}"} == sched_data)
0059 {
0060
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 }