X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0907ea9c5826258c7fda17f9db921539f5cde5ea..6181cef53222dc7f04e0e52fc4a2d399709a076e:/src/common/db.cpp diff --git a/src/common/db.cpp b/src/common/db.cpp index 6f07ddc635..1cc07c08f1 100644 --- a/src/common/db.cpp +++ b/src/common/db.cpp @@ -18,16 +18,7 @@ // Created: 9.96 // RCS-ID: $Id$ // Copyright: (c) 1996 Remstar International, Inc. -// Licence: wxWindows licence, plus: -// Notice: This class library and its intellectual design are free of charge for use, -// modification, enhancement, debugging under the following conditions: -// 1) These classes may only be used as part of the implementation of a -// wxWindows-based application -// 2) All enhancements and bug fixes are to be submitted back to the wxWindows -// user groups free of all charges for use with the wxWindows library. -// 3) These classes may not be distributed as part of any other class library, -// DLL, text (written or electronic), other than a complete distribution of -// the wxWindows GUI development toolkit. +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// /* @@ -115,7 +106,7 @@ typedef struct wxDbConnectInf::wxDbConnectInf() { Henv = 0; - freeHenvOnDestroy = FALSE; + freeHenvOnDestroy = false; Initialize(); } // Constructor @@ -127,7 +118,7 @@ wxDbConnectInf::wxDbConnectInf(HENV henv, const wxString &dsn, const wxString &u const wxString &fileType, const wxString &description) { Henv = 0; - freeHenvOnDestroy = FALSE; + freeHenvOnDestroy = false; Initialize(); @@ -158,7 +149,7 @@ wxDbConnectInf::~wxDbConnectInf() /********** wxDbConnectInf::Initialize() **********/ bool wxDbConnectInf::Initialize() { - freeHenvOnDestroy = FALSE; + freeHenvOnDestroy = false; if (freeHenvOnDestroy && Henv) FreeHenv(); @@ -172,9 +163,9 @@ bool wxDbConnectInf::Initialize() FileType.Empty(); DefaultDir.Empty(); - useConnectionStr = FALSE; + useConnectionStr = false; - return TRUE; + return true; } // wxDbConnectInf::Initialize() @@ -189,12 +180,12 @@ bool wxDbConnectInf::AllocHenv() if (SQLAllocEnv(&Henv) != SQL_SUCCESS) { wxLogDebug(wxT("A problem occured while trying to get a connection to the data source")); - return FALSE; + return false; } - freeHenvOnDestroy = TRUE; + freeHenvOnDestroy = true; - return TRUE; + return true; } // wxDbConnectInf::AllocHenv() @@ -206,7 +197,7 @@ void wxDbConnectInf::FreeHenv() SQLFreeEnv(Henv); Henv = 0; - freeHenvOnDestroy = FALSE; + freeHenvOnDestroy = false; } // wxDbConnectInf::FreeHenv() @@ -236,7 +227,7 @@ void wxDbConnectInf::SetPassword(const wxString &password) void wxDbConnectInf::SetConnectionStr(const wxString &connectStr) { wxASSERT(connectStr.Length() < sizeof(ConnectionStr)); - + useConnectionStr = wxStrlen(connectStr) > 0; wxStrcpy(ConnectionStr, connectStr); @@ -250,11 +241,6 @@ wxDbColFor::wxDbColFor() } // wxDbColFor::wxDbColFor() -wxDbColFor::~wxDbColFor() -{ -} // wxDbColFor::~wxDbColFor() - - /********** wxDbColFor::Initialize() **********/ void wxDbColFor::Initialize() { @@ -275,7 +261,7 @@ void wxDbColFor::Initialize() /********** wxDbColFor::Format() **********/ int wxDbColFor::Format(int Nation, int dbDataType, SWORD sqlDataType, - short columnSize, short decimalDigits) + short columnLength, short decimalDigits) { // ---------------------------------------------------------------------------------------- // -- 19991224 : mj10777 : Create @@ -328,8 +314,8 @@ int wxDbColFor::Format(int Nation, int dbDataType, SWORD sqlDataType, if (decimalDigits == 0) decimalDigits = 2; tempStr = wxT("%"); - tempStr.Printf(wxT("%s%d.%d"),tempStr.c_str(),columnSize,decimalDigits); - s_Field.Printf(wxT("%sf"),tempStr.c_str()); + tempStr.Printf(wxT("%s%d.%d"), tempStr.c_str(),columnLength, decimalDigits); + s_Field.Printf(wxT("%sf"), tempStr.c_str()); break; case DB_DATA_TYPE_DATE: if (i_Nation == 0) // timestamp YYYY-MM-DD HH:MM:SS.SSS (tested for SYBASE) @@ -354,17 +340,16 @@ int wxDbColFor::Format(int Nation, int dbDataType, SWORD sqlDataType, } break; case DB_DATA_TYPE_BLOB: - s_Field.Printf(wxT("Unable to format(%d)-SQL(%d)"),dbDataType,sqlDataType); // + s_Field.Printf(wxT("Unable to format(%d)-SQL(%d)"), dbDataType,sqlDataType); // break; default: - s_Field.Printf(wxT("Unknown Format(%d)-SQL(%d)"),dbDataType,sqlDataType); // + s_Field.Printf(wxT("Unknown Format(%d)-SQL(%d)"), dbDataType,sqlDataType); // break; }; return TRUE; } // wxDbColFor::Format() - /********** wxDbColInf Constructor **********/ wxDbColInf::wxDbColInf() { @@ -389,8 +374,8 @@ bool wxDbColInf::Initialize() colName[0] = 0; sqlDataType = 0; typeName[0] = 0; - columnSize = 0; - bufferLength = 0; + columnLength = 0; + bufferSize = 0; decimalDigits = 0; numPrecRadix = 0; nullable = 0; @@ -402,7 +387,7 @@ bool wxDbColInf::Initialize() FkTableName[0] = 0; pColFor = NULL; - return TRUE; + return true; } // wxDbColInf::Initialize() @@ -430,7 +415,7 @@ bool wxDbTableInf::Initialize() numCols = 0; pColInf = NULL; - return TRUE; + return true; } // wxDbTableInf::Initialize() @@ -458,7 +443,7 @@ bool wxDbInf::Initialize() numTables = 0; pTableInf = NULL; - return TRUE; + return true; } // wxDbInf::Initialize() @@ -539,7 +524,7 @@ void wxDb::initialize() typeInfBlob.MaximumScale = 0; // Error reporting is turned OFF by default - silent = TRUE; + silent = true; // Allocate a data source connection handle if (SQLAllocConnect(henv, &hdbc) != SQL_SUCCESS) @@ -549,9 +534,9 @@ void wxDb::initialize() DB_STATUS = 0; // Mark database as not open as of yet - dbIsOpen = FALSE; - dbIsCached = FALSE; - dbOpenedWithConnectionString = FALSE; + dbIsOpen = false; + dbIsCached = false; + dbOpenedWithConnectionString = false; } // wxDb::initialize() @@ -598,7 +583,7 @@ bool wxDb::open(bool failOnDataTypeUnsupported) */ // Mark database as open - dbIsOpen = TRUE; + dbIsOpen = true; // Allocate a statement handle for the database connection if (SQLAllocStmt(hdbc, &hstmt) != SQL_SUCCESS) @@ -606,11 +591,11 @@ bool wxDb::open(bool failOnDataTypeUnsupported) // Set Connection Options if (!setConnectionOptions()) - return(FALSE); + return false; // Query the data source for inf. about itself if (!getDbInfo(failOnDataTypeUnsupported)) - return(FALSE); + return false; // Query the data source regarding data type information @@ -656,7 +641,7 @@ bool wxDb::open(bool failOnDataTypeUnsupported) // VARCHAR = Variable length character string if (!getDataTypeInfo(SQL_VARCHAR, typeInfVarchar)) if (!getDataTypeInfo(SQL_CHAR, typeInfVarchar)) - return(FALSE); + return false; else typeInfVarchar.FsqlType = SQL_CHAR; else @@ -670,7 +655,7 @@ bool wxDb::open(bool failOnDataTypeUnsupported) if (!getDataTypeInfo(SQL_NUMERIC,typeInfFloat)) { if (failOnDataTypeUnsupported) - return(FALSE); + return false; } else typeInfFloat.FsqlType = SQL_NUMERIC; @@ -691,7 +676,7 @@ bool wxDb::open(bool failOnDataTypeUnsupported) if (!getDataTypeInfo(typeInfFloat.FsqlType, typeInfInteger)) { if (failOnDataTypeUnsupported) - return(FALSE); + return false; } else typeInfInteger.FsqlType = typeInfFloat.FsqlType; @@ -713,7 +698,7 @@ bool wxDb::open(bool failOnDataTypeUnsupported) #endif // SQL_DATETIME defined { if (failOnDataTypeUnsupported) - return(FALSE); + return false; } } else @@ -728,7 +713,7 @@ bool wxDb::open(bool failOnDataTypeUnsupported) if (!getDataTypeInfo(SQL_VARBINARY,typeInfBlob)) { if (failOnDataTypeUnsupported) - return(FALSE); + return false; } else typeInfBlob.FsqlType = SQL_VARBINARY; @@ -747,15 +732,15 @@ bool wxDb::open(bool failOnDataTypeUnsupported) #endif // Completed Successfully - return(TRUE); + return true; } bool wxDb::Open(const wxString& inConnectStr, bool failOnDataTypeUnsupported) { wxASSERT(inConnectStr.Length()); - dsn = ""; - uid = ""; - authStr = ""; + dsn = wxT(""); + uid = wxT(""); + authStr = wxT(""); RETCODE retcode; @@ -770,17 +755,19 @@ bool wxDb::Open(const wxString& inConnectStr, bool failOnDataTypeUnsupported) cout << wxT("SQLSetConnectOption(CURSOR_LIB) successful") << endl; else cout << wxT("SQLSetConnectOption(CURSOR_LIB) failed") << endl; +#else + wxUnusedVar(retcode); #endif } // Connect to the data source - UCHAR outConnectBuffer[SQL_MAX_CONNECTSTR_LEN+1]; // MS recommends at least 1k buffer + SQLTCHAR outConnectBuffer[SQL_MAX_CONNECTSTR_LEN+1]; // MS recommends at least 1k buffer short outConnectBufferLen; inConnectionStr = inConnectStr; - retcode = SQLDriverConnect(hdbc, NULL, (UCHAR FAR *)inConnectionStr.c_str(), - inConnectionStr.Length(), (UCHAR FAR *)outConnectBuffer, + retcode = SQLDriverConnect(hdbc, NULL, (SQLTCHAR FAR *)inConnectionStr.c_str(), + (SWORD)inConnectionStr.Length(), (SQLTCHAR FAR *)outConnectBuffer, sizeof(outConnectBuffer), &outConnectBufferLen, SQL_DRIVER_COMPLETE ); if ((retcode != SQL_SUCCESS) && @@ -789,7 +776,7 @@ bool wxDb::Open(const wxString& inConnectStr, bool failOnDataTypeUnsupported) outConnectBuffer[outConnectBufferLen] = 0; outConnectionStr = outConnectBuffer; - dbOpenedWithConnectionString = TRUE; + dbOpenedWithConnectionString = true; return open(failOnDataTypeUnsupported); } @@ -802,8 +789,8 @@ bool wxDb::Open(const wxString &Dsn, const wxString &Uid, const wxString &AuthSt uid = Uid; authStr = AuthStr; - inConnectionStr = ""; - outConnectionStr = ""; + inConnectionStr = wxT(""); + outConnectionStr = wxT(""); RETCODE retcode; @@ -879,13 +866,13 @@ bool wxDb::Open(wxDb *copyDb) if (copyDb->OpenedWithConnectionString()) { // Connect to the data source - UCHAR outConnectBuffer[SQL_MAX_CONNECTSTR_LEN+1]; + SQLTCHAR outConnectBuffer[SQL_MAX_CONNECTSTR_LEN+1]; short outConnectBufferLen; inConnectionStr = copyDb->GetConnectionInStr(); - retcode = SQLDriverConnect(hdbc, NULL, (UCHAR FAR *)inConnectionStr.c_str(), - inConnectionStr.Length(), (UCHAR FAR *)outConnectBuffer, + retcode = SQLDriverConnect(hdbc, NULL, (SQLTCHAR FAR *)inConnectionStr.c_str(), + (SWORD)inConnectionStr.Length(), (SQLTCHAR FAR *)outConnectBuffer, sizeof(outConnectBuffer), &outConnectBufferLen, SQL_DRIVER_COMPLETE); if ((retcode != SQL_SUCCESS) && @@ -894,7 +881,7 @@ bool wxDb::Open(wxDb *copyDb) outConnectBuffer[outConnectBufferLen] = 0; outConnectionStr = outConnectBuffer; - dbOpenedWithConnectionString = TRUE; + dbOpenedWithConnectionString = true; } else { @@ -917,7 +904,7 @@ bool wxDb::Open(wxDb *copyDb) */ // Mark database as open - dbIsOpen = TRUE; + dbIsOpen = true; // Allocate a statement handle for the database connection if (SQLAllocStmt(hdbc, &hstmt) != SQL_SUCCESS) @@ -925,7 +912,7 @@ bool wxDb::Open(wxDb *copyDb) // Set Connection Options if (!setConnectionOptions()) - return(FALSE); + return false; // Instead of Querying the data source for info about itself, it can just be copied // from the wxDb instance that was passed in (copyDb). @@ -1006,7 +993,7 @@ bool wxDb::Open(wxDb *copyDb) #endif // Completed Successfully - return(TRUE); + return true; } // wxDb::Open() 2 @@ -1020,11 +1007,14 @@ bool wxDb::setConnectionOptions(void) // I need to get the DBMS name here, because some of the connection options // are database specific and need to call the Dbms() function. - if (SQLGetInfo(hdbc, SQL_DBMS_NAME, (UCHAR*) dbInf.dbmsName, 40, &cb) != SQL_SUCCESS) + RETCODE retcode; + + retcode = SQLGetInfo(hdbc, SQL_DBMS_NAME, (UCHAR *) dbInf.dbmsName, sizeof(dbInf.dbmsName), &cb); + if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) return(DispAllErrors(henv, hdbc)); - SQLSetConnectOption(hdbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF); - SQLSetConnectOption(hdbc, SQL_OPT_TRACE, SQL_OPT_TRACE_OFF); + /* retcode = */ SQLSetConnectOption(hdbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF); + /* retcode = */ SQLSetConnectOption(hdbc, SQL_OPT_TRACE, SQL_OPT_TRACE_OFF); // SQLSetConnectOption(hdbc, SQL_TXN_ISOLATION, SQL_TXN_READ_COMMITTED); // No dirty reads // By default, MS Sql Server closes cursors on commit and rollback. The following @@ -1036,7 +1026,7 @@ bool wxDb::setConnectionOptions(void) { const long SQL_PRESERVE_CURSORS = 1204L; const long SQL_PC_ON = 1L; - SQLSetConnectOption(hdbc, SQL_PRESERVE_CURSORS, SQL_PC_ON); + /* retcode = */ SQLSetConnectOption(hdbc, SQL_PRESERVE_CURSORS, SQL_PC_ON); } // Display the connection options to verify them @@ -1044,15 +1034,17 @@ bool wxDb::setConnectionOptions(void) long l; cout << wxT("****** CONNECTION OPTIONS ******") << endl; - if (SQLGetConnectOption(hdbc, SQL_AUTOCOMMIT, &l) != SQL_SUCCESS) + retcode = SQLGetConnectOption(hdbc, SQL_AUTOCOMMIT, &l); + if (retcode != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); cout << wxT("AUTOCOMMIT: ") << (l == SQL_AUTOCOMMIT_OFF ? "OFF" : "ON") << endl; - if (SQLGetConnectOption(hdbc, SQL_ODBC_CURSORS, &l) != SQL_SUCCESS) + retcode = SQLGetConnectOption(hdbc, SQL_ODBC_CURSORS, &l); + if (retcode != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); cout << wxT("ODBC CURSORS: "); switch(l) - { + { case(SQL_CUR_USE_IF_NEEDED): cout << wxT("SQL_CUR_USE_IF_NEEDED"); break; @@ -1062,10 +1054,11 @@ bool wxDb::setConnectionOptions(void) case(SQL_CUR_USE_DRIVER): cout << wxT("SQL_CUR_USE_DRIVER"); break; - } - cout << endl; + } + cout << endl; - if (SQLGetConnectOption(hdbc, SQL_OPT_TRACE, &l) != SQL_SUCCESS) + retcode = SQLGetConnectOption(hdbc, SQL_OPT_TRACE, &l) + if (retcode != SQL_SUCCESS) return(DispAllErrors(henv, hdbc)); cout << wxT("TRACING: ") << (l == SQL_OPT_TRACE_OFF ? wxT("OFF") : wxT("ON")) << endl; @@ -1073,7 +1066,7 @@ bool wxDb::setConnectionOptions(void) #endif // Completed Successfully - return(TRUE); + return true; } // wxDb::setConnectionOptions() @@ -1084,258 +1077,258 @@ bool wxDb::getDbInfo(bool failOnDataTypeUnsupported) SWORD cb; RETCODE retcode; - retcode = SQLGetInfo(hdbc, SQL_SERVER_NAME, (UCHAR*) dbInf.serverName, 80, &cb); + retcode = SQLGetInfo(hdbc, SQL_SERVER_NAME, (UCHAR*) dbInf.serverName, sizeof(dbInf.serverName), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } - retcode = SQLGetInfo(hdbc, SQL_DATABASE_NAME, (UCHAR*) dbInf.databaseName, 128, &cb); + retcode = SQLGetInfo(hdbc, SQL_DATABASE_NAME, (UCHAR*) dbInf.databaseName, sizeof(dbInf.databaseName), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } - retcode = SQLGetInfo(hdbc, SQL_DBMS_NAME, (UCHAR*) dbInf.dbmsName, 40, &cb); + retcode = SQLGetInfo(hdbc, SQL_DBMS_NAME, (UCHAR*) dbInf.dbmsName, sizeof(dbInf.dbmsName), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } // 16-Mar-1999 // After upgrading to MSVC6, the original 20 char buffer below was insufficient, // causing database connectivity to fail in some cases. - retcode = SQLGetInfo(hdbc, SQL_DBMS_VER, (UCHAR*) dbInf.dbmsVer, 64, &cb); + retcode = SQLGetInfo(hdbc, SQL_DBMS_VER, (UCHAR*) dbInf.dbmsVer, sizeof(dbInf.dbmsVer), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_ACTIVE_CONNECTIONS, (UCHAR*) &dbInf.maxConnections, sizeof(dbInf.maxConnections), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_ACTIVE_STATEMENTS, (UCHAR*) &dbInf.maxStmts, sizeof(dbInf.maxStmts), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } - retcode = SQLGetInfo(hdbc, SQL_DRIVER_NAME, (UCHAR*) dbInf.driverName, 40, &cb); + retcode = SQLGetInfo(hdbc, SQL_DRIVER_NAME, (UCHAR*) dbInf.driverName, sizeof(dbInf.driverName), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } - retcode = SQLGetInfo(hdbc, SQL_DRIVER_ODBC_VER, (UCHAR*) dbInf.odbcVer, 60, &cb); + retcode = SQLGetInfo(hdbc, SQL_DRIVER_ODBC_VER, (UCHAR*) dbInf.odbcVer, sizeof(dbInf.odbcVer), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } - retcode = SQLGetInfo(hdbc, SQL_ODBC_VER, (UCHAR*) dbInf.drvMgrOdbcVer, 60, &cb); + retcode = SQLGetInfo(hdbc, SQL_ODBC_VER, (UCHAR*) dbInf.drvMgrOdbcVer, sizeof(dbInf.drvMgrOdbcVer), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } - retcode = SQLGetInfo(hdbc, SQL_DRIVER_VER, (UCHAR*) dbInf.driverVer, 60, &cb); + retcode = SQLGetInfo(hdbc, SQL_DRIVER_VER, (UCHAR*) dbInf.driverVer, sizeof(dbInf.driverVer), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_ODBC_API_CONFORMANCE, (UCHAR*) &dbInf.apiConfLvl, sizeof(dbInf.apiConfLvl), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_ODBC_SAG_CLI_CONFORMANCE, (UCHAR*) &dbInf.cliConfLvl, sizeof(dbInf.cliConfLvl), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) { // Not all drivers support this call - Nick Gorham(unixODBC) dbInf.cliConfLvl = 0; - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; } retcode = SQLGetInfo(hdbc, SQL_ODBC_SQL_CONFORMANCE, (UCHAR*) &dbInf.sqlConfLvl, sizeof(dbInf.sqlConfLvl), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } - retcode = SQLGetInfo(hdbc, SQL_OUTER_JOINS, (UCHAR*) dbInf.outerJoins, 2, &cb); + retcode = SQLGetInfo(hdbc, SQL_OUTER_JOINS, (UCHAR*) dbInf.outerJoins, sizeof(dbInf.outerJoins), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } - retcode = SQLGetInfo(hdbc, SQL_PROCEDURES, (UCHAR*) dbInf.procedureSupport, 2, &cb); + retcode = SQLGetInfo(hdbc, SQL_PROCEDURES, (UCHAR*) dbInf.procedureSupport, sizeof(dbInf.procedureSupport), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } - retcode = SQLGetInfo(hdbc, SQL_ACCESSIBLE_TABLES, (UCHAR*) dbInf.accessibleTables, 2, &cb); + retcode = SQLGetInfo(hdbc, SQL_ACCESSIBLE_TABLES, (UCHAR*) dbInf.accessibleTables, sizeof(dbInf.accessibleTables), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_CURSOR_COMMIT_BEHAVIOR, (UCHAR*) &dbInf.cursorCommitBehavior, sizeof(dbInf.cursorCommitBehavior), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_CURSOR_ROLLBACK_BEHAVIOR, (UCHAR*) &dbInf.cursorRollbackBehavior, sizeof(dbInf.cursorRollbackBehavior), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_NON_NULLABLE_COLUMNS, (UCHAR*) &dbInf.supportNotNullClause, sizeof(dbInf.supportNotNullClause), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } - retcode = SQLGetInfo(hdbc, SQL_ODBC_SQL_OPT_IEF, (UCHAR*) dbInf.supportIEF, 2, &cb); + retcode = SQLGetInfo(hdbc, SQL_ODBC_SQL_OPT_IEF, (UCHAR*) dbInf.supportIEF, sizeof(dbInf.supportIEF), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_DEFAULT_TXN_ISOLATION, (UCHAR*) &dbInf.txnIsolation, sizeof(dbInf.txnIsolation), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_TXN_ISOLATION_OPTION, (UCHAR*) &dbInf.txnIsolationOptions, sizeof(dbInf.txnIsolationOptions), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_FETCH_DIRECTION, (UCHAR*) &dbInf.fetchDirections, sizeof(dbInf.fetchDirections), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_LOCK_TYPES, (UCHAR*) &dbInf.lockTypes, sizeof(dbInf.lockTypes), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_POS_OPERATIONS, (UCHAR*) &dbInf.posOperations, sizeof(dbInf.posOperations), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_POSITIONED_STATEMENTS, (UCHAR*) &dbInf.posStmts, sizeof(dbInf.posStmts), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_SCROLL_CONCURRENCY, (UCHAR*) &dbInf.scrollConcurrency, sizeof(dbInf.scrollConcurrency), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_SCROLL_OPTIONS, (UCHAR*) &dbInf.scrollOptions, sizeof(dbInf.scrollOptions), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_STATIC_SENSITIVITY, (UCHAR*) &dbInf.staticSensitivity, sizeof(dbInf.staticSensitivity), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_TXN_CAPABLE, (UCHAR*) &dbInf.txnCapable, sizeof(dbInf.txnCapable), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } retcode = SQLGetInfo(hdbc, SQL_LOGIN_TIMEOUT, (UCHAR*) &dbInf.loginTimeout, sizeof(dbInf.loginTimeout), &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - { - DispAllErrors(henv, hdbc); - if (failOnDataTypeUnsupported) - return FALSE; - } + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return false; + } #ifdef DBDEBUG_CONSOLE cout << wxT("***** DATA SOURCE INFORMATION *****") << endl; @@ -1533,7 +1526,7 @@ bool wxDb::getDbInfo(bool failOnDataTypeUnsupported) #endif // Completed Successfully - return(TRUE); + return true; } // wxDb::getDbInfo() @@ -1564,13 +1557,13 @@ bool wxDb::getDataTypeInfo(SWORD fSqlType, wxDbSqlTypeInfo &structSQLTypeInfo) #endif DispAllErrors(henv, hdbc, hstmt); SQLFreeStmt(hstmt, SQL_CLOSE); - return(FALSE); + return false; } wxChar typeName[DB_TYPE_NAME_LEN+1]; // Obtain columns from the record - if (SQLGetData(hstmt, 1, SQL_C_CHAR, (UCHAR*) typeName, DB_TYPE_NAME_LEN, &cbRet) != SQL_SUCCESS) + if (SQLGetData(hstmt, 1, SQL_C_WXCHAR, typeName, sizeof(typeName), &cbRet) != SQL_SUCCESS) return(DispAllErrors(henv, hdbc, hstmt)); structSQLTypeInfo.TypeName = typeName; @@ -1621,7 +1614,7 @@ bool wxDb::getDataTypeInfo(SWORD fSqlType, wxDbSqlTypeInfo &structSQLTypeInfo) return(DispAllErrors(henv, hdbc, hstmt)); // Completed Successfully - return(TRUE); + return true; } // wxDb::getDataTypeInfo() @@ -1656,7 +1649,7 @@ void wxDb::Close(void) #ifdef __WXDEBUG__ wxTablesInUse *tiu; - wxNode *pNode; + wxList::compatibility_iterator pNode; pNode = TablesInUse.GetFirst(); wxString s,s2; while (pNode) @@ -1678,7 +1671,7 @@ void wxDb::Close(void) wxStrcpy(DBerrorList[i], errorList[i]); dbmsType = dbmsUNIDENTIFIED; - dbIsOpen = FALSE; + dbIsOpen = false; } // wxDb::Close() @@ -1694,7 +1687,7 @@ bool wxDb::CommitTrans(void) } // Completed successfully - return(TRUE); + return true; } // wxDb::CommitTrans() @@ -1707,7 +1700,7 @@ bool wxDb::RollbackTrans(void) return(DispAllErrors(henv, hdbc)); // Completed successfully - return(TRUE); + return true; } // wxDb::RollbackTrans() @@ -1724,15 +1717,19 @@ bool wxDb::DispAllErrors(HENV aHenv, HDBC aHdbc, HSTMT aHstmt) * If in DBDEBUG_CONSOLE mode, the constructed string will be displayed in the console * window and program execution will be paused until the user presses a key. * - * This function always returns a FALSE, so that functions which call this function + * This function always returns a false, so that functions which call this function * can have a line like "return (DispAllErrors(henv, hdbc));" to indicate the failure * of the users request, so that the calling code can then process the error msg log */ { wxString odbcErrMsg; - while (SQLError(aHenv, aHdbc, aHstmt, (SQLTCHAR FAR *) sqlState, &nativeError, (SQLTCHAR FAR *) errorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &cbErrorMsg) == SQL_SUCCESS) - { +#ifdef __VMS + while (SQLError(aHenv, aHdbc, aHstmt, (SQLTCHAR FAR *) sqlState, (SQLINTEGER *) &nativeError, (SQLTCHAR FAR *) errorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &cbErrorMsg) == SQL_SUCCESS) +#else + while (SQLError(aHenv, aHdbc, aHstmt, (SQLTCHAR FAR *) sqlState, (long*) &nativeError, (SQLTCHAR FAR *) errorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &cbErrorMsg) == SQL_SUCCESS) +#endif + { odbcErrMsg.Printf(wxT("SQL State = %s\nNative Error Code = %li\nError Message = %s\n"), sqlState, nativeError, errorMsg); logError(odbcErrMsg, sqlState); if (!silent) @@ -1750,7 +1747,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() @@ -1758,10 +1755,14 @@ bool wxDb::DispAllErrors(HENV aHenv, HDBC aHdbc, HSTMT aHstmt) /********** wxDb::GetNextError() **********/ bool wxDb::GetNextError(HENV aHenv, HDBC aHdbc, HSTMT aHstmt) { - if (SQLError(aHenv, aHdbc, aHstmt, (SQLTCHAR FAR *) sqlState, &nativeError, (SQLTCHAR FAR *) errorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &cbErrorMsg) == SQL_SUCCESS) - return(TRUE); +#ifdef __VMS + if (SQLError(aHenv, aHdbc, aHstmt, (SQLTCHAR FAR *) sqlState, (SQLINTEGER *) &nativeError, (SQLTCHAR FAR *) errorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &cbErrorMsg) == SQL_SUCCESS) +#else + if (SQLError(aHenv, aHdbc, aHstmt, (SQLTCHAR FAR *) sqlState, (long*) &nativeError, (SQLTCHAR FAR *) errorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &cbErrorMsg) == SQL_SUCCESS) +#endif + return true; else - return(FALSE); + return false; } // wxDb::GetNextError() @@ -2068,7 +2069,7 @@ bool wxDb::CreateView(const wxString &viewName, const wxString &colList, // Drop the view first if (attemptDrop && !DropView(viewName)) - return FALSE; + return false; // Build the create view statement sqlStmt = wxT("CREATE VIEW "); @@ -2099,7 +2100,7 @@ bool wxDb::CreateView(const wxString &viewName, const wxString &colList, bool wxDb::DropView(const wxString &viewName) { /* - * NOTE: This function returns TRUE if the View does not exist, but + * NOTE: This function returns true if the View does not exist, but * only for identified databases. Code will need to be added * below for any other databases when those databases are defined * to handle this situation consistently @@ -2126,16 +2127,16 @@ bool wxDb::DropView(const wxString &viewName) DispNextError(); DispAllErrors(henv, hdbc, hstmt); RollbackTrans(); - return(FALSE); + return false; } } } // Commit the transaction if (!CommitTrans()) - return(FALSE); + return false; - return TRUE; + return true; } // wxDb::DropView() @@ -2151,26 +2152,113 @@ bool wxDb::ExecSql(const wxString &pSqlStmt) if (retcode == SQL_SUCCESS || (Dbms() == dbmsDB2 && (retcode == SQL_SUCCESS_WITH_INFO || retcode == SQL_NO_DATA_FOUND))) { - return(TRUE); + return true; } else { DispAllErrors(henv, hdbc, hstmt); - return(FALSE); + return false; } } // wxDb::ExecSql() +/********** wxDb::ExecSql() with column info **********/ +bool wxDb::ExecSql(const wxString &pSqlStmt, wxDbColInf** columns, short& numcols) +{ + //execute the statement first + if (!ExecSql(pSqlStmt)) + return false; + + SWORD noCols; + if (SQLNumResultCols(hstmt, &noCols) != SQL_SUCCESS) + { + DispAllErrors(henv, hdbc, hstmt); + return false; + } + + if (noCols == 0) + return false; + else + numcols = noCols; + + // Get column information + short colNum; + wxChar name[DB_MAX_COLUMN_NAME_LEN+1]; + SWORD Sword; + SDWORD Sdword; + wxDbColInf* pColInf = new wxDbColInf[noCols]; + + //fill in column information (name, datatype) + for (colNum = 0; colNum < noCols; colNum++) + { + if (SQLColAttributes(hstmt, (UWORD)(colNum+1), SQL_COLUMN_NAME, + name, sizeof(name), + &Sword, &Sdword) != SQL_SUCCESS) + { + DispAllErrors(henv, hdbc, hstmt); + delete[] pColInf; + return false; + } + + wxStrncpy(pColInf[colNum].colName, name, DB_MAX_COLUMN_NAME_LEN); + + if (SQLColAttributes(hstmt, (UWORD)(colNum+1), SQL_COLUMN_TYPE, + NULL, 0, &Sword, &Sdword) != SQL_SUCCESS) + { + DispAllErrors(henv, hdbc, hstmt); + delete[] pColInf; + return false; + } + + switch (Sdword) + { + case SQL_VARCHAR: + case SQL_CHAR: + pColInf[colNum].dbDataType = DB_DATA_TYPE_VARCHAR; + break; + case SQL_TINYINT: + case SQL_SMALLINT: + case SQL_INTEGER: + case SQL_BIT: + pColInf[colNum].dbDataType = DB_DATA_TYPE_INTEGER; + break; + case SQL_DOUBLE: + case SQL_DECIMAL: + case SQL_NUMERIC: + case SQL_FLOAT: + case SQL_REAL: + pColInf[colNum].dbDataType = DB_DATA_TYPE_FLOAT; + break; + case SQL_DATE: + case SQL_TIMESTAMP: + pColInf[colNum].dbDataType = DB_DATA_TYPE_DATE; + break; + case SQL_BINARY: + pColInf[colNum].dbDataType = DB_DATA_TYPE_BLOB; + break; +#ifdef __WXDEBUG__ + default: + wxString errMsg; + errMsg.Printf(wxT("SQL Data type %ld currently not supported by wxWidgets"), (long)Sdword); + wxLogDebug(errMsg,wxT("ODBC DEBUG MESSAGE")); +#endif + } + } + + *columns = pColInf; + return true; +} // wxDb::ExecSql() + /********** wxDb::GetNext() **********/ bool wxDb::GetNext(void) { if (SQLFetch(hstmt) == SQL_SUCCESS) - return(TRUE); + return true; else { DispAllErrors(henv, hdbc, hstmt); - return(FALSE); + return false; } } // wxDb::GetNext() @@ -2182,12 +2270,17 @@ bool wxDb::GetData(UWORD colNo, SWORD cType, PTR pData, SDWORD maxLen, SDWORD FA wxASSERT(pData); wxASSERT(cbReturned); - if (SQLGetData(hstmt, colNo, cType, pData, maxLen, cbReturned) == SQL_SUCCESS) - return(TRUE); + long bufferSize = maxLen; + + if (cType == SQL_C_WXCHAR) + bufferSize = maxLen * sizeof(wxChar); + + if (SQLGetData(hstmt, colNo, cType, pData, bufferSize, cbReturned) == SQL_SUCCESS) + return true; else { DispAllErrors(henv, hdbc, hstmt); - return(FALSE); + return false; } } // wxDb::GetData() @@ -2198,7 +2291,7 @@ int wxDb::GetKeyFields(const wxString &tableName, wxDbColInf* colInf, UWORD noCo { wxChar szPkTable[DB_MAX_TABLE_NAME_LEN+1]; /* Primary key table name */ wxChar szFkTable[DB_MAX_TABLE_NAME_LEN+1]; /* Foreign key table name */ - short iKeySeq; + SWORD iKeySeq; // SQLSMALLINT iKeySeq; wxChar szPkCol[DB_MAX_COLUMN_NAME_LEN+1]; /* Primary key column */ wxChar szFkCol[DB_MAX_COLUMN_NAME_LEN+1]; /* Foreign key column */ @@ -2236,7 +2329,7 @@ int wxDb::GetKeyFields(const wxString &tableName, wxDbColInf* colInf, UWORD noCo retcode = SQLFetch(hstmt); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { - GetData( 4, SQL_C_CHAR, szPkCol, DB_MAX_COLUMN_NAME_LEN+1, &cb); + GetData( 4, SQL_C_WXCHAR, szPkCol, DB_MAX_COLUMN_NAME_LEN+1, &cb); GetData( 5, SQL_C_SSHORT, &iKeySeq, 0, &cb); //------- for (i=0;inumTables == 0) { - GetData( 1, SQL_C_CHAR, (UCHAR*) pDbInf->catalog, 128+1, &cb); - GetData( 2, SQL_C_CHAR, (UCHAR*) pDbInf->schema, 128+1, &cb); + GetData( 1, SQL_C_WXCHAR, (UCHAR*) pDbInf->catalog, 128+1, &cb); + GetData( 2, SQL_C_WXCHAR, (UCHAR*) pDbInf->schema, 128+1, &cb); } pDbInf->numTables++; // Counter for Tables } // if (pass == 1) @@ -3195,9 +3289,9 @@ wxDbInf *wxDb::GetCatalog(const wxChar *userID) noTab = 0; } // if (pDbInf->pTableInf == NULL) // Has the Table Array been created - GetData( 3, SQL_C_CHAR, (UCHAR*) (pDbInf->pTableInf+noTab)->tableName, DB_MAX_TABLE_NAME_LEN+1, &cb); - GetData( 4, SQL_C_CHAR, (UCHAR*) (pDbInf->pTableInf+noTab)->tableType, 30+1, &cb); - GetData( 5, SQL_C_CHAR, (UCHAR*) (pDbInf->pTableInf+noTab)->tableRemarks, 254+1, &cb); + GetData( 3, SQL_C_WXCHAR, (UCHAR*) (pDbInf->pTableInf+noTab)->tableName, DB_MAX_TABLE_NAME_LEN+1, &cb); + GetData( 4, SQL_C_WXCHAR, (UCHAR*) (pDbInf->pTableInf+noTab)->tableType, 30+1, &cb); + GetData( 5, SQL_C_WXCHAR, (UCHAR*) (pDbInf->pTableInf+noTab)->tableRemarks, 254+1, &cb); noTab++; } // if @@ -3208,7 +3302,7 @@ wxDbInf *wxDb::GetCatalog(const wxChar *userID) // Query how many columns are in each table for (noTab=0;noTabnumTables;noTab++) { - (pDbInf->pTableInf+noTab)->numCols = GetColumnCount((pDbInf->pTableInf+noTab)->tableName,UserID); + (pDbInf->pTableInf+noTab)->numCols = (UWORD)GetColumnCount((pDbInf->pTableInf+noTab)->tableName,UserID); } return pDbInf; @@ -3246,14 +3340,14 @@ bool wxDb::Catalog(const wxChar *userID, const wxString &fileName) FILE *fp = wxFopen(fileName.c_str(),wxT("wt")); if (fp == NULL) - return(FALSE); + return false; SQLFreeStmt(hstmt, SQL_CLOSE); wxString UserID; convertUserID(userID,UserID); - if (!UserID.IsEmpty() && + if (!UserID.empty() && Dbms() != dbmsMY_SQL && Dbms() != dbmsACCESS && Dbms() != dbmsINTERBASE && @@ -3277,25 +3371,25 @@ bool wxDb::Catalog(const wxChar *userID, const wxString &fileName) { DispAllErrors(henv, hdbc, hstmt); fclose(fp); - return(FALSE); + return false; } wxString outStr; tblNameSave.Empty(); int cnt = 0; - while (TRUE) + while (true) { retcode = SQLFetch(hstmt); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) break; - GetData(3,SQL_C_CHAR, (UCHAR *) tblName, DB_MAX_TABLE_NAME_LEN+1, &cb); - GetData(4,SQL_C_CHAR, (UCHAR *) colName, DB_MAX_COLUMN_NAME_LEN+1,&cb); - GetData(5,SQL_C_SSHORT,(UCHAR *)&sqlDataType, 0, &cb); - GetData(6,SQL_C_CHAR, (UCHAR *) typeName, sizeof(typeName), &cb); - GetData(7,SQL_C_SLONG, (UCHAR *)&precision, 0, &cb); - GetData(8,SQL_C_SLONG, (UCHAR *)&length, 0, &cb); + GetData(3,SQL_C_WXCHAR, (UCHAR *) tblName, DB_MAX_TABLE_NAME_LEN+1, &cb); + GetData(4,SQL_C_WXCHAR, (UCHAR *) colName, DB_MAX_COLUMN_NAME_LEN+1,&cb); + GetData(5,SQL_C_SSHORT, (UCHAR *)&sqlDataType, 0, &cb); + GetData(6,SQL_C_WXCHAR, (UCHAR *) typeName, sizeof(typeName), &cb); + GetData(7,SQL_C_SLONG, (UCHAR *)&precision, 0, &cb); + GetData(8,SQL_C_SLONG, (UCHAR *)&length, 0, &cb); if (wxStrcmp(tblName, tblNameSave.c_str())) { @@ -3323,7 +3417,7 @@ bool wxDb::Catalog(const wxChar *userID, const wxString &fileName) { SQLFreeStmt(hstmt, SQL_CLOSE); fclose(fp); - return(FALSE); + return false; } cnt++; } @@ -3341,7 +3435,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. @@ -3384,7 +3478,7 @@ bool wxDb::TableExists(const wxString &tableName, const wxChar *userID, const wx // Some databases cannot accept a user name when looking up table names, // so we use the call below that leaves out the user name - if (!UserID.IsEmpty() && + if (!UserID.empty() && Dbms() != dbmsMY_SQL && Dbms() != dbmsACCESS && Dbms() != dbmsMS_SQL_SERVER && @@ -3418,7 +3512,7 @@ bool wxDb::TableExists(const wxString &tableName, const wxChar *userID, const wx SQLFreeStmt(hstmt, SQL_CLOSE); - return(TRUE); + return true; } // wxDb::TableExists() @@ -3454,7 +3548,7 @@ bool wxDb::TablePrivileges(const wxString &tableName, const wxString &priv, cons // Some databases cannot accept a user name when looking up table names, // so we use the call below that leaves out the user name - if (!Schema.IsEmpty() && + if (!Schema.empty() && Dbms() != dbmsMY_SQL && Dbms() != dbmsACCESS && Dbms() != dbmsMS_SQL_SERVER) @@ -3477,32 +3571,32 @@ bool wxDb::TablePrivileges(const wxString &tableName, const wxString &priv, cons #endif if ((retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO)) - return(DispAllErrors(henv, hdbc, hstmt)); + return (DispAllErrors(henv, hdbc, hstmt)); - bool failed = FALSE; + bool failed = false; retcode = SQLFetch(hstmt); while (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { - if (SQLGetData(hstmt, 1, SQL_C_CHAR, (UCHAR*) result.tableQual, sizeof(result.tableQual), &cbRetVal) != SQL_SUCCESS) - failed = TRUE; + if (SQLGetData(hstmt, 1, SQL_C_WXCHAR, (UCHAR*) result.tableQual, sizeof(result.tableQual), &cbRetVal) != SQL_SUCCESS) + failed = true; - if (!failed && SQLGetData(hstmt, 2, SQL_C_CHAR, (UCHAR*) result.tableOwner, sizeof(result.tableOwner), &cbRetVal) != SQL_SUCCESS) - failed = TRUE; + if (!failed && SQLGetData(hstmt, 2, SQL_C_WXCHAR, (UCHAR*) result.tableOwner, sizeof(result.tableOwner), &cbRetVal) != SQL_SUCCESS) + failed = true; - if (!failed && SQLGetData(hstmt, 3, SQL_C_CHAR, (UCHAR*) result.tableName, sizeof(result.tableName), &cbRetVal) != SQL_SUCCESS) - failed = TRUE; + if (!failed && SQLGetData(hstmt, 3, SQL_C_WXCHAR, (UCHAR*) result.tableName, sizeof(result.tableName), &cbRetVal) != SQL_SUCCESS) + failed = true; - if (!failed && SQLGetData(hstmt, 4, SQL_C_CHAR, (UCHAR*) result.grantor, sizeof(result.grantor), &cbRetVal) != SQL_SUCCESS) - failed = TRUE; + if (!failed && SQLGetData(hstmt, 4, SQL_C_WXCHAR, (UCHAR*) result.grantor, sizeof(result.grantor), &cbRetVal) != SQL_SUCCESS) + failed = true; - if (!failed && SQLGetData(hstmt, 5, SQL_C_CHAR, (UCHAR*) result.grantee, sizeof(result.grantee), &cbRetVal) != SQL_SUCCESS) - failed = TRUE; + if (!failed && SQLGetData(hstmt, 5, SQL_C_WXCHAR, (UCHAR*) result.grantee, sizeof(result.grantee), &cbRetVal) != SQL_SUCCESS) + failed = true; - if (!failed && SQLGetData(hstmt, 6, SQL_C_CHAR, (UCHAR*) result.privilege, sizeof(result.privilege), &cbRetVal) != SQL_SUCCESS) - failed = TRUE; + if (!failed && SQLGetData(hstmt, 6, SQL_C_WXCHAR, (UCHAR*) result.privilege, sizeof(result.privilege), &cbRetVal) != SQL_SUCCESS) + failed = true; - if (!failed && SQLGetData(hstmt, 7, SQL_C_CHAR, (UCHAR*) result.grantable, sizeof(result.grantable), &cbRetVal) != SQL_SUCCESS) - failed = TRUE; + if (!failed && SQLGetData(hstmt, 7, SQL_C_WXCHAR, (UCHAR*) result.grantable, sizeof(result.grantable), &cbRetVal) != SQL_SUCCESS) + failed = true; if (failed) { @@ -3514,31 +3608,31 @@ bool wxDb::TablePrivileges(const wxString &tableName, const wxString &priv, cons result.grantor, result.grantee); #endif - if (UserID.IsSameAs(result.tableOwner,FALSE)) + if (UserID.IsSameAs(result.tableOwner,false)) { SQLFreeStmt(hstmt, SQL_CLOSE); - return TRUE; + return true; } - if (UserID.IsSameAs(result.grantee,FALSE) && + if (UserID.IsSameAs(result.grantee,false) && !wxStrcmp(result.privilege,priv)) { SQLFreeStmt(hstmt, SQL_CLOSE); - return TRUE; + return true; } if (!wxStrcmp(result.grantee,curRole) && !wxStrcmp(result.privilege,priv)) { SQLFreeStmt(hstmt, SQL_CLOSE); - return TRUE; + return true; } retcode = SQLFetch(hstmt); } SQLFreeStmt(hstmt, SQL_CLOSE); - return FALSE; + return false; } // wxDb::TablePrivileges @@ -3583,7 +3677,7 @@ bool wxDb::SetSqlLogging(wxDbSqlLogState state, const wxString &filename, bool a { fpSqlLog = wxFopen(filename, (append ? wxT("at") : wxT("wt"))); if (fpSqlLog == NULL) - return(FALSE); + return false; } } else // sqlLogOFF @@ -3591,13 +3685,13 @@ bool wxDb::SetSqlLogging(wxDbSqlLogState state, const wxString &filename, bool a if (fpSqlLog) { if (fclose(fpSqlLog)) - return(FALSE); + return false; fpSqlLog = 0; } } sqlLogState = state; - return(TRUE); + return true; } // wxDb::SetSqlLogging() @@ -3608,16 +3702,16 @@ bool wxDb::WriteSqlLog(const wxString &logMsg) wxASSERT(logMsg.Length()); if (fpSqlLog == 0 || sqlLogState == sqlLogOFF) - return(FALSE); + return false; if (wxFputs(wxT("\n"), fpSqlLog) == EOF) - return(FALSE); + return false; if (wxFputs(logMsg, fpSqlLog) == EOF) - return(FALSE); + return false; if (wxFputs(wxT("\n"), fpSqlLog) == EOF) - return(FALSE); + return false; - return(TRUE); + return true; } // wxDb::WriteSqlLog() @@ -3645,7 +3739,7 @@ wxDBMS wxDb::Dbms(void) * - Does not support the SQL_TIMESTAMP structure * - Supports only one cursor and one connect (apparently? with Microsoft driver only?) * - Does not automatically create the primary index if the 'keyField' param of SetColDef - * is TRUE. The user must create ALL indexes from their program. + * is true. The user must create ALL indexes from their program. * - Table names can only be 8 characters long * - Column names can only be 10 characters long * @@ -3771,7 +3865,7 @@ bool wxDb::ModifyColumn(const wxString &tableName, const wxString &columnName, // Must specify a columnLength if modifying a VARCHAR type column if (dataType == DB_DATA_TYPE_VARCHAR && !columnLength) - return FALSE; + return false; wxString dataTypeName; wxString sqlStmt; @@ -3795,7 +3889,7 @@ bool wxDb::ModifyColumn(const wxString &tableName, const wxString &columnName, dataTypeName = typeInfBlob.TypeName; break; default: - return FALSE; + return false; } // Set the modify or alter syntax depending on the type of database connected to @@ -3808,7 +3902,7 @@ bool wxDb::ModifyColumn(const wxString &tableName, const wxString &columnName, alterSlashModify = _T("ALTER COLUMN"); break; case dbmsUNIDENTIFIED : - return FALSE; + return false; case dbmsSYBASE_ASA : case dbmsSYBASE_ASE : case dbmsMY_SQL : @@ -3877,11 +3971,11 @@ wxDb WXDLLIMPEXP_ODBC *wxDbGetConnection(wxDbConnectInf *pDbConfig, bool FwdOnly { if (pDbConfig->UseConnectionStr()) { - if (pList->PtrDb->OpenedWithConnectionString() && + if (pList->PtrDb->OpenedWithConnectionString() && (!wxStrcmp(pDbConfig->GetConnectionStr(), pList->ConnectionStr))) { // Found a free connection - pList->Free = FALSE; + pList->Free = false; return(pList->PtrDb); } } @@ -3891,7 +3985,7 @@ wxDb WXDLLIMPEXP_ODBC *wxDbGetConnection(wxDbConnectInf *pDbConfig, bool FwdOnly (!wxStrcmp(pDbConfig->GetDsn(), pList->Dsn))) { // Found a free connection - pList->Free = FALSE; + pList->Free = false; return(pList->PtrDb); } } @@ -3931,7 +4025,7 @@ wxDb WXDLLIMPEXP_ODBC *wxDbGetConnection(wxDbConnectInf *pDbConfig, bool FwdOnly // Initialize new node in the linked list pList->PtrNext = 0; - pList->Free = FALSE; + pList->Free = false; pList->Dsn = pDbConfig->GetDsn(); pList->Uid = pDbConfig->GetUserID(); pList->AuthStr = pDbConfig->GetPassword(); @@ -3958,8 +4052,8 @@ wxDb WXDLLIMPEXP_ODBC *wxDbGetConnection(wxDbConnectInf *pDbConfig, bool FwdOnly // Connect to the datasource if (opened) { - pList->PtrDb->setCached(TRUE); // Prevent a user from deleting a cached connection - pList->PtrDb->SetSqlLogging(SQLLOGstate, SQLLOGfn, TRUE); + pList->PtrDb->setCached(true); // Prevent a user from deleting a cached connection + pList->PtrDb->SetSqlLogging(SQLLOGstate, SQLLOGfn, true); return(pList->PtrDb); } else // Unable to connect, destroy list item @@ -3988,11 +4082,11 @@ bool WXDLLIMPEXP_ODBC wxDbFreeConnection(wxDb *pDb) for (pList = PtrBegDbList; pList; pList = pList->PtrNext) { if (pList->PtrDb == pDb) // Found it, now free it!!! - return (pList->Free = TRUE); + return (pList->Free = true); } // Never found the database object, return failure - return(FALSE); + return false; } // wxDbFreeConnection() @@ -4008,7 +4102,7 @@ void WXDLLIMPEXP_ODBC 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 + pList->PtrDb->setCached(false); // Allows deletion of the wxDb instance delete pList->PtrDb; // Deletes the wxDb object delete pList; // Deletes the linked list object } @@ -4028,7 +4122,7 @@ int WXDLLIMPEXP_ODBC wxDbConnectionsInUse(void) // Scan the linked list counting db connections that are currently in use for (pList = PtrBegDbList; pList; pList = pList->PtrNext) { - if (pList->Free == FALSE) + if (pList->Free == false) cnt++; } @@ -4088,20 +4182,20 @@ const wxChar WXDLLIMPEXP_ODBC *wxDbLogExtendedErrorMsg(const wxChar *userText, /********** wxDbSqlLog() **********/ bool wxDbSqlLog(wxDbSqlLogState state, const wxChar *filename) { - bool append = FALSE; + bool append = false; wxDbList *pList; for (pList = PtrBegDbList; pList; pList = pList->PtrNext) { if (!pList->PtrDb->SetSqlLogging(state,filename,append)) - return(FALSE); - append = TRUE; + return false; + append = true; } SQLLOGstate = state; SQLLOGfn = filename; - return(TRUE); + return true; } // wxDbSqlLog() @@ -4139,7 +4233,7 @@ int wxDbCreateDataSource(const wxString &driverName, const wxString &dsn, const int k; do { - k = setupStr.Find((wxChar)2,TRUE); + k = setupStr.Find((wxChar)2,true); if (k != wxNOT_FOUND) setupStr[(UINT)k] = wxT('\0'); } @@ -4190,20 +4284,22 @@ int wxDbCreateDataSource(const wxString &driverName, const wxString &dsn, const /********** wxDbGetDataSource() **********/ -bool wxDbGetDataSource(HENV henv, wxChar *Dsn, SWORD DsnMax, wxChar *DsDesc, - SWORD DsDescMax, UWORD direction) +bool wxDbGetDataSource(HENV henv, wxChar *Dsn, SWORD DsnMaxLength, wxChar *DsDesc, + SWORD DsDescMaxLength, UWORD direction) /* * Dsn and DsDesc will contain the data source name and data source * description upon return */ { SWORD cb1,cb2; + SWORD lengthDsn = (SWORD)(DsnMaxLength*sizeof(wxChar)); + SWORD lengthDsDesc = (SWORD)(DsDescMaxLength*sizeof(wxChar)); - if (SQLDataSources(henv, direction, (SQLTCHAR FAR *) Dsn, DsnMax, &cb1, - (SQLTCHAR FAR *) DsDesc, DsDescMax, &cb2) == SQL_SUCCESS) - return(TRUE); + if (SQLDataSources(henv, direction, (SQLTCHAR FAR *) Dsn, lengthDsn, &cb1, + (SQLTCHAR FAR *) DsDesc, lengthDsDesc, &cb2) == SQL_SUCCESS) + return true; else - return(FALSE); + return false; } // wxDbGetDataSource()