PostgreSQLLog.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_POSTGRESQL
00023 #error PostgreSQLLog.h included, but HAVE_POSTGRESQL not defined
00024 #endif
00025
00026 #ifdef HAVE_POSTGRESQL
00027 #ifndef FIX_POSTGRESQLLOG_H
00028 #define FIX_POSTGRESQLLOG_H
00029
00030 #ifdef _MSC_VER
00031 #pragma warning( disable : 4503 4355 4786 4290 )
00032 #endif
00033
00034 #include "Log.h"
00035 #include "SessionSettings.h"
00036 #include "PostgreSQLConnection.h"
00037 #include <fstream>
00038 #include <string>
00039
00040 namespace FIX
00041 {
00043 class PostgreSQLLog : public Log
00044 {
00045 public:
00046 PostgreSQLLog( const SessionID& s, const DatabaseConnectionID& d, PostgreSQLConnectionPool* p );
00047 PostgreSQLLog( const DatabaseConnectionID& d, PostgreSQLConnectionPool* p );
00048 PostgreSQLLog( const SessionID& s, const std::string& database, const std::string& user,
00049 const std::string& password, const std::string& host, short port );
00050 PostgreSQLLog( const std::string& database, const std::string& user,
00051 const std::string& password, const std::string& host, short port );
00052
00053 ~PostgreSQLLog();
00054
00055 void clear();
00056 void backup();
00057 void setIncomingTable( const std::string& incomingTable )
00058 { m_incomingTable = incomingTable; }
00059 void setOutgoingTable( const std::string& outgoingTable )
00060 { m_outgoingTable = outgoingTable; }
00061 void setEventTable( const std::string& eventTable )
00062 { m_eventTable = eventTable; }
00063
00064 void onIncoming( const std::string& value )
00065 { insert( m_incomingTable, value ); }
00066 void onOutgoing( const std::string& value )
00067 { insert( m_outgoingTable, value ); }
00068 void onEvent( const std::string& value )
00069 { insert( m_eventTable, value ); }
00070
00071 private:
00072 void init();
00073 void insert( const std::string& table, const std::string value );
00074
00075 std::string m_incomingTable;
00076 std::string m_outgoingTable;
00077 std::string m_eventTable;
00078 PostgreSQLConnection* m_pConnection;
00079 PostgreSQLConnectionPool* m_pConnectionPool;
00080 SessionID* m_pSessionID;
00081 };
00082
00084 class PostgreSQLLogFactory : public LogFactory
00085 {
00086 public:
00087 static const std::string DEFAULT_DATABASE;
00088 static const std::string DEFAULT_USER;
00089 static const std::string DEFAULT_PASSWORD;
00090 static const std::string DEFAULT_HOST;
00091 static const short DEFAULT_PORT;
00092
00093 PostgreSQLLogFactory( const SessionSettings& settings )
00094 : m_settings( settings ), m_useSettings( true )
00095 {
00096 bool poolConnections = false;
00097 try { poolConnections = settings.get().getBool(POSTGRESQL_LOG_USECONNECTIONPOOL); }
00098 catch( ConfigError& ) {}
00099
00100 m_connectionPoolPtr = PostgreSQLConnectionPoolPtr
00101 ( new PostgreSQLConnectionPool(poolConnections) );
00102 }
00103
00104 PostgreSQLLogFactory( const std::string& database, const std::string& user,
00105 const std::string& password, const std::string& host,
00106 short port )
00107 : m_database( database ), m_user( user ), m_password( password ), m_host( host ), m_port( port ),
00108 m_useSettings( false )
00109 {
00110 m_connectionPoolPtr = PostgreSQLConnectionPoolPtr
00111 ( new PostgreSQLConnectionPool(false) );
00112 }
00113
00114 PostgreSQLLogFactory()
00115 : m_database( DEFAULT_DATABASE ), m_user( DEFAULT_USER ), m_password( DEFAULT_PASSWORD ),
00116 m_host( DEFAULT_HOST ), m_port( DEFAULT_PORT ), m_useSettings( false )
00117 {
00118 m_connectionPoolPtr = PostgreSQLConnectionPoolPtr
00119 ( new PostgreSQLConnectionPool(false) );
00120 }
00121
00122 Log* create();
00123 Log* create( const SessionID& );
00124 void destroy( Log* );
00125 private:
00126 void init( const Dictionary& settings, std::string& database,
00127 std::string& user, std::string& password,
00128 std::string& host, short& port );
00129
00130 void initLog( const Dictionary& settings, PostgreSQLLog& log );
00131
00132 PostgreSQLConnectionPoolPtr m_connectionPoolPtr;
00133 SessionSettings m_settings;
00134 std::string m_database;
00135 std::string m_user;
00136 std::string m_password;
00137 std::string m_host;
00138 short m_port;
00139 bool m_useSettings;
00140 };
00141 }
00142
00143 #endif //FIX_POSTGRESQLLOG_H
00144 #endif //HAVE_POSTGRESQL