00001 #ifndef __DATABASE_LAYER_H__ 00002 #define __DATABASE_LAYER_H__ 00003 00004 // For compilers that support precompilation, includes "wx.h". 00005 #include "wx/wxprec.h" 00006 00007 #ifdef __BORLANDC__ 00008 #pragma hdrstop 00009 #endif 00010 00011 #ifndef WX_PRECOMP 00012 #include "wx/wx.h" 00013 #endif 00014 00015 #include "wx/hashset.h" 00016 #include "wx/arrstr.h" 00017 00018 #include "DatabaseErrorReporter.h" 00019 #include "DatabaseStringConverter.h" 00020 #include "DatabaseResultSet.h" 00021 #include "PreparedStatement.h" 00022 00023 WX_DECLARE_HASH_SET( DatabaseResultSet*, wxPointerHash, wxPointerEqual, DatabaseResultSetHashSet ); 00024 WX_DECLARE_HASH_SET( PreparedStatement*, wxPointerHash, wxPointerEqual, DatabaseStatementHashSet ); 00025 00026 class DatabaseLayer : public DatabaseErrorReporter, public DatabaseStringConverter 00027 { 00028 public: 00030 DatabaseLayer(); 00031 00033 virtual ~DatabaseLayer(); 00034 00035 // Open database 00036 virtual bool Open(const wxString& strDatabase) = 0; 00037 00039 virtual bool Close() = 0; 00040 00041 // transaction support 00043 virtual void BeginTransaction() = 0; 00045 virtual void Commit() = 0; 00047 virtual void RollBack() = 0; 00048 00049 // query database 00051 virtual bool RunQuery(const wxString& strQuery); 00053 virtual bool RunQuery(const wxString& strQuery, bool bParseQueries) = 0; 00055 virtual DatabaseResultSet* RunQueryWithResults(const wxString& strQuery) = 0; 00056 00058 virtual bool CloseResultSet(DatabaseResultSet* pResultSet); 00059 00060 // PreparedStatement support 00062 virtual PreparedStatement* PrepareStatement(const wxString& strQuery) = 0; 00064 virtual bool CloseStatement(PreparedStatement* pStatement); 00065 00066 // function names more consistent with JDBC and wxSQLite3 00067 // these just provide wrappers for existing functions 00069 bool ExecuteUpdate(const wxString& strQuery) { return RunQuery(strQuery); } 00071 DatabaseResultSet* ExecuteQuery(const wxString& strQuery) { return RunQueryWithResults(strQuery); } 00072 00073 protected: 00075 void CloseResultSets(); 00077 void CloseStatements(); 00078 00080 void LogResultSetForCleanup(DatabaseResultSet* pResultSet) { m_ResultSets.insert(pResultSet); } 00082 void LogStatementForCleanup(PreparedStatement* pStatement) { m_Statements.insert(pStatement); } 00083 00084 private: 00085 DatabaseResultSetHashSet m_ResultSets; 00086 DatabaseStatementHashSet m_Statements; 00087 }; 00088 00089 #endif // __DATABASE_LAYER_H__ 00090
1.4.1