X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bf5423ea7dd9f6a5c1d5eae71af034ff1aead158..1f3943e0276719ed5fc94bb93765df69f91ba10c:/src/common/dbtable.cpp?ds=sidebyside diff --git a/src/common/dbtable.cpp b/src/common/dbtable.cpp index a1f0a15eaf..a9cd88abb1 100644 --- a/src/common/dbtable.cpp +++ b/src/common/dbtable.cpp @@ -128,21 +128,21 @@ bool wxDbColDef::Initialize() /********** wxDbTable::wxDbTable() Constructor **********/ -wxDbTable::wxDbTable(wxDb *pwxDb, const wxString &tblName, const int nCols, +wxDbTable::wxDbTable(wxDb *pwxDb, const wxString &tblName, const UWORD numColumns, const wxString &qryTblName, bool qryOnly, const wxString &tblPath) { - if (!initialize(pwxDb, tblName, nCols, qryTblName, qryOnly, tblPath)) + if (!initialize(pwxDb, tblName, numColumns, qryTblName, qryOnly, tblPath)) cleanup(); } // wxDbTable::wxDbTable() /***** DEPRECATED: use wxDbTable::wxDbTable() format above *****/ -wxDbTable::wxDbTable(wxDb *pwxDb, const wxString &tblName, const int nCols, +wxDbTable::wxDbTable(wxDb *pwxDb, const wxString &tblName, const UWORD numColumns, const wxChar *qryTblName, bool qryOnly, const wxString &tblPath) { wxString tempQryTblName; tempQryTblName = qryTblName; - if (!initialize(pwxDb, tblName, nCols, tempQryTblName, qryOnly, tblPath)) + if (!initialize(pwxDb, tblName, numColumns, tempQryTblName, qryOnly, tblPath)) cleanup(); } // wxDbTable::wxDbTable() @@ -154,7 +154,7 @@ wxDbTable::~wxDbTable() } // wxDbTable::~wxDbTable() -bool wxDbTable::initialize(wxDb *pwxDb, const wxString &tblName, const int nCols, +bool wxDbTable::initialize(wxDb *pwxDb, const wxString &tblName, const UWORD numColumns, const wxString &qryTblName, bool qryOnly, const wxString &tblPath) { // Initializing member variables @@ -170,7 +170,7 @@ bool wxDbTable::initialize(wxDb *pwxDb, const wxString &tblName, const int nCols hstmtInternal = 0; colDefs = 0; tableID = 0; - noCols = nCols; // No. of cols in the table + noCols = numColumns; // Number of cols in the table where.Empty(); // Where clause orderBy.Empty(); // Order By clause from.Empty(); // From clause @@ -430,7 +430,8 @@ bool wxDbTable::bindParams(bool forUpdate) // Bind each column of the table that should be bound // to a parameter marker - int i,colNo; + int i; + UWORD colNo; for (i = 0, colNo = 1; i < noCols; i++) { if (forUpdate) @@ -543,11 +544,10 @@ bool wxDbTable::bindCols(HSTMT cursor) //RG-NULL static SDWORD cb; // Bind each column of the table to a memory address for fetching data - int i; + UWORD i; for (i = 0; i < noCols; i++) { - if (SQLBindCol(cursor, i+1, colDefs[i].SqlCtype, (UCHAR*) colDefs[i].PtrDataObj, -//RG-NULL colDefs[i].SzDataObj, &cb) != SQL_SUCCESS) + if (SQLBindCol(cursor, (UWORD)(i+1), colDefs[i].SqlCtype, (UCHAR*) colDefs[i].PtrDataObj, colDefs[i].SzDataObj, &colDefs[i].CbValue ) != SQL_SUCCESS) { return (pDb->DispAllErrors(henv, hdbc, cursor)); @@ -694,7 +694,7 @@ bool wxDbTable::query(int queryType, bool forUpdate, bool distinct, const wxStri /********** wxDbTable::Open() **********/ -bool wxDbTable::Open(bool checkPrivileges) +bool wxDbTable::Open(bool checkPrivileges, bool checkTableExists) { if (!pDb) return FALSE; @@ -705,7 +705,7 @@ bool wxDbTable::Open(bool checkPrivileges) s.Empty(); // Verify that the table exists in the database - if (!pDb->TableExists(tableName,/*pDb->GetUsername()*/NULL,tablePath)) + if (checkTableExists && !pDb->TableExists(tableName, pDb->GetUsername(), tablePath)) { s = wxT("Table/view does not exist in the database"); if ( *(pDb->dbInf.accessibleTables) == wxT('Y')) @@ -722,7 +722,7 @@ bool wxDbTable::Open(bool checkPrivileges) // Unfortunately this optimization doesn't seem to be // reliable! if (// *(pDb->dbInf.accessibleTables) == 'N' && - !pDb->TablePrivileges(tableName,wxT("SELECT"),NULL,pDb->GetUsername(),tablePath)) + !pDb->TablePrivileges(tableName,wxT("SELECT"), pDb->GetUsername(), pDb->GetUsername(), tablePath)) s = wxT("Current logged in user does not have sufficient privileges to access this table.\n"); } @@ -938,7 +938,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, noCols+1, SQL_C_CHAR, (UCHAR*) rowid, wxDB_ROWID_LEN, &cb) == SQL_SUCCESS) + if (SQLGetData(hstmt, (UWORD)(noCols+1), SQL_C_CHAR, (UCHAR*) rowid, wxDB_ROWID_LEN, &cb) == SQL_SUCCESS) { pSqlStmt += wxT("ROWID = '"); pSqlStmt += rowid; @@ -1149,7 +1149,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, noCols+1, SQL_C_CHAR, (UCHAR*) rowid, wxDB_ROWID_LEN, &cb) == SQL_SUCCESS) + if (SQLGetData(hstmt, (UWORD)(noCols+1), SQL_C_CHAR, (UCHAR*) rowid, wxDB_ROWID_LEN, &cb) == SQL_SUCCESS) { pSqlStmt += wxT("ROWID = '"); pSqlStmt += rowid; @@ -1399,16 +1399,23 @@ bool wxDbTable::CreateTable(bool attemptDrop) } if (j && pDb->Dbms() != dbmsDBASE) // Found a keyfield { - if (pDb->Dbms() != dbmsMY_SQL) - { - sqlStmt += wxT(",CONSTRAINT "); - sqlStmt += tableName; - sqlStmt += wxT("_PIDX PRIMARY KEY ("); - } - else + switch (pDb->Dbms()) { - /* MySQL goes out on this one. We also declare the relevant key NON NULL above */ - sqlStmt += wxT(", PRIMARY KEY ("); + case dbmsSYBASE_ASA: + case dbmsSYBASE_ASE: + case dbmsMY_SQL: + { + /* MySQL goes out on this one. We also declare the relevant key NON NULL above */ + sqlStmt += wxT(",PRIMARY KEY ("); + break; + } + default: + { + sqlStmt += wxT(",CONSTRAINT "); + sqlStmt += tableName; + sqlStmt += wxT("_PIDX PRIMARY KEY ("); + break; + } } // List column name(s) of column(s) comprising the primary key @@ -1422,6 +1429,14 @@ bool wxDbTable::CreateTable(bool attemptDrop) } } sqlStmt += wxT(")"); + + if (pDb->Dbms() == dbmsSYBASE_ASA || + pDb->Dbms() == dbmsSYBASE_ASE) + { + sqlStmt += wxT(" CONSTRAINT "); + sqlStmt += tableName; + sqlStmt += wxT("_PIDX"); + } } // Append the closing parentheses for the create table statement sqlStmt += wxT(")"); @@ -1504,7 +1519,8 @@ bool wxDbTable::DropTable() /********** wxDbTable::CreateIndex() **********/ -bool wxDbTable::CreateIndex(const wxString &idxName, bool unique, int noIdxCols, wxDbIdxDef *pIdxDefs, bool attemptDrop) +bool wxDbTable::CreateIndex(const wxString &idxName, bool unique, UWORD noIdxCols, + wxDbIdxDef *pIdxDefs, bool attemptDrop) { wxString sqlStmt; @@ -1686,9 +1702,9 @@ bool wxDbTable::DropIndex(const wxString &idxName) /********** wxDbTable::SetOrderByColNums() **********/ -bool wxDbTable::SetOrderByColNums(int first, ... ) +bool wxDbTable::SetOrderByColNums(UWORD first, ... ) { - int colNo = first; + int colNo = first; // using 'int' to be able to look for wxDB_NO_MORE_COLUN_NUMBERS va_list argptr; bool abort = FALSE; @@ -1879,7 +1895,7 @@ bool wxDbTable::DeleteMatching(void) /********** wxDbTable::IsColNull() **********/ -bool wxDbTable::IsColNull(int colNo) +bool wxDbTable::IsColNull(UWORD colNo) { /* This logic is just not right. It would indicate TRUE @@ -1942,12 +1958,12 @@ bool wxDbTable::CanUpdByROWID(void) * as the ROWID is not getting updated correctly */ return FALSE; - +/* if (pDb->Dbms() == dbmsORACLE) return(TRUE); else return(FALSE); - +*/ } // wxDbTable::CanUpdByROWID() @@ -1964,7 +1980,7 @@ bool wxDbTable::IsCursorClosedOnCommit(void) /********** wxDbTable::ClearMemberVar() **********/ -void wxDbTable::ClearMemberVar(int colNo, bool setToNull) +void wxDbTable::ClearMemberVar(UWORD colNo, bool setToNull) { wxASSERT(colNo < noCols); @@ -2040,8 +2056,8 @@ bool wxDbTable::SetQueryTimeout(UDWORD nSeconds) /********** wxDbTable::SetColDefs() **********/ -void wxDbTable::SetColDefs(int index, const wxString &fieldName, int dataType, void *pData, - int cType, int size, bool keyField, bool upd, +void wxDbTable::SetColDefs(UWORD index, const wxString &fieldName, int dataType, void *pData, + SWORD cType, int size, bool keyField, bool upd, bool insAllow, bool derivedCol) { if (!colDefs) // May happen if the database connection fails @@ -2079,14 +2095,14 @@ void wxDbTable::SetColDefs(int index, const wxString &fieldName, int dataType, v /********** wxDbTable::SetColDefs() **********/ -wxDbColDataPtr* wxDbTable::SetColDefs(wxDbColInf *pColInfs, ULONG numCols) +wxDbColDataPtr* wxDbTable::SetColDefs(wxDbColInf *pColInfs, UWORD numCols) { wxASSERT(pColInfs); wxDbColDataPtr *pColDataPtrs = NULL; if (pColInfs) { - ULONG index; + UWORD index; pColDataPtrs = new wxDbColDataPtr[numCols+1]; @@ -2230,7 +2246,7 @@ ULONG wxDbTable::Count(const wxString &args) } // Obtain the result - if (SQLGetData(*hstmtCount, 1, SQL_C_ULONG, &count, sizeof(count), &cb) != SQL_SUCCESS) + if (SQLGetData(*hstmtCount, (UWORD)1, SQL_C_ULONG, &count, sizeof(count), &cb) != SQL_SUCCESS) { pDb->DispAllErrors(henv, hdbc, *hstmtCount); return(0); @@ -2275,7 +2291,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, noCols+1, SQL_C_CHAR, (UCHAR*) rowid, wxDB_ROWID_LEN, &cb) == SQL_SUCCESS) + if (SQLGetData(hstmt, (UWORD)(noCols+1), SQL_C_CHAR, (UCHAR*) rowid, wxDB_ROWID_LEN, &cb) == SQL_SUCCESS) { whereClause += queryTableName; whereClause += wxT(".ROWID = '"); @@ -2313,8 +2329,8 @@ bool wxDbTable::Refresh(void) } // wxDbTable::Refresh() -/********** wxDbTable::SetColNull(int colNo, bool set) **********/ -bool wxDbTable::SetColNull(int colNo, bool set) +/********** wxDbTable::SetColNull() **********/ +bool wxDbTable::SetColNull(UWORD colNo, bool set) { if (colNo < noCols) { @@ -2329,7 +2345,7 @@ bool wxDbTable::SetColNull(int colNo, bool set) } // wxDbTable::SetColNull() -/********** wxDbTable::SetColNull(const wxString &colName, bool set) **********/ +/********** wxDbTable::SetColNull() **********/ bool wxDbTable::SetColNull(const wxString &colName, bool set) { int i;