00001 #ifndef SCT_ARCHIVEFILE_IOMANAGERARCHIVEFILE_H
00002 #define SCT_ARCHIVEFILE_IOMANAGERARCHIVEFILE_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
00012 class Sct::Serializable;
00013
00014
00015 namespace SctArchiving {
00017 class MysqlException : public Sct::IoException{
00018 public:
00019 MysqlException(const string& msg, const string& file, int line);
00020 MysqlException(const string& msg, const string& query, const string& file, int line);
00021 ~MysqlException() throw();
00022 private:
00023 MysqlException();
00024 std::string query;
00025 };
00026
00027 class ZlibStringCompressor;
00034 class IOManagerDB : public Sct::Archive::IOManagerArchive {
00035 public:
00039 static IOManagerDB& instance();
00043 virtual void write(const Sct::Serializable& ob, const Sct::IOParams* params = 0) const;
00047 virtual shared_ptr<Sct::Serializable> read(const string& name, const Sct::IOParams* params = 0) const;
00048 virtual ~IOManagerDB();
00052 virtual std::string status() const;
00057 virtual void addRun(unsigned long runNumber);
00061 virtual bool runExists(unsigned long runNumber);
00066 virtual void addTest(const TestData& testdata, bool alsoAddScans);
00070 virtual bool testExists(const TestData& testdata);
00074 virtual void addScan(const TestData& testdata, unsigned scanNumber);
00078 virtual bool scanExists(const TestData& testdata, unsigned scanNumber);
00079
00081 virtual std::string getLocationName();
00083 virtual void setLocationName(const std::string& locationName);
00085 static std::string convertToMysqlDateTimeFormat(const std::string& isotime);
00086
00087 private:
00088
00089
00090
00092 void checkForErrors(const string& msg, const string& file, int line);
00093
00095 void checkForErrors(const string& msg, const string& query, const string& file, int line);
00096
00097 IOManagerDB();
00098
00099 static IOManagerDB* s_man;
00100
00103 boost::shared_ptr<ZlibStringCompressor> m_compressor;
00104
00105
00106 MYSQL* m_mysql;
00107
00111 static const SctData::ResultHeader& getHeader( const Sct::Serializable& ob);
00115
00120
00124 static std::string getTable(const Sct::Serializable& ob);
00125
00126 std::string m_locationName;
00127 };
00128 }
00129 #endif //SCT_ARCHIVEFILE_IOMANAGERARCHIVEFILE_H