From 834f138686053e337f28b7d1c408e03c520cf8fd Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Fri, 30 Mar 2007 21:31:20 +0000 Subject: [PATCH] fixed wxDB compilation git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45179 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/db.h | 2 +- src/common/db.cpp | 73 +++++++++++++++++++++++------------------- src/common/dbtable.cpp | 25 +++++++++------ 3 files changed, 57 insertions(+), 43 deletions(-) diff --git a/include/wx/db.h b/include/wx/db.h index 7c3924b57d..13c882cdea 100644 --- a/include/wx/db.h +++ b/include/wx/db.h @@ -525,7 +525,7 @@ private: bool getDataTypeInfo(SWORD fSqlType, wxDbSqlTypeInfo &structSQLTypeInfo); bool setConnectionOptions(void); void logError(const wxString &errMsg, const wxString &SQLState); - const wxChar *convertUserID(const wxChar *userID, wxString &UserID); + void convertUserID(const wxChar *userID, wxString &UserID); bool determineDataTypes(bool failOnDataTypeUnsupported); void initialize(); bool open(bool failOnDataTypeUnsupported=true); diff --git a/src/common/db.cpp b/src/common/db.cpp index be855ba25c..7ca9dc47ae 100644 --- a/src/common/db.cpp +++ b/src/common/db.cpp @@ -53,6 +53,13 @@ #include "wx/db.h" +// FIXME-UTF8: get rid of this after switching to Unicode-only builds: +#if wxUSE_UNICODE + #define WXSQLCAST(s) ((SQLTCHAR FAR *)(wchar_t*)(s).wchar_str()) +#else + #define WXSQLCAST(s) ((SQLTCHAR FAR *)(char*)(s).char_str()) +#endif + // DLL options compatibility check: WX_CHECK_BUILD_OPTIONS("wxODBC") @@ -560,7 +567,7 @@ void wxDb::initialize() // immediately, as the value is not good after // this function has left scope. // -const wxChar *wxDb::convertUserID(const wxChar *userID, wxString &UserID) +void wxDb::convertUserID(const wxChar *userID, wxString &UserID) { if (userID) { @@ -582,8 +589,6 @@ const wxChar *wxDb::convertUserID(const wxChar *userID, wxString &UserID) if ((Dbms() == dbmsORACLE) || (Dbms() == dbmsMAXDB)) UserID = UserID.Upper(); - - return UserID.c_str(); } // wxDb::convertUserID() @@ -859,7 +864,7 @@ bool wxDb::Open(const wxString& inConnectStr, SQLHWND parentWnd, bool failOnData inConnectionStr = inConnectStr; - retcode = SQLDriverConnect(hdbc, parentWnd, (SQLTCHAR FAR *)inConnectionStr.c_str(), + retcode = SQLDriverConnect(hdbc, parentWnd, WXSQLCAST(inConnectionStr), (SWORD)inConnectionStr.length(), (SQLTCHAR FAR *)outConnectBuffer, WXSIZEOF(outConnectBuffer), &outConnectBufferLen, SQL_DRIVER_COMPLETE ); @@ -904,9 +909,10 @@ bool wxDb::Open(const wxString &Dsn, const wxString &Uid, const wxString &AuthSt } // Connect to the data source - retcode = SQLConnect(hdbc, (SQLTCHAR FAR *) dsn.c_str(), SQL_NTS, - (SQLTCHAR FAR *) uid.c_str(), SQL_NTS, - (SQLTCHAR FAR *) authStr.c_str(), SQL_NTS); + retcode = SQLConnect(hdbc, + WXSQLCAST(dsn), SQL_NTS, + WXSQLCAST(uid), SQL_NTS, + WXSQLCAST(authStr), SQL_NTS); if ((retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO)) @@ -964,7 +970,7 @@ bool wxDb::Open(wxDb *copyDb) inConnectionStr = copyDb->GetConnectionInStr(); - retcode = SQLDriverConnect(hdbc, NULL, (SQLTCHAR FAR *)inConnectionStr.c_str(), + retcode = SQLDriverConnect(hdbc, NULL, WXSQLCAST(inConnectionStr), (SWORD)inConnectionStr.length(), (SQLTCHAR FAR *)outConnectBuffer, WXSIZEOF(outConnectBuffer), &outConnectBufferLen, SQL_DRIVER_COMPLETE); @@ -979,9 +985,10 @@ bool wxDb::Open(wxDb *copyDb) else { // Connect to the data source - retcode = SQLConnect(hdbc, (SQLTCHAR FAR *) dsn.c_str(), SQL_NTS, - (SQLTCHAR FAR *) uid.c_str(), SQL_NTS, - (SQLTCHAR FAR *) authStr.c_str(), SQL_NTS); + retcode = SQLConnect(hdbc, + WXSQLCAST(dsn), SQL_NTS, + WXSQLCAST(uid), SQL_NTS, + WXSQLCAST(authStr), SQL_NTS); } if ((retcode != SQL_SUCCESS) && @@ -2215,7 +2222,7 @@ bool wxDb::DropView(const wxString &viewName) cout << endl << sqlStmt.c_str() << endl; #endif - if (SQLExecDirect(hstmt, (SQLTCHAR FAR *) sqlStmt.c_str(), SQL_NTS) != SQL_SUCCESS) + if (SQLExecDirect(hstmt, WXSQLCAST(sqlStmt), SQL_NTS) != SQL_SUCCESS) { // Check for "Base table not found" error and ignore GetNextError(henv, hdbc, hstmt); @@ -2248,7 +2255,7 @@ bool wxDb::ExecSql(const wxString &pSqlStmt) SQLFreeStmt(hstmt, SQL_CLOSE); - retcode = SQLExecDirect(hstmt, (SQLTCHAR FAR *) pSqlStmt.c_str(), SQL_NTS); + retcode = SQLExecDirect(hstmt, WXSQLCAST(pSqlStmt), SQL_NTS); if (retcode == SQL_SUCCESS || (Dbms() == dbmsDB2 && (retcode == SQL_SUCCESS_WITH_INFO || retcode == SQL_NO_DATA_FOUND))) { @@ -2429,7 +2436,7 @@ int wxDb::GetKeyFields(const wxString &tableName, wxDbColInf* colInf, UWORD noCo retcode = SQLPrimaryKeys(hstmt, NULL, 0, /* Catalog name */ NULL, 0, /* Schema name */ - (SQLTCHAR FAR *) tableName.c_str(), SQL_NTS); /* Table name */ + WXSQLCAST(tableName), SQL_NTS); /* Table name */ /*---------------------------------------------------------------------*/ /* Fetch and display the result set. This will be a list of the */ @@ -2456,7 +2463,7 @@ int wxDb::GetKeyFields(const wxString &tableName, wxDbColInf* colInf, UWORD noCo retcode = SQLForeignKeys(hstmt, NULL, 0, /* Primary catalog */ NULL, 0, /* Primary schema */ - (SQLTCHAR FAR *)tableName.c_str(), SQL_NTS,/* Primary table */ + WXSQLCAST(tableName), SQL_NTS,/* Primary table */ NULL, 0, /* Foreign catalog */ NULL, 0, /* Foreign schema */ NULL, 0); /* Foreign table */ @@ -2505,7 +2512,7 @@ int wxDb::GetKeyFields(const wxString &tableName, wxDbColInf* colInf, UWORD noCo NULL, 0, /* Primary table */ NULL, 0, /* Foreign catalog */ NULL, 0, /* Foreign schema */ - (SQLTCHAR *)tableName.c_str(), SQL_NTS);/* Foreign table */ + WXSQLCAST(tableName), SQL_NTS);/* Foreign table */ /*---------------------------------------------------------------------*/ /* Fetch and display the result set. This will be all of the */ @@ -2623,8 +2630,8 @@ wxDbColInf *wxDb::GetColumns(wxChar *tableName[], const wxChar *userID) { retcode = SQLColumns(hstmt, NULL, 0, // All qualifiers - (SQLTCHAR *) UserID.c_str(), SQL_NTS, // Owner - (SQLTCHAR *) TableName.c_str(), SQL_NTS, + WXSQLCAST(UserID), SQL_NTS, // Owner + WXSQLCAST(TableName), SQL_NTS, NULL, 0); // All columns } else @@ -2632,7 +2639,7 @@ wxDbColInf *wxDb::GetColumns(wxChar *tableName[], const wxChar *userID) retcode = SQLColumns(hstmt, NULL, 0, // All qualifiers NULL, 0, // Owner - (SQLTCHAR *) TableName.c_str(), SQL_NTS, + WXSQLCAST(TableName), SQL_NTS, NULL, 0); // All columns } if (retcode != SQL_SUCCESS) @@ -2779,8 +2786,8 @@ wxDbColInf *wxDb::GetColumns(const wxString &tableName, UWORD *numCols, const wx { retcode = SQLColumns(hstmt, NULL, 0, // All qualifiers - (SQLTCHAR *) UserID.c_str(), SQL_NTS, // Owner - (SQLTCHAR *) TableName.c_str(), SQL_NTS, + WXSQLCAST(UserID), SQL_NTS, // Owner + WXSQLCAST(TableName), SQL_NTS, NULL, 0); // All columns } else @@ -2788,7 +2795,7 @@ wxDbColInf *wxDb::GetColumns(const wxString &tableName, UWORD *numCols, const wx retcode = SQLColumns(hstmt, NULL, 0, // All qualifiers NULL, 0, // Owner - (SQLTCHAR *) TableName.c_str(), SQL_NTS, + WXSQLCAST(TableName), SQL_NTS, NULL, 0); // All columns } if (retcode != SQL_SUCCESS) @@ -3286,8 +3293,8 @@ int wxDb::GetColumnCount(const wxString &tableName, const wxChar *userID) { retcode = SQLColumns(hstmt, NULL, 0, // All qualifiers - (SQLTCHAR *) UserID.c_str(), SQL_NTS, // Owner - (SQLTCHAR *) TableName.c_str(), SQL_NTS, + WXSQLCAST(UserID), SQL_NTS, // Owner + WXSQLCAST(TableName), SQL_NTS, NULL, 0); // All columns } else @@ -3295,7 +3302,7 @@ int wxDb::GetColumnCount(const wxString &tableName, const wxChar *userID) retcode = SQLColumns(hstmt, NULL, 0, // All qualifiers NULL, 0, // Owner - (SQLTCHAR *) TableName.c_str(), SQL_NTS, + WXSQLCAST(TableName), SQL_NTS, NULL, 0); // All columns } if (retcode != SQL_SUCCESS) @@ -3379,7 +3386,7 @@ wxDbInf *wxDb::GetCatalog(const wxChar *userID) { retcode = SQLTables(hstmt, NULL, 0, // All qualifiers - (SQLTCHAR *) UserID.c_str(), SQL_NTS, // User specified + WXSQLCAST(UserID), SQL_NTS, // User specified NULL, 0, // All tables NULL, 0); // All columns } @@ -3486,7 +3493,7 @@ bool wxDb::Catalog(const wxChar *userID, const wxString &fileName) { retcode = SQLColumns(hstmt, NULL, 0, // All qualifiers - (SQLTCHAR *) UserID.c_str(), SQL_NTS, // User specified + WXSQLCAST(UserID), SQL_NTS, // User specified NULL, 0, // All tables NULL, 0); // All columns } @@ -3621,8 +3628,8 @@ bool wxDb::TableExists(const wxString &tableName, const wxChar *userID, const wx { retcode = SQLTables(hstmt, NULL, 0, // All qualifiers - (SQLTCHAR *) UserID.c_str(), SQL_NTS, // Only tables owned by this user - (SQLTCHAR FAR *)TableName.c_str(), SQL_NTS, + WXSQLCAST(UserID), SQL_NTS, // Only tables owned by this user + WXSQLCAST(TableName), SQL_NTS, NULL, 0); // All table types } else @@ -3630,7 +3637,7 @@ bool wxDb::TableExists(const wxString &tableName, const wxChar *userID, const wx retcode = SQLTables(hstmt, NULL, 0, // All qualifiers NULL, 0, // All owners - (SQLTCHAR FAR *)TableName.c_str(), SQL_NTS, + WXSQLCAST(TableName), SQL_NTS, NULL, 0); // All table types } if (retcode != SQL_SUCCESS) @@ -3689,15 +3696,15 @@ bool wxDb::TablePrivileges(const wxString &tableName, const wxString &priv, cons { retcode = SQLTablePrivileges(hstmt, NULL, 0, // Catalog - (SQLTCHAR FAR *)Schema.c_str(), SQL_NTS, // Schema - (SQLTCHAR FAR *)TableName.c_str(), SQL_NTS); + WXSQLCAST(Schema), SQL_NTS, // Schema + WXSQLCAST(TableName), SQL_NTS); } else { retcode = SQLTablePrivileges(hstmt, NULL, 0, // Catalog NULL, 0, // Schema - (SQLTCHAR FAR *)TableName.c_str(), SQL_NTS); + WXSQLCAST(TableName), SQL_NTS); } #ifdef DBDEBUG_CONSOLE diff --git a/src/common/dbtable.cpp b/src/common/dbtable.cpp index fff7942cae..87a90e01a0 100644 --- a/src/common/dbtable.cpp +++ b/src/common/dbtable.cpp @@ -39,6 +39,13 @@ #include "wx/dbtable.h" +// FIXME-UTF8: get rid of this after switching to Unicode-only builds: +#if wxUSE_UNICODE + #define WXSQLCAST(s) ((SQLTCHAR FAR *)(wchar_t*)(s).wchar_str()) +#else + #define WXSQLCAST(s) ((SQLTCHAR FAR *)(char*)(s).char_str()) +#endif + ULONG lastTableID = 0; @@ -615,7 +622,7 @@ bool wxDbTable::execDelete(const wxString &pSqlStmt) RETCODE retcode; // Execute the DELETE statement - retcode = SQLExecDirect(hstmtDelete, (SQLTCHAR FAR *) pSqlStmt.c_str(), SQL_NTS); + retcode = SQLExecDirect(hstmtDelete, WXSQLCAST(pSqlStmt), SQL_NTS); if (retcode == SQL_SUCCESS || retcode == SQL_NO_DATA_FOUND || @@ -637,7 +644,7 @@ bool wxDbTable::execUpdate(const wxString &pSqlStmt) RETCODE retcode; // Execute the UPDATE statement - retcode = SQLExecDirect(hstmtUpdate, (SQLTCHAR FAR *) pSqlStmt.c_str(), SQL_NTS); + retcode = SQLExecDirect(hstmtUpdate, WXSQLCAST(pSqlStmt), SQL_NTS); if (retcode == SQL_SUCCESS || retcode == SQL_NO_DATA_FOUND || @@ -709,7 +716,7 @@ bool wxDbTable::query(int queryType, bool forUpdate, bool distinct, const wxStri // Execute the SQL SELECT statement int retcode; - retcode = SQLExecDirect(hstmt, (SQLTCHAR FAR *) (queryType == DB_SELECT_STATEMENT ? pSqlStmt.c_str() : sqlStmt.c_str()), SQL_NTS); + retcode = SQLExecDirect(hstmt, (queryType == DB_SELECT_STATEMENT ? WXSQLCAST(pSqlStmt) : WXSQLCAST(sqlStmt)), SQL_NTS); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) return(pDb->DispAllErrors(henv, hdbc, hstmt)); @@ -848,7 +855,7 @@ bool wxDbTable::Open(bool checkPrivileges, bool checkTableExists) // Prepare the insert statement for execution if (insertableCount) { - if (SQLPrepare(hstmtInsert, (SQLTCHAR FAR *) sqlStmt.c_str(), SQL_NTS) != SQL_SUCCESS) + if (SQLPrepare(hstmtInsert, WXSQLCAST(sqlStmt), SQL_NTS) != SQL_SUCCESS) return(pDb->DispAllErrors(henv, hdbc, hstmtInsert)); } else @@ -1563,7 +1570,7 @@ bool wxDbTable::CreateTable(bool attemptDrop) #endif // Execute the CREATE TABLE statement - RETCODE retcode = SQLExecDirect(hstmt, (SQLTCHAR FAR *) sqlStmt.c_str(), SQL_NTS); + RETCODE retcode = SQLExecDirect(hstmt, WXSQLCAST(sqlStmt), SQL_NTS); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) { pDb->DispAllErrors(henv, hdbc, hstmt); @@ -1603,7 +1610,7 @@ bool wxDbTable::DropTable() cout << endl << sqlStmt.c_str() << endl; #endif - RETCODE retcode = SQLExecDirect(hstmt, (SQLTCHAR FAR *) sqlStmt.c_str(), SQL_NTS); + RETCODE retcode = SQLExecDirect(hstmt, WXSQLCAST(sqlStmt), SQL_NTS); if (retcode != SQL_SUCCESS) { // Check for "Base table not found" error and ignore @@ -1772,7 +1779,7 @@ bool wxDbTable::CreateIndex(const wxString &indexName, bool unique, UWORD numInd #endif // Execute the CREATE INDEX statement - RETCODE retcode = SQLExecDirect(hstmt, (SQLTCHAR FAR *) sqlStmt.c_str(), SQL_NTS); + RETCODE retcode = SQLExecDirect(hstmt, WXSQLCAST(sqlStmt), SQL_NTS); if (retcode != SQL_SUCCESS) { pDb->DispAllErrors(henv, hdbc, hstmt); @@ -1823,7 +1830,7 @@ bool wxDbTable::DropIndex(const wxString &indexName) #ifdef DBDEBUG_CONSOLE cout << endl << sqlStmt.c_str() << endl; #endif - RETCODE retcode = SQLExecDirect(hstmt, (SQLTCHAR FAR *) sqlStmt.c_str(), SQL_NTS); + RETCODE retcode = SQLExecDirect(hstmt, WXSQLCAST(sqlStmt), SQL_NTS); if (retcode != SQL_SUCCESS) { // Check for "Index not found" error and ignore @@ -2470,7 +2477,7 @@ ULONG wxDbTable::Count(const wxString &args) } // Execute the SQL statement - if (SQLExecDirect(*hstmtCount, (SQLTCHAR FAR *) sqlStmt.c_str(), SQL_NTS) != SQL_SUCCESS) + if (SQLExecDirect(*hstmtCount, WXSQLCAST(sqlStmt), SQL_NTS) != SQL_SUCCESS) { pDb->DispAllErrors(henv, hdbc, *hstmtCount); return(0); -- 2.45.2