X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e3f8f04d8e9f5275f1448f81cbcdefb28ee8e9fc..5767e836997b965b9d936f1d65244bb886c39025:/src/common/dbtable.cpp diff --git a/src/common/dbtable.cpp b/src/common/dbtable.cpp index 1657a14c98..50c832a5f2 100644 --- a/src/common/dbtable.cpp +++ b/src/common/dbtable.cpp @@ -8,16 +8,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 -// wxWidgets-based application -// 2) All enhancements and bug fixes are to be submitted back to the wxWidgets -// user groups free of all charges for use with the wxWidgets 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 wxWidgets GUI development toolkit. +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// /* @@ -104,14 +95,14 @@ bool wxDbColDef::Initialize() SqlCtype = SQL_C_LONG; PtrDataObj = NULL; SzDataObj = 0; - KeyField = FALSE; - Updateable = FALSE; - InsertAllowed = FALSE; - DerivedCol = FALSE; + KeyField = false; + Updateable = false; + InsertAllowed = false; + DerivedCol = false; CbValue = 0; - Null = FALSE; + Null = false; - return TRUE; + return true; } // wxDbColDef::Initialize() @@ -125,6 +116,7 @@ wxDbTable::wxDbTable(wxDb *pwxDb, const wxString &tblName, const UWORD numColumn /***** DEPRECATED: use wxDbTable::wxDbTable() format above *****/ +#if WXWIN_COMPATIBILITY_2_4 wxDbTable::wxDbTable(wxDb *pwxDb, const wxString &tblName, const UWORD numColumns, const wxChar *qryTblName, bool qryOnly, const wxString &tblPath) { @@ -133,6 +125,7 @@ wxDbTable::wxDbTable(wxDb *pwxDb, const wxString &tblName, const UWORD numColumn if (!initialize(pwxDb, tblName, numColumns, tempQryTblName, qryOnly, tblPath)) cleanup(); } // wxDbTable::wxDbTable() +#endif // WXWIN_COMPATIBILITY_2_4 /********** wxDbTable::~wxDbTable() **********/ @@ -163,9 +156,9 @@ bool wxDbTable::initialize(wxDb *pwxDb, const wxString &tblName, const UWORD num where.Empty(); // Where clause orderBy.Empty(); // Order By clause from.Empty(); // From clause - selectForUpdate = FALSE; // SELECT ... FOR UPDATE; Indicates whether to include the FOR UPDATE phrase + selectForUpdate = false; // SELECT ... FOR UPDATE; Indicates whether to include the FOR UPDATE phrase queryOnly = qryOnly; - insertable = TRUE; + insertable = true; tablePath.Empty(); tableName.Empty(); queryTableName.Empty(); @@ -174,7 +167,7 @@ bool wxDbTable::initialize(wxDb *pwxDb, const wxString &tblName, const UWORD num wxASSERT(pDb); if (!pDb) - return FALSE; + return false; tableName = tblName; // Table Name if (tblPath.Length()) @@ -271,7 +264,7 @@ bool wxDbTable::initialize(wxDb *pwxDb, const wxString &tblName, const UWORD num { // Should never happen pDb->GetNextError(henv, hdbc, hstmtInternal); - return FALSE; + return false; } } } @@ -300,11 +293,11 @@ bool wxDbTable::initialize(wxDb *pwxDb, const wxString &tblName, const UWORD num } // Make the default cursor the active cursor - hstmtDefault = GetNewCursor(FALSE,FALSE); + hstmtDefault = GetNewCursor(false,false); wxASSERT(hstmtDefault); hstmt = *hstmtDefault; - return TRUE; + return true; } // wxDbTable::initialize() @@ -321,7 +314,7 @@ void wxDbTable::cleanup() #ifdef __WXDEBUG__ if (tableID) { - bool found = FALSE; + bool found = false; wxList::compatibility_iterator pNode; pNode = TablesInUse.GetFirst(); @@ -329,7 +322,7 @@ void wxDbTable::cleanup() { if (((wxTablesInUse *)pNode->GetData())->tableID == tableID) { - found = TRUE; + found = true; delete (wxTablesInUse *)pNode->GetData(); TablesInUse.Erase(pNode); } @@ -441,7 +434,7 @@ void wxDbTable::setCbValueForColumn(int columnIndex) if (colDefs[columnIndex].Null) colDefs[columnIndex].CbValue = SQL_NULL_DATA; else - if (colDefs[columnIndex].SqlCtype == SQL_C_CHAR) + if (colDefs[columnIndex].SqlCtype == SQL_C_WXCHAR) colDefs[columnIndex].CbValue = SQL_NTS; else colDefs[columnIndex].CbValue = SQL_LEN_DATA_AT_EXEC(colDefs[columnIndex].SzDataObj); @@ -454,7 +447,7 @@ bool wxDbTable::bindParams(bool forUpdate) { wxASSERT(!queryOnly); if (queryOnly) - return(FALSE); + return false; SWORD fSqlType = 0; SDWORD precision = 0; @@ -535,7 +528,7 @@ bool wxDbTable::bindParams(bool forUpdate) } // Completed successfully - return(TRUE); + return true; } // wxDbTable::bindParams() @@ -543,14 +536,14 @@ bool wxDbTable::bindParams(bool forUpdate) /********** wxDbTable::bindInsertParams() **********/ bool wxDbTable::bindInsertParams(void) { - return bindParams(FALSE); + return bindParams(false); } // wxDbTable::bindInsertParams() /********** wxDbTable::bindUpdateParams() **********/ bool wxDbTable::bindUpdateParams(void) { - return bindParams(TRUE); + return bindParams(true); } // wxDbTable::bindUpdateParams() @@ -570,7 +563,7 @@ bool wxDbTable::bindCols(HSTMT cursor) } // Completed successfully - return(TRUE); + return true; } // wxDbTable::bindCols() @@ -590,7 +583,7 @@ bool wxDbTable::getRec(UWORD fetchType) if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) { if (retcode == SQL_NO_DATA_FOUND) - return(FALSE); + return false; else return(pDb->DispAllErrors(henv, hdbc, hstmt)); } @@ -610,7 +603,7 @@ bool wxDbTable::getRec(UWORD fetchType) if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) { if (retcode == SQL_NO_DATA_FOUND) - return(FALSE); + return false; else return(pDb->DispAllErrors(henv, hdbc, hstmt)); } @@ -625,7 +618,7 @@ bool wxDbTable::getRec(UWORD fetchType) } // Completed successfully - return(TRUE); + return true; } // wxDbTable::getRec() @@ -643,7 +636,7 @@ bool wxDbTable::execDelete(const wxString &pSqlStmt) retcode == SQL_SUCCESS_WITH_INFO) { // Record deleted successfully - return(TRUE); + return true; } // Problem deleting record @@ -665,7 +658,7 @@ bool wxDbTable::execUpdate(const wxString &pSqlStmt) retcode == SQL_SUCCESS_WITH_INFO) { // Record updated successfully - return(TRUE); + return true; } else if (retcode == SQL_NEED_DATA) { @@ -696,7 +689,7 @@ bool wxDbTable::execUpdate(const wxString &pSqlStmt) retcode == SQL_SUCCESS_WITH_INFO) { // Record updated successfully - return(TRUE); + return true; } } @@ -715,7 +708,7 @@ bool wxDbTable::query(int queryType, bool forUpdate, bool distinct, const wxStri // The user may wish to select for update, but the DBMS may not be capable selectForUpdate = CanSelectForUpdate(); else - selectForUpdate = FALSE; + selectForUpdate = false; // Set the SQL SELECT string if (queryType != DB_SELECT_STATEMENT) // A select statement was not passed in, @@ -726,7 +719,7 @@ bool wxDbTable::query(int queryType, bool forUpdate, bool distinct, const wxStri // Make sure the cursor is closed first if (!CloseCursor(hstmt)) - return(FALSE); + return false; // Execute the SQL SELECT statement int retcode; @@ -735,7 +728,7 @@ bool wxDbTable::query(int queryType, bool forUpdate, bool distinct, const wxStri return(pDb->DispAllErrors(henv, hdbc, hstmt)); // Completed successfully - return(TRUE); + return true; } // wxDbTable::query() @@ -747,7 +740,7 @@ bool wxDbTable::query(int queryType, bool forUpdate, bool distinct, const wxStri bool wxDbTable::Open(bool checkPrivileges, bool checkTableExists) { if (!pDb) - return FALSE; + return false; int i; wxString sqlStmt; @@ -786,7 +779,7 @@ bool wxDbTable::Open(bool checkPrivileges, bool checkTableExists) // reliable! if (// *(pDb->dbInf.accessibleTables) == 'N' && !pDb->TablePrivileges(tableName,wxT("SELECT"), pDb->GetUsername(), pDb->GetUsername(), tablePath)) - s = wxT("Current logged in user does not have sufficient privileges to access this table.\n"); + s = wxT("Connecting user does not have sufficient privileges to access this table.\n"); } if (!s.IsEmpty()) @@ -801,7 +794,7 @@ bool wxDbTable::Open(bool checkPrivileges, bool checkTableExists) p += s; pDb->LogError(p.GetData()); - return(FALSE); + return false; } // Bind the member variables for field exchange between @@ -809,17 +802,17 @@ bool wxDbTable::Open(bool checkPrivileges, bool checkTableExists) if (!queryOnly) { if (!bindInsertParams()) // Inserts - return(FALSE); + return false; if (!bindUpdateParams()) // Updates - return(FALSE); + return false; } if (!bindCols(*hstmtDefault)) // Selects - return(FALSE); + return false; if (!bindCols(hstmtInternal)) // Internal use only - return(FALSE); + return false; /* * Do NOT bind the hstmtCount cursor!!! @@ -828,7 +821,7 @@ bool wxDbTable::Open(bool checkPrivileges, bool checkTableExists) // Build an insert statement using parameter markers if (!queryOnly && noCols > 0) { - bool needComma = FALSE; + bool needComma = false; sqlStmt.Printf(wxT("INSERT INTO %s ("), pDb->SQLTableName(tableName.c_str()).c_str()); for (i = 0; i < noCols; i++) @@ -839,9 +832,9 @@ bool wxDbTable::Open(bool checkPrivileges, bool checkTableExists) sqlStmt += wxT(","); sqlStmt += pDb->SQLColumnName(colDefs[i].ColName); // sqlStmt += colDefs[i].ColName; - needComma = TRUE; + needComma = true; } - needComma = FALSE; + needComma = false; sqlStmt += wxT(") VALUES ("); int insertableCount = 0; @@ -853,7 +846,7 @@ bool wxDbTable::Open(bool checkPrivileges, bool checkTableExists) if (needComma) sqlStmt += wxT(","); sqlStmt += wxT("?"); - needComma = TRUE; + needComma = true; insertableCount++; } sqlStmt += wxT(")"); @@ -865,11 +858,11 @@ bool wxDbTable::Open(bool checkPrivileges, bool checkTableExists) return(pDb->DispAllErrors(henv, hdbc, hstmtInsert)); } else - insertable = FALSE; + insertable = false; } // Completed successfully - return(TRUE); + return true; } // wxDbTable::Open() @@ -888,7 +881,7 @@ bool wxDbTable::QueryBySqlStmt(const wxString &pSqlStmt) { pDb->WriteSqlLog(pSqlStmt); - return(query(DB_SELECT_STATEMENT, FALSE, FALSE, pSqlStmt)); + return(query(DB_SELECT_STATEMENT, false, false, pSqlStmt)); } // wxDbTable::QueryBySqlStmt() @@ -917,7 +910,7 @@ bool wxDbTable::GetPrev(void) if (pDb->FwdOnlyCursors()) { wxFAIL_MSG(wxT("GetPrev()::Backward scrolling cursors are not enabled for this instance of wxDbTable")); - return FALSE; + return false; } else return(getRec(SQL_FETCH_PRIOR)); @@ -931,7 +924,7 @@ bool wxDbTable::operator--(int) if (pDb->FwdOnlyCursors()) { wxFAIL_MSG(wxT("operator--:Backward scrolling cursors are not enabled for this instance of wxDbTable")); - return FALSE; + return false; } else return(getRec(SQL_FETCH_PRIOR)); @@ -945,7 +938,7 @@ bool wxDbTable::GetFirst(void) if (pDb->FwdOnlyCursors()) { wxFAIL_MSG(wxT("GetFirst():Backward scrolling cursors are not enabled for this instance of wxDbTable")); - return FALSE; + return false; } else return(getRec(SQL_FETCH_FIRST)); @@ -959,7 +952,7 @@ bool wxDbTable::GetLast(void) if (pDb->FwdOnlyCursors()) { wxFAIL_MSG(wxT("GetLast()::Backward scrolling cursors are not enabled for this instance of wxDbTable")); - return FALSE; + return false; } else return(getRec(SQL_FETCH_LAST)); @@ -1005,7 +998,7 @@ void wxDbTable::BuildDeleteStmt(wxString &pSqlStmt, int typeOfDel, const wxStrin // Get the ROWID value. If not successful retreiving the ROWID, // simply fall down through the code and build the WHERE clause // based on the key fields. - if (SQLGetData(hstmt, (UWORD)(noCols+1), SQL_C_CHAR, (UCHAR*) rowid, wxDB_ROWID_LEN, &cb) == SQL_SUCCESS) + if (SQLGetData(hstmt, (UWORD)(noCols+1), SQL_C_WXCHAR, (UCHAR*) rowid, sizeof(rowid), &cb) == SQL_SUCCESS) { pSqlStmt += wxT("ROWID = '"); pSqlStmt += rowid; @@ -1054,13 +1047,13 @@ void wxDbTable::BuildSelectStmt(wxString &pSqlStmt, int typeOfSelect, bool disti // Was a FROM clause specified to join tables to the base table? // Available for ::Query() only!!! - bool appendFromClause = FALSE; + bool appendFromClause = false; #if wxODBC_BACKWARD_COMPATABILITY if (typeOfSelect == DB_SELECT_WHERE && from && wxStrlen(from)) - appendFromClause = TRUE; + appendFromClause = true; #else if (typeOfSelect == DB_SELECT_WHERE && from.Length()) - appendFromClause = TRUE; + appendFromClause = true; #endif // Add the column list @@ -1070,7 +1063,7 @@ void wxDbTable::BuildSelectStmt(wxString &pSqlStmt, int typeOfSelect, bool disti { tStr = colDefs[i].ColName; // If joining tables, the base table column names must be qualified to avoid ambiguity - if ((appendFromClause || pDb->Dbms() == dbmsACCESS) && !tStr.Find(wxT('.'))) + if ((appendFromClause || pDb->Dbms() == dbmsACCESS) && tStr.Find(wxT('.')) == wxNOT_FOUND) { pSqlStmt += pDb->SQLTableName(queryTableName.c_str()); pSqlStmt += wxT("."); @@ -1184,7 +1177,7 @@ void wxDbTable::BuildUpdateStmt(wxString &pSqlStmt, int typeOfUpd, const wxStrin wxString whereClause; whereClause.Empty(); - bool firstColumn = TRUE; + bool firstColumn = true; pSqlStmt.Printf(wxT("UPDATE %s SET "), pDb->SQLTableName(tableName.c_str()).c_str()); @@ -1199,7 +1192,7 @@ void wxDbTable::BuildUpdateStmt(wxString &pSqlStmt, int typeOfUpd, const wxStrin if (!firstColumn) pSqlStmt += wxT(","); else - firstColumn = FALSE; + firstColumn = false; pSqlStmt += pDb->SQLColumnName(colDefs[i].ColName); // pSqlStmt += colDefs[i].ColName; @@ -1223,7 +1216,7 @@ void wxDbTable::BuildUpdateStmt(wxString &pSqlStmt, int typeOfUpd, const wxStrin // Get the ROWID value. If not successful retreiving the ROWID, // simply fall down through the code and build the WHERE clause // based on the key fields. - if (SQLGetData(hstmt, (UWORD)(noCols+1), SQL_C_CHAR, (UCHAR*) rowid, wxDB_ROWID_LEN, &cb) == SQL_SUCCESS) + if (SQLGetData(hstmt, (UWORD)(noCols+1), SQL_C_WXCHAR, (UCHAR*) rowid, sizeof(rowid), &cb) == SQL_SUCCESS) { pSqlStmt += wxT("ROWID = '"); pSqlStmt += rowid; @@ -1260,7 +1253,7 @@ void wxDbTable::BuildWhereClause(wxString &pWhereClause, int typeOfWhere, * They are not included as part of the where clause. */ { - bool moreThanOneColumn = FALSE; + bool moreThanOneColumn = false; wxString colValue; // Loop through the columns building a where clause as you go @@ -1269,7 +1262,7 @@ void wxDbTable::BuildWhereClause(wxString &pWhereClause, int typeOfWhere, { // Determine if this column should be included in the WHERE clause if ((typeOfWhere == DB_WHERE_KEYFIELDS && colDefs[colNo].KeyField) || - (typeOfWhere == DB_WHERE_MATCHING && (!IsColNull(colNo)))) + (typeOfWhere == DB_WHERE_MATCHING && (!IsColNull((UWORD)colNo)))) { // Skip over timestamp columns if (colDefs[colNo].SqlCtype == SQL_C_TIMESTAMP) @@ -1278,19 +1271,19 @@ void wxDbTable::BuildWhereClause(wxString &pWhereClause, int typeOfWhere, if (moreThanOneColumn) pWhereClause += wxT(" AND "); else - moreThanOneColumn = TRUE; + moreThanOneColumn = true; // Concatenate where phrase for the column wxString tStr = colDefs[colNo].ColName; - if (qualTableName.Length() && !tStr.Find(wxT('.'))) + if (qualTableName.Length() && tStr.Find(wxT('.')) == wxNOT_FOUND) { pWhereClause += pDb->SQLTableName(qualTableName); pWhereClause += wxT("."); } pWhereClause += pDb->SQLColumnName(colDefs[colNo].ColName); - if (useLikeComparison && (colDefs[colNo].SqlCtype == SQL_C_CHAR)) + if (useLikeComparison && (colDefs[colNo].SqlCtype == SQL_C_WXCHAR)) pWhereClause += wxT(" LIKE "); else pWhereClause += wxT(" = "); @@ -1298,6 +1291,10 @@ void wxDbTable::BuildWhereClause(wxString &pWhereClause, int typeOfWhere, switch(colDefs[colNo].SqlCtype) { case SQL_C_CHAR: +#ifndef __UNIX__ + case SQL_C_WCHAR: +#endif + //case SQL_C_WXCHAR: SQL_C_WXCHAR is covered by either SQL_C_CHAR or SQL_C_WCHAR colValue.Printf(wxT("'%s'"), (UCHAR FAR *) colDefs[colNo].PtrDataObj); break; case SQL_C_SHORT: @@ -1369,7 +1366,7 @@ bool wxDbTable::CloseCursor(HSTMT cursor) return(pDb->DispAllErrors(henv, hdbc, cursor)); // Completed successfully - return(TRUE); + return true; } // wxDbTable::CloseCursor() @@ -1378,7 +1375,7 @@ bool wxDbTable::CloseCursor(HSTMT cursor) bool wxDbTable::CreateTable(bool attemptDrop) { if (!pDb) - return FALSE; + return false; int i, j; wxString sqlStmt; @@ -1389,7 +1386,7 @@ bool wxDbTable::CreateTable(bool attemptDrop) // Drop table first if (attemptDrop && !DropTable()) - return FALSE; + return false; // Create the table #ifdef DBDEBUG_CONSOLE @@ -1402,7 +1399,7 @@ bool wxDbTable::CreateTable(bool attemptDrop) switch(colDefs[i].DbDataType) { case DB_DATA_TYPE_VARCHAR: - cout << pDb->GetTypeInfVarchar().TypeName << wxT("(") << colDefs[i].SzDataObj << wxT(")"); + cout << pDb->GetTypeInfVarchar().TypeName << wxT("(") << (int)(colDefs[i].SzDataObj / sizeof(wxChar)) << wxT(")"); break; case DB_DATA_TYPE_INTEGER: cout << pDb->GetTypeInfInteger().TypeName; @@ -1422,7 +1419,7 @@ bool wxDbTable::CreateTable(bool attemptDrop) #endif // Build a CREATE TABLE string from the colDefs structure. - bool needComma = FALSE; + bool needComma = false; sqlStmt.Printf(wxT("CREATE TABLE %s ("), pDb->SQLTableName(tableName.c_str()).c_str()); @@ -1464,7 +1461,7 @@ bool wxDbTable::CreateTable(bool attemptDrop) // colDefs[i].DbDataType == DB_DATA_TYPE_BLOB) { wxString s; - s.Printf(wxT("(%d)"), colDefs[i].SzDataObj); + s.Printf(wxT("(%d)"), (int)(colDefs[i].SzDataObj / sizeof(wxChar))); sqlStmt += s; } @@ -1480,7 +1477,7 @@ bool wxDbTable::CreateTable(bool attemptDrop) } } - needComma = TRUE; + needComma = true; } // If there is a primary key defined, include it in the create statement for (i = j = 0; i < noCols; i++) @@ -1538,7 +1535,7 @@ bool wxDbTable::CreateTable(bool attemptDrop) colDefs[i].DbDataType == DB_DATA_TYPE_VARCHAR) { wxString s; - s.Printf(wxT("(%d)"), colDefs[i].SzDataObj); + s.Printf(wxT("(%d)"), (int)(colDefs[i].SzDataObj / sizeof(wxChar))); sqlStmt += s; } } @@ -1571,17 +1568,17 @@ bool wxDbTable::CreateTable(bool attemptDrop) pDb->DispAllErrors(henv, hdbc, hstmt); pDb->RollbackTrans(); CloseCursor(hstmt); - return(FALSE); + return false; } // Commit the transaction and close the cursor if (!pDb->CommitTrans()) - return(FALSE); + return false; if (!CloseCursor(hstmt)) - return(FALSE); + return false; // Database table created successfully - return(TRUE); + return true; } // wxDbTable::CreateTable() @@ -1589,7 +1586,7 @@ bool wxDbTable::CreateTable(bool attemptDrop) /********** wxDbTable::DropTable() **********/ bool wxDbTable::DropTable() { - // NOTE: This function returns TRUE if the Table does not exist, but + // NOTE: This function returns true if the Table 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 @@ -1623,18 +1620,18 @@ bool wxDbTable::DropTable() pDb->DispAllErrors(henv, hdbc, hstmt); pDb->RollbackTrans(); // CloseCursor(hstmt); - return(FALSE); + return false; } } } // Commit the transaction and close the cursor if (! pDb->CommitTrans()) - return(FALSE); + return false; if (! CloseCursor(hstmt)) - return(FALSE); + return false; - return(TRUE); + return true; } // wxDbTable::DropTable() @@ -1646,7 +1643,7 @@ bool wxDbTable::CreateIndex(const wxString &idxName, bool unique, UWORD noIdxCol // Drop the index first if (attemptDrop && !DropIndex(idxName)) - return (FALSE); + return false; // MySQL (and possibly Sybase ASE?? - gt) require that any columns which are used as portions // of an index have the columns defined as "NOT NULL". During initial table creation though, @@ -1660,11 +1657,11 @@ bool wxDbTable::CreateIndex(const wxString &idxName, bool unique, UWORD noIdxCol { wxString sqlStmt; int i; - bool ok = TRUE; + bool ok = true; for (i = 0; i < noIdxCols && ok; i++) { int j = 0; - bool found = FALSE; + bool found = false; // Find the column definition that has the ColName that matches the // index column name. We need to do this to get the DB_DATA_TYPE of // the index column, as MySQL's syntax for the ALTER column requires @@ -1672,7 +1669,7 @@ bool wxDbTable::CreateIndex(const wxString &idxName, bool unique, UWORD noIdxCol while (!found && (j < this->noCols)) { if (wxStrcmp(colDefs[j].ColName,pIdxDefs[i].ColName) == 0) - found = TRUE; + found = true; if (!found) j++; } @@ -1680,7 +1677,7 @@ bool wxDbTable::CreateIndex(const wxString &idxName, bool unique, UWORD noIdxCol if (found) { ok = pDb->ModifyColumn(tableName, pIdxDefs[i].ColName, - colDefs[j].DbDataType, colDefs[j].SzDataObj, + colDefs[j].DbDataType, (int)(colDefs[j].SzDataObj / sizeof(wxChar)), wxT("NOT NULL")); if (!ok) @@ -1696,14 +1693,14 @@ bool wxDbTable::CreateIndex(const wxString &idxName, bool unique, UWORD noIdxCol } } else - ok = FALSE; + ok = false; } if (ok) pDb->CommitTrans(); else { pDb->RollbackTrans(); - return(FALSE); + return false; } } @@ -1742,11 +1739,11 @@ bool wxDbTable::CreateIndex(const wxString &idxName, bool unique, UWORD noIdxCol if ( colDefs[j].DbDataType == DB_DATA_TYPE_VARCHAR) { wxString s; - s.Printf(wxT("(%d)"), colDefs[i].SzDataObj); + s.Printf(wxT("(%d)"), (int)(colDefs[i].SzDataObj / sizeof(wxChar))); sqlStmt += s; } } - + // Postgres and SQL Server 7 do not support the ASC/DESC keywords for index columns if (!((pDb->Dbms() == dbmsMS_SQL_SERVER) && (wxStrncmp(pDb->dbInf.dbmsVer,_T("07"),2)==0)) && !(pDb->Dbms() == dbmsPOSTGRES)) @@ -1778,17 +1775,17 @@ bool wxDbTable::CreateIndex(const wxString &idxName, bool unique, UWORD noIdxCol pDb->DispAllErrors(henv, hdbc, hstmt); pDb->RollbackTrans(); CloseCursor(hstmt); - return(FALSE); + return false; } // Commit the transaction and close the cursor if (! pDb->CommitTrans()) - return(FALSE); + return false; if (! CloseCursor(hstmt)) - return(FALSE); + return false; // Index Created Successfully - return(TRUE); + return true; } // wxDbTable::CreateIndex() @@ -1796,7 +1793,7 @@ bool wxDbTable::CreateIndex(const wxString &idxName, bool unique, UWORD noIdxCol /********** wxDbTable::DropIndex() **********/ bool wxDbTable::DropIndex(const wxString &idxName) { - // NOTE: This function returns TRUE if the Index does not exist, but + // NOTE: This function returns true if the Index 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 @@ -1844,18 +1841,18 @@ bool wxDbTable::DropIndex(const wxString &idxName) pDb->DispAllErrors(henv, hdbc, hstmt); pDb->RollbackTrans(); CloseCursor(hstmt); - return(FALSE); + return false; } } } // Commit the transaction and close the cursor if (! pDb->CommitTrans()) - return(FALSE); + return false; if (! CloseCursor(hstmt)) - return(FALSE); + return false; - return(TRUE); + return true; } // wxDbTable::DropIndex() @@ -1865,7 +1862,7 @@ bool wxDbTable::SetOrderByColNums(UWORD first, ... ) int colNo = first; // using 'int' to be able to look for wxDB_NO_MORE_COLUN_NUMBERS va_list argptr; - bool abort = FALSE; + bool abort = false; wxString tempStr; va_start(argptr, first); /* Initialize variable arguments. */ @@ -1877,7 +1874,7 @@ bool wxDbTable::SetOrderByColNums(UWORD first, ... ) // Valid columns are 0 thru noCols-1 if (colNo >= noCols || colNo < 0) { - abort = TRUE; + abort = true; continue; } @@ -1945,6 +1942,14 @@ int wxDbTable::Insert(void) } } retcode = SQLParamData(hstmtInsert, &pParmID); + if (retcode != SQL_SUCCESS && + retcode != SQL_SUCCESS_WITH_INFO) + { + // record was not inserted + pDb->DispNextError(); + pDb->DispAllErrors(henv, hdbc, hstmtInsert); + return(DB_FAILURE); + } } } @@ -1959,7 +1964,7 @@ bool wxDbTable::Update(void) { wxASSERT(!queryOnly); if (queryOnly) - return(FALSE); + return false; wxString sqlStmt; @@ -1983,7 +1988,7 @@ bool wxDbTable::Update(const wxString &pSqlStmt) { wxASSERT(!queryOnly); if (queryOnly) - return(FALSE); + return false; pDb->WriteSqlLog(pSqlStmt); @@ -1997,7 +2002,7 @@ bool wxDbTable::UpdateWhere(const wxString &pWhereClause) { wxASSERT(!queryOnly); if (queryOnly) - return(FALSE); + return false; wxString sqlStmt; @@ -2021,7 +2026,7 @@ bool wxDbTable::Delete(void) { wxASSERT(!queryOnly); if (queryOnly) - return(FALSE); + return false; wxString sqlStmt; sqlStmt.Empty(); @@ -2042,7 +2047,7 @@ bool wxDbTable::DeleteWhere(const wxString &pWhereClause) { wxASSERT(!queryOnly); if (queryOnly) - return(FALSE); + return false; wxString sqlStmt; sqlStmt.Empty(); @@ -2063,7 +2068,7 @@ bool wxDbTable::DeleteMatching(void) { wxASSERT(!queryOnly); if (queryOnly) - return(FALSE); + return false; wxString sqlStmt; sqlStmt.Empty(); @@ -2083,12 +2088,14 @@ bool wxDbTable::DeleteMatching(void) bool wxDbTable::IsColNull(UWORD colNo) const { /* - This logic is just not right. It would indicate TRUE + This logic is just not right. It would indicate true if a numeric field were set to a value of 0. switch(colDefs[colNo].SqlCtype) { case SQL_C_CHAR: + case SQL_C_WCHAR: + //case SQL_C_WXCHAR: SQL_C_WXCHAR is covered by either SQL_C_CHAR or SQL_C_WCHAR return(((UCHAR FAR *) colDefs[colNo].PtrDataObj)[0] == 0); case SQL_C_SSHORT: return(( *((SWORD *) colDefs[colNo].PtrDataObj)) == 0); @@ -2106,11 +2113,11 @@ bool wxDbTable::IsColNull(UWORD colNo) const TIMESTAMP_STRUCT *pDt; pDt = (TIMESTAMP_STRUCT *) colDefs[colNo].PtrDataObj; if (pDt->year == 0 && pDt->month == 0 && pDt->day == 0) - return(TRUE); + return true; else - return(FALSE); + return false; default: - return(TRUE); + return true; } */ return (colDefs[colNo].Null); @@ -2121,16 +2128,16 @@ bool wxDbTable::IsColNull(UWORD colNo) const bool wxDbTable::CanSelectForUpdate(void) { if (queryOnly) - return FALSE; + return false; if (pDb->Dbms() == dbmsMY_SQL) - return FALSE; + return false; if ((pDb->Dbms() == dbmsORACLE) || (pDb->dbInf.posStmts & SQL_PS_SELECT_FOR_UPDATE)) - return(TRUE); + return true; else - return(FALSE); + return false; } // wxDbTable::CanSelectForUpdate() @@ -2139,15 +2146,15 @@ bool wxDbTable::CanSelectForUpdate(void) bool wxDbTable::CanUpdByROWID(void) { /* - * NOTE: Returning FALSE for now until this can be debugged, + * NOTE: Returning false for now until this can be debugged, * as the ROWID is not getting updated correctly */ - return FALSE; + return false; /* if (pDb->Dbms() == dbmsORACLE) - return(TRUE); + return true; else - return(FALSE); + return false; */ } // wxDbTable::CanUpdByROWID() @@ -2156,9 +2163,9 @@ bool wxDbTable::CanUpdByROWID(void) bool wxDbTable::IsCursorClosedOnCommit(void) { if (pDb->dbInf.cursorCommitBehavior == SQL_CB_PRESERVE) - return(FALSE); + return false; else - return(TRUE); + return true; } // wxDbTable::IsCursorClosedOnCommit() @@ -2172,6 +2179,10 @@ void wxDbTable::ClearMemberVar(UWORD colNo, bool setToNull) switch(colDefs[colNo].SqlCtype) { case SQL_C_CHAR: +#ifndef __UNIX__ + case SQL_C_WCHAR: +#endif + //case SQL_C_WXCHAR: SQL_C_WXCHAR is covered by either SQL_C_CHAR or SQL_C_WCHAR ((UCHAR FAR *) colDefs[colNo].PtrDataObj)[0] = 0; break; case SQL_C_SSHORT: @@ -2180,6 +2191,7 @@ void wxDbTable::ClearMemberVar(UWORD colNo, bool setToNull) case SQL_C_USHORT: *((UWORD*) colDefs[colNo].PtrDataObj) = 0; break; + case SQL_C_LONG: case SQL_C_SLONG: *((SDWORD *) colDefs[colNo].PtrDataObj) = 0; break; @@ -2217,7 +2229,7 @@ void wxDbTable::ClearMemberVars(bool setToNull) // Loop through the columns setting each member variable to zero for (i=0; i < noCols; i++) - ClearMemberVar(i,setToNull); + ClearMemberVar((UWORD)i,setToNull); } // wxDbTable::ClearMemberVars() @@ -2235,7 +2247,7 @@ bool wxDbTable::SetQueryTimeout(UDWORD nSeconds) return(pDb->DispAllErrors(henv, hdbc, hstmtInternal)); // Completed Successfully - return(TRUE); + return true; } // wxDbTable::SetQueryTimeout() @@ -2269,14 +2281,14 @@ void wxDbTable::SetColDefs(UWORD index, const wxString &fieldName, int dataType, colDefs[index].DbDataType = dataType; colDefs[index].PtrDataObj = pData; colDefs[index].SqlCtype = cType; - colDefs[index].SzDataObj = size; + colDefs[index].SzDataObj = size; //TODO: glt ??? * sizeof(wxChar) ??? colDefs[index].KeyField = keyField; colDefs[index].DerivedCol = derivedCol; // Derived columns by definition would NOT be "Insertable" or "Updateable" if (derivedCol) { - colDefs[index].Updateable = FALSE; - colDefs[index].InsertAllowed = FALSE; + colDefs[index].Updateable = false; + colDefs[index].InsertAllowed = false; } else { @@ -2284,7 +2296,7 @@ void wxDbTable::SetColDefs(UWORD index, const wxString &fieldName, int dataType, colDefs[index].InsertAllowed = insAllow; } - colDefs[index].Null = FALSE; + colDefs[index].Null = false; } // wxDbTable::SetColDefs() @@ -2307,13 +2319,13 @@ wxDbColDataPtr* wxDbTable::SetColDefs(wxDbColInf *pColInfs, UWORD numCols) switch (pColInfs[index].dbDataType) { case DB_DATA_TYPE_VARCHAR: - pColDataPtrs[index].PtrDataObj = new wxChar[pColInfs[index].bufferLength+1]; - pColDataPtrs[index].SzDataObj = pColInfs[index].columnSize; - pColDataPtrs[index].SqlCtype = SQL_C_CHAR; + pColDataPtrs[index].PtrDataObj = new wxChar[pColInfs[index].bufferSize+(1*sizeof(wxChar))]; + pColDataPtrs[index].SzDataObj = pColInfs[index].bufferSize+(1*sizeof(wxChar)); + pColDataPtrs[index].SqlCtype = SQL_C_WXCHAR; break; case DB_DATA_TYPE_INTEGER: // Can be long or short - if (pColInfs[index].bufferLength == sizeof(long)) + if (pColInfs[index].bufferSize == sizeof(long)) { pColDataPtrs[index].PtrDataObj = new long; pColDataPtrs[index].SzDataObj = sizeof(long); @@ -2328,7 +2340,7 @@ wxDbColDataPtr* wxDbTable::SetColDefs(wxDbColInf *pColInfs, UWORD numCols) break; case DB_DATA_TYPE_FLOAT: // Can be float or double - if (pColInfs[index].bufferLength == sizeof(float)) + if (pColInfs[index].bufferSize == sizeof(float)) { pColDataPtrs[index].PtrDataObj = new float; pColDataPtrs[index].SzDataObj = sizeof(float); @@ -2420,7 +2432,7 @@ ULONG wxDbTable::Count(const wxString &args) // Initialize the Count cursor if it's not already initialized if (!hstmtCount) { - hstmtCount = GetNewCursor(FALSE,FALSE); + hstmtCount = GetNewCursor(false,false); wxASSERT(hstmtCount); if (!hstmtCount) return(0); @@ -2460,7 +2472,7 @@ ULONG wxDbTable::Count(const wxString &args) /********** wxDbTable::Refresh() **********/ bool wxDbTable::Refresh(void) { - bool result = TRUE; + bool result = true; // Switch to the internal cursor so any active cursors are not corrupted HSTMT currCursor = GetCursor(); @@ -2481,12 +2493,12 @@ bool wxDbTable::Refresh(void) if (CanUpdByROWID()) { SDWORD cb; - wxChar rowid[wxDB_ROWID_LEN+1]; + wxChar rowid[wxDB_ROWID_LEN+1]; // Get the ROWID value. If not successful retreiving the ROWID, // simply fall down through the code and build the WHERE clause // based on the key fields. - if (SQLGetData(hstmt, (UWORD)(noCols+1), SQL_C_CHAR, (UCHAR*) rowid, wxDB_ROWID_LEN, &cb) == SQL_SUCCESS) + if (SQLGetData(hstmt, (UWORD)(noCols+1), SQL_C_WXCHAR, (UCHAR*) rowid, sizeof(rowid), &cb) == SQL_SUCCESS) { whereClause += pDb->SQLTableName(queryTableName); // whereClause += queryTableName; @@ -2504,10 +2516,10 @@ bool wxDbTable::Refresh(void) where = whereClause; orderBy.Empty(); if (!Query()) - result = FALSE; + result = false; if (result && !GetNext()) - result = FALSE; + result = false; // Switch back to original cursor SetCursor(&currCursor); @@ -2532,14 +2544,14 @@ bool wxDbTable::SetColNull(UWORD colNo, bool set) { colDefs[colNo].Null = set; if (set) // Blank out the values in the member variable - ClearMemberVar(colNo, FALSE); // Must call with FALSE here, or infinite recursion will happen + ClearMemberVar(colNo, false); // Must call with false here, or infinite recursion will happen setCbValueForColumn(colNo); - return(TRUE); + return true; } else - return(FALSE); + return false; } // wxDbTable::SetColNull() @@ -2558,14 +2570,14 @@ bool wxDbTable::SetColNull(const wxString &colName, bool set) { colDefs[colNo].Null = set; if (set) // Blank out the values in the member variable - ClearMemberVar(colNo,FALSE); // Must call with FALSE here, or infinite recursion will happen + ClearMemberVar((UWORD)colNo,false); // Must call with false here, or infinite recursion will happen setCbValueForColumn(colNo); - return(TRUE); + return true; } else - return(FALSE); + return false; } // wxDbTable::SetColNull() @@ -2612,7 +2624,7 @@ HSTMT *wxDbTable::GetNewCursor(bool setCursor, bool bindColumns) /********** wxDbTable::DeleteCursor() **********/ bool wxDbTable::DeleteCursor(HSTMT *hstmtDel) { - bool result = TRUE; + bool result = true; if (!hstmtDel) // Cursor already deleted return(result); @@ -2625,7 +2637,7 @@ ODBC 3.0 says to use this form if (SQLFreeStmt(*hstmtDel, SQL_DROP) != SQL_SUCCESS) { pDb->DispAllErrors(henv, hdbc); - result = FALSE; + result = false; } delete hstmtDel; @@ -2642,7 +2654,7 @@ void wxDbTable::SetRowMode(const rowmode_t rowmode) { if (!m_hstmtGridQuery) { - m_hstmtGridQuery = GetNewCursor(FALSE,FALSE); + m_hstmtGridQuery = GetNewCursor(false,false); if (!bindCols(*m_hstmtGridQuery)) return; } @@ -2665,7 +2677,7 @@ void wxDbTable::SetRowMode(const rowmode_t rowmode) wxVariant wxDbTable::GetCol(const int colNo) const { wxVariant val; - if ((colNo < noCols) && (!IsColNull(colNo))) + if ((colNo < noCols) && (!IsColNull((UWORD)colNo))) { switch (colDefs[colNo].SqlCtype) { @@ -2718,7 +2730,7 @@ void wxDbTable::SetCol(const int colNo, const wxVariant val) //FIXME: Add proper wxDateTime support to wxVariant.. wxDateTime dateval; - SetColNull(colNo, val.IsNull()); + SetColNull((UWORD)colNo, val.IsNull()); if (!val.IsNull()) { @@ -2728,7 +2740,7 @@ void wxDbTable::SetCol(const int colNo, const wxVariant val) { //Returns null if invalid! if (!dateval.ParseDate(val.GetString())) - SetColNull(colNo, TRUE); + SetColNull((UWORD)colNo, true); } switch (colDefs[colNo].SqlCtype) @@ -2737,7 +2749,7 @@ void wxDbTable::SetCol(const int colNo, const wxVariant val) case SQL_VARCHAR: csstrncpyt((wxChar *)(colDefs[colNo].PtrDataObj), val.GetString().c_str(), - colDefs[colNo].SzDataObj-1); + colDefs[colNo].SzDataObj-1); //TODO: glt ??? * sizeof(wxChar) ??? break; case SQL_C_LONG: case SQL_C_SLONG: @@ -2745,7 +2757,7 @@ void wxDbTable::SetCol(const int colNo, const wxVariant val) break; case SQL_C_SHORT: case SQL_C_SSHORT: - *(short *)(colDefs[colNo].PtrDataObj) = val.GetLong(); + *(short *)(colDefs[colNo].PtrDataObj) = (short)val.GetLong(); break; case SQL_C_ULONG: *(unsigned long *)(colDefs[colNo].PtrDataObj) = val.GetLong(); @@ -2757,7 +2769,7 @@ void wxDbTable::SetCol(const int colNo, const wxVariant val) *(wxChar *)(colDefs[colNo].PtrDataObj) = val.GetChar(); break; case SQL_C_USHORT: - *(unsigned short *)(colDefs[colNo].PtrDataObj) = val.GetLong(); + *(unsigned short *)(colDefs[colNo].PtrDataObj) = (unsigned short)val.GetLong(); break; //FIXME: Add proper wxDateTime support to wxVariant.. case SQL_C_DATE: @@ -2765,9 +2777,9 @@ void wxDbTable::SetCol(const int colNo, const wxVariant val) DATE_STRUCT *dataptr = (DATE_STRUCT *)colDefs[colNo].PtrDataObj; - dataptr->year = dateval.GetYear(); - dataptr->month = dateval.GetMonth()+1; - dataptr->day = dateval.GetDay(); + dataptr->year = (SWORD)dateval.GetYear(); + dataptr->month = (UWORD)(dateval.GetMonth()+1); + dataptr->day = (UWORD)dateval.GetDay(); } break; case SQL_C_TIME: @@ -2784,9 +2796,9 @@ void wxDbTable::SetCol(const int colNo, const wxVariant val) { TIMESTAMP_STRUCT *dataptr = (TIMESTAMP_STRUCT *)colDefs[colNo].PtrDataObj; - dataptr->year = dateval.GetYear(); - dataptr->month = dateval.GetMonth()+1; - dataptr->day = dateval.GetDay(); + dataptr->year = (SWORD)dateval.GetYear(); + dataptr->month = (UWORD)(dateval.GetMonth()+1); + dataptr->day = (UWORD)dateval.GetDay(); dataptr->hour = dateval.GetHour(); dataptr->minute = dateval.GetMinute(); @@ -2841,7 +2853,7 @@ void wxDbTable::SetKey(const GenericKey& k) { if (colDefs[i].KeyField) { - SetColNull(i, FALSE); + SetColNull((UWORD)i, false); memcpy(colDefs[i].PtrDataObj, blkptr, colDefs[i].SzDataObj); blkptr += colDefs[i].SzDataObj; }