9#include "TSQLStatement.h"
16UniRunPeriod::UniRunPeriod(
UniConnection* db_connect,
int period_number, TDatime start_datetime, TDatime* end_datetime)
18 connectionDB = db_connect;
20 i_period_number = period_number;
21 ts_start_datetime = start_datetime;
22 ts_end_datetime = end_datetime;
31 delete ts_end_datetime;
38 if (connDb ==
nullptr)
43 TString sql = TString::Format(
"insert into run_period(period_number, start_datetime, end_datetime) "
44 "values ($1, $2, $3)");
45 TSQLStatement* stmt = db_server->Statement(sql);
47 stmt->NextIteration();
48 stmt->SetInt(0, period_number);
49 stmt->SetDatime(1, start_datetime);
50 if (end_datetime ==
nullptr)
53 stmt->SetDatime(2, *end_datetime);
56 if (!stmt->Process()) {
57 cout <<
"ERROR: inserting new run period to the Database has been failed" << endl;
65 int tmp_period_number;
66 tmp_period_number = period_number;
67 TDatime tmp_start_datetime;
68 tmp_start_datetime = start_datetime;
69 TDatime* tmp_end_datetime;
70 if (end_datetime ==
nullptr)
71 tmp_end_datetime =
nullptr;
73 tmp_end_datetime =
new TDatime(*end_datetime);
75 return new UniRunPeriod(connDb, tmp_period_number, tmp_start_datetime, tmp_end_datetime);
82 if (connDb ==
nullptr)
87 TString sql = TString::Format(
"select period_number, start_datetime, end_datetime "
89 "where period_number = %d",
91 TSQLStatement* stmt = db_server->Statement(sql);
94 if (!stmt->Process()) {
95 cout <<
"ERROR: getting run period from the database has been failed" << endl;
106 if (!stmt->NextResultRow()) {
107 cout <<
"ERROR: run period was not found in the database" << endl;
114 int tmp_period_number;
115 tmp_period_number = stmt->GetInt(0);
116 TDatime tmp_start_datetime;
117 tmp_start_datetime = stmt->GetDatime(1);
118 TDatime* tmp_end_datetime;
120 tmp_end_datetime =
nullptr;
122 tmp_end_datetime =
new TDatime(stmt->GetDatime(2));
126 return new UniRunPeriod(connDb, tmp_period_number, tmp_start_datetime, tmp_end_datetime);
133 if (connDb ==
nullptr)
138 TString sql = TString::Format(
"select 1 "
140 "where period_number = %d",
142 TSQLStatement* stmt = db_server->Statement(sql);
145 if (!stmt->Process()) {
146 cout <<
"ERROR: getting run period from the database has been failed" << endl;
157 if (!stmt->NextResultRow()) {
173 if (connDb ==
nullptr)
178 TString sql = TString::Format(
"delete from run_period "
179 "where period_number = $1");
180 TSQLStatement* stmt = db_server->Statement(sql);
182 stmt->NextIteration();
183 stmt->SetInt(0, period_number);
186 if (!stmt->Process()) {
187 cout <<
"ERROR: deleting run period from the dataBase has been failed" << endl;
203 if (connDb ==
nullptr)
208 TString sql = TString::Format(
"select period_number, start_datetime, end_datetime "
210 TSQLStatement* stmt = db_server->Statement(sql);
213 if (!stmt->Process()) {
214 cout <<
"ERROR: getting all 'run periods' from the dataBase has been failed" << endl;
225 cout <<
"Table 'run_period':" << endl;
226 while (stmt->NextResultRow()) {
227 cout <<
"period_number: ";
228 cout << (stmt->GetInt(0));
229 cout <<
", start_datetime: ";
230 cout << (stmt->GetDatime(1)).AsSQLString();
231 cout <<
", end_datetime: ";
235 cout << stmt->GetDatime(2).AsSQLString();
249 cout <<
"CRITICAL ERROR: Connection object is null" << endl;
255 TString sql = TString::Format(
"update run_period "
256 "set period_number = $1 "
257 "where period_number = $2");
258 TSQLStatement* stmt = db_server->Statement(sql);
260 stmt->NextIteration();
261 stmt->SetInt(0, period_number);
262 stmt->SetInt(1, i_period_number);
265 if (!stmt->Process()) {
266 cout <<
"ERROR: updating information about run period has been failed" << endl;
272 i_period_number = period_number;
281 cout <<
"CRITICAL ERROR: Connection object is null" << endl;
287 TString sql = TString::Format(
"update run_period "
288 "set start_datetime = $1 "
289 "where period_number = $2");
290 TSQLStatement* stmt = db_server->Statement(sql);
292 stmt->NextIteration();
293 stmt->SetDatime(0, start_datetime);
294 stmt->SetInt(1, i_period_number);
297 if (!stmt->Process()) {
298 cout <<
"ERROR: updating information about run period has been failed" << endl;
304 ts_start_datetime = start_datetime;
313 cout <<
"CRITICAL ERROR: Connection object is null" << endl;
319 TString sql = TString::Format(
"update run_period "
320 "set end_datetime = $1 "
321 "where period_number = $2");
322 TSQLStatement* stmt = db_server->Statement(sql);
324 stmt->NextIteration();
325 if (end_datetime ==
nullptr)
328 stmt->SetDatime(0, *end_datetime);
329 stmt->SetInt(1, i_period_number);
332 if (!stmt->Process()) {
333 cout <<
"ERROR: updating information about run period has been failed" << endl;
340 delete ts_end_datetime;
341 if (end_datetime ==
nullptr)
342 ts_end_datetime =
nullptr;
344 ts_end_datetime =
new TDatime(*end_datetime);
353 cout <<
"Table 'run_period'";
354 cout <<
". period_number: " << i_period_number <<
". start_datetime: " << ts_start_datetime.AsSQLString()
355 <<
". end_datetime: " << (ts_end_datetime ==
nullptr ?
"nullptr" : (*ts_end_datetime).AsSQLString()) << endl;
365 if (connDb ==
nullptr) {
366 cout <<
"ERROR: connection to the database was failed" << endl;
372 TString sql = TString::Format(
"select run_number "
374 "where period_number = %d "
375 "order by run_number",
377 TSQLStatement* stmt = db_server->Statement(sql);
380 if (!stmt->Process()) {
381 cout <<
"ERROR: getting run numbers from the database failed" << endl;
391 while (stmt->NextResultRow())
392 vecRuns.push_back(stmt->GetInt(0));
397 int run_count = vecRuns.size();
399 for (
int i = 0;
i < run_count;
i++) {
400 run_numbers[
i].period_number = period_number;
401 run_numbers[
i].run_number = vecRuns[
i];
411 if (connDb ==
nullptr) {
412 cout <<
"ERROR: connection to the database was failed" << endl;
418 TString sql = TString::Format(
"select min(run_number) "
420 "where period_number = %d ",
422 TSQLStatement* stmt = db_server->Statement(sql);
425 if (!stmt->Process()) {
426 cout <<
"ERROR: getting run numbers from the database failed" << endl;
436 if (stmt->NextResultRow())
437 min_number = stmt->GetInt(0);
449 if (connDb ==
nullptr) {
450 cout <<
"ERROR: connection to the database was failed" << endl;
456 TString sql = TString::Format(
"select max(run_number) "
458 "where period_number = %d ",
460 TSQLStatement* stmt = db_server->Statement(sql);
463 if (!stmt->Process()) {
464 cout <<
"ERROR: getting run numbers from the database failed" << endl;
474 if (stmt->NextResultRow())
475 max_number = stmt->GetInt(0);
493 if (connDb ==
nullptr) {
494 cout <<
"ERROR: connection to the database was failed" << endl;
500 TString sql = TString::Format(
"select period_number "
502 "where '%s' <= end_datetime and '%s' >= start_datetime",
503 pcdatetime, pcdatetime);
504 TSQLStatement* stmt = db_server->Statement(sql);
507 if (!stmt->Process()) {
508 cout <<
"ERROR: getting period number for specified datetim from the database failed" << endl;
517 if (!stmt->NextResultRow()) {
518 cout <<
"WARNING: any period for the given datetime was not found" << endl;
523 int period_number = stmt->GetInt(0);
528 return period_number;
static UniConnection * Open()
TSQLServer * GetSQLServer()
int GetPeriodNumber()
get period number of the current run period
void Print()
print information about current run period
static UniRunPeriod * GetRunPeriod(int period_number)
get run period from the database
int SetEndDatetime(TDatime *end_datetime)
set end datetime of the current run period
int SetPeriodNumber(int period_number)
set period number of the current run period
static int GetFirstRunNumber(int period_number)
static int CheckRunPeriodExists(int period_number)
check run period exists in the database: 1- true, 0 - false, <0 - database operation error
int SetStartDatetime(TDatime start_datetime)
set start datetime of the current run period
static int DeleteRunPeriod(int period_number)
delete run period from the database
static int GetLastRunNumber(int period_number)
static UniRunPeriod * CreateRunPeriod(int period_number, TDatime start_datetime, TDatime *end_datetime)
add new run period to the database
static int GetRunNumbers(UniqueRunNumber *&run_numbers, int period_number)
static int PrintAll()
print all run periods