00001
00002 #ifndef CALIBUTIL_METADATA_H
00003 #define CALIBUTIL_METADATA_H
00004
00005 #include "facilities/Timestamp.h"
00006 #include "rdbModel/Db/Connection.h"
00007 #include "rdbModel/Tables/Assertion.h"
00008
00009 #include "DatabaseSvc/IDatabaseSvc.h"
00010
00011 namespace rdbModel {
00012 class Rdb;
00013 class Manager;
00014 }
00015
00016 namespace calibUtil {
00033 class Metadata {
00034 public:
00035 enum eRet {
00036 RETOk = 0,
00037 RETBadCnfFile = 1,
00038 RETBadHost = 2,
00039 RETNoConnect = 3,
00040 RETWrongState = 4,
00041 RETBadValue = 5,
00042 RETMySQLError = 6,
00043 RETNoSchemaMatch = 7
00044 };
00046 enum eLevel {
00047 LEVELProd = 1,
00048 LEVELDev = 2,
00049 LEVELTest = 4,
00050 LEVELSuperseded = 8
00051 };
00052
00053
00054
00055
00056
00057
00058
00060 Metadata(const std::string& host="bes3db2.ihep.ac.cn",
00061 const std::string& table="*",
00062 const std::string& dbName="calib");
00063
00064 ~Metadata();
00065
00088
00089
00090
00091
00092
00093
00094
00095
00096 eRet findBest(unsigned int *ser,
00097 const std::string& calibType,
00098 const std::string& sft_ver,
00099 const std::string& cal_ver,
00100 const std::string& cal_par,
00101 const std::string& rec_alg,
00102 const std::string& rec_par,
00103 const std::string& machine,
00104 const std::string& flavor="VANILLA");
00105
00125 eRet findSoonAfter(unsigned int *ser,
00126 const std::string& calibType,
00127 const std::string& sft_ver,
00128 const std::string& cal_ver,
00129 const std::string& cal_par,
00130 const std::string& rec_alg,
00131 const std::string& rec_par,
00132 const std::string& machine,
00133 const std::string& flavor="VANILLA");
00134
00135
00136
00137
00138
00140 eRet getInterval(unsigned int serialNo,
00141 facilities::Timestamp*& since,
00142 facilities::Timestamp*& till);
00143
00144
00145
00146
00147
00148
00158 eRet getReadInfo(unsigned int serialNo,
00159 int *runFrm,
00160 int *runTo,
00161 std::string& dataFmt,
00162
00163 std::string& dataIdent);
00164
00165 eRet getReadTOFInfo(unsigned int serialNo,
00166 int *runFrm,
00167 int *runTo,
00168 std::string& calParVer,
00169 DatabaseRecordVector& res,
00170 int runNo,
00171 std::string& sftver);
00172
00173 eRet getReadEMCInfo(unsigned int serialNo,
00174 int *runFrm,
00175 int *runTo,
00176 std::string& calParVer,
00177 DatabaseRecordVector& res,
00178 int runNo,
00179 std::string& sftver);
00180
00181 eRet getReadDedxInfo(unsigned int serialNo,
00182 int *runFrm,
00183 int *runTo,
00184 std::string& calParVer,
00185 DatabaseRecordVector& res,
00186 int runNo,
00187 std::string& sftver);
00188
00189 eRet getReadMDCInfo(unsigned int serialNo,
00190 int *runFrm,
00191 int *runTo,
00192 std::string& calParVer,
00193 DatabaseRecordVector& res,
00194 int runNo,
00195 std::string& sftver);
00196
00197 eRet getReadMUCInfo(unsigned int serialNo,
00198 int *runFrm,
00199 int *runTo,
00200 std::string& calParVer,
00201 DatabaseRecordVector& res,
00202 int runNo,
00203 std::string& sftver);
00204
00205 eRet getReadEsTimeInfo(unsigned int serialNo,
00206 int *runFrm,
00207 int *runTo,
00208 std::string& calParVer,
00209 DatabaseRecordVector& res,
00210 int runNo,
00211 std::string& sftver);
00212
00213 eRet getReadEstTofInfo(unsigned int serialNo,
00214 int *runFrm,
00215 int *runTo,
00216 std::string& calParVer,
00217 DatabaseRecordVector& res,
00218 int runNo,
00219 std::string& sftver);
00220 eRet getReadMdcAlignInfo(unsigned int serialNo,
00221 int *runFrm,
00222 int *runTo,
00223 std::string& calParVer,
00224 DatabaseRecordVector& res,
00225 int runNo,
00226 std::string& sftver);
00227 eRet getReadMdcDataConstInfo(unsigned int serialNo,
00228 int *runFrm,
00229 int *runTo,
00230 std::string& calParVer,
00231 DatabaseRecordVector& res,
00232 int runNo,
00233 std::string& sftver);
00234 eRet getReadTofQElecInfo(unsigned int serialNo,
00235 int *runFrm,
00236 int *runTo,
00237 std::string& calParVer,
00238 DatabaseRecordVector& res,
00239 int runNo,
00240 std::string& sftver);
00241 eRet getReadTofSimInfo(unsigned int serialNo,
00242 int *runFrm,
00243 int *runTo,
00244 std::string& calParVer,
00245 DatabaseRecordVector& res,
00246 int runNo,
00247 std::string& sftver);
00248 eRet getReadDedxSimInfo(unsigned int serialNo,
00249 int *runFrm,
00250 int *runTo,
00251 std::string& calParVer,
00252 DatabaseRecordVector& res,
00253 int runNo,
00254 std::string& sftver);
00255
00256
00257
00258
00259 int registerCalib(const std::string& inst,
00260 const std::string& flavor,
00261 const std::string& calib_type,
00262 const std::string& data_ident,
00263 const std::string& data_format,
00264 unsigned int& runfrm,
00265 unsigned int& runto,
00266 const std::string& input_desc,
00267 const std::string& notes,
00268 const std::string& proc_level,
00269 const std::string& locale,
00270 const std::string& fmt_version = "",
00271 const std::string& completion = "OK");
00272
00273
00274 bool connectRead(eRet& err);
00275
00276
00277 bool checkValues(const rdbModel::StringVector& cols,
00278 const rdbModel::StringVector& vals) const;
00279
00280 bool checkNulls(const rdbModel::StringVector& cols) const;
00281
00282 rdbModel::Connection* getReadConnection() {return m_readCxt;}
00283
00284
00285 rdbModel::Rdb* getRdb() {return m_rdb;}
00286 const std::string& getTable() {return m_table;}
00287
00288
00289 void disconnectRead();
00290 void disconnectWrite();
00291
00292 private:
00293
00294 rdbModel::Connection* m_readCxt;
00295 rdbModel::Connection* m_writeCxt;
00296
00297
00298 rdbModel::Assertion* m_findBest;
00299 rdbModel::Assertion* m_findSoonest;
00300
00301
00302
00303 unsigned adjustVend(int newSer);
00304
00305
00306
00307
00308
00309
00310
00311 bool fetchLevel(std::string& val, unsigned int *levelMask);
00312
00313
00314
00315
00316
00317
00318
00319
00320 static bool connect(rdbModel::Connection* conn,
00321 std::string& host,
00322 const std::string& user,
00323 const std::string& pw, eRet& err,
00324 const std::string& dbName);
00325
00326 bool connectWrite(eRet& err);
00327
00328
00329 eRet compareSchema(rdbModel::Connection* conn,
00330 const std::string& schema);
00331
00332
00333
00334
00335 eRet doSelect(std::vector<rdbModel::Assertion::Operator *>&
00336 conditions,
00337 rdbModel::StringVector& orderBy,
00338 unsigned*& ser);
00339
00341 eRet fetchUser(std::string& user);
00342
00346
00347
00348
00349
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00363
00364
00365
00366
00367 std::string m_host;
00368 std::string m_table;
00369 std::string m_dbName;
00370 rdbModel::Manager* m_man;
00371 rdbModel::Rdb* m_rdb;
00372 IDatabaseSvc* m_dbsvc;
00373 bool m_match;
00374 };
00375 }
00376
00377 #endif