MySQLLog.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef HAVE_MYSQL
00023 #error MySQLLog.h included, but HAVE_MYSQL not defined
00024 #endif
00025
00026 #ifdef HAVE_MYSQL
00027 #ifndef FIX_MYSQLLOG_H
00028 #define FIX_MYSQLLOG_H
00029
00030 #ifdef _MSC_VER
00031 #pragma warning( disable : 4503 4355 4786 4290 )
00032 #pragma comment( lib, "libMySQL" )
00033 #endif
00034
00035 #include "Log.h"
00036 #include "SessionSettings.h"
00037 #include "MySQLConnection.h"
00038 #include <fstream>
00039 #include <string>
00040
00041 namespace FIX
00042 {
00044 class MySQLLog : public Log
00045 {
00046 public:
00047 MySQLLog( const SessionID& s, const DatabaseConnectionID& d, MySQLConnectionPool* p );
00048 MySQLLog( const DatabaseConnectionID& d, MySQLConnectionPool* p );
00049 MySQLLog( const SessionID& s, const std::string& database, const std::string& user,
00050 const std::string& password, const std::string& host, short port );
00051 MySQLLog( const std::string& database, const std::string& user,
00052 const std::string& password, const std::string& host, short port );
00053
00054 ~MySQLLog();
00055
00056 void clear();
00057 void backup();
00058 void setIncomingTable( const std::string& incomingTable )
00059 { m_incomingTable = incomingTable; }
00060 void setOutgoingTable( const std::string& outgoingTable )
00061 { m_outgoingTable = outgoingTable; }
00062 void setEventTable( const std::string& eventTable )
00063 { m_eventTable = eventTable; }
00064
00065 void onIncoming( const std::string& value )
00066 { insert( m_incomingTable, value ); }
00067 void onOutgoing( const std::string& value )
00068 { insert( m_outgoingTable, value ); }
00069 void onEvent( const std::string& value )
00070 { insert( m_eventTable, value ); }
00071
00072 private:
00073 void init();
00074 void insert( const std::string& table, const std::string value );
00075
00076 std::string m_incomingTable;
00077 std::string m_outgoingTable;
00078 std::string m_eventTable;
00079 MySQLConnection* m_pConnection;
00080 MySQLConnectionPool* m_pConnectionPool;
00081 SessionID* m_pSessionID;
00082 };
00083
00085 class MySQLLogFactory : public LogFactory
00086 {
00087 public:
00088 static const std::string DEFAULT_DATABASE;
00089 static const std::string DEFAULT_USER;
00090 static const std::string DEFAULT_PASSWORD;
00091 static const std::string DEFAULT_HOST;
00092 static const short DEFAULT_PORT;
00093
00094 MySQLLogFactory( const SessionSettings& settings )
00095 : m_settings( settings ), m_useSettings( true )
00096 {
00097 bool poolConnections = false;
00098 try { poolConnections = settings.get().getBool(MYSQL_LOG_USECONNECTIONPOOL); }
00099 catch( ConfigError& ) {}
00100
00101 m_connectionPoolPtr = MySQLConnectionPoolPtr
00102 ( new MySQLConnectionPool(poolConnections) );
00103 }
00104
00105 MySQLLogFactory( const std::string& database, const std::string& user,
00106 const std::string& password, const std::string& host,
00107 short port )
00108 : m_database( database ), m_user( user ), m_password( password ), m_host( host ), m_port( port ),
00109 m_useSettings( false )
00110 {
00111 m_connectionPoolPtr = MySQLConnectionPoolPtr
00112 ( new MySQLConnectionPool(false) );
00113 }
00114
00115 MySQLLogFactory()
00116 : m_database( DEFAULT_DATABASE ), m_user( DEFAULT_USER ), m_password( DEFAULT_PASSWORD ),
00117 m_host( DEFAULT_HOST ), m_port( DEFAULT_PORT ), m_useSettings( false )
00118 {
00119 m_connectionPoolPtr = MySQLConnectionPoolPtr
00120 ( new MySQLConnectionPool(false) );
00121 }
00122
00123 Log* create();
00124 Log* create( const SessionID& );
00125 void destroy( Log* );
00126 private:
00127 void init( const Dictionary& settings, std::string& database,
00128 std::string& user, std::string& password,
00129 std::string& host, short& port );
00130
00131 void initLog( const Dictionary& settings, MySQLLog& log );
00132
00133 MySQLConnectionPoolPtr m_connectionPoolPtr;
00134 SessionSettings m_settings;
00135 std::string m_database;
00136 std::string m_user;
00137 std::string m_password;
00138 std::string m_host;
00139 short m_port;
00140 bool m_useSettings;
00141 };
00142 }
00143
00144 #endif //FIX_MYSQLLOG_H
00145 #endif //HAVE_MYSQL