X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/549c8cc2fe3ab03276745d546b0f81297c34a147..7b504551c292ecb4296693983161ac5ad03745f6:/src/common/dbtable.cpp?ds=sidebyside diff --git a/src/common/dbtable.cpp b/src/common/dbtable.cpp index da7aaa8f60..f32954f688 100644 --- a/src/common/dbtable.cpp +++ b/src/common/dbtable.cpp @@ -16,10 +16,6 @@ // SYNOPSIS STOP */ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "dbtable.h" -#endif - #include "wx/wxprec.h" #ifdef __BORLANDC__ @@ -560,7 +556,7 @@ bool wxDbTable::bindUpdateParams(void) /********** wxDbTable::bindCols() **********/ bool wxDbTable::bindCols(HSTMT cursor) { - static SDWORD cb; + static SQLLEN cb; // Bind each column of the table to a memory address for fetching data UWORD i; @@ -586,7 +582,7 @@ bool wxDbTable::getRec(UWORD fetchType) if (!pDb->FwdOnlyCursors()) { // Fetch the NEXT, PREV, FIRST or LAST record, depending on fetchType - UDWORD cRowsFetched; + SQLULEN cRowsFetched; UWORD rowStatus; retcode = SQLExtendedFetch(hstmt, fetchType, 0, &cRowsFetched, &rowStatus); @@ -755,7 +751,6 @@ bool wxDbTable::Open(bool checkPrivileges, bool checkTableExists) int i; wxString sqlStmt; wxString s; -// int NumKeyCols=0; // Calculate the maximum size of the concatenated // keys for use with wxDbGrid @@ -764,14 +759,23 @@ bool wxDbTable::Open(bool checkPrivileges, bool checkTableExists) { if (colDefs[i].KeyField) { -// NumKeyCols++; m_keysize += colDefs[i].SzDataObj; } } s.Empty(); + + bool exists = true; + if (checkTableExists) + { + if (pDb->Dbms() == dbmsPOSTGRES) + exists = pDb->TableExists(tableName, NULL, tablePath); + else + exists = pDb->TableExists(tableName, pDb->GetUsername(), tablePath); + } + // Verify that the table exists in the database - if (checkTableExists && !pDb->TableExists(tableName, pDb->GetUsername(), tablePath)) + if (!exists) { s = wxT("Table/view does not exist in the database"); if ( *(pDb->dbInf.accessibleTables) == wxT('Y')) @@ -782,21 +786,22 @@ bool wxDbTable::Open(bool checkPrivileges, bool checkTableExists) else if (checkPrivileges) { // Verify the user has rights to access the table. - // Shortcut boolean evaluation to optimize out call to - // TablePrivileges - // - // Unfortunately this optimization doesn't seem to be - // reliable! - if (// *(pDb->dbInf.accessibleTables) == 'N' && - !pDb->TablePrivileges(tableName, wxT("SELECT"), pDb->GetUsername(), pDb->GetUsername(), tablePath)) + bool hasPrivs wxDUMMY_INITIALIZE(true); + + if (pDb->Dbms() == dbmsPOSTGRES) + hasPrivs = pDb->TablePrivileges(tableName, wxT("SELECT"), pDb->GetUsername(), NULL, tablePath); + else + hasPrivs = pDb->TablePrivileges(tableName, wxT("SELECT"), pDb->GetUsername(), pDb->GetUsername(), tablePath); + + if (!hasPrivs) s = wxT("Connecting user does not have sufficient privileges to access this table.\n"); } - if (!s.IsEmpty()) + if (!s.empty()) { wxString p; - if (!tablePath.IsEmpty()) + if (!tablePath.empty()) p.Printf(wxT("Error opening '%s/%s'.\n"),tablePath.c_str(),tableName.c_str()); else p.Printf(wxT("Error opening '%s'.\n"), tableName.c_str()); @@ -841,7 +846,6 @@ bool wxDbTable::Open(bool checkPrivileges, bool checkTableExists) if (needComma) sqlStmt += wxT(","); sqlStmt += pDb->SQLColumnName(colDefs[i].ColName); -// sqlStmt += colDefs[i].ColName; needComma = true; } needComma = false; @@ -1002,7 +1006,7 @@ void wxDbTable::BuildDeleteStmt(wxString &pSqlStmt, int typeOfDel, const wxStrin // e.g. DELETE FROM PARTS WHERE ROWID = '111.222.333' if (CanUpdateByROWID()) { - SDWORD cb; + SQLLEN cb; wxChar rowid[wxDB_ROWID_LEN+1]; // Get the ROWID value. If not successful retreiving the ROWID, @@ -1092,7 +1096,6 @@ void wxDbTable::BuildSelectStmt(wxString &pSqlStmt, int typeOfSelect, bool disti { pSqlStmt += wxT(","); pSqlStmt += pDb->SQLTableName(queryTableName); -// pSqlStmt += queryTableName; pSqlStmt += wxT(".ROWID"); } else @@ -1220,7 +1223,7 @@ void wxDbTable::BuildUpdateStmt(wxString &pSqlStmt, int typeOfUpdate, const wxSt // e.g. UPDATE PARTS SET Col1 = ?, Col2 = ? WHERE ROWID = '111.222.333' if (CanUpdateByROWID()) { - SDWORD cb; + SQLLEN cb; wxChar rowid[wxDB_ROWID_LEN+1]; // Get the ROWID value. If not successful retreiving the ROWID, @@ -1301,9 +1304,9 @@ void wxDbTable::BuildWhereClause(wxString &pWhereClause, int typeOfWhere, switch(colDefs[colNumber].SqlCtype) { case SQL_C_CHAR: -#ifndef __UNIX__ +#ifdef 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 colValue.Printf(wxT("'%s'"), (UCHAR FAR *) colDefs[colNumber].PtrDataObj); break; @@ -1846,6 +1849,7 @@ bool wxDbTable::DropIndex(const wxString &indexName) (pDb->Dbms() == dbmsSYBASE_ASE && !wxStrcmp(pDb->sqlState,wxT("37000"))) || (pDb->Dbms() == dbmsMS_SQL_SERVER && !wxStrcmp(pDb->sqlState,wxT("S1000"))) || (pDb->Dbms() == dbmsINTERBASE && !wxStrcmp(pDb->sqlState,wxT("S1000"))) || + (pDb->Dbms() == dbmsMAXDB && !wxStrcmp(pDb->sqlState,wxT("S1000"))) || (pDb->Dbms() == dbmsFIREBIRD && !wxStrcmp(pDb->sqlState,wxT("HY000"))) || (pDb->Dbms() == dbmsSYBASE_ASE && !wxStrcmp(pDb->sqlState,wxT("S0002"))) || // Base table not found (pDb->Dbms() == dbmsMY_SQL && !wxStrcmp(pDb->sqlState,wxT("42S12"))) || // tested by Christopher Ludwik Marino-Cebulski using v3.23.21beta @@ -2194,7 +2198,7 @@ void wxDbTable::ClearMemberVar(UWORD colNumber, bool setToNull) switch(colDefs[colNumber].SqlCtype) { case SQL_C_CHAR: -#ifndef __UNIX__ +#ifdef SQL_C_WCHAR case SQL_C_WCHAR: #endif //case SQL_C_WXCHAR: SQL_C_WXCHAR is covered by either SQL_C_CHAR or SQL_C_WCHAR @@ -2423,7 +2427,7 @@ ULONG wxDbTable::Count(const wxString &args) { ULONG count; wxString sqlStmt; - SDWORD cb; + SQLLEN cb; // Build a "SELECT COUNT(*) FROM queryTableName [WHERE whereClause]" SQL Statement sqlStmt = wxT("SELECT COUNT("); @@ -2514,7 +2518,7 @@ bool wxDbTable::Refresh(void) if (CanUpdateByROWID()) { - SDWORD cb; + SQLLEN cb; wxChar rowid[wxDB_ROWID_LEN+1]; // Get the ROWID value. If not successful retreiving the ROWID, @@ -2703,6 +2707,14 @@ wxVariant wxDbTable::GetColumn(const int colNumber) const { switch (colDefs[colNumber].SqlCtype) { +#if wxUSE_UNICODE + #if defined(SQL_WCHAR) + case SQL_WCHAR: + #endif + #if defined(SQL_WVARCHAR) + case SQL_WVARCHAR: + #endif +#endif case SQL_CHAR: case SQL_VARCHAR: val = (wxChar *)(colDefs[colNumber].PtrDataObj); @@ -2767,6 +2779,14 @@ void wxDbTable::SetColumn(const int colNumber, const wxVariant val) switch (colDefs[colNumber].SqlCtype) { +#if wxUSE_UNICODE + #if defined(SQL_WCHAR) + case SQL_WCHAR: + #endif + #if defined(SQL_WVARCHAR) + case SQL_WVARCHAR: + #endif +#endif case SQL_CHAR: case SQL_VARCHAR: csstrncpyt((wxChar *)(colDefs[colNumber].PtrDataObj),