Main Page | Class Hierarchy | Class List | Directories | File List | Class Members | File Members | Related Pages

DatabaseLayer.cpp

Go to the documentation of this file.
00001 #include "../include/DatabaseLayer.h"
00002 
00003 #include <wx/tokenzr.h>
00004 
00005 // ctor()
00006 DatabaseLayer::DatabaseLayer()
00007  : DatabaseErrorReporter()
00008 {
00009 }
00010 
00011 // dtor()
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   // Iterate through all of the result sets and close them all
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   // Iterate through all of the statements and close them all
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     // Check if we have this result set in our list
00054     if (m_ResultSets.find(pResultSet) != m_ResultSets.end())
00055     {
00056       // Remove the result set pointer from the list and delete the pointer
00057       delete pResultSet;
00058       m_ResultSets.erase(pResultSet);
00059       return true;
00060     }
00061 
00062     // If not then iterate through all of the statements and see
00063     //  if any of them have the result set in their lists
00064     DatabaseStatementHashSet::iterator it;
00065     for( it = m_Statements.begin(); it != m_Statements.end(); ++it )
00066     {
00067       // If the statement knows about the result set then it will close the 
00068       //  result set and return true, otherwise it will return false
00069       PreparedStatement* pStatement = *it;
00070       if (pStatement != NULL)
00071       {
00072         if (pStatement->CloseResultSet(pResultSet))
00073         {
00074           return true;
00075         }
00076       }
00077     }
00078 
00079     // If we don't know about the result set and the statements don't
00080     //  know about it, the just delete it
00081     delete pResultSet;
00082     return true;
00083   }
00084   else
00085   {
00086     // Return false on NULL pointer
00087     return false;
00088   }
00089 
00090 }
00091 
00092 bool DatabaseLayer::CloseStatement(PreparedStatement* pStatement)
00093 {
00094   if (pStatement != NULL)
00095   {
00096     // See if we know about this pointer, if so then remove it from the list
00097     if (m_Statements.find(pStatement) != m_Statements.end())
00098     {
00099       // Remove the statement pointer from the list and delete the pointer
00100       delete pStatement;
00101       m_Statements.erase(pStatement);
00102       return true;
00103     }
00104 
00105     // Otherwise just delete it
00106     delete pStatement;
00107     return true;
00108   }
00109   else
00110   {
00111     // Return false on NULL pointer
00112     return false;
00113   }
00114 }
00115 

Generated on Sat May 13 17:31:34 2006 for databaselayer by  doxygen 1.4.1