X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/081eb1b120c1bc9147582cff84de756b4a3a63af..d0af5538d676fdc5f7620233ee24f43832b80bff:/src/common/db.cpp diff --git a/src/common/db.cpp b/src/common/db.cpp index 39a224f14c..4912134e0b 100644 --- a/src/common/db.cpp +++ b/src/common/db.cpp @@ -34,53 +34,30 @@ // SYNOPSIS START // SYNOPSIS STOP */ +#ifdef __GNUG__ + #pragma implementation "db.h" +#endif #include "wx/wxprec.h" - -// Use this line for wxWindows v1.x -//#include "wx_ver.h" -// Use this line for wxWindows v2.x -#include "wx/version.h" - -#if wxMAJOR_VERSION == 2 - #ifdef __GNUG__ - #pragma implementation "db.h" - #endif +#ifdef __BORLANDC__ + #pragma hdrstop #endif #ifdef DBDEBUG_CONSOLE #include "wx/ioswrap.h" #endif -#ifdef __BORLANDC__ - #pragma hdrstop -#endif //__BORLANDC__ - -#if wxMAJOR_VERSION == 2 - #ifndef WX_PRECOMP - #include "wx/string.h" - #include "wx/object.h" - #include "wx/list.h" - #include "wx/utils.h" - #include "wx/msgdlg.h" - #include "wx/log.h" - #endif - #include "wx/filefn.h" - #include "wx/wxchar.h" -#endif - - -#if wxMAJOR_VERSION == 1 -# if defined(wx_msw) || defined(wx_x) -# ifdef WX_PRECOMP -# include "wx_prec.h" -# else -# include "wx.h" -# endif -# endif -# define wxUSE_ODBC 1 +#ifndef WX_PRECOMP + #include "wx/string.h" + #include "wx/object.h" + #include "wx/list.h" + #include "wx/utils.h" + #include "wx/msgdlg.h" + #include "wx/log.h" #endif +#include "wx/filefn.h" +#include "wx/wxchar.h" #if wxUSE_ODBC @@ -90,11 +67,7 @@ #include #include -#if wxMAJOR_VERSION == 1 - #include "db.h" -#elif wxMAJOR_VERSION == 2 - #include "wx/db.h" -#endif +#include "wx/db.h" WXDLLEXPORT_DATA(wxDbList*) PtrBegDbList = 0; @@ -121,6 +94,7 @@ static wxString SQLLOGfn = SQL_LOG_FILENAME; // connection wxChar DBerrorList[DB_MAX_ERROR_HISTORY][DB_MAX_ERROR_MSG_LEN]; + // This type defines the return row-struct form // SQLTablePrivileges, and is used by wxDB::TablePrivileges. typedef struct @@ -475,7 +449,7 @@ bool wxDbInf::Initialize() } // wxDbInf::Initialize() -/********** wxDb Constructors **********/ +/********** wxDb Constructor **********/ wxDb::wxDb(const HENV &aHenv, bool FwdOnlyCursors) { // Copy the HENV into the db class @@ -486,6 +460,19 @@ wxDb::wxDb(const HENV &aHenv, bool FwdOnlyCursors) } // wxDb::wxDb() +/********** wxDb Destructor **********/ +wxDb::~wxDb() +{ + wxASSERT_MSG(!IsCached(),wxT("Cached connections must not be manually deleted, use\nwxDbFreeConnection() or wxDbCloseConnections().")); + + if (IsOpen()) + { + Close(); + } +} // wxDb destructor + + + /********** PRIVATE! wxDb::initialize PRIVATE! **********/ /********** wxDb::initialize() **********/ void wxDb::initialize() @@ -550,6 +537,7 @@ void wxDb::initialize() // Mark database as not open as of yet dbIsOpen = FALSE; + dbIsCached = FALSE; } // wxDb::initialize() @@ -733,7 +721,7 @@ bool wxDb::Open(const wxString &Dsn, const wxString &Uid, const wxString &AuthSt // Date/Time if (Dbms() != dbmsDBASE) { - if (! getDataTypeInfo(SQL_TIMESTAMP,typeInfDate)) + if (!getDataTypeInfo(SQL_TIMESTAMP,typeInfDate)) return(FALSE); else typeInfDate.FsqlType = SQL_TIMESTAMP; @@ -1415,7 +1403,7 @@ void wxDb::Close(void) { s.Printf(wxT("(%-20s) tableID:[%6lu] pDb:[%p]"), tiu->tableName,tiu->tableID,tiu->pDb); s2.Printf(wxT("Orphaned found using pDb:[%p]"),this); - wxLogDebug (s,s2); + wxLogDebug (s.c_str(),s2.c_str()); } pNode = pNode->Next(); } @@ -1426,7 +1414,7 @@ void wxDb::Close(void) for (i = 0; i < DB_MAX_ERROR_HISTORY; i++) wxStrcpy(DBerrorList[i], errorList[i]); - dbmsType = dbmsUNIDENTIFIED; + dbmsType = dbmsUNIDENTIFIED; dbIsOpen = FALSE; } // wxDb::Close() @@ -1499,7 +1487,7 @@ bool wxDb::DispAllErrors(HENV aHenv, HDBC aHdbc, HSTMT aHstmt) } } - return(FALSE); // This function always returns false. + return(FALSE); // This function always returns FALSE. } // wxDb::DispAllErrors() @@ -1881,7 +1869,7 @@ bool wxDb::DropView(const wxString &viewName) } // Commit the transaction - if (! CommitTrans()) + if (!CommitTrans()) return(FALSE); return TRUE; @@ -2112,7 +2100,7 @@ wxDbColInf *wxDb::GetColumns(wxChar *tableName[], const wxChar *userID) */ { UWORD noCols = 0; - UWORD colNo = 0; + UWORD colNo = 0; wxDbColInf *colInf = 0; RETCODE retcode; @@ -2769,7 +2757,7 @@ wxDbColInf *wxDb::GetColumns(const wxString &tableName, int *numCols, const wxCh /********** wxDb::GetColumnCount() **********/ -UWORD wxDb::GetColumnCount(const wxString &tableName, const wxChar *userID) +int wxDb::GetColumnCount(const wxString &tableName, const wxChar *userID) /* * Returns a count of how many columns are in a table. * If an error occurs in computing the number of columns @@ -3085,7 +3073,7 @@ bool wxDb::Catalog(const wxChar *userID, const wxString &fileName) bool wxDb::TableExists(const wxString &tableName, const wxChar *userID, const wxString &tablePath) /* - * Table name can refer to a table, view, alias or synonym. Returns true + * Table name can refer to a table, view, alias or synonym. Returns TRUE * if the object exists in the database. This function does not indicate * whether or not the user has privleges to query or perform other functions * on the table. @@ -3611,7 +3599,7 @@ wxDb WXDLLEXPORT *wxDbGetConnection(wxDbConnectInf *pDbConfig, bool FwdOnlyCurso // Initialize new node in the linked list pList->PtrNext = 0; pList->Free = FALSE; - pList->Dsn = pDbConfig->GetDsn(); //glt - will this assignment work? + pList->Dsn = pDbConfig->GetDsn(); pList->Uid = pDbConfig->GetUserID(); pList->AuthStr = pDbConfig->GetPassword(); @@ -3627,6 +3615,7 @@ wxDb WXDLLEXPORT *wxDbGetConnection(wxDbConnectInf *pDbConfig, bool FwdOnlyCurso // Connect to the datasource if (opened) { + pList->PtrDb->setCached(TRUE); // Prevent a user from deleting a cached connection pList->PtrDb->SetSqlLogging(SQLLOGstate,SQLLOGfn,TRUE); return(pList->PtrDb); } @@ -3675,6 +3664,7 @@ void WXDLLEXPORT wxDbCloseConnections(void) pNext = pList->PtrNext; // Save the pointer to next pList->PtrDb->CommitTrans(); // Commit any open transactions on wxDb object pList->PtrDb->Close(); // Close the wxDb object + pList->PtrDb->setCached(FALSE); // Allows deletion of the wxDb instance delete pList->PtrDb; // Deletes the wxDb object delete pList; // Deletes the linked list object } @@ -3703,6 +3693,52 @@ int WXDLLEXPORT wxDbConnectionsInUse(void) } // wxDbConnectionsInUse() + +/********** wxDbLogExtendedErrorMsg() **********/ +// DEBUG ONLY function +const wxChar WXDLLEXPORT *wxDbLogExtendedErrorMsg(const wxChar *userText, wxDb *pDb, + char *ErrFile, int ErrLine) +{ + static wxString msg; + msg = userText; + + wxString tStr; + + if (ErrFile || ErrLine) + { + msg += wxT("File: "); + msg += ErrFile; + msg += wxT(" Line: "); + tStr.Printf(wxT("%d"),ErrLine); + msg += tStr.c_str(); + msg += wxT("\n"); + } + + msg.Append (wxT("\nODBC errors:\n")); + msg += wxT("\n"); + + // Display errors for this connection + int i; + for (i = 0; i < DB_MAX_ERROR_HISTORY; i++) + { + if (pDb->errorList[i]) + { + msg.Append(pDb->errorList[i]); + if (wxStrcmp(pDb->errorList[i],wxT("")) != 0) + msg.Append(wxT("\n")); + // Clear the errmsg buffer so the next error will not + // end up showing the previous error that have occurred + wxStrcpy(pDb->errorList[i],wxT("")); + } + } + msg += wxT("\n"); + + wxLogDebug(msg.c_str()); + + return msg.c_str(); +} // wxDbLogExtendedErrorMsg() + + /********** wxDbSqlLog() **********/ bool wxDbSqlLog(wxDbSqlLogState state, const wxChar *filename) {