Non-standard abbreviations of words in function/variable names changed to standard abbreviations or the entire word (e.g. colNo is now colNum)

If SetColDef is called with an out of range index, the function in debug will throw an assert msg, and call wxLogDebug(), and then return without doing anything.  The function now returns a boolean to indicate if the column definition was successfully created or not


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31178 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
George Tasker
2004-12-28 21:10:12 +00:00
parent b8126f938c
commit b803274045
3 changed files with 177 additions and 163 deletions

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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)
{