X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3cac31513f5073915d7fe32ff8aab23dc8d18287..56b9925b116dfa58028fccb2556852f2da2ab9ac:/src/common/db.cpp diff --git a/src/common/db.cpp b/src/common/db.cpp index 6f0e8dce24..49078ccb84 100644 --- a/src/common/db.cpp +++ b/src/common/db.cpp @@ -34,7 +34,7 @@ // SYNOPSIS START // SYNOPSIS STOP */ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "db.h" #endif @@ -68,8 +68,11 @@ #include "wx/db.h" -WXDLLEXPORT_DATA(wxDbList*) PtrBegDbList = 0; +// DLL options compatibility check: +#include "wx/app.h" +WX_CHECK_BUILD_OPTIONS("wxODBC") +WXDLLIMPEXP_DATA_ODBC(wxDbList*) PtrBegDbList = 0; wxChar const *SQL_LOG_FILENAME = wxT("sqllog.txt"); wxChar const *SQL_CATALOG_FILENAME = wxT("catalog.txt"); @@ -597,9 +600,9 @@ bool wxDb::Open(const wxString &Dsn, const wxString &Uid, const wxString &AuthSt } // Connect to the data source - retcode = SQLConnect(hdbc, (UCHAR FAR *) dsn.c_str(), SQL_NTS, - (UCHAR FAR *) uid.c_str(), SQL_NTS, - (UCHAR FAR *) authStr.c_str(), SQL_NTS); + retcode = SQLConnect(hdbc, (SQLTCHAR FAR *) dsn.c_str(), SQL_NTS, + (SQLTCHAR FAR *) uid.c_str(), SQL_NTS, + (SQLTCHAR FAR *) authStr.c_str(), SQL_NTS); if ((retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO)) @@ -625,7 +628,7 @@ bool wxDb::Open(const wxString &Dsn, const wxString &Uid, const wxString &AuthSt return(FALSE); // Query the data source for inf. about itself - if (!getDbInfo()) + if (!getDbInfo(failOnDataTypeUnsupported)) return(FALSE); // Query the data source regarding data type information @@ -799,9 +802,9 @@ bool wxDb::Open(wxDb *copyDb) } // Connect to the data source - retcode = SQLConnect(hdbc, (UCHAR FAR *) dsn.c_str(), SQL_NTS, - (UCHAR FAR *) uid.c_str(), SQL_NTS, - (UCHAR FAR *) authStr.c_str(), SQL_NTS); + retcode = SQLConnect(hdbc, (SQLTCHAR FAR *) dsn.c_str(), SQL_NTS, + (SQLTCHAR FAR *) uid.c_str(), SQL_NTS, + (SQLTCHAR FAR *) authStr.c_str(), SQL_NTS); if (retcode == SQL_ERROR) return(DispAllErrors(henv, hdbc)); @@ -977,19 +980,31 @@ bool wxDb::setConnectionOptions(void) /********** wxDb::getDbInfo() **********/ -bool wxDb::getDbInfo(void) +bool wxDb::getDbInfo(bool failOnDataTypeUnsupported) { SWORD cb; RETCODE retcode; if (SQLGetInfo(hdbc, SQL_SERVER_NAME, (UCHAR*) dbInf.serverName, 80, &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_DATABASE_NAME, (UCHAR*) dbInf.databaseName, 128, &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_DBMS_NAME, (UCHAR*) dbInf.dbmsName, 40, &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } // 16-Mar-1999 // After upgrading to MSVC6, the original 20 char buffer below was insufficient, @@ -997,93 +1012,219 @@ bool wxDb::getDbInfo(void) retcode = SQLGetInfo(hdbc, SQL_DBMS_VER, (UCHAR*) dbInf.dbmsVer, 64, &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO ) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_ACTIVE_CONNECTIONS, (UCHAR*) &dbInf.maxConnections, sizeof(dbInf.maxConnections), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_ACTIVE_STATEMENTS, (UCHAR*) &dbInf.maxStmts, sizeof(dbInf.maxStmts), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_DRIVER_NAME, (UCHAR*) dbInf.driverName, 40, &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_DRIVER_ODBC_VER, (UCHAR*) dbInf.odbcVer, 60, &cb) == SQL_ERROR) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } retcode = SQLGetInfo(hdbc, SQL_ODBC_VER, (UCHAR*) dbInf.drvMgrOdbcVer, 60, &cb); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_DRIVER_VER, (UCHAR*) dbInf.driverVer, 60, &cb) == SQL_ERROR) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_ODBC_API_CONFORMANCE, (UCHAR*) &dbInf.apiConfLvl, sizeof(dbInf.apiConfLvl), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_ODBC_SAG_CLI_CONFORMANCE, (UCHAR*) &dbInf.cliConfLvl, sizeof(dbInf.cliConfLvl), &cb) != SQL_SUCCESS) -// return(DispAllErrors(henv, hdbc)); { // Not all drivers support this call - Nick Gorham(unixODBC) dbInf.cliConfLvl = 0; + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; } if (SQLGetInfo(hdbc, SQL_ODBC_SQL_CONFORMANCE, (UCHAR*) &dbInf.sqlConfLvl, sizeof(dbInf.sqlConfLvl), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_OUTER_JOINS, (UCHAR*) dbInf.outerJoins, 2, &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + // TODO: BugTracker# 785080 : fails with mysql 4 on linux - edr + // TODO: dbInf.outerJoins[0]='N'; + // TODO: dbInf.outerJoins[1]='\x0'; + + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_PROCEDURES, (UCHAR*) dbInf.procedureSupport, 2, &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + // TODO: BugTracker# 785080 : fails with mysql 4 on linux - edr + // TODO: dbInf.procedureSupport[0]='N'; + // TODO: dbInf.procedureSupport[1]='\x0'; + + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_ACCESSIBLE_TABLES, (UCHAR*) dbInf.accessibleTables, 2, &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + // TODO: BugTracker# 785080 : fails with mysql 4 on linux - edr + // TODO: dbInf.accessibleTables[0]='N'; + // TODO: dbInf.accessibleTables[1]='\x0'; + + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_CURSOR_COMMIT_BEHAVIOR, (UCHAR*) &dbInf.cursorCommitBehavior, sizeof(dbInf.cursorCommitBehavior), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_CURSOR_ROLLBACK_BEHAVIOR, (UCHAR*) &dbInf.cursorRollbackBehavior, sizeof(dbInf.cursorRollbackBehavior), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_NON_NULLABLE_COLUMNS, (UCHAR*) &dbInf.supportNotNullClause, sizeof(dbInf.supportNotNullClause), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_ODBC_SQL_OPT_IEF, (UCHAR*) dbInf.supportIEF, 2, &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + // TODO: BugTracker# 785080 : fails with mysql 4 on linux - edr + // TODO: dbInf.supportIEF[0]='N'; + // TODO: dbInf.supportIEF[1]='\x0'; + + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_DEFAULT_TXN_ISOLATION, (UCHAR*) &dbInf.txnIsolation, sizeof(dbInf.txnIsolation), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_TXN_ISOLATION_OPTION, (UCHAR*) &dbInf.txnIsolationOptions, sizeof(dbInf.txnIsolationOptions), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_FETCH_DIRECTION, (UCHAR*) &dbInf.fetchDirections, sizeof(dbInf.fetchDirections), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_LOCK_TYPES, (UCHAR*) &dbInf.lockTypes, sizeof(dbInf.lockTypes), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_POS_OPERATIONS, (UCHAR*) &dbInf.posOperations, sizeof(dbInf.posOperations), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_POSITIONED_STATEMENTS, (UCHAR*) &dbInf.posStmts, sizeof(dbInf.posStmts), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_SCROLL_CONCURRENCY, (UCHAR*) &dbInf.scrollConcurrency, sizeof(dbInf.scrollConcurrency), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_SCROLL_OPTIONS, (UCHAR*) &dbInf.scrollOptions, sizeof(dbInf.scrollOptions), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_STATIC_SENSITIVITY, (UCHAR*) &dbInf.staticSensitivity, sizeof(dbInf.staticSensitivity), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_TXN_CAPABLE, (UCHAR*) &dbInf.txnCapable, sizeof(dbInf.txnCapable), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } if (SQLGetInfo(hdbc, SQL_LOGIN_TIMEOUT, (UCHAR*) &dbInf.loginTimeout, sizeof(dbInf.loginTimeout), &cb) != SQL_SUCCESS) - return(DispAllErrors(henv, hdbc)); + { + DispAllErrors(henv, hdbc); + if (failOnDataTypeUnsupported) + return FALSE; + } #ifdef DBDEBUG_CONSOLE cout << wxT("***** DATA SOURCE INFORMATION *****") << endl; @@ -1405,18 +1546,18 @@ void wxDb::Close(void) #ifdef __WXDEBUG__ wxTablesInUse *tiu; wxNode *pNode; - pNode = TablesInUse.First(); + pNode = TablesInUse.GetFirst(); wxString s,s2; while (pNode) { - tiu = (wxTablesInUse *)pNode->Data(); + tiu = (wxTablesInUse *)pNode->GetData(); if (tiu->pDb == this) { s.Printf(wxT("(%-20s) tableID:[%6lu] pDb:[%p]"), tiu->tableName,tiu->tableID,tiu->pDb); s2.Printf(wxT("Orphaned found using pDb:[%p]"),this); wxLogDebug (s.c_str(),s2.c_str()); } - pNode = pNode->Next(); + pNode = pNode->GetNext(); } #endif @@ -1479,7 +1620,7 @@ bool wxDb::DispAllErrors(HENV aHenv, HDBC aHdbc, HSTMT aHstmt) { wxString odbcErrMsg; - while (SQLError(aHenv, aHdbc, aHstmt, (UCHAR FAR *) sqlState, &nativeError, (UCHAR FAR *) errorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &cbErrorMsg) == SQL_SUCCESS) + while (SQLError(aHenv, aHdbc, aHstmt, (SQLTCHAR FAR *) sqlState, &nativeError, (SQLTCHAR FAR *) errorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &cbErrorMsg) == SQL_SUCCESS) { odbcErrMsg.Printf(wxT("SQL State = %s\nNative Error Code = %li\nError Message = %s\n"), sqlState, nativeError, errorMsg); logError(odbcErrMsg, sqlState); @@ -1506,7 +1647,7 @@ bool wxDb::DispAllErrors(HENV aHenv, HDBC aHdbc, HSTMT aHstmt) /********** wxDb::GetNextError() **********/ bool wxDb::GetNextError(HENV aHenv, HDBC aHdbc, HSTMT aHstmt) { - if (SQLError(aHenv, aHdbc, aHstmt, (UCHAR FAR *) sqlState, &nativeError, (UCHAR FAR *) errorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &cbErrorMsg) == SQL_SUCCESS) + if (SQLError(aHenv, aHdbc, aHstmt, (SQLTCHAR FAR *) sqlState, &nativeError, (SQLTCHAR FAR *) errorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &cbErrorMsg) == SQL_SUCCESS) return(TRUE); else return(FALSE); @@ -1862,7 +2003,7 @@ bool wxDb::DropView(const wxString &viewName) cout << endl << sqlStmt.c_str() << endl; #endif - if (SQLExecDirect(hstmt, (UCHAR FAR *) sqlStmt.c_str(), SQL_NTS) != SQL_SUCCESS) + if (SQLExecDirect(hstmt, (SQLTCHAR FAR *) sqlStmt.c_str(), SQL_NTS) != SQL_SUCCESS) { // Check for "Base table not found" error and ignore GetNextError(henv, hdbc, hstmt); @@ -1895,7 +2036,7 @@ bool wxDb::ExecSql(const wxString &pSqlStmt) SQLFreeStmt(hstmt, SQL_CLOSE); - retcode = SQLExecDirect(hstmt, (UCHAR FAR *) pSqlStmt.c_str(), SQL_NTS); + retcode = SQLExecDirect(hstmt, (SQLTCHAR FAR *) pSqlStmt.c_str(), SQL_NTS); if (retcode == SQL_SUCCESS || (Dbms() == dbmsDB2 && (retcode == SQL_SUCCESS_WITH_INFO || retcode == SQL_NO_DATA_FOUND))) { @@ -1973,7 +2114,7 @@ int wxDb::GetKeyFields(const wxString &tableName, wxDbColInf* colInf, UWORD noCo retcode = SQLPrimaryKeys(hstmt, NULL, 0, /* Catalog name */ NULL, 0, /* Schema name */ - (UCHAR FAR *) tableName.c_str(), SQL_NTS); /* Table name */ + (SQLTCHAR FAR *) tableName.c_str(), SQL_NTS); /* Table name */ /*---------------------------------------------------------------------*/ /* Fetch and display the result set. This will be a list of the */ @@ -2000,7 +2141,7 @@ int wxDb::GetKeyFields(const wxString &tableName, wxDbColInf* colInf, UWORD noCo retcode = SQLForeignKeys(hstmt, NULL, 0, /* Primary catalog */ NULL, 0, /* Primary schema */ - (UCHAR FAR *)tableName.c_str(), SQL_NTS,/* Primary table */ + (SQLTCHAR FAR *)tableName.c_str(), SQL_NTS,/* Primary table */ NULL, 0, /* Foreign catalog */ NULL, 0, /* Foreign schema */ NULL, 0); /* Foreign table */ @@ -2046,7 +2187,7 @@ int wxDb::GetKeyFields(const wxString &tableName, wxDbColInf* colInf, UWORD noCo NULL, 0, /* Primary table */ NULL, 0, /* Foreign catalog */ NULL, 0, /* Foreign schema */ - (UCHAR *)tableName.c_str(), SQL_NTS);/* Foreign table */ + (SQLTCHAR *)tableName.c_str(), SQL_NTS);/* Foreign table */ /*---------------------------------------------------------------------*/ /* Fetch and display the result set. This will be all of the */ @@ -2163,8 +2304,8 @@ wxDbColInf *wxDb::GetColumns(wxChar *tableName[], const wxChar *userID) { retcode = SQLColumns(hstmt, NULL, 0, // All qualifiers - (UCHAR *) UserID.c_str(), SQL_NTS, // Owner - (UCHAR *) TableName.c_str(), SQL_NTS, + (SQLTCHAR *) UserID.c_str(), SQL_NTS, // Owner + (SQLTCHAR *) TableName.c_str(), SQL_NTS, NULL, 0); // All columns } else @@ -2172,7 +2313,7 @@ wxDbColInf *wxDb::GetColumns(wxChar *tableName[], const wxChar *userID) retcode = SQLColumns(hstmt, NULL, 0, // All qualifiers NULL, 0, // Owner - (UCHAR *) TableName.c_str(), SQL_NTS, + (SQLTCHAR *) TableName.c_str(), SQL_NTS, NULL, 0); // All columns } if (retcode != SQL_SUCCESS) @@ -2318,8 +2459,8 @@ wxDbColInf *wxDb::GetColumns(const wxString &tableName, UWORD *numCols, const wx { retcode = SQLColumns(hstmt, NULL, 0, // All qualifiers - (UCHAR *) UserID.c_str(), SQL_NTS, // Owner - (UCHAR *) TableName.c_str(), SQL_NTS, + (SQLTCHAR *) UserID.c_str(), SQL_NTS, // Owner + (SQLTCHAR *) TableName.c_str(), SQL_NTS, NULL, 0); // All columns } else @@ -2327,7 +2468,7 @@ wxDbColInf *wxDb::GetColumns(const wxString &tableName, UWORD *numCols, const wx retcode = SQLColumns(hstmt, NULL, 0, // All qualifiers NULL, 0, // Owner - (UCHAR *) TableName.c_str(), SQL_NTS, + (SQLTCHAR *) TableName.c_str(), SQL_NTS, NULL, 0); // All columns } if (retcode != SQL_SUCCESS) @@ -2811,8 +2952,8 @@ int wxDb::GetColumnCount(const wxString &tableName, const wxChar *userID) { retcode = SQLColumns(hstmt, NULL, 0, // All qualifiers - (UCHAR *) UserID.c_str(), SQL_NTS, // Owner - (UCHAR *) TableName.c_str(), SQL_NTS, + (SQLTCHAR *) UserID.c_str(), SQL_NTS, // Owner + (SQLTCHAR *) TableName.c_str(), SQL_NTS, NULL, 0); // All columns } else @@ -2820,7 +2961,7 @@ int wxDb::GetColumnCount(const wxString &tableName, const wxChar *userID) retcode = SQLColumns(hstmt, NULL, 0, // All qualifiers NULL, 0, // Owner - (UCHAR *) TableName.c_str(), SQL_NTS, + (SQLTCHAR *) TableName.c_str(), SQL_NTS, NULL, 0); // All columns } if (retcode != SQL_SUCCESS) @@ -2902,7 +3043,7 @@ wxDbInf *wxDb::GetCatalog(const wxChar *userID) { retcode = SQLTables(hstmt, NULL, 0, // All qualifiers - (UCHAR *) UserID.c_str(), SQL_NTS, // User specified + (SQLTCHAR *) UserID.c_str(), SQL_NTS, // User specified NULL, 0, // All tables NULL, 0); // All columns } @@ -2991,7 +3132,7 @@ bool wxDb::Catalog(const wxChar *userID, const wxString &fileName) wxChar typeName[30+1]; SDWORD precision, length; - FILE *fp = fopen(fileName.c_str(),wxT("wt")); + FILE *fp = wxFopen(fileName.c_str(),wxT("wt")); if (fp == NULL) return(FALSE); @@ -3008,7 +3149,7 @@ bool wxDb::Catalog(const wxChar *userID, const wxString &fileName) { retcode = SQLColumns(hstmt, NULL, 0, // All qualifiers - (UCHAR *) UserID.c_str(), SQL_NTS, // User specified + (SQLTCHAR *) UserID.c_str(), SQL_NTS, // User specified NULL, 0, // All tables NULL, 0); // All columns } @@ -3040,20 +3181,20 @@ bool wxDb::Catalog(const wxChar *userID, const wxString &fileName) if (wxStrcmp(tblName, tblNameSave.c_str())) { if (cnt) - fputs(wxT("\n"), fp); - fputs(wxT("================================ "), fp); - fputs(wxT("================================ "), fp); - fputs(wxT("===================== "), fp); - fputs(wxT("========= "), fp); - fputs(wxT("=========\n"), fp); + wxFputs(wxT("\n"), fp); + wxFputs(wxT("================================ "), fp); + wxFputs(wxT("================================ "), fp); + wxFputs(wxT("===================== "), fp); + wxFputs(wxT("========= "), fp); + wxFputs(wxT("=========\n"), fp); outStr.Printf(wxT("%-32s %-32s %-21s %9s %9s\n"), wxT("TABLE NAME"), wxT("COLUMN NAME"), wxT("DATA TYPE"), wxT("PRECISION"), wxT("LENGTH")); - fputs(outStr.c_str(), fp); - fputs(wxT("================================ "), fp); - fputs(wxT("================================ "), fp); - fputs(wxT("===================== "), fp); - fputs(wxT("========= "), fp); - fputs(wxT("=========\n"), fp); + wxFputs(outStr.c_str(), fp); + wxFputs(wxT("================================ "), fp); + wxFputs(wxT("================================ "), fp); + wxFputs(wxT("===================== "), fp); + wxFputs(wxT("========= "), fp); + wxFputs(wxT("=========\n"), fp); tblNameSave = tblName; } @@ -3066,7 +3207,7 @@ bool wxDb::Catalog(const wxChar *userID, const wxString &fileName) outStr.Printf(wxT("%-32s %-32s (%04d)%-15s %9ld %9ld\n"), tblName, colName, sqlDataType, typeName, precision, length); - if (fputs(outStr.c_str(), fp) == EOF) + if (wxFputs(outStr.c_str(), fp) == EOF) { SQLFreeStmt(hstmt, SQL_CLOSE); fclose(fp); @@ -3141,8 +3282,8 @@ bool wxDb::TableExists(const wxString &tableName, const wxChar *userID, const wx { retcode = SQLTables(hstmt, NULL, 0, // All qualifiers - (UCHAR *) UserID.c_str(), SQL_NTS, // Only tables owned by this user - (UCHAR FAR *)TableName.c_str(), SQL_NTS, + (SQLTCHAR *) UserID.c_str(), SQL_NTS, // Only tables owned by this user + (SQLTCHAR FAR *)TableName.c_str(), SQL_NTS, NULL, 0); // All table types } else @@ -3150,7 +3291,7 @@ bool wxDb::TableExists(const wxString &tableName, const wxChar *userID, const wx retcode = SQLTables(hstmt, NULL, 0, // All qualifiers NULL, 0, // All owners - (UCHAR FAR *)TableName.c_str(), SQL_NTS, + (SQLTCHAR FAR *)TableName.c_str(), SQL_NTS, NULL, 0); // All table types } if (retcode != SQL_SUCCESS) @@ -3172,7 +3313,7 @@ bool wxDb::TableExists(const wxString &tableName, const wxChar *userID, const wx /********** wxDb::TablePrivileges() **********/ bool wxDb::TablePrivileges(const wxString &tableName, const wxString &priv, const wxChar *userID, - const wxChar *schema, const wxString &tablePath) + const wxChar *schema, const wxString &WXUNUSED(tablePath)) { wxASSERT(tableName.Length()); @@ -3208,19 +3349,19 @@ bool wxDb::TablePrivileges(const wxString &tableName, const wxString &priv, cons { retcode = SQLTablePrivileges(hstmt, NULL, 0, // Catalog - (UCHAR FAR *)Schema.c_str(), SQL_NTS, // Schema - (UCHAR FAR *)TableName.c_str(), SQL_NTS); + (SQLTCHAR FAR *)Schema.c_str(), SQL_NTS, // Schema + (SQLTCHAR FAR *)TableName.c_str(), SQL_NTS); } else { retcode = SQLTablePrivileges(hstmt, NULL, 0, // Catalog NULL, 0, // Schema - (UCHAR FAR *)TableName.c_str(), SQL_NTS); + (SQLTCHAR FAR *)TableName.c_str(), SQL_NTS); } #ifdef DBDEBUG_CONSOLE - fprintf(stderr ,wxT("SQLTablePrivileges() returned %i \n"),retcode); + wxFprintf(stderr ,wxT("SQLTablePrivileges() returned %i \n"),retcode); #endif if ((retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO)) @@ -3256,7 +3397,7 @@ bool wxDb::TablePrivileges(const wxString &tableName, const wxString &priv, cons return(DispAllErrors(henv, hdbc, hstmt)); } #ifdef DBDEBUG_CONSOLE - fprintf(stderr,wxT("Scanning %s privilege on table %s.%s granted by %s to %s\n"), + wxFprintf(stderr,wxT("Scanning %s privilege on table %s.%s granted by %s to %s\n"), result.privilege,result.tableOwner,result.tableName, result.grantor, result.grantee); #endif @@ -3295,10 +3436,10 @@ const wxString wxDb::SQLTableName(const wxChar *tableName) wxString TableName; if (Dbms() == dbmsACCESS) - TableName = '"'; + TableName = _T("\""); TableName += tableName; if (Dbms() == dbmsACCESS) - TableName += '"'; + TableName += _T("\""); return TableName; } // wxDb::SQLTableName() @@ -3309,10 +3450,10 @@ const wxString wxDb::SQLColumnName(const wxChar *colName) wxString ColName; if (Dbms() == dbmsACCESS) - ColName = '"'; + ColName = _T("\""); ColName += colName; if (Dbms() == dbmsACCESS) - ColName += '"'; + ColName += _T("\""); return ColName; } // wxDb::SQLColumnName() @@ -3328,7 +3469,7 @@ bool wxDb::SetSqlLogging(wxDbSqlLogState state, const wxString &filename, bool a { if (fpSqlLog == 0) { - fpSqlLog = fopen(filename, (append ? wxT("at") : wxT("wt"))); + fpSqlLog = wxFopen(filename, (append ? wxT("at") : wxT("wt"))); if (fpSqlLog == NULL) return(FALSE); } @@ -3357,11 +3498,11 @@ bool wxDb::WriteSqlLog(const wxString &logMsg) if (fpSqlLog == 0 || sqlLogState == sqlLogOFF) return(FALSE); - if (fputs(wxT("\n"), fpSqlLog) == EOF) + if (wxFputs(wxT("\n"), fpSqlLog) == EOF) return(FALSE); - if (fputs(logMsg, fpSqlLog) == EOF) + if (wxFputs(logMsg, fpSqlLog) == EOF) return(FALSE); - if (fputs(wxT("\n"), fpSqlLog) == EOF) + if (wxFputs(wxT("\n"), fpSqlLog) == EOF) return(FALSE); return(TRUE); @@ -3469,13 +3610,13 @@ wxDBMS wxDb::Dbms(void) if (!wxStricmp(dbInf.dbmsName,wxT("Microsoft SQL Server"))) return((wxDBMS)(dbmsType = dbmsMS_SQL_SERVER)); - if (!wxStricmp(dbInf.dbmsName,wxT("MySQL"))) - return((wxDBMS)(dbmsType = dbmsMY_SQL)); - if (!wxStricmp(dbInf.dbmsName,wxT("PostgreSQL"))) // v6.5.0 + + baseName[10] = 0; + if (!wxStricmp(baseName,wxT("PostgreSQL"))) // v6.5.0 return((wxDBMS)(dbmsType = dbmsPOSTGRES)); baseName[9] = 0; - if (!wxStricmp(dbInf.dbmsName,wxT("Pervasive"))) + if (!wxStricmp(baseName,wxT("Pervasive"))) return((wxDBMS)(dbmsType = dbmsPERVASIVE_SQL)); baseName[8] = 0; @@ -3485,20 +3626,16 @@ wxDBMS wxDb::Dbms(void) baseName[6] = 0; if (!wxStricmp(baseName,wxT("Oracle"))) return((wxDBMS)(dbmsType = dbmsORACLE)); - if (!wxStricmp(dbInf.dbmsName,wxT("ACCESS"))) + if (!wxStricmp(baseName,wxT("ACCESS"))) return((wxDBMS)(dbmsType = dbmsACCESS)); - if (!wxStricmp(dbInf.dbmsName,wxT("MySQL"))) - return((wxDBMS)(dbmsType = dbmsMY_SQL)); if (!wxStricmp(baseName,wxT("Sybase"))) return((wxDBMS)(dbmsType = dbmsSYBASE_ASE)); baseName[5] = 0; if (!wxStricmp(baseName,wxT("DBASE"))) return((wxDBMS)(dbmsType = dbmsDBASE)); - if (!wxStricmp(baseName,wxT("xBase"))) return((wxDBMS)(dbmsType = dbmsXBASE_SEQUITER)); - if (!wxStricmp(baseName,wxT("MySQL"))) return((wxDBMS)(dbmsType = dbmsMY_SQL)); @@ -3553,10 +3690,10 @@ bool wxDb::ModifyColumn(const wxString &tableName, const wxString &columnName, switch (Dbms()) { case dbmsORACLE : - alterSlashModify = "MODIFY"; + alterSlashModify = _T("MODIFY"); break; case dbmsMS_SQL_SERVER : - alterSlashModify = "ALTER COLUMN"; + alterSlashModify = _T("ALTER COLUMN"); break; case dbmsUNIDENTIFIED : return FALSE; @@ -3568,7 +3705,7 @@ bool wxDb::ModifyColumn(const wxString &tableName, const wxString &columnName, case dbmsDBASE : case dbmsXBASE_SEQUITER : default : - alterSlashModify = "MODIFY"; + alterSlashModify = _T("MODIFY"); break; } @@ -3586,7 +3723,7 @@ bool wxDb::ModifyColumn(const wxString &tableName, const wxString &columnName, // For varchars only, append the size of the column if (dataType == DB_DATA_TYPE_VARCHAR && - (Dbms() != dbmsMY_SQL || dataTypeName != "text")) + (Dbms() != dbmsMY_SQL || dataTypeName != _T("text"))) { wxString s; s.Printf(wxT("(%lu)"), columnLength); @@ -3606,7 +3743,7 @@ bool wxDb::ModifyColumn(const wxString &tableName, const wxString &columnName, /********** wxDbGetConnection() **********/ -wxDb WXDLLEXPORT *wxDbGetConnection(wxDbConnectInf *pDbConfig, bool FwdOnlyCursors) +wxDb WXDLLIMPEXP_ODBC *wxDbGetConnection(wxDbConnectInf *pDbConfig, bool FwdOnlyCursors) { wxDbList *pList; @@ -3695,7 +3832,7 @@ wxDb WXDLLEXPORT *wxDbGetConnection(wxDbConnectInf *pDbConfig, bool FwdOnlyCurso /********** wxDbFreeConnection() **********/ -bool WXDLLEXPORT wxDbFreeConnection(wxDb *pDb) +bool WXDLLIMPEXP_ODBC wxDbFreeConnection(wxDb *pDb) { wxDbList *pList; @@ -3713,7 +3850,7 @@ bool WXDLLEXPORT wxDbFreeConnection(wxDb *pDb) /********** wxDbCloseConnections() **********/ -void WXDLLEXPORT wxDbCloseConnections(void) +void WXDLLIMPEXP_ODBC wxDbCloseConnections(void) { wxDbList *pList, *pNext; @@ -3735,7 +3872,7 @@ void WXDLLEXPORT wxDbCloseConnections(void) /********** wxDbConnectionsInUse() **********/ -int WXDLLEXPORT wxDbConnectionsInUse(void) +int WXDLLIMPEXP_ODBC wxDbConnectionsInUse(void) { wxDbList *pList; int cnt = 0; @@ -3755,7 +3892,7 @@ int WXDLLEXPORT wxDbConnectionsInUse(void) /********** wxDbLogExtendedErrorMsg() **********/ // DEBUG ONLY function -const wxChar* WXDLLEXPORT wxDbLogExtendedErrorMsg(const wxChar *userText, +const wxChar* WXDLLIMPEXP_ODBC wxDbLogExtendedErrorMsg(const wxChar *userText, wxDb *pDb, const wxChar *ErrFile, int ErrLine) @@ -3914,8 +4051,8 @@ bool wxDbGetDataSource(HENV henv, wxChar *Dsn, SWORD DsnMax, wxChar *DsDesc, { SWORD cb1,cb2; - if (SQLDataSources(henv, direction, (UCHAR FAR *) Dsn, DsnMax, &cb1, - (UCHAR FAR *) DsDesc, DsDescMax, &cb2) == SQL_SUCCESS) + if (SQLDataSources(henv, direction, (SQLTCHAR FAR *) Dsn, DsnMax, &cb1, + (SQLTCHAR FAR *) DsDesc, DsDescMax, &cb2) == SQL_SUCCESS) return(TRUE); else return(FALSE); @@ -3944,22 +4081,22 @@ bool GetDataSource(HENV henv, char *Dsn, SWORD DsnMax, char *DsDesc, SWORD DsDes return wxDbGetDataSource(henv, Dsn, DsnMax, DsDesc, DsDescMax, direction); } /***** DEPRECATED: use wxDbGetConnection() *****/ -wxDb WXDLLEXPORT *GetDbConnection(DbStuff *pDbStuff, bool FwdOnlyCursors) +wxDb WXDLLIMPEXP_ODBC *GetDbConnection(DbStuff *pDbStuff, bool FwdOnlyCursors) { return wxDbGetConnection((wxDbConnectInf *)pDbStuff, FwdOnlyCursors); } /***** DEPRECATED: use wxDbFreeConnection() *****/ -bool WXDLLEXPORT FreeDbConnection(wxDb *pDb) +bool WXDLLIMPEXP_ODBC FreeDbConnection(wxDb *pDb) { return wxDbFreeConnection(pDb); } /***** DEPRECATED: use wxDbCloseConnections() *****/ -void WXDLLEXPORT CloseDbConnections(void) +void WXDLLIMPEXP_ODBC CloseDbConnections(void) { wxDbCloseConnections(); } /***** DEPRECATED: use wxDbConnectionsInUse() *****/ -int WXDLLEXPORT NumberDbConnectionsInUse(void) +int WXDLLIMPEXP_ODBC NumberDbConnectionsInUse(void) { return wxDbConnectionsInUse(); }