BmnRoot
Loading...
Searching...
No Matches
UniRunGeometry.cxx
Go to the documentation of this file.
1// ----------------------------------------------------------------------
2// UniRunGeometry cxx file
3// Generated 05-11-2015
4// ----------------------------------------------------------------------
5
6#include "UniRunGeometry.h"
7
8#include "TSQLServer.h"
9#include "TSQLStatement.h"
10#include "TSystem.h"
11
12#include <iostream>
13using namespace std;
14
15/* GENERATED CLASS MEMBERS (SHOULD NOT BE CHANGED MANUALLY) */
16// ----- Constructor with database connection -----------------------
17UniRunGeometry::UniRunGeometry(UniConnection* db_connect,
18 int geometry_id,
19 unsigned char* root_geometry,
20 Long_t size_root_geometry)
21{
22 connectionDB = db_connect;
23
24 i_geometry_id = geometry_id;
25 blob_root_geometry = root_geometry;
26 sz_root_geometry = size_root_geometry;
27}
28
29// ----- Destructor -------------------------------------------------
31{
32 if (connectionDB)
33 delete connectionDB;
34 if (blob_root_geometry)
35 delete[] blob_root_geometry;
36}
37
38// ----- Creating new run geometry in the database ---------------------------
39UniRunGeometry* UniRunGeometry::CreateRunGeometry(unsigned char* root_geometry, Long_t size_root_geometry)
40{
42 if (connDb == nullptr)
43 return nullptr;
44
45 TSQLServer* db_server = connDb->GetSQLServer();
46
47 TString sql = TString::Format("insert into run_geometry(root_geometry) "
48 "values ($1)");
49 TSQLStatement* stmt = db_server->Statement(sql);
50
51 stmt->NextIteration();
52 stmt->SetBinary(0, root_geometry, size_root_geometry, 0x4000000);
53
54 // inserting new run geometry to the Database
55 if (!stmt->Process()) {
56 cout << "ERROR: inserting new run geometry to the Database has been failed" << endl;
57 delete stmt;
58 delete connDb;
59 return nullptr;
60 }
61
62 delete stmt;
63
64 // getting last inserted ID
65 int geometry_id;
66 TSQLStatement* stmt_last =
67 db_server->Statement("SELECT currval(pg_get_serial_sequence('run_geometry','geometry_id'))");
68
69 // process getting last id
70 if (stmt_last->Process()) {
71 // store result of statement in buffer
72 stmt_last->StoreResult();
73
74 // if there is no last id then exit with error
75 if (!stmt_last->NextResultRow()) {
76 cout << "ERROR: no last ID in DB!" << endl;
77 delete stmt_last;
78 return nullptr;
79 } else {
80 geometry_id = stmt_last->GetInt(0);
81 delete stmt_last;
82 }
83 } else {
84 cout << "ERROR: getting last ID has been failed!" << endl;
85 delete stmt_last;
86 return nullptr;
87 }
88
89 int tmp_geometry_id;
90 tmp_geometry_id = geometry_id;
91 unsigned char* tmp_root_geometry;
92 Long_t tmp_sz_root_geometry = size_root_geometry;
93 tmp_root_geometry = new unsigned char[tmp_sz_root_geometry];
94 memcpy(tmp_root_geometry, root_geometry, tmp_sz_root_geometry);
95
96 return new UniRunGeometry(connDb, tmp_geometry_id, tmp_root_geometry, tmp_sz_root_geometry);
97}
98
99// ----- Get run geometry from the database ---------------------------
101{
103 if (connDb == nullptr)
104 return nullptr;
105
106 TSQLServer* db_server = connDb->GetSQLServer();
107
108 TString sql = TString::Format("select geometry_id, root_geometry "
109 "from run_geometry "
110 "where geometry_id = %d",
111 geometry_id);
112 TSQLStatement* stmt = db_server->Statement(sql);
113
114 // get run geometry from the database
115 if (!stmt->Process()) {
116 cout << "ERROR: getting run geometry from the database has been failed" << endl;
117
118 delete stmt;
119 delete connDb;
120 return nullptr;
121 }
122
123 // store result of statement in buffer
124 stmt->StoreResult();
125
126 // extract row
127 if (!stmt->NextResultRow()) {
128 cout << "ERROR: run geometry was not found in the database" << endl;
129
130 delete stmt;
131 delete connDb;
132 return nullptr;
133 }
134
135 int tmp_geometry_id;
136 tmp_geometry_id = stmt->GetInt(0);
137 unsigned char* tmp_root_geometry;
138 tmp_root_geometry = nullptr;
139 Long_t tmp_sz_root_geometry = 0;
140 stmt->GetBinary(1, (void*&)tmp_root_geometry, tmp_sz_root_geometry);
141
142 delete stmt;
143
144 return new UniRunGeometry(connDb, tmp_geometry_id, tmp_root_geometry, tmp_sz_root_geometry);
145}
146
147// ----- Check run geometry exists in the database ---------------------------
149{
151 if (connDb == nullptr)
152 return -1;
153
154 TSQLServer* db_server = connDb->GetSQLServer();
155
156 TString sql = TString::Format("select 1 "
157 "from run_geometry "
158 "where geometry_id = %d",
159 geometry_id);
160 TSQLStatement* stmt = db_server->Statement(sql);
161
162 // get run geometry from the database
163 if (!stmt->Process()) {
164 cout << "ERROR: getting run geometry from the database has been failed" << endl;
165
166 delete stmt;
167 delete connDb;
168 return -2;
169 }
170
171 // store result of statement in buffer
172 stmt->StoreResult();
173
174 // extract row
175 if (!stmt->NextResultRow()) {
176 delete stmt;
177 delete connDb;
178 return 0;
179 }
180
181 delete stmt;
182 delete connDb;
183
184 return 1;
185}
186
187// ----- Delete run geometry from the database ---------------------------
189{
191 if (connDb == nullptr)
192 return -1;
193
194 TSQLServer* db_server = connDb->GetSQLServer();
195
196 TString sql = TString::Format("delete from run_geometry "
197 "where geometry_id = $1");
198 TSQLStatement* stmt = db_server->Statement(sql);
199
200 stmt->NextIteration();
201 stmt->SetInt(0, geometry_id);
202
203 // delete run geometry from the dataBase
204 if (!stmt->Process()) {
205 cout << "ERROR: deleting run geometry from the dataBase has been failed" << endl;
206
207 delete stmt;
208 delete connDb;
209 return -2;
210 }
211
212 delete stmt;
213 delete connDb;
214 return 0;
215}
216
217// ----- Print all 'run geometrys' ---------------------------------
219{
221 if (connDb == nullptr)
222 return -1;
223
224 TSQLServer* db_server = connDb->GetSQLServer();
225
226 TString sql = TString::Format("select geometry_id, root_geometry "
227 "from run_geometry");
228 TSQLStatement* stmt = db_server->Statement(sql);
229
230 // get all 'run geometrys' from the database
231 if (!stmt->Process()) {
232 cout << "ERROR: getting all 'run geometrys' from the dataBase has been failed" << endl;
233
234 delete stmt;
235 delete connDb;
236 return -2;
237 }
238
239 // store result of statement in buffer
240 stmt->StoreResult();
241
242 // print rows
243 cout << "Table 'run_geometry':" << endl;
244 while (stmt->NextResultRow()) {
245 cout << "geometry_id: ";
246 cout << (stmt->GetInt(0));
247 cout << ", root_geometry: ";
248 unsigned char* tmp_root_geometry = nullptr;
249 Long_t tmp_sz_root_geometry = 0;
250 stmt->GetBinary(1, (void*&)tmp_root_geometry, tmp_sz_root_geometry);
251 cout << (void*)tmp_root_geometry << ", binary size: " << tmp_sz_root_geometry;
252 cout << "." << endl;
253 }
254
255 delete stmt;
256 delete connDb;
257
258 return 0;
259}
260
261// Setters functions
262int UniRunGeometry::SetRootGeometry(unsigned char* root_geometry, Long_t size_root_geometry)
263{
264 if (!connectionDB) {
265 cout << "CRITICAL ERROR: Connection object is null" << endl;
266 return -1;
267 }
268
269 TSQLServer* db_server = connectionDB->GetSQLServer();
270
271 TString sql = TString::Format("update run_geometry "
272 "set root_geometry = $1 "
273 "where geometry_id = $2");
274 TSQLStatement* stmt = db_server->Statement(sql);
275
276 stmt->NextIteration();
277 stmt->SetBinary(0, root_geometry, size_root_geometry, 0x4000000);
278 stmt->SetInt(1, i_geometry_id);
279
280 // write new value to the database
281 if (!stmt->Process()) {
282 cout << "ERROR: updating information about run geometry has been failed" << endl;
283
284 delete stmt;
285 return -2;
286 }
287
288 if (blob_root_geometry)
289 delete[] blob_root_geometry;
290 sz_root_geometry = size_root_geometry;
291 blob_root_geometry = new unsigned char[sz_root_geometry];
292 memcpy(blob_root_geometry, root_geometry, sz_root_geometry);
293
294 delete stmt;
295 return 0;
296}
297
298// ----- Print current run geometry ---------------------------------------
300{
301 cout << "Table 'run_geometry'";
302 cout << ". geometry_id: " << i_geometry_id << ". root_geometry: " << (void*)blob_root_geometry
303 << ", binary size: " << sz_root_geometry << endl;
304
305 return;
306}
307/* END OF GENERATED CLASS PART (SHOULD NOT BE CHANGED MANUALLY) */
308
309// ----- Creating new run geometry in the database ---------------------------
311 unsigned char* root_geometry,
312 Long_t size_root_geometry)
313{
315 if (connDb == nullptr)
316 return nullptr;
317
318 TSQLServer* db_server = connDb->GetSQLServer();
319
320 TString sql = TString::Format("insert into run_geometry(geometry_id, root_geometry) "
321 "values ($1,$2)");
322 TSQLStatement* stmt = db_server->Statement(sql);
323
324 stmt->NextIteration();
325 stmt->SetInt(0, geometry_id);
326 stmt->SetBinary(1, root_geometry, size_root_geometry, 0x40000000);
327
328 // inserting new run geometry to the Database
329 if (!stmt->Process()) {
330 cout << "ERROR: inserting new run geometry to the Database has been failed" << endl;
331 delete stmt;
332 delete connDb;
333 return nullptr;
334 }
335
336 delete stmt;
337
338 int tmp_geometry_id;
339 tmp_geometry_id = geometry_id;
340 unsigned char* tmp_root_geometry;
341 Long_t tmp_sz_root_geometry = size_root_geometry;
342 tmp_root_geometry = new unsigned char[tmp_sz_root_geometry];
343 memcpy(tmp_root_geometry, root_geometry, tmp_sz_root_geometry);
344
345 return new UniRunGeometry(connDb, tmp_geometry_id, tmp_root_geometry, tmp_sz_root_geometry);
346}
347
348// ----- Get all 'run geometries' -----------------------------------
350{
351 TObjArray* arrayResult = nullptr;
352
354 if (connDb == nullptr) {
355 cout << "ERROR: connection to the Unified Condition Database was failed" << endl;
356 return arrayResult;
357 }
358
359 TSQLServer* db_server = connDb->GetSQLServer();
360
361 TString sql = TString::Format("select geometry_id, root_geometry "
362 "from run_geometry");
363 TSQLStatement* stmt = db_server->Statement(sql);
364
365 // get all 'run geometries' from the database
366 if (!stmt->Process()) {
367 cout << "ERROR: getting all 'run geometries' from the dataBase has been failed" << endl;
368 delete stmt;
369 delete connDb;
370
371 return arrayResult;
372 }
373
374 // store result of statement in buffer
375 stmt->StoreResult();
376
377 // extract rows one after another
378 arrayResult = new TObjArray();
379 arrayResult->SetOwner(kTRUE);
380 while (stmt->NextResultRow()) {
382 if (connRun == nullptr) {
383 cout << "ERROR: the connection to the Unified Condition Database for the selected run was failed" << endl;
384 return arrayResult;
385 }
386
387 int tmp_geometry_id = stmt->GetInt(0);
388 unsigned char* tmp_root_geometry = nullptr;
389 Long_t tmp_sz_root_geometry = 0;
390 stmt->GetBinary(1, (void*&)tmp_root_geometry, tmp_sz_root_geometry);
391
392 arrayResult->Add(
393 (TObject*)new UniRunGeometry(connRun, tmp_geometry_id, tmp_root_geometry, tmp_sz_root_geometry));
394 }
395
396 delete stmt;
397
398 return arrayResult;
399}
static UniConnection * Open()
TSQLServer * GetSQLServer()
virtual ~UniRunGeometry()
int SetRootGeometry(unsigned char *root_geometry, Long_t size_root_geometry)
set root geometry of the current run geometry
static UniRunGeometry * CreateRunGeometry(unsigned char *root_geometry, Long_t size_root_geometry)
add new run geometry to the database
static TObjArray * GetAll()
get all run geometries
static int PrintAll()
print all run geometrys
static int CheckRunGeometryExists(int geometry_id)
check run geometry exists in the database: 1- true, 0 - false, <0 - database operation error
static UniRunGeometry * GetRunGeometry(int geometry_id)
get run geometry from the database
static int DeleteRunGeometry(int geometry_id)
delete run geometry from the database
void Print()
print information about current run geometry
STL namespace.