00001
00002
00009
00010
00011 #include "StEmcDbHandler.h"
00012 #include "TUnixTime.h"
00013 #include "StMessMgr.h"
00014
00015 #include "TFile.h"
00016 #include "TTable.h"
00017 #include "TSystem.h"
00018 #include "TKey.h"
00019
00020 ClassImp(StEmcDbHandler)
00021
00022
00024 StEmcDbHandler::StEmcDbHandler()
00025 {
00026
00027 setTableNode();
00028 setTimeStamp();
00029 setMaxEntryTime();
00030 setFlavor();
00031 }
00032
00034 StEmcDbHandler::~StEmcDbHandler()
00035 {
00036 }
00037
00039 StDbTable* StEmcDbHandler::getDbTable()
00040 {
00041 StDbTable *table = 0;
00042 StDbManager* dbMngr = StDbManager::Instance();
00043 if (dbMngr) {
00044 StDbConfigNode *node = dbMngr->initConfig(mTableNode.c_str());
00045 table = node ? node->addDbTable(mTableName.c_str()) : 0;
00046 if (table) {
00047
00048 dbMngr->setRequestTime(mTimeStamp.c_str());
00049
00050
00051 table->setFlavor(mFlavor.c_str());
00052
00053
00054 StDataBaseI* dbi = dbMngr->findDb(mTableNode.c_str());
00055 if (dbi) {
00056 UInt_t unixEntryTime = dbi->getUnixTime(mMaxTime.c_str());
00057 table->setProdTime(unixEntryTime);
00058
00059 dbMngr->fetchDbTable(table);
00060
00061 mTimeStamp = timeToSqlTime(table->getBeginDateTime());
00062 }
00063 }
00064 }
00065
00066 return table;
00067 }
00068
00070 std::vector<std::string> StEmcDbHandler::getTimeStampList(const char * beginTime, const char * endTime)
00071 {
00072 mTimeStampList.clear();
00073
00074 StDbManager* dbMngr = StDbManager::Instance();
00075 if (dbMngr) {
00076 StDbTable* table = (dbMngr->initConfig(mTableNode.c_str()))->addDbTable(mTableName.c_str());
00077 if (table) {
00078 dbMngr->setStoreTime(mMaxTime.c_str());
00079 unsigned int unixStoreTime = dbMngr->getUnixStoreTime();
00080 StDataBaseI* db=dbMngr->findDb(mTableNode.c_str());
00081 if (db) {
00082 char whereClause[256];
00083 sprintf(whereClause, " where flavor='%s' and beginTime>='%s' and beginTime<='%s' and entryTime<='%s' and (deactive=0 or deactive>=%d) order by beginTime",
00084 mFlavor.c_str(), beginTime, endTime, mMaxTime.c_str(), unixStoreTime);
00085 LOG_INFO <<"::getTimeStampList() using query = "<<whereClause<<endm;
00086
00087 UInt_t* timeStampList = db->QueryDbTimes(table,whereClause,1);
00088
00089 int nRows=table->GetNRows();
00090 int nRows2;
00091 table->getElementID(nRows2);
00092 if (nRows != nRows2) {
00093 LOG_WARN<<"problem: nRows!=nRows2"<<endm;
00094 }
00095 if (timeStampList) {
00096 for (int i = 0; i < nRows ; i++) {
00097 dbMngr->setRequestTime(timeStampList[i]);
00098 mTimeStampList.push_back( timeToSqlTime(dbMngr->getDateRequestTime()) );
00099 }
00100 delete [] timeStampList;
00101 }
00102 }
00103 }
00104 }
00105 return mTimeStampList;
00106 }
00107
00108
00109
00110 std::string StEmcDbHandler::timeToSqlTime(const char* apiTime) {
00111 TString string=apiTime;
00112 TString dateString=string(0,4)+ "-" +string(4,2)+ "-" + string(6,2);
00113 TString timeString=string(8,2)+ ":" +string(10,2)+ ":" + string(12,2);
00114 TString datetime = dateString+ " " +timeString;
00115
00116 return std::string(datetime.Data());
00117 }
00118
00119 void StEmcDbHandler::writeToDb(char* data) {
00120 if (!data) return;
00121 StDbManager *dbMngr = StDbManager::Instance();
00122 if (dbMngr) {
00123 StDbTable* table = (dbMngr->initConfig(mTableNode.c_str()))->addDbTable(mTableName.c_str());
00124 if (table) {
00125 table->setFlavor(mFlavor.c_str());
00126 table->SetTable(data,1);
00127 dbMngr->setStoreTime(mTimeStamp.c_str());
00128 dbMngr->storeDbTable(table);
00129 }
00130 }
00131 }