Main Page | Namespace List | Class Hierarchy | Class List | File List | Class Members | File Members

dbi.h

Go to the documentation of this file.
00001 
00002 // Name:        wx/dbi.h
00003 // Purpose:     
00004 // Author:      Joe Yates
00005 // Created:     2004-11-17
00006 // Copyright:   (c) Joe Yates
00007 // License:     BSD license (see the file 'LICENSE.txt')
00009 
00010 #ifndef __wx_dbi_h__
00011 #define __wx_dbi_h__
00012 
00013 #include <wx/wxprec.h>
00014 
00015 #ifndef WX_PRECOMP
00016 # include "wx/wx.h"
00017 #endif
00018 
00019 #if _MSC_VER > 1000
00020 # ifdef _DEBUG
00021 #   include "crtdbg.h"
00022 #   define new                    new(_NORMAL_BLOCK, __FILE__, __LINE__)
00023 # endif // def _DEBUG
00024 #endif // _MSC_VER > 1000
00025 
00026 #ifdef _MSC_VER
00027 #pragma warning (disable : 4786) // identifier was truncated to '255' characters in the browser information
00028 #endif // def _MSC_VER
00029 
00030 #include <map>
00031 
00032 #include <wx/variant.h>
00033 
00034 #include <wx/exception.h>
00035 #include <wx/dbi/types.h>
00036 #include <wx/dbi/record.h>
00037 
00038 namespace wx
00039 {
00040 
00062 namespace DBI
00063 {
00064 
00065 /*
00066 To do:
00067 - Named bind parameters
00068 */
00069 
00070 #define DATABASE_HOST     wxT("Host")
00071 #define DATABASE_NAME     wxT("Name")
00072 #define DATABASE_LOGON    wxT("Logon")
00073 #define DATABASE_PASSWORD wxT("Password")
00074 
00075 class Statement;
00076 
00082 class Database
00083   {
00084   // friends, classes, enums and types
00085 
00086   public:
00091     class ConnectionInfo : private std::map<wxString, wxString>
00092       {
00093       public:
00094         ConnectionInfo()
00095           {}
00096         ConnectionInfo(const ConnectionInfo& cni);
00097         ConnectionInfo& operator=(const ConnectionInfo& cni);
00098 
00099       public:
00105         void Set(const wxString& sName, const wxString& sValue);
00106     
00113         wxString  Get(const wxString& sName) const;
00114     
00120         bool IsSet(const wxString& sName) const;
00121       };
00122 
00123   // Constructors/destructors
00124   public:
00128     Database()
00129       {}
00130     
00135     virtual ~Database()
00136       {}
00137 
00138   // Operators
00139 
00140   // Methods
00141   public:
00142     // Connection
00143 
00160     virtual void Connect(const ConnectionInfo& cni)     = 0;
00161 
00165     virtual void Disconnect()                           = 0;
00166 
00170     virtual bool IsConnected()                          = 0;
00171 
00172     // Transactions
00176     virtual void Begin()
00177       {
00178       wxLogFatalError(wxT("Database::Begin() Transaction support not implemented"));
00179       }
00180 
00184     virtual void Rollback()
00185       {
00186       wxLogFatalError(wxT("Database::Rollback() Transaction support not implemented"));
00187       }
00188 
00192     virtual void Commit()
00193       {
00194       wxLogFatalError(wxT("Database::Commit() Transaction support not implemented"));
00195       }
00196 
00197     // Queries
00198 
00205     virtual Statement * Prepare
00206       (
00207       const wxString& sQuery
00208       )                                                 = 0;
00209 
00210     // Database info
00211 
00216     virtual wxArrayString GetDatabases()                = 0;
00217 
00223     virtual bool DatabaseExists
00224       (
00225       const wxString& sDatabaseName
00226       )                                                 = 0;
00227 
00231     virtual wxArrayString GetTables()                   = 0;
00232 
00238     virtual bool TableExists
00239       (
00240       const wxString& sTableName
00241       )                                                 = 0;
00242 
00243   // Members
00244   protected:
00245     ConnectionInfo m_cni;
00246   };
00247 
00248 class Statement
00249   {
00250   // friends, classes, enums and types
00251 
00252   // Constructors/destructors
00253   public:
00254     Statement(Database * pdbOwner, const wxString& sNewQuery);
00255     virtual ~Statement()
00256       {}
00257 
00258   // Operators
00259 
00260   // Methods
00261   public:
00262 
00267     wxString            GetQuery();
00268     virtual bool        DataAvailable()                 = 0;
00269     virtual void ExecutePrepared
00270       (
00271       const ArrayRecord& raParameters = ArrayRecord()
00272       )                                                 = 0;
00273     virtual void ExecuteTemporary
00274       (
00275       const ArrayRecord& raParameters = ArrayRecord()
00276       )                                                 = 0;
00277     void  Fetch(ArrayRecord& ar);
00278     void  Fetch(HashRecord& hr);
00279     void  Fetch(ArrayRecordArray& ara);
00280     void  Fetch(HashRecordArray& hra);
00281 
00287     virtual long  GetLastInsertId();
00288 
00289   protected:
00290     virtual int   GetFieldCount()                       = 0;
00291     virtual void  MoveNext()                            = 0;
00292     virtual void  GetFieldValue
00293       (
00294       int nIndex,
00295       wxVariant&  v
00296       )                                                 = 0;
00297     virtual wxString GetFieldName
00298       (
00299       int nIndex
00300       )                                                 = 0;
00301 
00302   // Members
00303   protected:
00304     Database *        pdb;
00305     wxString          sQuery;
00306   };
00307 
00308 class StatementCache
00309   {
00310   // friends, classes, enums and types
00311   private:
00312     typedef std::map<wxString, Statement *> Cache;
00313 
00314   // Constructors/destructors
00315   public:
00316     StatementCache(Database * pdbNew);
00317     virtual ~StatementCache();
00318   private:
00319     StatementCache();
00320 
00321   // Methods
00322   public:
00330     virtual void CacheExecute
00331       (
00332       const wxString&     sName,
00333       const wxString&     sQuery,
00334       const ArrayRecord&  arParameters = ArrayRecord()
00335       );
00336 
00345     virtual void CacheExecute
00346       (
00347       const wxString&     sName,
00348       const wxString&     sQuery,
00349       const ArrayRecord&  arParameters,
00350       wxVariant&          v
00351       );
00352 
00361     virtual void CacheExecute
00362       (
00363       const wxString&     sName,
00364       const wxString&     sQuery,
00365       const ArrayRecord&  arParameters,
00366       ArrayRecord&        arResult
00367       );
00368 
00377     virtual void CacheExecute
00378       (
00379       const wxString&     sName,
00380       const wxString&     sQuery,
00381       const ArrayRecord&  arParameters,
00382       HashRecord&         hrResult
00383       );
00384 
00393     virtual void CacheExecute
00394       (
00395       const wxString&     sName,
00396       const wxString&     sQuery,
00397       const ArrayRecord&  arParameters,
00398       ArrayRecordArray&   araResult
00399       );
00400 
00409     virtual void CacheExecute
00410       (
00411       const wxString&     sName,
00412       const wxString&     sQuery,
00413       const ArrayRecord&  arParameters,
00414       HashRecordArray&    hraResult
00415       );
00416 
00428     virtual void CacheExecuteInsert
00429       (
00430       const wxString&     sName,
00431       const wxString&     sQuery,
00432       const ArrayRecord&  arParameters,
00433       long&               nLastInsertId
00434       );
00435 
00442     virtual void ExecuteTemporary
00443       (
00444       const wxString&     sQuery,
00445       const ArrayRecord&  arParameters = ArrayRecord()
00446       );
00447 
00456     virtual void ExecuteTemporary
00457       (
00458       const wxString&     sQuery,
00459       const ArrayRecord&  arParameters,
00460       ArrayRecordArray&   araResult
00461       );
00462 
00463     virtual void Clear();
00464 
00465   private:
00466     Statement * HandleCaching
00467       (
00468       const wxString& sName,
00469       const wxString& sQuery
00470       );
00471 
00476     void  Delete(const wxString& sName);
00477 
00482     bool  Exists(const wxString& sName);
00483 
00484   protected:
00485     Cache           cch;
00486     Database *      pdb;
00487   };
00488 
00489 } // namespace DBI
00490 
00491 } // namespace wx
00492 
00493 #ifdef wxDBI_POSTGRES
00494 #include <wx/dbi/postgres.h>
00495 #endif // def wxDBI_POSTGRES
00496 #ifdef wxDBI_SQLITE
00497 #include <wx/dbi/sqlite.h>
00498 #endif // def wxDBI_SQLITE
00499 
00500 #endif // ndef __wx_dbi_h__

Generated on Wed Jan 25 08:13:08 2006 for Sherpa wxWidgets Classes by doxygen 1.3.6