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
00013
00014 class Sct::Serializable;
00015
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
00143 static IOManagerDB* s_man;
00144
00147 boost::shared_ptr<ZlibStringCompressor> m_compressor;
00148
00149
00150 MYSQL* m_mysql;
00151
00155 static const SctData::ResultHeader& getHeader( const Sct::Serializable& ob);
00159
00164
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