| 161 |
TYPE = 0; |
TYPE = 0; |
| 162 |
} |
} |
| 163 |
|
|
|
GL_TLE::GL_TLE(){ |
|
|
} |
|
|
|
|
| 164 |
// **************************************************** |
// **************************************************** |
| 165 |
|
|
| 166 |
void GL_RUN::SetEV_FROM(UInt_t evfrom){ |
void GL_RUN::SetEV_FROM(UInt_t evfrom){ |
| 1570 |
} |
} |
| 1571 |
|
|
| 1572 |
|
|
| 1573 |
// **************************************************** |
// |
| 1574 |
/** |
// Build a query and call DoQuery. |
| 1575 |
* Function to query the GL_TLE table of the DB. |
// |
| 1576 |
* |
// date it's an SQL datetime date and dbc is the connection to be |
| 1577 |
* 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 |
| 1578 |
* |
// and the immediatly next one. |
| 1579 |
* Return the pointer to a cTle object that has the closest and |
// |
| 1580 |
* 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){ |
|
| 1581 |
stringstream myquery; |
stringstream myquery; |
| 1582 |
myquery.str(""); |
myquery.str(""); |
| 1583 |
|
|
| 1584 |
myquery << "SELECT TLE1, TLE2, TLE3 FROM GL_TLE " |
myquery << "(SELECT ID, TLE1, TLE2, TLE3, UNIX_TIMESTAMP(FROM_TIME) FROM GL_TLE " |
| 1585 |
<< "WHERE FROM_TIME < FROM_UNIXTIME(" << time << ") ORDER BY FROM_TIME DESC LIMIT 1;"; |
<< "WHERE FROM_TIME <= '" << date.Data() |
| 1586 |
|
<< "' ORDER BY FROM_TIME DESC LIMIT 1) " |
| 1587 |
|
<< "UNION " |
| 1588 |
|
<< "(SELECT ID, TLE1, TLE2, TLE3, UNIX_TIMESTAMP(FROM_TIME) FROM GL_TLE " |
| 1589 |
|
<< "WHERE FROM_TIME > '" << date.Data() |
| 1590 |
|
<< "' ORDER BY FROM_TIME ASC LIMIT 1)"; |
| 1591 |
|
|
| 1592 |
return Query_GL_TLE_go(myquery.str(), dbc); |
return DoQuery(myquery.str().c_str(), dbc); |
| 1593 |
} |
} |
| 1594 |
|
|
| 1595 |
|
|
| 1596 |
// **************************************************** |
// |
| 1597 |
/** |
// Build a query and call DoQuery. |
| 1598 |
* Function to query the GL_TLE table of the DB. |
// |
| 1599 |
* |
// time is the UTC date in unix time (UTC) and dbc is the connection |
| 1600 |
* 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 |
| 1601 |
* is requested. |
// previous date and the immediatly next one. |
| 1602 |
* |
// |
| 1603 |
* Return the pointer to a cTle object that has the closest and |
// Returns the value returned by DoQuery(). |
| 1604 |
* previous date compared with time. |
// |
| 1605 |
* |
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){ |
|
| 1606 |
stringstream myquery; |
stringstream myquery; |
| 1607 |
myquery.str(""); |
myquery.str(""); |
| 1608 |
|
|
| 1609 |
myquery << "SELECT TLE1, TLE2, TLE3 FROM GL_TLE " |
myquery << "(SELECT ID, TLE1, TLE2, TLE3, UNIX_TIMESTAMP(FROM_TIME) FROM GL_TLE " |
| 1610 |
<< "WHERE FROM_TIME < '" << date.Data() << "' ORDER BY FROM_TIME DESC LIMIT 1;"; |
<< "WHERE FROM_TIME <= FROM_UNIXTIME('" << time |
| 1611 |
|
<< "') ORDER BY FROM_TIME DESC LIMIT 1) " |
| 1612 |
|
<< "UNION " |
| 1613 |
|
<< "(SELECT ID, TLE1, TLE2, TLE3, UNIX_TIMESTAMP(FROM_TIME) FROM GL_TLE " |
| 1614 |
|
<< "WHERE FROM_TIME > FROM_UNIXTIME('" << time |
| 1615 |
|
<< "') ORDER BY FROM_TIME ASC LIMIT 1)"; |
| 1616 |
|
|
| 1617 |
return Query_GL_TLE_go(myquery.str(), dbc); |
return DoQuery(myquery.str().c_str(), dbc); |
| 1618 |
} |
} |
| 1619 |
|
|
| 1620 |
|
|
| 1621 |
// **************************************************** |
// |
| 1622 |
/** |
// Do the query myquery on the connectio dbc. Initialize tle, |
| 1623 |
* Private function used by Query_GL_TLE methods. |
// tleFromTime and tleToTime. |
| 1624 |
* |
// |
| 1625 |
* myquery is the query string. |
// We should have two rows (unless the table is old). From the last |
| 1626 |
* |
// one we only take tleToTime. |
| 1627 |
* Return the pointer to a cTle object that has the closest and |
// |
| 1628 |
* previous date compared with time. |
// Returns 0 for success, 1 for failure. |
| 1629 |
* |
// |
| 1630 |
* 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 |
|
| 1631 |
TSQLResult *result; |
TSQLResult *result; |
| 1632 |
TSQLRow *row; |
TSQLRow *row; |
| 1633 |
|
|
| 1634 |
|
// Set the right time_zone (otherwise horrible things will occur! :) |
| 1635 |
|
dbc->Query("SET time_zone = '+0:00'"); |
| 1636 |
|
|
| 1637 |
|
// Do the query |
| 1638 |
result = dbc->Query(myquery.Data()); |
result = dbc->Query(myquery.Data()); |
| 1639 |
if(! result->GetRowCount() ) return NULL; |
if(! result->GetRowCount() ) { |
| 1640 |
|
cerr << "GL_TLE: query failed: " << myquery.Data() << endl; |
| 1641 |
|
return 1; |
| 1642 |
|
} |
| 1643 |
|
|
| 1644 |
|
// Get results |
| 1645 |
|
row = result->Next(); // first tle row |
| 1646 |
|
tle = GiveTle(row); |
| 1647 |
|
|
| 1648 |
|
tleFromTime = strtol(row->GetField(4), NULL, 10); |
| 1649 |
|
|
| 1650 |
|
row = result->Next(); // second tle row |
| 1651 |
|
if(row) |
| 1652 |
|
tleToTime = strtol(row->GetField(4), NULL, 10); |
| 1653 |
|
else { |
| 1654 |
|
cerr << "GL_TLE: Warning: using last avaible TLE. Please update GL_TLE table!\n"; |
| 1655 |
|
tleToTime = UINT_MAX; |
| 1656 |
|
} |
| 1657 |
|
|
| 1658 |
|
delete row; |
| 1659 |
|
delete result; |
| 1660 |
|
|
| 1661 |
row = result->Next(); |
return 0; |
| 1662 |
tle1 = row->GetField(0); |
} |
|
tle2 = row->GetField(1); |
|
|
tle3 = row->GetField(2); |
|
| 1663 |
|
|
|
tle = new cTle(tle1, tle2, tle3); |
|
| 1664 |
|
|
| 1665 |
delete result; |
// |
| 1666 |
delete row; |
// Build a cTle object from the GL_TLE row. |
| 1667 |
|
// |
| 1668 |
|
cTle* GL_TLE::GiveTle(TSQLRow *row) { |
| 1669 |
|
cTle *thistle = NULL; |
| 1670 |
|
string tle1, tle2, tle3; |
| 1671 |
|
|
| 1672 |
|
// Build cTle object |
| 1673 |
|
tle1 = row->GetField(1); |
| 1674 |
|
tle2 = row->GetField(2); |
| 1675 |
|
tle3 = row->GetField(3); |
| 1676 |
|
|
| 1677 |
|
thistle = new cTle(tle1, tle2, tle3); |
| 1678 |
|
|
| 1679 |
return tle; |
return thistle; |
| 1680 |
} |
} |