IOManagerDB.h

00001 #ifndef SCTARCHIVE_IOMANAGERDB_H
00002 #define SCTARCHIVE_IOMANAGERDB_H
00003 
00004 #include "Sct/Archive/IOManagerArchive.h"
00005 #include "Sct/IoExceptions.h"
00006 #include "Sct/LogicErrors.h"
00007 #include "SctData/ResultHeader.h"
00008 #include <mysql.h>
00009 #include "CalibrationController/IS/TestData.h"
00010 
00011 #include <boost/date_time/posix_time/posix_time.hpp>
00012 //#include "sqlplus.hh"
00013 
00014 class Sct::Serializable;
00015 //class MysqlQuery;
00016 
00017 namespace SctArchiving {
00019 class MysqlException : public Sct::IoException{
00020 public:
00021   MysqlException(const string& msg, const string& file, int line);
00022   MysqlException(const string& msg, const string& query, const string& file, int line);
00023   ~MysqlException() throw();
00024 private:
00025   MysqlException();
00026   std::string query;
00027 };
00028 
00029 class ZlibStringCompressor;
00036 class IOManagerDB : public Sct::Archive::IOManagerArchive {
00037 public:
00041   static IOManagerDB& instance();
00046   virtual void write(const Sct::Serializable& ob, const Sct::IOParams* params = 0) const;
00051   virtual shared_ptr<Sct::Serializable> read(const string& name, const Sct::IOParams* params = 0) const;
00052   virtual ~IOManagerDB();
00056   virtual std::string status() const;
00061   virtual void addRun(unsigned long runNumber, bool trash) const;
00062 
00067   virtual void addTest(const TestData& testdata, bool alsoAddScans) const;
00068 
00072   virtual void addScan(const TestData& testdata, unsigned scanNumber) const;
00073 
00077   virtual void addModule(const std::string& layerName,
00078                          const std::string& LMTnr,
00079                          const std::string& poistionNumber,
00080                          const std::string& moduleNumber) const;
00081 
00085   virtual void addRawDataRecord(const std::string& moduleId, const std::string& scanId) const;
00086 
00090   virtual void addRawDataBlob(const std::string& moduleId, const std::string& scanId,
00091                               const char *chBuf, const long bufSize) const;
00092 
00096   virtual std::string getRawDataBlob(const std::string& moduleId,
00097                                      const std::string& scanId) const;
00098 
00102   virtual std::string getDataSetName() const;
00103 
00107   virtual void setDataSetName(const std::string& dataSetName);
00108 
00112   static std::string convertToMysqlDateTimeFormat(const std::string& isotime);
00113 
00122   std::string getDataSetID() const;
00123   std::string getTestTypeID(const std::string& testName) const;
00124   std::string getRunID(const unsigned runNumber) const;
00125   std::string getTestID(const std::string& runId, const unsigned startScanNumber) const;
00126   std::string getScanID(const std::string& testId, const unsigned scanNumber) const;
00127   std::string getLayerID(const std::string& layerName) const;
00128   std::string getRowID(const std::string& layerId, const std::string& LMTnr) const;
00129   std::string getPositionID(const std::string& rowId, const std::string& positionNumber) const;
00130   std::string getModuleID(const std::string& moduleNumber) const;
00134  private:
00136   void checkForMySqlErrors(const string& msg, const string& file, int line) const;
00137 
00139   void checkForMySqlErrors(const string& msg, const string& query, const string& file, int line) const;
00140 
00141   IOManagerDB();  
00142   //MysqlQuery getQuery() const; ///< get a null query.
00143   static IOManagerDB* s_man; 
00144 
00147   boost::shared_ptr<ZlibStringCompressor> m_compressor;
00148   //AJB ONLY FOR MYSQL++ boost::shared_ptr<Connection> m_connection; ///< pointer to the database connection
00149 
00150   MYSQL* m_mysql; 
00151   
00155   static const SctData::ResultHeader& getHeader( const Sct::Serializable& ob);
00159   //void prepareInsertion(const Sct::Serializable& ob, MysqlQuery& q) const;
00164   //static std::string getQueryMatching(const string& name);
00168   static std::string getTable(const Sct::Serializable& ob);
00172   std::string m_dataSetName;
00176   boost::shared_ptr<MYSQL_RES> getResult() const;
00177 
00181   mutable boost::recursive_mutex timingAccess;
00182   
00183   mutable unsigned m_nRead; 
00184   mutable unsigned m_nWrite; 
00185   mutable unsigned m_nCompress; 
00186   mutable unsigned m_nDecompress; 
00187   mutable unsigned m_nBlobAdd; 
00188   mutable unsigned m_nQueries; 
00189 
00190   mutable boost::posix_time::time_duration read_time; 
00191   mutable boost::posix_time::time_duration write_time; 
00192   mutable boost::posix_time::time_duration compress_time; 
00193   mutable boost::posix_time::time_duration decompress_time; 
00194   mutable boost::posix_time::time_duration blob_add_time; 
00195   mutable boost::posix_time::time_duration query_time; 
00196   mutable boost::posix_time::time_duration ostream_time; 
00197   mutable boost::posix_time::time_duration istream_time; 
00198 
00199 
00200   class MySqlFreeResultDeleter{
00201   public:
00202     void operator() (MYSQL_RES*) throw();
00203   };  
00211   std::string executeQueryReturnID(std::string query) const;
00212   void executeQuery(std::string query) const;
00213 };
00214 }
00215 #endif

Generated on Mon Feb 6 14:01:21 2006 for SCT DAQ/DCS Software - C++ by  doxygen 1.4.6