9#include "TSQLStatement.h"
19 unsigned char* root_geometry,
20 Long_t size_root_geometry)
22 connectionDB = db_connect;
24 i_geometry_id = geometry_id;
25 blob_root_geometry = root_geometry;
26 sz_root_geometry = size_root_geometry;
34 if (blob_root_geometry)
35 delete[] blob_root_geometry;
42 if (connDb ==
nullptr)
47 TString sql = TString::Format(
"insert into run_geometry(root_geometry) "
49 TSQLStatement* stmt = db_server->Statement(sql);
51 stmt->NextIteration();
52 stmt->SetBinary(0, root_geometry, size_root_geometry, 0x4000000);
55 if (!stmt->Process()) {
56 cout <<
"ERROR: inserting new run geometry to the Database has been failed" << endl;
66 TSQLStatement* stmt_last =
67 db_server->Statement(
"SELECT currval(pg_get_serial_sequence('run_geometry','geometry_id'))");
70 if (stmt_last->Process()) {
72 stmt_last->StoreResult();
75 if (!stmt_last->NextResultRow()) {
76 cout <<
"ERROR: no last ID in DB!" << endl;
80 geometry_id = stmt_last->GetInt(0);
84 cout <<
"ERROR: getting last ID has been failed!" << endl;
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);
96 return new UniRunGeometry(connDb, tmp_geometry_id, tmp_root_geometry, tmp_sz_root_geometry);
103 if (connDb ==
nullptr)
108 TString sql = TString::Format(
"select geometry_id, root_geometry "
110 "where geometry_id = %d",
112 TSQLStatement* stmt = db_server->Statement(sql);
115 if (!stmt->Process()) {
116 cout <<
"ERROR: getting run geometry from the database has been failed" << endl;
127 if (!stmt->NextResultRow()) {
128 cout <<
"ERROR: run geometry was not found in the database" << endl;
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);
144 return new UniRunGeometry(connDb, tmp_geometry_id, tmp_root_geometry, tmp_sz_root_geometry);
151 if (connDb ==
nullptr)
156 TString sql = TString::Format(
"select 1 "
158 "where geometry_id = %d",
160 TSQLStatement* stmt = db_server->Statement(sql);
163 if (!stmt->Process()) {
164 cout <<
"ERROR: getting run geometry from the database has been failed" << endl;
175 if (!stmt->NextResultRow()) {
191 if (connDb ==
nullptr)
196 TString sql = TString::Format(
"delete from run_geometry "
197 "where geometry_id = $1");
198 TSQLStatement* stmt = db_server->Statement(sql);
200 stmt->NextIteration();
201 stmt->SetInt(0, geometry_id);
204 if (!stmt->Process()) {
205 cout <<
"ERROR: deleting run geometry from the dataBase has been failed" << endl;
221 if (connDb ==
nullptr)
226 TString sql = TString::Format(
"select geometry_id, root_geometry "
227 "from run_geometry");
228 TSQLStatement* stmt = db_server->Statement(sql);
231 if (!stmt->Process()) {
232 cout <<
"ERROR: getting all 'run geometrys' from the dataBase has been failed" << endl;
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;
265 cout <<
"CRITICAL ERROR: Connection object is null" << endl;
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);
276 stmt->NextIteration();
277 stmt->SetBinary(0, root_geometry, size_root_geometry, 0x4000000);
278 stmt->SetInt(1, i_geometry_id);
281 if (!stmt->Process()) {
282 cout <<
"ERROR: updating information about run geometry has been failed" << endl;
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);
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;
311 unsigned char* root_geometry,
312 Long_t size_root_geometry)
315 if (connDb ==
nullptr)
320 TString sql = TString::Format(
"insert into run_geometry(geometry_id, root_geometry) "
322 TSQLStatement* stmt = db_server->Statement(sql);
324 stmt->NextIteration();
325 stmt->SetInt(0, geometry_id);
326 stmt->SetBinary(1, root_geometry, size_root_geometry, 0x40000000);
329 if (!stmt->Process()) {
330 cout <<
"ERROR: inserting new run geometry to the Database has been failed" << endl;
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);
345 return new UniRunGeometry(connDb, tmp_geometry_id, tmp_root_geometry, tmp_sz_root_geometry);
351 TObjArray* arrayResult =
nullptr;
354 if (connDb ==
nullptr) {
355 cout <<
"ERROR: connection to the Unified Condition Database was failed" << endl;
361 TString sql = TString::Format(
"select geometry_id, root_geometry "
362 "from run_geometry");
363 TSQLStatement* stmt = db_server->Statement(sql);
366 if (!stmt->Process()) {
367 cout <<
"ERROR: getting all 'run geometries' from the dataBase has been failed" << endl;
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;
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);
393 (TObject*)
new UniRunGeometry(connRun, tmp_geometry_id, tmp_root_geometry, tmp_sz_root_geometry));
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