diff --git a/include/wx/dbtable.h b/include/wx/dbtable.h index a09f6fe2cf..36e94cb5fd 100644 --- a/include/wx/dbtable.h +++ b/include/wx/dbtable.h @@ -139,7 +139,7 @@ private: wxString tablePath; // needed for dBase tables wxString tableName; // Table name wxString queryTableName; // Query Table Name - UWORD noCols; // # of columns in the table + UWORD m_numCols; // # of columns in the table bool queryOnly; // Query Only, no inserts, updates or deletes // Column Definitions @@ -173,7 +173,7 @@ public: char tablePath[wxDB_PATH_MAX]; // needed for dBase tables char tableName[DB_MAX_TABLE_NAME_LEN+1]; // Table name char queryTableName[DB_MAX_TABLE_NAME_LEN+1]; // Query Table Name - UWORD noCols; // # of columns in the table + UWORD m_numCols; // # of columns in the table bool queryOnly; // Query Only, no inserts, updates or deletes // Column Definitions @@ -211,7 +211,7 @@ public: const wxString &GetQueryTableName() { return queryTableName; } const wxString &GetTablePath() { return tablePath; } - UWORD GetNumberOfColumns() { return noCols; } // number of "defined" columns for this wxDbTable instance + UWORD GetNumberOfColumns() { return m_numCols; } // number of "defined" columns for this wxDbTable instance const wxString &GetFromClause() { return from; } const wxString &GetOrderByClause() { return orderBy; } @@ -284,13 +284,16 @@ public: { BuildWhereClause(pWhereClause,typeOfWhere,qualTableName,useLikeComparison); } #endif bool CanSelectForUpdate(void); - bool CanUpdByROWID(void); - void ClearMemberVar(UWORD colNo, bool setToNull=false); +#if wxODBC_BACKWARD_COMPATABILITY + bool CanUpdByROWID(void) { return CanUpdateByRowID(); }; +#endif + bool CanUpdateByROWID(void); + void ClearMemberVar(UWORD colNumber, bool setToNull=false); void ClearMemberVars(bool setToNull=false); bool SetQueryTimeout(UDWORD nSeconds); wxDbColDef *GetColDefs() { return colDefs; } - void SetColDefs(UWORD index, const wxString &fieldName, int dataType, + bool SetColDefs(UWORD index, const wxString &fieldName, int dataType, void *pData, SWORD cType, int size, bool keyField = false, bool upd = true, bool insAllow = true, bool derivedCol = false); @@ -309,12 +312,12 @@ public: ULONG Count(const wxString &args=_T("*")); int DB_STATUS(void) { return(pDb->DB_STATUS); } - bool IsColNull(UWORD colNo) const; - bool SetColNull(UWORD colNo, bool set=true); + bool IsColNull(UWORD colNumber) const; + bool SetColNull(UWORD colNumber, bool set=true); bool SetColNull(const wxString &colName, bool set=true); #if wxODBC_BACKWARD_COMPATABILITY // The following member functions are deprecated. You should use the SetColNull() - bool SetNull(int colNo, bool set=true) { return (SetNull(colNo,set)); } + bool SetNull(int colNumber, bool set=true) { return (SetNull(colNumber,set)); } bool SetNull(const char *colName, bool set=true) { return (SetNull(colName,set)); } #endif #ifdef __WXDEBUG__ @@ -324,8 +327,12 @@ public: //TODO: Need to Document typedef enum { WX_ROW_MODE_QUERY , WX_ROW_MODE_INDIVIDUAL } rowmode_t; virtual void SetRowMode(const rowmode_t rowmode); - virtual wxVariant GetCol(const int colNo) const ; - virtual void SetCol(const int colNo, const wxVariant value); +#if wxODBC_BACKWARD_COMPATABILITY + virtual wxVariant GetCol(const int colNumber) const { return GetColumn(colNumber); }; + virtual void SetCol(const int colNumber, const wxVariant value) { return SetColumn(colNumber, value); }; +#endif + virtual wxVariant GetColumn(const int colNumber) const ; + virtual void SetColumn(const int colNumber, const wxVariant value); virtual GenericKey GetKey(void); virtual void SetKey(const GenericKey &key); diff --git a/src/common/dbgrid.cpp b/src/common/dbgrid.cpp index ed58753424..af7ae488dc 100644 --- a/src/common/dbgrid.cpp +++ b/src/common/dbgrid.cpp @@ -448,7 +448,7 @@ long wxDbGridTableBase::GetValueAsLong(int row, int col) (sqltype == SQL_C_SLONG) || (sqltype == SQL_C_ULONG)) { - wxVariant val = m_data->GetCol(m_ColInfo[col].DbCol); + wxVariant val = m_data->GetColumn(m_ColInfo[col].DbCol); return val.GetLong(); } wxFAIL_MSG (_T("unknown column, ")); @@ -473,7 +473,7 @@ double wxDbGridTableBase::GetValueAsDouble(int row, int col) (sqltype == SQL_C_FLOAT) || (sqltype == SQL_C_DOUBLE)) { - wxVariant val = m_data->GetCol(m_ColInfo[col].DbCol); + wxVariant val = m_data->GetColumn(m_ColInfo[col].DbCol); return val.GetDouble(); } wxFAIL_MSG (_T("unknown column")); @@ -496,7 +496,7 @@ bool wxDbGridTableBase::GetValueAsBool(int row, int col) (sqltype == SQL_C_SLONG) || (sqltype == SQL_C_ULONG)) { - wxVariant val = m_data->GetCol(m_ColInfo[col].DbCol); + wxVariant val = m_data->GetColumn(m_ColInfo[col].DbCol); return val.GetBool(); } wxFAIL_MSG (_T("unknown column, ")); @@ -525,7 +525,7 @@ void* wxDbGridTableBase::GetValueAsCustom(int row, int col, const wxString& type (sqltype == SQL_C_TIME) || (sqltype == SQL_C_TIMESTAMP)) { - wxVariant val = m_data->GetCol(m_ColInfo[col].DbCol); + wxVariant val = m_data->GetColumn(m_ColInfo[col].DbCol); return new wxDateTime(val.GetDateTime()); } } @@ -562,7 +562,7 @@ void wxDbGridTableBase::SetValueAsCustom(int row, int col, const wxString& typeN } wxVariant val(date); m_rowmodified = true; - m_data->SetCol(m_ColInfo[col].DbCol,val); + m_data->SetColumn(m_ColInfo[col].DbCol,val); } } wxFAIL_MSG (_T("unknown column data type")); @@ -594,7 +594,7 @@ wxString wxDbGridTableBase::GetValue(int row, int col) wxLogDebug(wxT("GetValue() on %i,%i"),row,col); ValidateRow(row); - wxVariant val = m_data->GetCol(m_ColInfo[col].DbCol); + wxVariant val = m_data->GetColumn(m_ColInfo[col].DbCol); wxLogDebug(wxT("\tReturning \"%s\"\n"),val.GetString().c_str()); return val.GetString(); @@ -609,7 +609,7 @@ void wxDbGridTableBase::SetValue(int row, int col,const wxString& value) wxVariant val(value); m_rowmodified = true; - m_data->SetCol(m_ColInfo[col].DbCol,val); + m_data->SetColumn(m_ColInfo[col].DbCol,val); } @@ -621,7 +621,7 @@ void wxDbGridTableBase::SetValueAsLong(int row, int col, long value) wxVariant val(value); m_rowmodified = true; - m_data->SetCol(m_ColInfo[col].DbCol,val); + m_data->SetColumn(m_ColInfo[col].DbCol,val); } @@ -633,7 +633,7 @@ void wxDbGridTableBase::SetValueAsDouble(int row, int col, double value) wxVariant val(value); m_rowmodified = true; - m_data->SetCol(m_ColInfo[col].DbCol,val); + m_data->SetColumn(m_ColInfo[col].DbCol,val); } @@ -646,7 +646,7 @@ void wxDbGridTableBase::SetValueAsBool(int row, int col, bool value) wxVariant val(value); m_rowmodified = true; - m_data->SetCol(m_ColInfo[col].DbCol,val); + m_data->SetColumn(m_ColInfo[col].DbCol,val); } diff --git a/src/common/dbtable.cpp b/src/common/dbtable.cpp index 013b9094ef..1eb798fec3 100644 --- a/src/common/dbtable.cpp +++ b/src/common/dbtable.cpp @@ -152,7 +152,7 @@ bool wxDbTable::initialize(wxDb *pwxDb, const wxString &tblName, const UWORD num hstmtInternal = 0; colDefs = 0; tableID = 0; - noCols = numColumns; // Number of cols in the table + m_numCols = numColumns; // Number of columns in the table where.Empty(); // Where clause orderBy.Empty(); // Order By clause from.Empty(); // From clause @@ -212,8 +212,8 @@ bool wxDbTable::initialize(wxDb *pwxDb, const wxString &tblName, const UWORD num hdbc = pDb->GetHDBC(); // Allocate space for column definitions - if (noCols) - colDefs = new wxDbColDef[noCols]; // Points to the first column definition + if (m_numCols) + colDefs = new wxDbColDef[m_numCols]; // Points to the first column definition // Allocate statement handles for the table if (!queryOnly) @@ -466,9 +466,9 @@ bool wxDbTable::bindParams(bool forUpdate) // Bind each column of the table that should be bound // to a parameter marker int i; - UWORD colNo; + UWORD colNumber; - for (i=0, colNo=1; i < noCols; i++) + for (i=0, colNumber=1; i < m_numCols; i++) { if (forUpdate) { @@ -519,7 +519,7 @@ bool wxDbTable::bindParams(bool forUpdate) if (forUpdate) { - if (SQLBindParameter(hstmtUpdate, colNo++, SQL_PARAM_INPUT, colDefs[i].SqlCtype, + if (SQLBindParameter(hstmtUpdate, colNumber++, SQL_PARAM_INPUT, colDefs[i].SqlCtype, fSqlType, precision, scale, (UCHAR*) colDefs[i].PtrDataObj, precision+1, &colDefs[i].CbValue) != SQL_SUCCESS) { @@ -528,7 +528,7 @@ bool wxDbTable::bindParams(bool forUpdate) } else { - if (SQLBindParameter(hstmtInsert, colNo++, SQL_PARAM_INPUT, colDefs[i].SqlCtype, + if (SQLBindParameter(hstmtInsert, colNumber++, SQL_PARAM_INPUT, colDefs[i].SqlCtype, fSqlType, precision, scale, (UCHAR*) colDefs[i].PtrDataObj, precision+1, &colDefs[i].CbValue) != SQL_SUCCESS) { @@ -564,7 +564,7 @@ bool wxDbTable::bindCols(HSTMT cursor) // Bind each column of the table to a memory address for fetching data UWORD i; - for (i = 0; i < noCols; i++) + for (i = 0; i < m_numCols; i++) { cb = colDefs[i].CbValue; if (SQLBindCol(cursor, (UWORD)(i+1), colDefs[i].SqlCtype, (UCHAR*) colDefs[i].PtrDataObj, @@ -602,7 +602,7 @@ bool wxDbTable::getRec(UWORD fetchType) // Set the Null member variable to indicate the Null state // of each column just read in. int i; - for (i = 0; i < noCols; i++) + for (i = 0; i < m_numCols; i++) colDefs[i].Null = (colDefs[i].CbValue == SQL_NULL_DATA); } } @@ -622,7 +622,7 @@ bool wxDbTable::getRec(UWORD fetchType) // Set the Null member variable to indicate the Null state // of each column just read in. int i; - for (i = 0; i < noCols; i++) + for (i = 0; i < m_numCols; i++) colDefs[i].Null = (colDefs[i].CbValue == SQL_NULL_DATA); } } @@ -678,7 +678,7 @@ bool wxDbTable::execUpdate(const wxString &pSqlStmt) { // Find the parameter int i; - for (i=0; i < noCols; i++) + for (i=0; i < m_numCols; i++) { if (colDefs[i].PtrDataObj == pParmID) { @@ -760,7 +760,7 @@ bool wxDbTable::Open(bool checkPrivileges, bool checkTableExists) // Calculate the maximum size of the concatenated // keys for use with wxDbGrid m_keysize = 0; - for (i=0; i < noCols; i++) + for (i=0; i < m_numCols; i++) { if (colDefs[i].KeyField) { @@ -829,12 +829,12 @@ bool wxDbTable::Open(bool checkPrivileges, bool checkTableExists) */ // Build an insert statement using parameter markers - if (!queryOnly && noCols > 0) + if (!queryOnly && m_numCols > 0) { bool needComma = false; sqlStmt.Printf(wxT("INSERT INTO %s ("), pDb->SQLTableName(tableName.c_str()).c_str()); - for (i = 0; i < noCols; i++) + for (i = 0; i < m_numCols; i++) { if (! colDefs[i].InsertAllowed) continue; @@ -849,7 +849,7 @@ bool wxDbTable::Open(bool checkPrivileges, bool checkTableExists) int insertableCount = 0; - for (i = 0; i < noCols; i++) + for (i = 0; i < m_numCols; i++) { if (! colDefs[i].InsertAllowed) continue; @@ -1000,7 +1000,7 @@ void wxDbTable::BuildDeleteStmt(wxString &pSqlStmt, int typeOfDel, const wxStrin // If the datasource supports the ROWID column, build // the where on ROWID for efficiency purposes. // e.g. DELETE FROM PARTS WHERE ROWID = '111.222.333' - if (CanUpdByROWID()) + if (CanUpdateByROWID()) { SDWORD cb; wxChar rowid[wxDB_ROWID_LEN+1]; @@ -1008,7 +1008,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_WXCHAR, (UCHAR*) rowid, sizeof(rowid), &cb) == SQL_SUCCESS) + if (SQLGetData(hstmt, (UWORD)(m_numCols+1), SQL_C_WXCHAR, (UCHAR*) rowid, sizeof(rowid), &cb) == SQL_SUCCESS) { pSqlStmt += wxT("ROWID = '"); pSqlStmt += rowid; @@ -1069,7 +1069,7 @@ void wxDbTable::BuildSelectStmt(wxString &pSqlStmt, int typeOfSelect, bool disti // Add the column list int i; wxString tStr; - for (i = 0; i < noCols; i++) + for (i = 0; i < m_numCols; i++) { tStr = colDefs[i].ColName; // If joining tables, the base table column names must be qualified to avoid ambiguity @@ -1079,13 +1079,13 @@ void wxDbTable::BuildSelectStmt(wxString &pSqlStmt, int typeOfSelect, bool disti pSqlStmt += wxT("."); } pSqlStmt += pDb->SQLColumnName(colDefs[i].ColName); - if (i + 1 < noCols) + if (i + 1 < m_numCols) pSqlStmt += wxT(","); } // If the datasource supports ROWID, get this column as well. Exception: Don't retrieve // the ROWID if querying distinct records. The rowid will always be unique. - if (!distinct && CanUpdByROWID()) + if (!distinct && CanUpdateByROWID()) { // If joining tables, the base table column names must be qualified to avoid ambiguity if (appendFromClause || pDb->Dbms() == dbmsACCESS) @@ -1194,7 +1194,7 @@ void wxDbTable::BuildUpdateStmt(wxString &pSqlStmt, int typeOfUpd, const wxStrin // Append a list of columns to be updated int i; - for (i = 0; i < noCols; i++) + for (i = 0; i < m_numCols; i++) { // Only append Updateable columns if (colDefs[i].Updateable) @@ -1218,7 +1218,7 @@ void wxDbTable::BuildUpdateStmt(wxString &pSqlStmt, int typeOfUpd, const wxStrin // If the datasource supports the ROWID column, build // the where on ROWID for efficiency purposes. // e.g. UPDATE PARTS SET Col1 = ?, Col2 = ? WHERE ROWID = '111.222.333' - if (CanUpdByROWID()) + if (CanUpdateByROWID()) { SDWORD cb; wxChar rowid[wxDB_ROWID_LEN+1]; @@ -1226,7 +1226,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_WXCHAR, (UCHAR*) rowid, sizeof(rowid), &cb) == SQL_SUCCESS) + if (SQLGetData(hstmt, (UWORD)(m_numCols+1), SQL_C_WXCHAR, (UCHAR*) rowid, sizeof(rowid), &cb) == SQL_SUCCESS) { pSqlStmt += wxT("ROWID = '"); pSqlStmt += rowid; @@ -1267,15 +1267,15 @@ void wxDbTable::BuildWhereClause(wxString &pWhereClause, int typeOfWhere, wxString colValue; // Loop through the columns building a where clause as you go - int colNo; - for (colNo = 0; colNo < noCols; colNo++) + int colNumber; + for (colNumber = 0; colNumber < m_numCols; colNumber++) { // Determine if this column should be included in the WHERE clause - if ((typeOfWhere == DB_WHERE_KEYFIELDS && colDefs[colNo].KeyField) || - (typeOfWhere == DB_WHERE_MATCHING && (!IsColNull((UWORD)colNo)))) + if ((typeOfWhere == DB_WHERE_KEYFIELDS && colDefs[colNumber].KeyField) || + (typeOfWhere == DB_WHERE_MATCHING && (!IsColNull((UWORD)colNumber)))) { // Skip over timestamp columns - if (colDefs[colNo].SqlCtype == SQL_C_TIMESTAMP) + if (colDefs[colNumber].SqlCtype == SQL_C_TIMESTAMP) continue; // If there is more than 1 column, join them with the keyword "AND" if (moreThanOneColumn) @@ -1284,54 +1284,54 @@ void wxDbTable::BuildWhereClause(wxString &pWhereClause, int typeOfWhere, moreThanOneColumn = true; // Concatenate where phrase for the column - wxString tStr = colDefs[colNo].ColName; + wxString tStr = colDefs[colNumber].ColName; if (qualTableName.Length() && tStr.Find(wxT('.')) == wxNOT_FOUND) { pWhereClause += pDb->SQLTableName(qualTableName); pWhereClause += wxT("."); } - pWhereClause += pDb->SQLColumnName(colDefs[colNo].ColName); + pWhereClause += pDb->SQLColumnName(colDefs[colNumber].ColName); - if (useLikeComparison && (colDefs[colNo].SqlCtype == SQL_C_WXCHAR)) + if (useLikeComparison && (colDefs[colNumber].SqlCtype == SQL_C_WXCHAR)) pWhereClause += wxT(" LIKE "); else pWhereClause += wxT(" = "); - switch(colDefs[colNo].SqlCtype) + switch(colDefs[colNumber].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); + colValue.Printf(wxT("'%s'"), (UCHAR FAR *) colDefs[colNumber].PtrDataObj); break; case SQL_C_SHORT: case SQL_C_SSHORT: - colValue.Printf(wxT("%hi"), *((SWORD *) colDefs[colNo].PtrDataObj)); + colValue.Printf(wxT("%hi"), *((SWORD *) colDefs[colNumber].PtrDataObj)); break; case SQL_C_USHORT: - colValue.Printf(wxT("%hu"), *((UWORD *) colDefs[colNo].PtrDataObj)); + colValue.Printf(wxT("%hu"), *((UWORD *) colDefs[colNumber].PtrDataObj)); break; case SQL_C_LONG: case SQL_C_SLONG: - colValue.Printf(wxT("%li"), *((SDWORD *) colDefs[colNo].PtrDataObj)); + colValue.Printf(wxT("%li"), *((SDWORD *) colDefs[colNumber].PtrDataObj)); break; case SQL_C_ULONG: - colValue.Printf(wxT("%lu"), *((UDWORD *) colDefs[colNo].PtrDataObj)); + colValue.Printf(wxT("%lu"), *((UDWORD *) colDefs[colNumber].PtrDataObj)); break; case SQL_C_FLOAT: - colValue.Printf(wxT("%.6f"), *((SFLOAT *) colDefs[colNo].PtrDataObj)); + colValue.Printf(wxT("%.6f"), *((SFLOAT *) colDefs[colNumber].PtrDataObj)); break; case SQL_C_DOUBLE: - colValue.Printf(wxT("%.6f"), *((SDOUBLE *) colDefs[colNo].PtrDataObj)); + colValue.Printf(wxT("%.6f"), *((SDOUBLE *) colDefs[colNumber].PtrDataObj)); break; default: { wxString strMsg; strMsg.Printf(wxT("wxDbTable::bindParams(): Unknown column type for colDefs %d colName %s"), - colNo,colDefs[colNo].ColName); + colNumber,colDefs[colNumber].ColName); wxFAIL_MSG(strMsg.c_str()); } break; @@ -1400,7 +1400,7 @@ bool wxDbTable::CreateTable(bool attemptDrop) // Create the table #ifdef DBDEBUG_CONSOLE - for (i = 0; i < noCols; i++) + for (i = 0; i < m_numCols; i++) { // Exclude derived columns since they are NOT part of the base table if (colDefs[i].DerivedCol) @@ -1434,7 +1434,7 @@ bool wxDbTable::CreateTable(bool attemptDrop) sqlStmt.Printf(wxT("CREATE TABLE %s ("), pDb->SQLTableName(tableName.c_str()).c_str()); - for (i = 0; i < noCols; i++) + for (i = 0; i < m_numCols; i++) { // Exclude derived columns since they are NOT part of the base table if (colDefs[i].DerivedCol) @@ -1491,7 +1491,7 @@ bool wxDbTable::CreateTable(bool attemptDrop) needComma = true; } // If there is a primary key defined, include it in the create statement - for (i = j = 0; i < noCols; i++) + for (i = j = 0; i < m_numCols; i++) { if (colDefs[i].KeyField) { @@ -1535,7 +1535,7 @@ bool wxDbTable::CreateTable(bool attemptDrop) } // List column name(s) of column(s) comprising the primary key - for (i = j = 0; i < noCols; i++) + for (i = j = 0; i < m_numCols; i++) { if (colDefs[i].KeyField) { @@ -1678,7 +1678,7 @@ bool wxDbTable::CreateIndex(const wxString &idxName, bool unique, UWORD noIdxCol // 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 // this information - while (!found && (j < this->noCols)) + while (!found && (j < this->m_numCols)) { if (wxStrcmp(colDefs[j].ColName,pIdxDefs[i].ColName) == 0) found = true; @@ -1741,7 +1741,7 @@ bool wxDbTable::CreateIndex(const wxString &idxName, bool unique, UWORD noIdxCol { // Find the details on this column int j; - for ( j = 0; j < noCols; ++j ) + for ( j = 0; j < m_numCols; ++j ) { if ( wxStrcmp( pIdxDefs[i].ColName, colDefs[j].ColName ) == 0 ) { @@ -1874,30 +1874,30 @@ bool wxDbTable::DropIndex(const wxString &idxName) /********** wxDbTable::SetOrderByColNums() **********/ bool wxDbTable::SetOrderByColNums(UWORD first, ... ) { - int colNo = first; // using 'int' to be able to look for wxDB_NO_MORE_COLUN_NUMBERS + int colNumber = first; // using 'int' to be able to look for wxDB_NO_MORE_COLUN_NUMBERS va_list argptr; bool abort = false; wxString tempStr; va_start(argptr, first); /* Initialize variable arguments. */ - while (!abort && (colNo != wxDB_NO_MORE_COLUMN_NUMBERS)) + while (!abort && (colNumber != wxDB_NO_MORE_COLUMN_NUMBERS)) { // Make sure the passed in column number // is within the valid range of columns // - // Valid columns are 0 thru noCols-1 - if (colNo >= noCols || colNo < 0) + // Valid columns are 0 thru m_numCols-1 + if (colNumber >= m_numCols || colNumber < 0) { abort = true; continue; } - if (colNo != first) + if (colNumber != first) tempStr += wxT(","); - tempStr += colDefs[colNo].ColName; - colNo = va_arg (argptr, int); + tempStr += colDefs[colNumber].ColName; + colNumber = va_arg (argptr, int); } va_end (argptr); /* Reset variable arguments. */ @@ -1941,7 +1941,7 @@ int wxDbTable::Insert(void) { // Find the parameter int i; - for (i=0; i < noCols; i++) + for (i=0; i < m_numCols; i++) { if (colDefs[i].PtrDataObj == pParmID) { @@ -2100,33 +2100,33 @@ bool wxDbTable::DeleteMatching(void) /********** wxDbTable::IsColNull() **********/ -bool wxDbTable::IsColNull(UWORD colNo) const +bool wxDbTable::IsColNull(UWORD colNumber) const { /* 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) + switch(colDefs[colNumber].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); + return(((UCHAR FAR *) colDefs[colNumber].PtrDataObj)[0] == 0); case SQL_C_SSHORT: - return(( *((SWORD *) colDefs[colNo].PtrDataObj)) == 0); + return(( *((SWORD *) colDefs[colNumber].PtrDataObj)) == 0); case SQL_C_USHORT: - return(( *((UWORD*) colDefs[colNo].PtrDataObj)) == 0); + return(( *((UWORD*) colDefs[colNumber].PtrDataObj)) == 0); case SQL_C_SLONG: - return(( *((SDWORD *) colDefs[colNo].PtrDataObj)) == 0); + return(( *((SDWORD *) colDefs[colNumber].PtrDataObj)) == 0); case SQL_C_ULONG: - return(( *((UDWORD *) colDefs[colNo].PtrDataObj)) == 0); + return(( *((UDWORD *) colDefs[colNumber].PtrDataObj)) == 0); case SQL_C_FLOAT: - return(( *((SFLOAT *) colDefs[colNo].PtrDataObj)) == 0); + return(( *((SFLOAT *) colDefs[colNumber].PtrDataObj)) == 0); case SQL_C_DOUBLE: - return((*((SDOUBLE *) colDefs[colNo].PtrDataObj)) == 0); + return((*((SDOUBLE *) colDefs[colNumber].PtrDataObj)) == 0); case SQL_C_TIMESTAMP: TIMESTAMP_STRUCT *pDt; - pDt = (TIMESTAMP_STRUCT *) colDefs[colNo].PtrDataObj; + pDt = (TIMESTAMP_STRUCT *) colDefs[colNumber].PtrDataObj; if (pDt->year == 0 && pDt->month == 0 && pDt->day == 0) return true; else @@ -2135,7 +2135,7 @@ bool wxDbTable::IsColNull(UWORD colNo) const return true; } */ - return (colDefs[colNo].Null); + return (colDefs[colNumber].Null); } // wxDbTable::IsColNull() @@ -2157,8 +2157,8 @@ bool wxDbTable::CanSelectForUpdate(void) } // wxDbTable::CanSelectForUpdate() -/********** wxDbTable::CanUpdByROWID() **********/ -bool wxDbTable::CanUpdByROWID(void) +/********** wxDbTable::CanUpdateByROWID() **********/ +bool wxDbTable::CanUpdateByROWID(void) { /* * NOTE: Returning false for now until this can be debugged, @@ -2171,7 +2171,7 @@ bool wxDbTable::CanUpdByROWID(void) else return false; */ -} // wxDbTable::CanUpdByROWID() +} // wxDbTable::CanUpdateByROWID() /********** wxDbTable::IsCursorClosedOnCommit() **********/ @@ -2187,41 +2187,41 @@ bool wxDbTable::IsCursorClosedOnCommit(void) /********** wxDbTable::ClearMemberVar() **********/ -void wxDbTable::ClearMemberVar(UWORD colNo, bool setToNull) +void wxDbTable::ClearMemberVar(UWORD colNumber, bool setToNull) { - wxASSERT(colNo < noCols); + wxASSERT(colNumber < m_numCols); - switch(colDefs[colNo].SqlCtype) + switch(colDefs[colNumber].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; + ((UCHAR FAR *) colDefs[colNumber].PtrDataObj)[0] = 0; break; case SQL_C_SSHORT: - *((SWORD *) colDefs[colNo].PtrDataObj) = 0; + *((SWORD *) colDefs[colNumber].PtrDataObj) = 0; break; case SQL_C_USHORT: - *((UWORD*) colDefs[colNo].PtrDataObj) = 0; + *((UWORD*) colDefs[colNumber].PtrDataObj) = 0; break; case SQL_C_LONG: case SQL_C_SLONG: - *((SDWORD *) colDefs[colNo].PtrDataObj) = 0; + *((SDWORD *) colDefs[colNumber].PtrDataObj) = 0; break; case SQL_C_ULONG: - *((UDWORD *) colDefs[colNo].PtrDataObj) = 0; + *((UDWORD *) colDefs[colNumber].PtrDataObj) = 0; break; case SQL_C_FLOAT: - *((SFLOAT *) colDefs[colNo].PtrDataObj) = 0.0f; + *((SFLOAT *) colDefs[colNumber].PtrDataObj) = 0.0f; break; case SQL_C_DOUBLE: - *((SDOUBLE *) colDefs[colNo].PtrDataObj) = 0.0f; + *((SDOUBLE *) colDefs[colNumber].PtrDataObj) = 0.0f; break; case SQL_C_TIMESTAMP: TIMESTAMP_STRUCT *pDt; - pDt = (TIMESTAMP_STRUCT *) colDefs[colNo].PtrDataObj; + pDt = (TIMESTAMP_STRUCT *) colDefs[colNumber].PtrDataObj; pDt->year = 0; pDt->month = 0; pDt->day = 0; @@ -2233,7 +2233,7 @@ void wxDbTable::ClearMemberVar(UWORD colNo, bool setToNull) } if (setToNull) - SetColNull(colNo); + SetColNull(colNumber); } // wxDbTable::ClearMemberVar() @@ -2243,7 +2243,7 @@ void wxDbTable::ClearMemberVars(bool setToNull) int i; // Loop through the columns setting each member variable to zero - for (i=0; i < noCols; i++) + for (i=0; i < m_numCols; i++) ClearMemberVar((UWORD)i,setToNull); } // wxDbTable::ClearMemberVars() @@ -2268,27 +2268,32 @@ bool wxDbTable::SetQueryTimeout(UDWORD nSeconds) /********** wxDbTable::SetColDefs() **********/ -void wxDbTable::SetColDefs(UWORD index, const wxString &fieldName, int dataType, void *pData, - SWORD cType, int size, bool keyField, bool upd, +bool wxDbTable::SetColDefs(UWORD index, const wxString &fieldName, int dataType, void *pData, + SWORD cType, int size, bool keyField, bool updateable, bool insAllow, bool derivedCol) { - wxASSERT_MSG( index < noCols, - _T("Specified column index exceeds the maximum number of columns for this table.") ); + wxString tmpStr; + + if (index >= m_numCols) // Columns numbers are zero based.... + { + tmpStr.Printf(wxT("Specified column index (%d) exceeds the maximum number of columns (%d) registered for this table definition. Column definition not added."), index, m_numCols); + wxFAIL_MSG(tmpStr); + wxLogDebug(tmpStr); + return false; + } if (!colDefs) // May happen if the database connection fails - return; + return false; if (fieldName.Length() > (unsigned int) DB_MAX_COLUMN_NAME_LEN) { wxStrncpy(colDefs[index].ColName, fieldName, DB_MAX_COLUMN_NAME_LEN); - colDefs[index].ColName[DB_MAX_COLUMN_NAME_LEN] = 0; + colDefs[index].ColName[DB_MAX_COLUMN_NAME_LEN] = 0; // Prevent buffer overrun -#ifdef __WXDEBUG__ - wxString tmpMsg; - tmpMsg.Printf(_T("Column name '%s' is too long. Truncated to '%s'."), + tmpStr.Printf(wxT("Column name '%s' is too long. Truncated to '%s'."), fieldName.c_str(),colDefs[index].ColName); - wxFAIL_MSG(tmpMsg); -#endif // __WXDEBUG__ + wxFAIL_MSG(tmpStr); + wxLogDebug(tmpStr); } else wxStrcpy(colDefs[index].ColName, fieldName); @@ -2307,12 +2312,14 @@ void wxDbTable::SetColDefs(UWORD index, const wxString &fieldName, int dataType, } else { - colDefs[index].Updateable = upd; + colDefs[index].Updateable = updateable; colDefs[index].InsertAllowed = insAllow; } colDefs[index].Null = false; + return true; + } // wxDbTable::SetColDefs() @@ -2505,7 +2512,7 @@ bool wxDbTable::Refresh(void) wxString whereClause; whereClause.Empty(); - if (CanUpdByROWID()) + if (CanUpdateByROWID()) { SDWORD cb; wxChar rowid[wxDB_ROWID_LEN+1]; @@ -2513,7 +2520,7 @@ bool wxDbTable::Refresh(void) // 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_WXCHAR, (UCHAR*) rowid, sizeof(rowid), &cb) == SQL_SUCCESS) + if (SQLGetData(hstmt, (UWORD)(m_numCols+1), SQL_C_WXCHAR, (UCHAR*) rowid, sizeof(rowid), &cb) == SQL_SUCCESS) { whereClause += pDb->SQLTableName(queryTableName); // whereClause += queryTableName; @@ -2553,15 +2560,15 @@ bool wxDbTable::Refresh(void) /********** wxDbTable::SetColNull() **********/ -bool wxDbTable::SetColNull(UWORD colNo, bool set) +bool wxDbTable::SetColNull(UWORD colNumber, bool set) { - if (colNo < noCols) + if (colNumber < m_numCols) { - colDefs[colNo].Null = set; + colDefs[colNumber].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(colNumber, false); // Must call with false here, or infinite recursion will happen - setCbValueForColumn(colNo); + setCbValueForColumn(colNumber); return true; } @@ -2574,20 +2581,20 @@ bool wxDbTable::SetColNull(UWORD colNo, bool set) /********** wxDbTable::SetColNull() **********/ bool wxDbTable::SetColNull(const wxString &colName, bool set) { - int colNo; - for (colNo = 0; colNo < noCols; colNo++) + int colNumber; + for (colNumber = 0; colNumber < m_numCols; colNumber++) { - if (!wxStricmp(colName, colDefs[colNo].ColName)) + if (!wxStricmp(colName, colDefs[colNumber].ColName)) break; } - if (colNo < noCols) + if (colNumber < m_numCols) { - colDefs[colNo].Null = set; + colDefs[colNumber].Null = set; if (set) // Blank out the values in the member variable - ClearMemberVar((UWORD)colNo,false); // Must call with false here, or infinite recursion will happen + ClearMemberVar((UWORD)colNumber,false); // Must call with false here, or infinite recursion will happen - setCbValueForColumn(colNo); + setCbValueForColumn(colNumber); return true; } @@ -2689,48 +2696,48 @@ void wxDbTable::SetRowMode(const rowmode_t rowmode) } // wxDbTable::SetRowMode() -wxVariant wxDbTable::GetCol(const int colNo) const +wxVariant wxDbTable::GetColumn(const int colNumber) const { wxVariant val; - if ((colNo < noCols) && (!IsColNull((UWORD)colNo))) + if ((colNumber < m_numCols) && (!IsColNull((UWORD)colNumber))) { - switch (colDefs[colNo].SqlCtype) + switch (colDefs[colNumber].SqlCtype) { case SQL_CHAR: case SQL_VARCHAR: - val = (wxChar *)(colDefs[colNo].PtrDataObj); + val = (wxChar *)(colDefs[colNumber].PtrDataObj); break; case SQL_C_LONG: case SQL_C_SLONG: - val = *(long *)(colDefs[colNo].PtrDataObj); + val = *(long *)(colDefs[colNumber].PtrDataObj); break; case SQL_C_SHORT: case SQL_C_SSHORT: - val = (long int )(*(short *)(colDefs[colNo].PtrDataObj)); + val = (long int )(*(short *)(colDefs[colNumber].PtrDataObj)); break; case SQL_C_ULONG: - val = (long)(*(unsigned long *)(colDefs[colNo].PtrDataObj)); + val = (long)(*(unsigned long *)(colDefs[colNumber].PtrDataObj)); break; case SQL_C_TINYINT: - val = (long)(*(wxChar *)(colDefs[colNo].PtrDataObj)); + val = (long)(*(wxChar *)(colDefs[colNumber].PtrDataObj)); break; case SQL_C_UTINYINT: - val = (long)(*(wxChar *)(colDefs[colNo].PtrDataObj)); + val = (long)(*(wxChar *)(colDefs[colNumber].PtrDataObj)); break; case SQL_C_USHORT: - val = (long)(*(UWORD *)(colDefs[colNo].PtrDataObj)); + val = (long)(*(UWORD *)(colDefs[colNumber].PtrDataObj)); break; case SQL_C_DATE: - val = (DATE_STRUCT *)(colDefs[colNo].PtrDataObj); + val = (DATE_STRUCT *)(colDefs[colNumber].PtrDataObj); break; case SQL_C_TIME: - val = (TIME_STRUCT *)(colDefs[colNo].PtrDataObj); + val = (TIME_STRUCT *)(colDefs[colNumber].PtrDataObj); break; case SQL_C_TIMESTAMP: - val = (TIMESTAMP_STRUCT *)(colDefs[colNo].PtrDataObj); + val = (TIMESTAMP_STRUCT *)(colDefs[colNumber].PtrDataObj); break; case SQL_C_DOUBLE: - val = *(double *)(colDefs[colNo].PtrDataObj); + val = *(double *)(colDefs[colNumber].PtrDataObj); break; default: assert(0); @@ -2740,57 +2747,57 @@ wxVariant wxDbTable::GetCol(const int colNo) const } // wxDbTable::GetCol() -void wxDbTable::SetCol(const int colNo, const wxVariant val) +void wxDbTable::SetColumn(const int colNumber, const wxVariant val) { //FIXME: Add proper wxDateTime support to wxVariant.. wxDateTime dateval; - SetColNull((UWORD)colNo, val.IsNull()); + SetColNull((UWORD)colNumber, val.IsNull()); if (!val.IsNull()) { - if ((colDefs[colNo].SqlCtype == SQL_C_DATE) - || (colDefs[colNo].SqlCtype == SQL_C_TIME) - || (colDefs[colNo].SqlCtype == SQL_C_TIMESTAMP)) + if ((colDefs[colNumber].SqlCtype == SQL_C_DATE) + || (colDefs[colNumber].SqlCtype == SQL_C_TIME) + || (colDefs[colNumber].SqlCtype == SQL_C_TIMESTAMP)) { //Returns null if invalid! if (!dateval.ParseDate(val.GetString())) - SetColNull((UWORD)colNo, true); + SetColNull((UWORD)colNumber, true); } - switch (colDefs[colNo].SqlCtype) + switch (colDefs[colNumber].SqlCtype) { case SQL_CHAR: case SQL_VARCHAR: - csstrncpyt((wxChar *)(colDefs[colNo].PtrDataObj), + csstrncpyt((wxChar *)(colDefs[colNumber].PtrDataObj), val.GetString().c_str(), - colDefs[colNo].SzDataObj-1); //TODO: glt ??? * sizeof(wxChar) ??? + colDefs[colNumber].SzDataObj-1); //TODO: glt ??? * sizeof(wxChar) ??? break; case SQL_C_LONG: case SQL_C_SLONG: - *(long *)(colDefs[colNo].PtrDataObj) = val; + *(long *)(colDefs[colNumber].PtrDataObj) = val; break; case SQL_C_SHORT: case SQL_C_SSHORT: - *(short *)(colDefs[colNo].PtrDataObj) = (short)val.GetLong(); + *(short *)(colDefs[colNumber].PtrDataObj) = (short)val.GetLong(); break; case SQL_C_ULONG: - *(unsigned long *)(colDefs[colNo].PtrDataObj) = val.GetLong(); + *(unsigned long *)(colDefs[colNumber].PtrDataObj) = val.GetLong(); break; case SQL_C_TINYINT: - *(wxChar *)(colDefs[colNo].PtrDataObj) = val.GetChar(); + *(wxChar *)(colDefs[colNumber].PtrDataObj) = val.GetChar(); break; case SQL_C_UTINYINT: - *(wxChar *)(colDefs[colNo].PtrDataObj) = val.GetChar(); + *(wxChar *)(colDefs[colNumber].PtrDataObj) = val.GetChar(); break; case SQL_C_USHORT: - *(unsigned short *)(colDefs[colNo].PtrDataObj) = (unsigned short)val.GetLong(); + *(unsigned short *)(colDefs[colNumber].PtrDataObj) = (unsigned short)val.GetLong(); break; //FIXME: Add proper wxDateTime support to wxVariant.. case SQL_C_DATE: { DATE_STRUCT *dataptr = - (DATE_STRUCT *)colDefs[colNo].PtrDataObj; + (DATE_STRUCT *)colDefs[colNumber].PtrDataObj; dataptr->year = (SWORD)dateval.GetYear(); dataptr->month = (UWORD)(dateval.GetMonth()+1); @@ -2800,7 +2807,7 @@ void wxDbTable::SetCol(const int colNo, const wxVariant val) case SQL_C_TIME: { TIME_STRUCT *dataptr = - (TIME_STRUCT *)colDefs[colNo].PtrDataObj; + (TIME_STRUCT *)colDefs[colNumber].PtrDataObj; dataptr->hour = dateval.GetHour(); dataptr->minute = dateval.GetMinute(); @@ -2810,7 +2817,7 @@ void wxDbTable::SetCol(const int colNo, const wxVariant val) case SQL_C_TIMESTAMP: { TIMESTAMP_STRUCT *dataptr = - (TIMESTAMP_STRUCT *)colDefs[colNo].PtrDataObj; + (TIMESTAMP_STRUCT *)colDefs[colNumber].PtrDataObj; dataptr->year = (SWORD)dateval.GetYear(); dataptr->month = (UWORD)(dateval.GetMonth()+1); dataptr->day = (UWORD)dateval.GetDay(); @@ -2821,7 +2828,7 @@ void wxDbTable::SetCol(const int colNo, const wxVariant val) } break; case SQL_C_DOUBLE: - *(double *)(colDefs[colNo].PtrDataObj) = val; + *(double *)(colDefs[colNumber].PtrDataObj) = val; break; default: assert(0); @@ -2839,7 +2846,7 @@ GenericKey wxDbTable::GetKey() blkptr = (wxChar *) blk; int i; - for (i=0; i < noCols; i++) + for (i=0; i < m_numCols; i++) { if (colDefs[i].KeyField) { @@ -2864,7 +2871,7 @@ void wxDbTable::SetKey(const GenericKey& k) blkptr = (wxChar *)blk; int i; - for (i=0; i < noCols; i++) + for (i=0; i < m_numCols; i++) { if (colDefs[i].KeyField) {