00001 #include "../include/DatabaseLayer.h"
00002
00003 #include <wx/tokenzr.h>
00004
00005
00006 DatabaseLayer::DatabaseLayer()
00007 : DatabaseErrorReporter()
00008 {
00009 }
00010
00011
00012 DatabaseLayer::~DatabaseLayer()
00013 {
00014 CloseResultSets();
00015 CloseStatements();
00016 }
00017
00018 bool DatabaseLayer::RunQuery(const wxString& strQuery)
00019 {
00020 return RunQuery(strQuery, true);
00021 }
00022
00023 void DatabaseLayer::CloseResultSets()
00024 {
00025
00026 DatabaseResultSetHashSet::iterator start = m_ResultSets.begin();
00027 DatabaseResultSetHashSet::iterator stop = m_ResultSets.end();
00028 while (start != stop)
00029 {
00030 delete (*start);
00031 start++;
00032 }
00033 m_ResultSets.clear();
00034 }
00035
00036 void DatabaseLayer::CloseStatements()
00037 {
00038
00039 DatabaseStatementHashSet::iterator start = m_Statements.begin();
00040 DatabaseStatementHashSet::iterator stop = m_Statements.end();
00041 while (start != stop)
00042 {
00043 delete (*start);
00044 start++;
00045 }
00046 m_Statements.clear();
00047 }
00048
00049 bool DatabaseLayer::CloseResultSet(DatabaseResultSet* pResultSet)
00050 {
00051 if (pResultSet != NULL)
00052 {
00053
00054 if (m_ResultSets.find(pResultSet) != m_ResultSets.end())
00055 {
00056
00057 delete pResultSet;
00058 m_ResultSets.erase(pResultSet);
00059 return true;
00060 }
00061
00062
00063
00064 DatabaseStatementHashSet::iterator it;
00065 for( it = m_Statements.begin(); it != m_Statements.end(); ++it )
00066 {
00067
00068
00069 PreparedStatement* pStatement = *it;
00070 if (pStatement != NULL)
00071 {
00072 if (pStatement->CloseResultSet(pResultSet))
00073 {
00074 return true;
00075 }
00076 }
00077 }
00078
00079
00080
00081 delete pResultSet;
00082 return true;
00083 }
00084 else
00085 {
00086
00087 return false;
00088 }
00089
00090 }
00091
00092 bool DatabaseLayer::CloseStatement(PreparedStatement* pStatement)
00093 {
00094 if (pStatement != NULL)
00095 {
00096
00097 if (m_Statements.find(pStatement) != m_Statements.end())
00098 {
00099
00100 delete pStatement;
00101 m_Statements.erase(pStatement);
00102 return true;
00103 }
00104
00105
00106 delete pStatement;
00107 return true;
00108 }
00109 else
00110 {
00111
00112 return false;
00113 }
00114 }
00115