/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Calibration/calibUtil/calibUtil-00-00-43/calibUtil/Metadata.h

Go to the documentation of this file.
00001 // $Header: /bes/bes/BossCvs/Calibration/calibUtil/calibUtil/Metadata.h,v 1.20 2012/01/05 03:53:49 zhangy Exp $
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 //#include "DatabaseSvc/DatabaseRecord.h"
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     /* Someday provide option of reading in description of table. In case
00055        it is used, can check that it matches dbs we're connected to, and
00056        can check column values.
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 /*maqm    eRet findBest(unsigned int *ser,
00089                   const std::string& calibType, 
00090                   const facilities::Timestamp& timestamp,
00091                   unsigned int levelMask, 
00092                   const std::string& instrument,
00093                   const std::string& flavor="VANILLA");
00094 maqm*/
00095      //maqm modify
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     //    const std::string* const getCalibTypeStr(eCalibType cType);
00136     //    const std::string* const getDataFmtStr(eDataFmt fmt);
00137     //    const std::string* const getInstrumentStr(eInstrument inst);
00138 
00140     eRet getInterval(unsigned int serialNo,
00141                      facilities::Timestamp*& since,
00142                      facilities::Timestamp*& till);
00143 
00144     // Might also want a "findAll" which would just return a list
00145     // of serial numbers, and a "getRecord" which would either
00146     // just return the full row as a string or parse it into 
00147     // its separate columns
00148 
00158     eRet getReadInfo(unsigned int serialNo, 
00159                      int *runFrm,
00160                      int *runTo,
00161                      std::string& dataFmt,
00162          //            std::string& fmtVersion,
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     // Insert a new record; return serial number if successful
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     // Should probably be const
00285     rdbModel::Rdb* getRdb() {return m_rdb;}
00286     const std::string& getTable() {return m_table;}
00287 
00288     // Might make these private
00289     void disconnectRead();
00290     void disconnectWrite();
00291 
00292   private:
00293 
00294     rdbModel::Connection* m_readCxt;
00295     rdbModel::Connection* m_writeCxt;
00296 
00297     // these could be static
00298     rdbModel::Assertion* m_findBest;
00299     rdbModel::Assertion* m_findSoonest;
00300 
00301     // For each pre-existing row satisfying certain conditions, 
00302     // set its vend = vstart of new row
00303     unsigned adjustVend(int newSer);
00304     
00305 
00306     /*
00307       Set val to string representation of "next" bit in levelMask
00308       (one of "PROD", "DEV", "TEST" or "SUPSED"),
00309       and mask off that bit in levelMask.  
00310     */
00311     bool fetchLevel(std::string& val, unsigned int *levelMask);
00312 
00313     //    void initConditions(std::vector<rdbModel::Operator *> conditions);
00314 
00315     //    bool addLevel(std::string& q, unsigned int *levelMask);
00316 
00317     /*  Use rdbModel::MysqlConnection::open( ..  )   to do most of the work */
00318 
00319     //    static bool connect(rdbModel::MysqlConnection* conn,
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     // Find 'best' calibration, based on conditions and levelMask; store
00332     // serial number.
00333     //maqm fix 
00334      //eRet Metadata::doSelect(unsigned levelMask,
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     //    eRet compareSchema(const std::string& schema="");
00347 
00348     // Won't need followin enum or bit mask if we eliminate multi-step
00349     // insert procedure
00352     /*
00353     enum eRow {
00354       eOpened = 1,
00355       eValid = 2,
00356       eInputDesc = 4,
00357       eComment = 8,
00358       eFlavor  = 0x10,
00359       eLocale  = 0x20,
00360       eCreator = 0x40 };
00361     */
00363     //    static const unsigned int s_rowReady;
00364 
00365     //    std::string m_row;     // place to keep row as it's being built
00366     //    unsigned int m_rowStatus;
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; // true if succeeded.  If not attempted, m_rdb is 0
00374   };
00375 }
00376 
00377 #endif

Generated on Tue Nov 29 22:57:55 2016 for BOSS_7.0.2 by  doxygen 1.4.7