From: George Tasker Date: Sat, 3 Feb 2001 17:48:06 +0000 (+0000) Subject: wxDbConnectInf is now converted to a class. Fully backward compatible with all versi... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/942e67c3a36319dbdb32df86a50b475c05900197 wxDbConnectInf is now converted to a class. Fully backward compatible with all version except the last checkin I did (changed datatypes back to what they were before for in this class). Class now has all accessors and member functions. Functions added to remove need for calling SQLAllocEnv() and SQLFreeEnv(). General gcc changes in the Printf() statement when using wxStrings as params to Printf() General code clean up, correcting comments, added more comments git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9273 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/db.cpp b/src/common/db.cpp index 21c1313c12..a58740df04 100644 --- a/src/common/db.cpp +++ b/src/common/db.cpp @@ -135,100 +135,144 @@ typedef struct } wxDbTablePrivilegeInfo; -/********** wxDbColFor Constructor **********/ -wxDbColFor::wxDbColFor() +/********** wxDbConnectInf Constructor - form 1 **********/ +wxDbConnectInf::wxDbConnectInf() { - s_Field.Empty(); - int i; - for (i=0; i<7; i++) + Initialize(); +} // Constructor + + +/********** wxDbConnectInf Constructor - form 2 **********/ +wxDbConnectInf::wxDbConnectInf(HENV Henv, const wxString &Dsn, const wxString &UserID, + const wxString &Password, const wxString &DefaultDir, + const wxString &FileType, const wxString &Description) +{ + wxASSERT(Dsn.Length()); + + Initialize(); + + if (Henv) + SetHenv(Henv); + else + AllocHenv(); + + SetDsn(Dsn); + SetUserID(UserID); + SetPassword(Password); + SetDescription(Description); + SetFileType(FileType); + SetDefaultDir(DefaultDir); +} // wxDbConnectInf Constructor + + +wxDbConnectInf::~wxDbConnectInf() +{ + if (freeHenvOnDestroy) { - s_Format[i].Empty(); - s_Amount[i].Empty(); - i_Amount[i] = 0; + FreeHenv(); } - i_Nation = 0; // 0=EU, 1=UK, 2=International, 3=US - i_dbDataType = 0; - i_sqlDataType = 0; - Format(1,DB_DATA_TYPE_VARCHAR,0,0,0); // the Function that does the work -} // wxDbColFor::wxDbColFor() +} // wxDbConnectInf Destructor -wxDbColFor::~wxDbColFor() + +/********** wxDbConnectInf::Initialize() **********/ +bool wxDbConnectInf::Initialize() { -} // wxDbColFor::~wxDbColFor() + freeHenvOnDestroy = FALSE; + Henv = 0; + Dsn[0] = 0; + Uid[0] = 0; + AuthStr[0] = 0; + Description.Empty(); + FileType.Empty(); + DefaultDir.Empty(); -/********** wxDbColInf Con / Destructor **********/ -wxDbColInf::wxDbColInf() + return TRUE; +} // wxDbConnectInf::Initialize() + + +/********** wxDbConnectInf::AllocHenv() **********/ +bool wxDbConnectInf::AllocHenv() { - catalog[0] = 0; - schema[0] = 0; - tableName[0] = 0; - colName[0] = 0; - sqlDataType = 0; - typeName[0] = 0; - columnSize = 0; - bufferLength = 0; - decimalDigits = 0; - numPrecRadix = 0; - nullable = 0; - remarks[0] = 0; - dbDataType = 0; - PkCol = 0; - PkTableName[0] = 0; - FkCol = 0; - FkTableName[0] = 0; - pColFor = NULL; -} // wxDbColInf::wxDbColFor() + // This is here to help trap if you are getting a new henv + // without releasing an existing henv + wxASSERT(!Henv); + + // Initialize the ODBC Environment for Database Operations + if (SQLAllocEnv(&Henv) != SQL_SUCCESS) + { + wxLogDebug(wxT("A problem occured while trying to get a connection to the data source")); + return FALSE; + } + freeHenvOnDestroy = TRUE; -wxDbColInf::~wxDbColInf() + return TRUE; +} // wxDbConnectInf::AllocHenv() + + +void wxDbConnectInf::FreeHenv() { - if (pColFor) - delete pColFor; - pColFor = NULL; -} // wxDbColInf::~wxDbColInf() + wxASSERT(Henv); + if (Henv) + SQLFreeEnv(Henv); -/********** wxDbTableInf Constructor ********/ -wxDbTableInf::wxDbTableInf() + Henv = 0; + freeHenvOnDestroy = FALSE; + +} // wxDbConnectInf::FreeHenv() + + +void wxDbConnectInf::SetDsn(const wxString &dsn) { - tableName[0] = 0; - tableType[0] = 0; - tableRemarks[0] = 0; - numCols = 0; - pColInf = NULL; -} // wxDbTableInf::wxDbTableFor() + wxASSERT(dsn.Length() < sizeof(Dsn)); + wxStrcpy(Dsn,dsn); +} // wxDbConnectInf::SetDsn() -/********** wxDbTableInf Constructor ********/ -wxDbTableInf::~wxDbTableInf() + +void wxDbConnectInf::SetUserID(const wxString &uid) { - if (pColInf) - delete [] pColInf; - pColInf = NULL; -} // wxDbTableInf::~wxDbTableInf() + wxASSERT(uid.Length() < sizeof(Uid)); + wxStrcpy(Uid,uid); +} // wxDbConnectInf::SetUserID() -/********** wxDbInf Constructor *************/ -wxDbInf::wxDbInf() +void wxDbConnectInf::SetPassword(const wxString &password) { - catalog[0] = 0; - schema[0] = 0; - numTables = 0; - pTableInf = NULL; -} // wxDbInf::wxDbFor() + wxASSERT(password.Length() < sizeof(AuthStr)); + + wxStrcpy(AuthStr,password); +} // wxDbConnectInf::SetPassword() -/********** wxDbInf Destructor *************/ -wxDbInf::~wxDbInf() + +/********** wxDbColFor Constructor **********/ +wxDbColFor::wxDbColFor() { - if (pTableInf) - delete [] pTableInf; - pTableInf = NULL; -} // wxDbInf::~wxDbInf() + s_Field.Empty(); + int i; + for (i=0; i<7; i++) + { + s_Format[i].Empty(); + s_Amount[i].Empty(); + i_Amount[i] = 0; + } + i_Nation = 0; // 0=EU, 1=UK, 2=International, 3=US + i_dbDataType = 0; + i_sqlDataType = 0; + Format(1,DB_DATA_TYPE_VARCHAR,0,0,0); // the Function that does the work +} // wxDbColFor::wxDbColFor() +wxDbColFor::~wxDbColFor() +{ +} // wxDbColFor::~wxDbColFor() + + +/********** wxDbColFor::Format() **********/ int wxDbColFor::Format(int Nation, int dbDataType, SWORD sqlDataType, short columnSize, short decimalDigits) { @@ -314,18 +358,90 @@ int wxDbColFor::Format(int Nation, int dbDataType, SWORD sqlDataType, } // wxDbColFor::Format() +/********** wxDbColInf Constructor **********/ +wxDbColInf::wxDbColInf() +{ + catalog[0] = 0; + schema[0] = 0; + tableName[0] = 0; + colName[0] = 0; + sqlDataType = 0; + typeName[0] = 0; + columnSize = 0; + bufferLength = 0; + decimalDigits = 0; + numPrecRadix = 0; + nullable = 0; + remarks[0] = 0; + dbDataType = 0; + PkCol = 0; + PkTableName[0] = 0; + FkCol = 0; + FkTableName[0] = 0; + pColFor = NULL; +} // wxDbColInf::wxDbColInf() + + +/********** wxDbColInf Destructor ********/ +wxDbColInf::~wxDbColInf() +{ + if (pColFor) + delete pColFor; + pColFor = NULL; +} // wxDbColInf::~wxDbColInf() + + +/********** wxDbTableInf Constructor ********/ +wxDbTableInf::wxDbTableInf() +{ + tableName[0] = 0; + tableType[0] = 0; + tableRemarks[0] = 0; + numCols = 0; + pColInf = NULL; +} // wxDbTableInf::wxDbTableInf() + + +/********** wxDbTableInf Constructor ********/ +wxDbTableInf::~wxDbTableInf() +{ + if (pColInf) + delete [] pColInf; + pColInf = NULL; +} // wxDbTableInf::~wxDbTableInf() + + +/********** wxDbInf Constructor *************/ +wxDbInf::wxDbInf() +{ + catalog[0] = 0; + schema[0] = 0; + numTables = 0; + pTableInf = NULL; +} // wxDbInf::wxDbFor() + + +/********** wxDbInf Destructor *************/ +wxDbInf::~wxDbInf() +{ + if (pTableInf) + delete [] pTableInf; + pTableInf = NULL; +} // wxDbInf::~wxDbInf() + + /********** wxDb Constructors **********/ wxDb::wxDb(HENV &aHenv, bool FwdOnlyCursors) { // Copy the HENV into the db class henv = aHenv; fwdOnlyCursors = FwdOnlyCursors; - initialize(); + Initialize(); } // wxDb::wxDb() -/********** PRIVATE! wxDb::initialize PRIVATE! **********/ -void wxDb::initialize() +/********** wxDb::Initialize() **********/ +void wxDb::Initialize() /* * Private member function that sets all wxDb member variables to * known values at creation of the wxDb @@ -381,10 +497,10 @@ void wxDb::initialize() // Mark database as not open as of yet dbIsOpen = FALSE; -} // wxDb::initialize() +} // wxDb::Initialize() -/********** PRIVATE! wxDb::initialize PRIVATE! **********/ +/********** PRIVATE! wxDb::convertUserID PRIVATE! **********/ // // NOTE: Return value from this function MUST be copied // immediately, as the value is not good after @@ -1228,7 +1344,7 @@ void wxDb::Close(void) // Copy the error messages to a global variable int i; for (i = 0; i < DB_MAX_ERROR_HISTORY; i++) - wxStrcpy(DBerrorList[i],errorList[i]); + wxStrcpy(DBerrorList[i], errorList[i]); dbmsType = dbmsUNIDENTIFIED; dbIsOpen = FALSE; @@ -1659,7 +1775,7 @@ bool wxDb::DropView(const wxString &viewName) */ wxString sqlStmt; - sqlStmt.Printf(wxT("DROP VIEW %s"), viewName); + sqlStmt.Printf(wxT("DROP VIEW %s"), viewName.c_str()); WriteSqlLog(sqlStmt); @@ -2894,9 +3010,9 @@ bool wxDb::TableExists(const wxString &tableName, const wxChar *userID, const wx { wxString dbName; if (tablePath.Length()) - dbName.Printf(wxT("%s/%s.dbf"),tablePath,tableName); + dbName.Printf(wxT("%s/%s.dbf"), tablePath.c_str(), tableName.c_str()); else - dbName.Printf(wxT("%s.dbf"),tableName); + dbName.Printf(wxT("%s.dbf"), tableName.c_str()); bool exists; exists = wxFileExists(dbName); @@ -3295,8 +3411,8 @@ bool wxDb::ModifyColumn(const wxString &tableName, const wxString &columnName, } // create the SQL statement - sqlStmt.Printf(wxT("ALTER TABLE %s %s %s %s"), tableName, alterSlashModify, - columnName, dataTypeName); + sqlStmt.Printf(wxT("ALTER TABLE %s %s %s %s"), tableName.c_str(), alterSlashModify.c_str(), + columnName.c_str(), dataTypeName.c_str()); // For varchars only, append the size of the column if (dataType == DB_DATA_TYPE_VARCHAR) @@ -3338,15 +3454,15 @@ wxDb WXDLLEXPORT *wxDbGetConnection(wxDbConnectInf *pDbConfig, bool FwdOnlyCurso // name and must currently not be in use. if (pList->Free && (pList->PtrDb->FwdOnlyCursors() == FwdOnlyCursors) && - (!wxStrcmp(pDbConfig->Dsn, pList->Dsn))) // Found a free connection + (!wxStrcmp(pDbConfig->GetDsn(), pList->Dsn))) // Found a free connection { pList->Free = FALSE; return(pList->PtrDb); } - if (!wxStrcmp(pDbConfig->Dsn, pList->Dsn) && - !wxStrcmp(pDbConfig->Uid, pList->Uid) && - !wxStrcmp(pDbConfig->AuthStr, pList->AuthStr)) + if (!wxStrcmp(pDbConfig->GetDsn(), pList->Dsn) && + !wxStrcmp(pDbConfig->GetUserID(), pList->Uid) && + !wxStrcmp(pDbConfig->GetPassword(), pList->AuthStr)) matchingDbConnection = pList->PtrDb; } @@ -3371,16 +3487,16 @@ wxDb WXDLLEXPORT *wxDbGetConnection(wxDbConnectInf *pDbConfig, bool FwdOnlyCurso // Initialize new node in the linked list pList->PtrNext = 0; pList->Free = FALSE; - pList->Dsn = pDbConfig->Dsn; - pList->Uid = pDbConfig->Uid; - pList->AuthStr = pDbConfig->AuthStr; + pList->Dsn = pDbConfig->GetDsn(); //glt - will this assignment work? + pList->Uid = pDbConfig->GetUserID(); + pList->AuthStr = pDbConfig->GetPassword(); - pList->PtrDb = new wxDb(pDbConfig->Henv,FwdOnlyCursors); + pList->PtrDb = new wxDb((HENV)pDbConfig->GetHenvAddress(),FwdOnlyCursors); bool opened = FALSE; if (!matchingDbConnection) - opened = pList->PtrDb->Open(pDbConfig->Dsn, pDbConfig->Uid, pDbConfig->AuthStr); + opened = pList->PtrDb->Open(pDbConfig->GetDsn(), pDbConfig->GetUserID(), pDbConfig->GetPassword()); else opened = pList->PtrDb->Open(matchingDbConnection);