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