BmnRoot
Loading...
Searching...
No Matches
UniRunPeriod.cxx
Go to the documentation of this file.
1// ----------------------------------------------------------------------
2// UniRunPeriod cxx file
3// Generated 05-11-2015
4// ----------------------------------------------------------------------
5
6#include "UniRunPeriod.h"
7
8#include "TSQLServer.h"
9#include "TSQLStatement.h"
10
11#include <iostream>
12using namespace std;
13
14/* GENERATED CLASS MEMBERS (SHOULD NOT BE CHANGED MANUALLY) */
15// ----- Constructor with database connection -----------------------
16UniRunPeriod::UniRunPeriod(UniConnection* db_connect, int period_number, TDatime start_datetime, TDatime* end_datetime)
17{
18 connectionDB = db_connect;
19
20 i_period_number = period_number;
21 ts_start_datetime = start_datetime;
22 ts_end_datetime = end_datetime;
23}
24
25// ----- Destructor -------------------------------------------------
27{
28 if (connectionDB)
29 delete connectionDB;
30 if (ts_end_datetime)
31 delete ts_end_datetime;
32}
33
34// ----- Creating new run period in the database ---------------------------
35UniRunPeriod* UniRunPeriod::CreateRunPeriod(int period_number, TDatime start_datetime, TDatime* end_datetime)
36{
38 if (connDb == nullptr)
39 return nullptr;
40
41 TSQLServer* db_server = connDb->GetSQLServer();
42
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);
46
47 stmt->NextIteration();
48 stmt->SetInt(0, period_number);
49 stmt->SetDatime(1, start_datetime);
50 if (end_datetime == nullptr)
51 stmt->SetNull(2);
52 else
53 stmt->SetDatime(2, *end_datetime);
54
55 // inserting new run period to the Database
56 if (!stmt->Process()) {
57 cout << "ERROR: inserting new run period to the Database has been failed" << endl;
58 delete stmt;
59 delete connDb;
60 return nullptr;
61 }
62
63 delete stmt;
64
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;
72 else
73 tmp_end_datetime = new TDatime(*end_datetime);
74
75 return new UniRunPeriod(connDb, tmp_period_number, tmp_start_datetime, tmp_end_datetime);
76}
77
78// ----- Get run period from the database ---------------------------
80{
82 if (connDb == nullptr)
83 return nullptr;
84
85 TSQLServer* db_server = connDb->GetSQLServer();
86
87 TString sql = TString::Format("select period_number, start_datetime, end_datetime "
88 "from run_period "
89 "where period_number = %d",
90 period_number);
91 TSQLStatement* stmt = db_server->Statement(sql);
92
93 // get run period from the database
94 if (!stmt->Process()) {
95 cout << "ERROR: getting run period from the database has been failed" << endl;
96
97 delete stmt;
98 delete connDb;
99 return nullptr;
100 }
101
102 // store result of statement in buffer
103 stmt->StoreResult();
104
105 // extract row
106 if (!stmt->NextResultRow()) {
107 cout << "ERROR: run period was not found in the database" << endl;
108
109 delete stmt;
110 delete connDb;
111 return nullptr;
112 }
113
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;
119 if (stmt->IsNull(2))
120 tmp_end_datetime = nullptr;
121 else
122 tmp_end_datetime = new TDatime(stmt->GetDatime(2));
123
124 delete stmt;
125
126 return new UniRunPeriod(connDb, tmp_period_number, tmp_start_datetime, tmp_end_datetime);
127}
128
129// ----- Check run period exists in the database ---------------------------
131{
133 if (connDb == nullptr)
134 return -1;
135
136 TSQLServer* db_server = connDb->GetSQLServer();
137
138 TString sql = TString::Format("select 1 "
139 "from run_period "
140 "where period_number = %d",
141 period_number);
142 TSQLStatement* stmt = db_server->Statement(sql);
143
144 // get run period from the database
145 if (!stmt->Process()) {
146 cout << "ERROR: getting run period from the database has been failed" << endl;
147
148 delete stmt;
149 delete connDb;
150 return -2;
151 }
152
153 // store result of statement in buffer
154 stmt->StoreResult();
155
156 // extract row
157 if (!stmt->NextResultRow()) {
158 delete stmt;
159 delete connDb;
160 return 0;
161 }
162
163 delete stmt;
164 delete connDb;
165
166 return 1;
167}
168
169// ----- Delete run period from the database ---------------------------
170int UniRunPeriod::DeleteRunPeriod(int period_number)
171{
173 if (connDb == nullptr)
174 return -1;
175
176 TSQLServer* db_server = connDb->GetSQLServer();
177
178 TString sql = TString::Format("delete from run_period "
179 "where period_number = $1");
180 TSQLStatement* stmt = db_server->Statement(sql);
181
182 stmt->NextIteration();
183 stmt->SetInt(0, period_number);
184
185 // delete run period from the dataBase
186 if (!stmt->Process()) {
187 cout << "ERROR: deleting run period from the dataBase has been failed" << endl;
188
189 delete stmt;
190 delete connDb;
191 return -2;
192 }
193
194 delete stmt;
195 delete connDb;
196 return 0;
197}
198
199// ----- Print all 'run periods' ---------------------------------
201{
203 if (connDb == nullptr)
204 return -1;
205
206 TSQLServer* db_server = connDb->GetSQLServer();
207
208 TString sql = TString::Format("select period_number, start_datetime, end_datetime "
209 "from run_period");
210 TSQLStatement* stmt = db_server->Statement(sql);
211
212 // get all 'run periods' from the database
213 if (!stmt->Process()) {
214 cout << "ERROR: getting all 'run periods' from the dataBase has been failed" << endl;
215
216 delete stmt;
217 delete connDb;
218 return -2;
219 }
220
221 // store result of statement in buffer
222 stmt->StoreResult();
223
224 // print rows
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: ";
232 if (stmt->IsNull(2))
233 cout << "nullptr";
234 else
235 cout << stmt->GetDatime(2).AsSQLString();
236 cout << "." << endl;
237 }
238
239 delete stmt;
240 delete connDb;
241
242 return 0;
243}
244
245// Setters functions
246int UniRunPeriod::SetPeriodNumber(int period_number)
247{
248 if (!connectionDB) {
249 cout << "CRITICAL ERROR: Connection object is null" << endl;
250 return -1;
251 }
252
253 TSQLServer* db_server = connectionDB->GetSQLServer();
254
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);
259
260 stmt->NextIteration();
261 stmt->SetInt(0, period_number);
262 stmt->SetInt(1, i_period_number);
263
264 // write new value to the database
265 if (!stmt->Process()) {
266 cout << "ERROR: updating information about run period has been failed" << endl;
267
268 delete stmt;
269 return -2;
270 }
271
272 i_period_number = period_number;
273
274 delete stmt;
275 return 0;
276}
277
278int UniRunPeriod::SetStartDatetime(TDatime start_datetime)
279{
280 if (!connectionDB) {
281 cout << "CRITICAL ERROR: Connection object is null" << endl;
282 return -1;
283 }
284
285 TSQLServer* db_server = connectionDB->GetSQLServer();
286
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);
291
292 stmt->NextIteration();
293 stmt->SetDatime(0, start_datetime);
294 stmt->SetInt(1, i_period_number);
295
296 // write new value to the database
297 if (!stmt->Process()) {
298 cout << "ERROR: updating information about run period has been failed" << endl;
299
300 delete stmt;
301 return -2;
302 }
303
304 ts_start_datetime = start_datetime;
305
306 delete stmt;
307 return 0;
308}
309
310int UniRunPeriod::SetEndDatetime(TDatime* end_datetime)
311{
312 if (!connectionDB) {
313 cout << "CRITICAL ERROR: Connection object is null" << endl;
314 return -1;
315 }
316
317 TSQLServer* db_server = connectionDB->GetSQLServer();
318
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);
323
324 stmt->NextIteration();
325 if (end_datetime == nullptr)
326 stmt->SetNull(0);
327 else
328 stmt->SetDatime(0, *end_datetime);
329 stmt->SetInt(1, i_period_number);
330
331 // write new value to the database
332 if (!stmt->Process()) {
333 cout << "ERROR: updating information about run period has been failed" << endl;
334
335 delete stmt;
336 return -2;
337 }
338
339 if (ts_end_datetime)
340 delete ts_end_datetime;
341 if (end_datetime == nullptr)
342 ts_end_datetime = nullptr;
343 else
344 ts_end_datetime = new TDatime(*end_datetime);
345
346 delete stmt;
347 return 0;
348}
349
350// ----- Print current run period ---------------------------------------
352{
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;
356
357 return;
358}
359/* END OF GENERATED CLASS PART (SHOULD NOT BE CHANGED MANUALLY) */
360
361// get numbers of runs existing in the Database for a selected period
362int UniRunPeriod::GetRunNumbers(UniqueRunNumber*& run_numbers, int period_number)
363{
365 if (connDb == nullptr) {
366 cout << "ERROR: connection to the database was failed" << endl;
367 return -1;
368 }
369
370 TSQLServer* db_server = connDb->GetSQLServer();
371
372 TString sql = TString::Format("select run_number "
373 "from run_ "
374 "where period_number = %d "
375 "order by run_number",
376 period_number);
377 TSQLStatement* stmt = db_server->Statement(sql);
378
379 // get table record from DB
380 if (!stmt->Process()) {
381 cout << "ERROR: getting run numbers from the database failed" << endl;
382 delete stmt;
383 delete connDb;
384 return -2;
385 }
386
387 // store result of statement in buffer
388 stmt->StoreResult();
389
390 vector<int> vecRuns;
391 while (stmt->NextResultRow())
392 vecRuns.push_back(stmt->GetInt(0));
393
394 delete stmt;
395 delete connDb;
396
397 int run_count = vecRuns.size();
398 run_numbers = new UniqueRunNumber[run_count];
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];
402 }
403
404 return run_count;
405}
406
407// get first run number for a selected period
409{
411 if (connDb == nullptr) {
412 cout << "ERROR: connection to the database was failed" << endl;
413 return -1;
414 }
415
416 TSQLServer* db_server = connDb->GetSQLServer();
417
418 TString sql = TString::Format("select min(run_number) "
419 "from run_ "
420 "where period_number = %d ",
421 period_number);
422 TSQLStatement* stmt = db_server->Statement(sql);
423
424 // get table record from DB
425 if (!stmt->Process()) {
426 cout << "ERROR: getting run numbers from the database failed" << endl;
427 delete stmt;
428 delete connDb;
429 return -2;
430 }
431
432 // store result of statement in buffer
433 stmt->StoreResult();
434
435 int min_number = -3; // -3: no runs in the period
436 if (stmt->NextResultRow())
437 min_number = stmt->GetInt(0);
438
439 delete stmt;
440 delete connDb;
441
442 return min_number;
443}
444
445// get last run number for a selected period
446int UniRunPeriod::GetLastRunNumber(int period_number)
447{
449 if (connDb == nullptr) {
450 cout << "ERROR: connection to the database was failed" << endl;
451 return -1;
452 }
453
454 TSQLServer* db_server = connDb->GetSQLServer();
455
456 TString sql = TString::Format("select max(run_number) "
457 "from run_ "
458 "where period_number = %d ",
459 period_number);
460 TSQLStatement* stmt = db_server->Statement(sql);
461
462 // get table record from DB
463 if (!stmt->Process()) {
464 cout << "ERROR: getting run numbers from the database failed" << endl;
465 delete stmt;
466 delete connDb;
467 return -2;
468 }
469
470 // store result of statement in buffer
471 stmt->StoreResult();
472
473 int max_number = -3; // -3: no runs in the period
474 if (stmt->NextResultRow())
475 max_number = stmt->GetInt(0);
476
477 delete stmt;
478 delete connDb;
479
480 return max_number;
481}
482
483// get period number for specified datetime
484int UniRunPeriod::GetPeriodNumber(TDatime datetime)
485{
486 return GetPeriodNumber(datetime.AsSQLString());
487}
488
489// get period number for specified string containing datetime in SQL format ("DD-MM-YYYY hh:mm:ss")
490int UniRunPeriod::GetPeriodNumber(const char* pcdatetime)
491{
493 if (connDb == nullptr) {
494 cout << "ERROR: connection to the database was failed" << endl;
495 return -1;
496 }
497
498 TSQLServer* db_server = connDb->GetSQLServer();
499
500 TString sql = TString::Format("select period_number "
501 "from run_period "
502 "where '%s' <= end_datetime and '%s' >= start_datetime",
503 pcdatetime, pcdatetime);
504 TSQLStatement* stmt = db_server->Statement(sql);
505
506 // get table record from DB
507 if (!stmt->Process()) {
508 cout << "ERROR: getting period number for specified datetim from the database failed" << endl;
509 delete stmt;
510 delete connDb;
511 return -2;
512 }
513
514 // store result of statement in buffer
515 stmt->StoreResult();
516
517 if (!stmt->NextResultRow()) {
518 cout << "WARNING: any period for the given datetime was not found" << endl;
519 delete stmt;
520 delete connDb;
521 return 0;
522 }
523 int period_number = stmt->GetInt(0);
524
525 delete stmt;
526 delete connDb;
527
528 return period_number;
529}
int i
Definition P4_F32vec4.h:22
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
virtual ~UniRunPeriod()
static int GetRunNumbers(UniqueRunNumber *&run_numbers, int period_number)
static int PrintAll()
print all run periods
STL namespace.