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 00009 class Sct::Serializable; 00010 class MysqlConnection; 00011 class MysqlQuery; 00012 00013 namespace SctArchiving { 00014 class ZlibStringCompressor; 00021 class IOManagerDB : public Sct::Archive::IOManagerArchive { 00022 public: 00024 static IOManagerDB& instance(); 00026 virtual void write(const Sct::Serializable& ob, const Sct::IOParams* params = 0) const; 00028 virtual shared_ptr<Sct::Serializable> read(const string& name, const Sct::IOParams* params = 0) const; 00029 virtual ~IOManagerDB(); 00031 virtual std::string status() const; 00032 private: 00033 IOManagerDB(); 00034 MysqlQuery getQuery() const; 00035 static IOManagerDB* s_man; 00036 00039 boost::shared_ptr<ZlibStringCompressor> m_compressor; 00040 boost::shared_ptr<MysqlConnection> m_connection; 00041 00044 static const SctData::ResultHeader& getHeader( const Sct::Serializable& ob); 00048 void prepareInsertion(const Sct::Serializable& ob, MysqlQuery& q) const; 00053 static std::string getQueryMatching(const string& name); 00057 static std::string getTable(const Sct::Serializable& ob); 00058 }; 00059 } 00060 #endif //SCT_ARCHIVEFILE_IOMANAGERARCHIVEFILE_H