| 17 | #include <GLTables.h> | #include <GLTables.h> | 
| 18 | #include <sgp4.h> | #include <sgp4.h> | 
| 19 | // | // | 
| 20 |  | ClassImp(GL_TABLES); | 
| 21 | ClassImp(GL_TRK_CALIB); | ClassImp(GL_TRK_CALIB); | 
| 22 | ClassImp(GL_RUN); | ClassImp(GL_RUN); | 
| 23 | ClassImp(GL_ROOT); | ClassImp(GL_ROOT); | 
| 29 | // | // | 
| 30 | using namespace std; | using namespace std; | 
| 31 |  |  | 
| 32 |  | GL_TABLES::GL_TABLES(){ | 
| 33 |  | }; | 
| 34 |  |  | 
| 35 |  | GL_TABLES::GL_TABLES(TString host, TString user, TString psw){ | 
| 36 |  | fHost = new TString(host.Data()); | 
| 37 |  | fUser = new TString(user.Data()); | 
| 38 |  | fPsw = new TString(psw.Data()); | 
| 39 |  | fSet = true; | 
| 40 |  | fNquery = 0; | 
| 41 |  | }; | 
| 42 |  |  | 
| 43 |  |  | 
| 44 |  | void GL_TABLES::Set(TString host, TString user, TString psw){ | 
| 45 |  | fHost = new TString(host.Data()); | 
| 46 |  | fUser = new TString(user.Data()); | 
| 47 |  | fPsw = new TString(psw.Data()); | 
| 48 |  | fSet = true; | 
| 49 |  | fNquery = 0; | 
| 50 |  | }; | 
| 51 |  |  | 
| 52 |  | Bool_t GL_TABLES::IsConnected(TSQLServer *dbc){ | 
| 53 |  | // | 
| 54 |  | // | 
| 55 |  | // | 
| 56 |  | if ( !fSet ){ | 
| 57 |  | return true; | 
| 58 |  | }; | 
| 59 |  | // | 
| 60 |  | // | 
| 61 |  | // | 
| 62 |  | //  printf(" host is %s \n",fHost->Data()); | 
| 63 |  | // | 
| 64 |  | stringstream myquery; | 
| 65 |  | myquery.str(""); | 
| 66 |  | myquery << "show databases;"; | 
| 67 |  | dbc->Query(myquery.str().c_str()); | 
| 68 |  | fNquery++; | 
| 69 |  | // | 
| 70 |  | if ( dbc->GetErrorCode() != 2013 && dbc->GetErrorCode() != 2006 ){ | 
| 71 |  | // is connected | 
| 72 |  | return true; | 
| 73 |  | } else { | 
| 74 |  | // | 
| 75 |  | printf(" WARNING: Lost connection to DB! try to recover... \n"); | 
| 76 |  | // | 
| 77 |  | TString host = fHost->Data(); | 
| 78 |  | TString user = fUser->Data(); | 
| 79 |  | TString psw = fPsw->Data(); | 
| 80 |  | delete dbc; | 
| 81 |  | dbc = TSQLServer::Connect(host.Data(),user.Data(),psw.Data()); | 
| 82 |  | // | 
| 83 |  | myquery.str(""); | 
| 84 |  | myquery << "show databases;"; | 
| 85 |  | dbc->Query(myquery.str().c_str()); | 
| 86 |  | fNquery++; | 
| 87 |  | // | 
| 88 |  | if ( dbc->GetErrorCode() != 2013 && dbc->GetErrorCode() != 2006 ){ | 
| 89 |  | // | 
| 90 |  | printf(" ...connection recovered, I can continue! \n"); | 
| 91 |  | // | 
| 92 |  | myquery.str(""); | 
| 93 |  | myquery << "SET time_zone='+0:00'"; | 
| 94 |  | dbc->Query(myquery.str().c_str()); | 
| 95 |  | fNquery++; | 
| 96 |  | myquery.str(""); | 
| 97 |  | myquery << "SET wait_timeout=173000;"; | 
| 98 |  | dbc->Query(myquery.str().c_str()); | 
| 99 |  | fNquery++; | 
| 100 |  | return true; | 
| 101 |  | }; | 
| 102 |  | }; | 
| 103 |  | // | 
| 104 |  | printf(" GLTABLES: connection is gone away, query will fail\n"); | 
| 105 |  | // | 
| 106 |  | return false; | 
| 107 |  | // | 
| 108 |  | }; | 
| 109 |  |  | 
| 110 |  | void GL_TABLES::ResetCounters(){ | 
| 111 |  | fNquery = 0; | 
| 112 |  | }; | 
| 113 |  |  | 
| 114 |  | void GL_TABLES::AddQ(){ | 
| 115 |  | if ( fSet ) fNquery++; | 
| 116 |  | }; | 
| 117 |  |  | 
| 118 |  | UInt_t GL_TABLES::GetNqueries(){ | 
| 119 |  | UInt_t rn = 0; | 
| 120 |  | rn += (UInt_t&)fNquery; | 
| 121 |  | return(rn); | 
| 122 |  | }; | 
| 123 |  |  | 
| 124 | GL_RUN::GL_RUN() { | GL_RUN::GL_RUN() { | 
| 125 | ID                         = 0; | ID                         = 0; | 
| 126 | ID_RUN_FRAG                = 0; | ID_RUN_FRAG                = 0; | 
| 254 | TYPE     = 0; | TYPE     = 0; | 
| 255 | } | } | 
| 256 |  |  | 
|  | GL_TLE::GL_TLE(){ |  | 
|  | } |  | 
|  |  |  | 
| 257 | // **************************************************** | // **************************************************** | 
| 258 |  |  | 
| 259 | void GL_RUN::SetEV_FROM(UInt_t evfrom){ | void GL_RUN::SetEV_FROM(UInt_t evfrom){ | 
| 518 | // | // | 
| 519 | //  printf("1myquery is %s \n",myquery.str().c_str()); | //  printf("1myquery is %s \n",myquery.str().c_str()); | 
| 520 | // | // | 
| 521 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 522 |  | this->GetGLTABLES()->AddQ(); | 
| 523 | dbc->Query(myquery.str().c_str()); | dbc->Query(myquery.str().c_str()); | 
| 524 | // | // | 
| 525 | // retrieve this ID_TRASH | // retrieve this ID_TRASH | 
| 526 | // | // | 
| 527 | myquery.str(""); | myquery.str(""); | 
| 528 | myquery << " SELECT ID_TRASH,ID_ROOT_L0,ID_ROOT_L2 FROM GL_RUN_TRASH ORDER BY ID_TRASH DESC LIMIT 1"; | myquery << " SELECT ID_TRASH,ID_ROOT_L0,ID_ROOT_L2 FROM GL_RUN_TRASH ORDER BY ID_TRASH DESC LIMIT 1"; | 
| 529 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 530 |  | this->GetGLTABLES()->AddQ(); | 
| 531 | pResult = dbc->Query(myquery.str().c_str()); | pResult = dbc->Query(myquery.str().c_str()); | 
| 532 | // | // | 
| 533 | UInt_t idtrash = 0; | UInt_t idtrash = 0; | 
| 549 | // | // | 
| 550 | //  printf("2myquery is %s \n",myquery.str().c_str()); | //  printf("2myquery is %s \n",myquery.str().c_str()); | 
| 551 | // | // | 
| 552 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 553 |  | this->GetGLTABLES()->AddQ(); | 
| 554 | pResult = dbc->Query(myquery.str().c_str()); | pResult = dbc->Query(myquery.str().c_str()); | 
| 555 | // | // | 
| 556 | Row = pResult->Next(); | Row = pResult->Next(); | 
| 566 | // | // | 
| 567 | //  printf("3myquery is %s \n",myquery.str().c_str()); | //  printf("3myquery is %s \n",myquery.str().c_str()); | 
| 568 | // | // | 
| 569 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 570 |  | this->GetGLTABLES()->AddQ(); | 
| 571 | pResult = dbc->Query(myquery.str().c_str()); | pResult = dbc->Query(myquery.str().c_str()); | 
| 572 | // | // | 
| 573 | Row = pResult->Next(); | Row = pResult->Next(); | 
| 584 | // | // | 
| 585 | //  printf("4myquery is %s \n",myquery.str().c_str()); | //  printf("4myquery is %s \n",myquery.str().c_str()); | 
| 586 | // | // | 
| 587 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 588 |  | this->GetGLTABLES()->AddQ(); | 
| 589 | dbc->Query(myquery.str().c_str()); | dbc->Query(myquery.str().c_str()); | 
| 590 | // | // | 
| 591 | myquery.str(""); | myquery.str(""); | 
| 595 | // | // | 
| 596 | //  printf("4myquery is %s \n",myquery.str().c_str()); | //  printf("4myquery is %s \n",myquery.str().c_str()); | 
| 597 | // | // | 
| 598 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 599 |  | this->GetGLTABLES()->AddQ(); | 
| 600 | dbc->Query(myquery.str().c_str()); | dbc->Query(myquery.str().c_str()); | 
| 601 | // | // | 
| 602 | myquery.str(""); | myquery.str(""); | 
| 607 | //  printf("4myquery is %s \n",myquery.str().c_str()); | //  printf("4myquery is %s \n",myquery.str().c_str()); | 
| 608 | // | // | 
| 609 | // | // | 
| 610 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 611 |  | this->GetGLTABLES()->AddQ(); | 
| 612 | dbc->Query(myquery.str().c_str()); | dbc->Query(myquery.str().c_str()); | 
| 613 | // | // | 
| 614 | myquery.str(""); | myquery.str(""); | 
| 619 | //  printf("5myquery is %s \n",myquery.str().c_str()); | //  printf("5myquery is %s \n",myquery.str().c_str()); | 
| 620 | // | // | 
| 621 | // | // | 
| 622 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 623 |  | this->GetGLTABLES()->AddQ(); | 
| 624 | dbc->Query(myquery.str().c_str()); | dbc->Query(myquery.str().c_str()); | 
| 625 | // | // | 
| 626 | return 0; | return 0; | 
| 652 | // | // | 
| 653 | printf(" qui? myquery is %s \n",myquery.str().c_str()); | printf(" qui? myquery is %s \n",myquery.str().c_str()); | 
| 654 | // | // | 
| 655 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 656 |  | this->GetGLTABLES()->AddQ(); | 
| 657 | pResult = dbc->Query(myquery.str().c_str()); | pResult = dbc->Query(myquery.str().c_str()); | 
| 658 | // | // | 
| 659 | Row = pResult->Next(); | Row = pResult->Next(); | 
| 737 | // | // | 
| 738 | //  printf("5myquery is %s \n",myquery.str().c_str()); | //  printf("5myquery is %s \n",myquery.str().c_str()); | 
| 739 | // | // | 
| 740 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 741 |  | this->GetGLTABLES()->AddQ(); | 
| 742 | dbc->Query(myquery.str().c_str()); | dbc->Query(myquery.str().c_str()); | 
| 743 | // | // | 
| 744 | // | // | 
| 746 | myquery << " DELETE FROM GL_RUN_TRASH where BELONGED_TO='GL_RUN_FRAGMENTS' AND ID="; | myquery << " DELETE FROM GL_RUN_TRASH where BELONGED_TO='GL_RUN_FRAGMENTS' AND ID="; | 
| 747 | myquery << IDRUN << ";"; | myquery << IDRUN << ";"; | 
| 748 | // | // | 
| 749 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 750 |  | this->GetGLTABLES()->AddQ(); | 
| 751 | dbc->Query(myquery.str().c_str()); | dbc->Query(myquery.str().c_str()); | 
| 752 | // | // | 
| 753 | return 0; | return 0; | 
| 830 | // | // | 
| 831 | //  printf("myquery is %s \n",myquery.str().c_str()); | //  printf("myquery is %s \n",myquery.str().c_str()); | 
| 832 | // | // | 
| 833 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 834 |  | this->GetGLTABLES()->AddQ(); | 
| 835 | dbc->Query(myquery.str().c_str()); | dbc->Query(myquery.str().c_str()); | 
| 836 | // | // | 
| 837 | return 0; | return 0; | 
| 908 | // | // | 
| 909 | // printf("myquery is %s \n",myquery.str().c_str()); | // printf("myquery is %s \n",myquery.str().c_str()); | 
| 910 | // | // | 
| 911 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 912 |  | this->GetGLTABLES()->AddQ(); | 
| 913 | dbc->Query(myquery.str().c_str()); | dbc->Query(myquery.str().c_str()); | 
| 914 | // | // | 
| 915 | return 0; | return 0; | 
| 967 | myquery << " from GL_RUN where ID=" << run << ";"; | myquery << " from GL_RUN where ID=" << run << ";"; | 
| 968 | // | // | 
| 969 | //  printf(" myquery is %s \n",myquery.str().c_str()); | //  printf(" myquery is %s \n",myquery.str().c_str()); | 
| 970 |  | if ( !this->IsConnected(dbc) ) return -57; | 
| 971 |  | this->AddQ(); | 
| 972 | pResult = dbc->Query(myquery.str().c_str()); | pResult = dbc->Query(myquery.str().c_str()); | 
| 973 | // | // | 
| 974 | //  printf(" getrowcount %i \n",pResult->GetRowCount()); | //  printf(" getrowcount %i \n",pResult->GetRowCount()); | 
| 1067 | // | // | 
| 1068 | //  printf(" query is %s \n",myquery.str().c_str()); | //  printf(" query is %s \n",myquery.str().c_str()); | 
| 1069 | // | // | 
| 1070 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 1071 |  | this->GetGLTABLES()->AddQ(); | 
| 1072 | pResult = dbc->Query(myquery.str().c_str()); | pResult = dbc->Query(myquery.str().c_str()); | 
| 1073 | if(!pResult->GetRowCount())return(-50); | if(!pResult->GetRowCount())return(-50); | 
| 1074 | for( r=0; r < 1000; r++){ | for( r=0; r < 1000; r++){ | 
| 1134 | myquery << ",NAME"; | myquery << ",NAME"; | 
| 1135 | myquery << " from GL_ROOT where ID=" << id << ";"; | myquery << " from GL_ROOT where ID=" << id << ";"; | 
| 1136 | // | // | 
| 1137 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 1138 |  | this->GetGLTABLES()->AddQ(); | 
| 1139 | pResult = dbc->Query(myquery.str().c_str()); | pResult = dbc->Query(myquery.str().c_str()); | 
| 1140 | if(!pResult->GetRowCount())return (-51); | if(!pResult->GetRowCount())return (-51); | 
| 1141 | for( r=0; r < 1000; r++){ | for( r=0; r < 1000; r++){ | 
| 1172 | myquery << "select ID,ID_ROOT_L0,EV_ROOT_CALIBTRK1,EV_ROOT_CALIBTRK2,FROM_TIME,TO_TIME,OBT1,OBT2,PKT1,PKT2,BOOT_NUMBER,VALIDATION from GL_TRK_CALIB where FROM_TIME <= "<< time; | myquery << "select ID,ID_ROOT_L0,EV_ROOT_CALIBTRK1,EV_ROOT_CALIBTRK2,FROM_TIME,TO_TIME,OBT1,OBT2,PKT1,PKT2,BOOT_NUMBER,VALIDATION from GL_TRK_CALIB where FROM_TIME <= "<< time; | 
| 1173 | myquery << " AND VALIDATION=1 ORDER BY FROM_TIME DESC LIMIT 1;"; | myquery << " AND VALIDATION=1 ORDER BY FROM_TIME DESC LIMIT 1;"; | 
| 1174 | //  myquery << " ORDER BY FROM_TIME DESC LIMIT 1;"; | //  myquery << " ORDER BY FROM_TIME DESC LIMIT 1;"; | 
| 1175 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 1176 |  | this->GetGLTABLES()->AddQ(); | 
| 1177 | pResult = dbc->Query(myquery.str().c_str()); | pResult = dbc->Query(myquery.str().c_str()); | 
| 1178 | if(!pResult->GetRowCount())return (-53); | if(!pResult->GetRowCount())return (-53); | 
| 1179 | for( r=0; r < 1000; r++){ | for( r=0; r < 1000; r++){ | 
| 1231 | myquery << " ;"; | myquery << " ;"; | 
| 1232 | //myquery << " and VALIDATION=1;"; | //myquery << " and VALIDATION=1;"; | 
| 1233 | // | // | 
| 1234 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 1235 |  | this->GetGLTABLES()->AddQ(); | 
| 1236 | pResult = dbc->Query(myquery.str().c_str()); | pResult = dbc->Query(myquery.str().c_str()); | 
| 1237 | //  printf(" mysquery is %s\n",myquery.str().c_str()); | //  printf(" mysquery is %s\n",myquery.str().c_str()); | 
| 1238 | // | // | 
| 1252 | myquery << "select ID_ROOT_L0, FROM_TIME, TO_TIME, EV_ROOT,VALIDATION from GL_CALO_CALIB where SECTION=" << section; | myquery << "select ID_ROOT_L0, FROM_TIME, TO_TIME, EV_ROOT,VALIDATION from GL_CALO_CALIB where SECTION=" << section; | 
| 1253 | myquery << " and FROM_TIME <= " << time; | myquery << " and FROM_TIME <= " << time; | 
| 1254 | myquery << " and VALIDATION=1 ORDER BY FROM_TIME DESC LIMIT 1;"; | myquery << " and VALIDATION=1 ORDER BY FROM_TIME DESC LIMIT 1;"; | 
| 1255 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 1256 |  | this->GetGLTABLES()->AddQ(); | 
| 1257 | pResult = dbc->Query(myquery.str().c_str()); | pResult = dbc->Query(myquery.str().c_str()); | 
| 1258 | //    printf(" mysquery is %s\n",myquery.str().c_str()); | //    printf(" mysquery is %s\n",myquery.str().c_str()); | 
| 1259 | // | // | 
| 1296 | myquery << "select * from GL_S4_CALIB where FROM_TIME <= "<< time; | myquery << "select * from GL_S4_CALIB where FROM_TIME <= "<< time; | 
| 1297 | myquery << " ORDER BY FROM_TIME DESC LIMIT 1;"; | myquery << " ORDER BY FROM_TIME DESC LIMIT 1;"; | 
| 1298 | //  myquery << " ORDER BY FROM_TIME DESC LIMIT 1;"; | //  myquery << " ORDER BY FROM_TIME DESC LIMIT 1;"; | 
| 1299 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 1300 |  | this->GetGLTABLES()->AddQ(); | 
| 1301 | pResult = dbc->Query(myquery.str().c_str()); | pResult = dbc->Query(myquery.str().c_str()); | 
| 1302 | if(!pResult->GetRowCount())return (-55);//throw -55; | if(!pResult->GetRowCount())return (-55);//throw -55; | 
| 1303 | for( r=0; r < 1000; r++){ | for( r=0; r < 1000; r++){ | 
| 1344 | myquery << " and FROM_TIME <= " << time; | myquery << " and FROM_TIME <= " << time; | 
| 1345 | myquery << " ORDER BY TO_TIME DESC LIMIT 1;"; | myquery << " ORDER BY TO_TIME DESC LIMIT 1;"; | 
| 1346 | // | // | 
| 1347 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 1348 |  | this->GetGLTABLES()->AddQ(); | 
| 1349 | pResult = dbc->Query(myquery.str().c_str()); | pResult = dbc->Query(myquery.str().c_str()); | 
| 1350 | if(!pResult->GetRowCount())return (-52); | if(!pResult->GetRowCount())return (-52); | 
| 1351 | for( r=0; r < 1000; r++){ | for( r=0; r < 1000; r++){ | 
| 1409 | myquery << type.Data(); | myquery << type.Data(); | 
| 1410 | myquery << "=" << id << ";"; | myquery << "=" << id << ";"; | 
| 1411 | // | // | 
| 1412 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return; | 
| 1413 |  | this->GetGLTABLES()->AddQ(); | 
| 1414 | pResult = dbc->Query(myquery.str().c_str()); | pResult = dbc->Query(myquery.str().c_str()); | 
| 1415 | if( pResult->GetRowCount() ){ | if( pResult->GetRowCount() ){ | 
| 1416 | Row = pResult->Next(); | Row = pResult->Next(); | 
| 1445 | oss.str(""); | oss.str(""); | 
| 1446 | oss << "SELECT YEAR(OFFSET_DATE),MONTH(OFFSET_DATE),DAY(OFFSET_DATE),HOUR(OFFSET_DATE),MINUTE(OFFSET_DATE),SECOND(OFFSET_DATE) FROM GL_RESURS_OFFSET WHERE SPECIAL_FILE='" | oss << "SELECT YEAR(OFFSET_DATE),MONTH(OFFSET_DATE),DAY(OFFSET_DATE),HOUR(OFFSET_DATE),MINUTE(OFFSET_DATE),SECOND(OFFSET_DATE) FROM GL_RESURS_OFFSET WHERE SPECIAL_FILE='" | 
| 1447 | << rname.str().c_str() << "';"; | << rname.str().c_str() << "';"; | 
| 1448 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return; | 
| 1449 |  | this->GetGLTABLES()->AddQ(); | 
| 1450 | pResult = dbc->Query(oss.str().c_str()); | pResult = dbc->Query(oss.str().c_str()); | 
| 1451 | Row = pResult->Next(); | Row = pResult->Next(); | 
| 1452 | // | // | 
| 1472 | oss.str(""); | oss.str(""); | 
| 1473 | oss << "SELECT YEAR(OFFSET_DATE),MONTH(OFFSET_DATE),DAY(OFFSET_DATE),HOUR(OFFSET_DATE),MINUTE(OFFSET_DATE),SECOND(OFFSET_DATE) FROM GL_RESURS_OFFSET WHERE FROM_ORBIT< " | oss << "SELECT YEAR(OFFSET_DATE),MONTH(OFFSET_DATE),DAY(OFFSET_DATE),HOUR(OFFSET_DATE),MINUTE(OFFSET_DATE),SECOND(OFFSET_DATE) FROM GL_RESURS_OFFSET WHERE FROM_ORBIT< " | 
| 1474 | << dworbit << " order by FROM_ORBIT desc limit 1;"; | << dworbit << " order by FROM_ORBIT desc limit 1;"; | 
| 1475 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return; | 
| 1476 |  | this->GetGLTABLES()->AddQ(); | 
| 1477 | pResult = dbc->Query(oss.str().c_str()); | pResult = dbc->Query(oss.str().c_str()); | 
| 1478 | Row = pResult->Next(); | Row = pResult->Next(); | 
| 1479 | if ( !Row ){ | if ( !Row ){ | 
| 1491 | myquery << " SELECT OBT0,TIMESYNC,TYPE FROM GL_TIMESYNC " | myquery << " SELECT OBT0,TIMESYNC,TYPE FROM GL_TIMESYNC " | 
| 1492 | << " WHERE ID_RAW = " << idraw | << " WHERE ID_RAW = " << idraw | 
| 1493 | << ";"; | << ";"; | 
| 1494 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return; | 
| 1495 |  | this->GetGLTABLES()->AddQ(); | 
| 1496 | pResult = dbc->Query(myquery.str().c_str()); | pResult = dbc->Query(myquery.str().c_str()); | 
| 1497 | if ( pResult ){ | if ( pResult ){ | 
| 1498 | Row = pResult->Next(); | Row = pResult->Next(); | 
| 1713 | } | } | 
| 1714 |  |  | 
| 1715 |  |  | 
| 1716 | // **************************************************** | // | 
| 1717 | /** | // Build a query and call DoQuery. | 
| 1718 | * Function to query the GL_TLE table of the DB. | // | 
| 1719 | * | // date it's an SQL datetime date and dbc is the connection to be | 
| 1720 | * time is the unix time for which a good tle is requested. | // used.  It will query for the tle with the nearest but previous date | 
| 1721 | * | // and the immediatly next one. | 
| 1722 | * Return the pointer to a cTle object that has the closest and | // | 
| 1723 | * previous date compared with time. | Int_t GL_TLE::Query(TString date, TSQLServer *dbc){ | 
|  | * |  | 
|  | * If errors occurs it returns NULL. |  | 
|  | */ |  | 
|  | cTle* GL_TLE::Query_GL_TLE(UInt_t time, TSQLServer *dbc){ |  | 
| 1724 | stringstream myquery; | stringstream myquery; | 
| 1725 | myquery.str(""); | myquery.str(""); | 
| 1726 |  |  | 
| 1727 | myquery << "SELECT TLE1, TLE2, TLE3 FROM GL_TLE " | myquery << "(SELECT ID, TLE1, TLE2, TLE3, UNIX_TIMESTAMP(FROM_TIME) FROM GL_TLE " | 
| 1728 | << "WHERE FROM_TIME < FROM_UNIXTIME(" << time << ") ORDER BY FROM_TIME DESC LIMIT 1;"; | << "WHERE FROM_TIME <= '" << date.Data() | 
| 1729 |  | << "' ORDER BY FROM_TIME DESC LIMIT 1) " | 
| 1730 |  | << "UNION " | 
| 1731 |  | << "(SELECT ID, TLE1, TLE2, TLE3, UNIX_TIMESTAMP(FROM_TIME) FROM GL_TLE " | 
| 1732 |  | << "WHERE FROM_TIME > '" << date.Data() | 
| 1733 |  | << "' ORDER BY FROM_TIME ASC LIMIT 1)"; | 
| 1734 |  |  | 
| 1735 | return Query_GL_TLE_go(myquery.str(), dbc); | return DoQuery(myquery.str().c_str(), dbc); | 
| 1736 | } | } | 
| 1737 |  |  | 
| 1738 |  |  | 
| 1739 | // **************************************************** | // | 
| 1740 | /** | // Build a query and call DoQuery. | 
| 1741 | * Function to query the GL_TLE table of the DB. | // | 
| 1742 | * | // time is the UTC date in unix time (UTC) and dbc is the connection | 
| 1743 | * date is a datetime format YYYY-MM-DD hh:mm:ss for which a good tle | // to be used.  It will query for the tle with the nearest but | 
| 1744 | * is requested. | // previous date and the immediatly next one. | 
| 1745 | * | // | 
| 1746 | * Return the pointer to a cTle object that has the closest and | // Returns the value returned by DoQuery(). | 
| 1747 | * previous date compared with time. | // | 
| 1748 | * | Int_t GL_TLE::Query(UInt_t time, TSQLServer *dbc){ | 
|  | * If errors occurs it returns NULL. |  | 
|  | */ |  | 
|  | cTle* GL_TLE::Query_GL_TLE(TString date, TSQLServer *dbc){ |  | 
| 1749 | stringstream myquery; | stringstream myquery; | 
| 1750 | myquery.str(""); | myquery.str(""); | 
| 1751 |  |  | 
| 1752 | myquery << "SELECT TLE1, TLE2, TLE3 FROM GL_TLE " | myquery << "(SELECT ID, TLE1, TLE2, TLE3, UNIX_TIMESTAMP(FROM_TIME) FROM GL_TLE " | 
| 1753 | << "WHERE FROM_TIME < '" << date.Data() << "' ORDER BY FROM_TIME DESC LIMIT 1;"; | << "WHERE FROM_TIME <= FROM_UNIXTIME('" << time | 
| 1754 |  | << "') ORDER BY FROM_TIME DESC LIMIT 1) " | 
| 1755 |  | << "UNION " | 
| 1756 |  | << "(SELECT ID, TLE1, TLE2, TLE3, UNIX_TIMESTAMP(FROM_TIME) FROM GL_TLE " | 
| 1757 |  | << "WHERE FROM_TIME > FROM_UNIXTIME('" << time | 
| 1758 |  | << "') ORDER BY FROM_TIME ASC LIMIT 1)"; | 
| 1759 |  |  | 
| 1760 | return Query_GL_TLE_go(myquery.str(), dbc); | return DoQuery(myquery.str().c_str(), dbc); | 
| 1761 | } | } | 
| 1762 |  |  | 
| 1763 |  |  | 
| 1764 | // **************************************************** | // | 
| 1765 | /** | // Do the query myquery on the connectio dbc.  Initialize tle, | 
| 1766 | * Private function used by Query_GL_TLE methods. | // tleFromTime and tleToTime. | 
| 1767 | * | // | 
| 1768 | * myquery is the query string. | // We should have two rows (unless the table is old).  From the last | 
| 1769 | * | // one we only take tleToTime. | 
| 1770 | * Return the pointer to a cTle object that has the closest and | // | 
| 1771 | * previous date compared with time. | // Returns 0 for success, 1 for failure. | 
| 1772 | * | // | 
| 1773 | * If errors occurs it returns NULL. | Int_t GL_TLE::DoQuery(TString myquery, TSQLServer *dbc){ | 
|  | */ |  | 
|  | cTle* GL_TLE::Query_GL_TLE_go(TString myquery, TSQLServer *dbc){ |  | 
|  | cTle *tle; |  | 
|  | string tle1, tle2, tle3; |  | 
|  |  |  | 
|  | // MySQL variables |  | 
| 1774 | TSQLResult *result; | TSQLResult *result; | 
| 1775 | TSQLRow *row; | TSQLRow *row; | 
| 1776 |  |  | 
| 1777 |  | // Set the right time_zone (otherwise horrible things will occur! :) | 
| 1778 |  | dbc->Query("SET time_zone = '+0:00'"); | 
| 1779 |  |  | 
| 1780 |  | // Do the query | 
| 1781 |  | if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57; | 
| 1782 |  | this->GetGLTABLES()->AddQ(); | 
| 1783 | result = dbc->Query(myquery.Data()); | result = dbc->Query(myquery.Data()); | 
| 1784 | if(! result->GetRowCount() ) return NULL; | if(! result->GetRowCount() ) { | 
| 1785 |  | cerr << "GL_TLE: query failed: " << myquery.Data() << endl; | 
| 1786 |  | return 1; | 
| 1787 |  | } | 
| 1788 |  |  | 
| 1789 |  | // Get results | 
| 1790 |  | row = result->Next(); // first tle row | 
| 1791 |  | tle = GiveTle(row); | 
| 1792 |  |  | 
| 1793 |  | tleFromTime = strtol(row->GetField(4), NULL, 10); | 
| 1794 |  |  | 
| 1795 |  | row = result->Next(); // second tle row | 
| 1796 |  | if(row) | 
| 1797 |  | tleToTime = strtol(row->GetField(4), NULL, 10); | 
| 1798 |  | else { | 
| 1799 |  | cerr << "GL_TLE: Warning: using last avaible TLE. Please update GL_TLE table!\n"; | 
| 1800 |  | tleToTime = UINT_MAX; | 
| 1801 |  | } | 
| 1802 |  |  | 
| 1803 | row = result->Next(); | delete row; | 
| 1804 | tle1 = row->GetField(0); | delete result; | 
|  | tle2 = row->GetField(1); |  | 
|  | tle3 = row->GetField(2); |  | 
| 1805 |  |  | 
| 1806 | tle = new cTle(tle1, tle2, tle3); | return 0; | 
| 1807 |  | } | 
| 1808 |  |  | 
|  | delete result; |  | 
|  | delete row; |  | 
| 1809 |  |  | 
| 1810 | return tle; | // | 
| 1811 |  | // Build a cTle object from the GL_TLE row. | 
| 1812 |  | // | 
| 1813 |  | cTle* GL_TLE::GiveTle(TSQLRow *row) { | 
| 1814 |  | cTle *thistle = NULL; | 
| 1815 |  | string tle1, tle2, tle3; | 
| 1816 |  |  | 
| 1817 |  | // Build cTle object | 
| 1818 |  | tle1 = row->GetField(1); | 
| 1819 |  | tle2 = row->GetField(2); | 
| 1820 |  | tle3 = row->GetField(3); | 
| 1821 |  |  | 
| 1822 |  | thistle = new cTle(tle1, tle2, tle3); | 
| 1823 |  |  | 
| 1824 |  | return thistle; | 
| 1825 | } | } |