diff options
author | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2024-02-10 20:08:58 +0100 |
---|---|---|
committer | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2024-03-10 19:15:46 +0100 |
commit | 453e66c61bef47a83b4e498122e53b1b0404ed12 (patch) | |
tree | e50bf27356c209a22b596f2ca880bb79862eb52b | |
parent | 003cef9d40f2e840f2690bd465994deaab5c2b95 (diff) |
SQL/ODBC: sync usage of qSqlWarning()
Replace all qWarning() with qSqlWarning() to be able to get additional
error/warning output from the handles.
Change-Id: Ieaa947fe06216b3d20b20c509080fc409803683b
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
-rw-r--r-- | src/plugins/sqldrivers/odbc/qsql_odbc.cpp | 95 |
1 files changed, 55 insertions, 40 deletions
diff --git a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp index a985495cf5..bc9e886e2a 100644 --- a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp +++ b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp @@ -319,7 +319,11 @@ static QString errorStringFromDiagRecords(const QList<DiagRecord>& records) template<class T> static void qSqlWarning(const QString &message, T &&val) { - qWarning() << message << "\tError:" << errorStringFromDiagRecords(qODBCWarn(val)); + const auto addMsg = errorStringFromDiagRecords(qODBCWarn(val)); + if (addMsg.isEmpty()) + qWarning() << message; + else + qWarning() << message << "\tError:" << addMsg; } static QSqlError qMakeError(const QString &err, @@ -443,7 +447,7 @@ static QVariant getStringDataImpl(SQLHANDLE hStmt, SQLUSMALLINT column, qsizetyp } else if (r == SQL_NO_DATA) { break; } else { - qSqlWarning("qGetStringData: Error while fetching data:"_L1, hStmt); + qSqlWarning("QODBC::getStringData: Error while fetching data"_L1, hStmt); return {}; } } @@ -485,7 +489,8 @@ static QVariant qGetBinaryData(SQLHANDLE hStmt, int column) &colScale, &nullable); if (r != SQL_SUCCESS) - qWarning() << "qGetBinaryData: Unable to describe column" << column; + qSqlWarning(("QODBC::qGetBinaryData: Unable to describe column %1"_L1) + .arg(QString::number(column)), hStmt); // SQLDescribeCol may return 0 if size cannot be determined if (!colSize) colSize = 255; @@ -586,8 +591,8 @@ static bool isAutoValue(const SQLHANDLE hStmt, int column) const SQLRETURN r = ::SQLColAttribute(hStmt, column + 1, SQL_DESC_AUTO_UNIQUE_VALUE, 0, 0, 0, &nNumericAttribute); if (!SQL_SUCCEEDED(r)) { - qSqlWarning(QStringLiteral("qMakeField: Unable to get autovalue attribute for column ") - + QString::number(column), hStmt); + qSqlWarning(("QODBC::isAutoValue: Unable to get autovalue attribute for column %1"_L1) + .arg(QString::number(column)), hStmt); return false; } return nNumericAttribute != SQL_FALSE; @@ -634,7 +639,8 @@ static QSqlField qMakeFieldInfo(const QODBCResultPrivate *p, int i) &nullable); if (r != SQL_SUCCESS) { - qSqlWarning(QStringLiteral("qMakeField: Unable to describe column ") + QString::number(i), p); + qSqlWarning(("QODBC::qMakeFieldInfo: Unable to describe column %1"_L1) + .arg(QString::number(i)), p); return QSqlField(); } @@ -647,8 +653,8 @@ static QSqlField qMakeFieldInfo(const QODBCResultPrivate *p, int i) 0, &unsignedFlag); if (r != SQL_SUCCESS) { - qSqlWarning(QStringLiteral("qMakeField: Unable to get column attributes for column ") - + QString::number(i), p); + qSqlWarning(("QODBC::qMakeFieldInfo: Unable to get column attributes for column %1"_L1) + .arg(QString::number(i)), p); } const QString qColName(fromSQLTCHAR(colName, colNameLen)); @@ -734,7 +740,8 @@ bool QODBCDriverPrivate::setConnectionOptions(const QString& connOpts) const QString tmp(opts.at(i)); int idx; if ((idx = tmp.indexOf(u'=')) == -1) { - qWarning() << "QODBCDriver::open: Illegal connect option value '" << tmp << '\''; + qSqlWarning(("QODBCDriver::open: Illegal connect option value '%1'"_L1) + .arg(tmp), this); continue; } const QString opt(tmp.left(idx)); @@ -748,7 +755,8 @@ bool QODBCDriverPrivate::setConnectionOptions(const QString& connOpts) } else if (val.toUpper() == "SQL_MODE_READ_WRITE"_L1) { v = SQL_MODE_READ_WRITE; } else { - qWarning() << "QODBCDriver::open: Unknown option value '" << val << '\''; + qSqlWarning(("QODBCDriver::open: Unknown option value '%1'"_L1) + .arg(val), this); continue; } r = SQLSetConnectAttr(hDbc, SQL_ATTR_ACCESS_MODE, (SQLPOINTER) size_t(v), 0); @@ -766,7 +774,8 @@ bool QODBCDriverPrivate::setConnectionOptions(const QString& connOpts) } else if (val.toUpper() == "SQL_FALSE"_L1) { v = SQL_FALSE; } else { - qWarning() << "QODBCDriver::open: Unknown option value '" << val << '\''; + qSqlWarning(("QODBCDriver::open: Unknown option value '%1'"_L1) + .arg(val), this); continue; } r = SQLSetConnectAttr(hDbc, SQL_ATTR_METADATA_ID, (SQLPOINTER) size_t(v), 0); @@ -781,7 +790,8 @@ bool QODBCDriverPrivate::setConnectionOptions(const QString& connOpts) } else if (val.toUpper() == "SQL_OPT_TRACE_ON"_L1) { v = SQL_OPT_TRACE_ON; } else { - qWarning() << "QODBCDriver::open: Unknown option value '" << val << '\''; + qSqlWarning(("QODBCDriver::open: Unknown option value '%1'"_L1) + .arg(val), this); continue; } r = SQLSetConnectAttr(hDbc, SQL_ATTR_TRACE, (SQLPOINTER) size_t(v), 0); @@ -795,7 +805,8 @@ bool QODBCDriverPrivate::setConnectionOptions(const QString& connOpts) else if (val.toUpper() == "SQL_CP_DEFAULT"_L1) v = SQL_CP_DEFAULT; else { - qWarning() << "QODBCDriver::open: Unknown option value '" << val << '\''; + qSqlWarning(("QODBCDriver::open: Unknown option value '%1'"_L1) + .arg(val), this); continue; } r = SQLSetConnectAttr(hDbc, SQL_ATTR_CONNECTION_POOLING, (SQLPOINTER) size_t(v), 0); @@ -807,7 +818,8 @@ bool QODBCDriverPrivate::setConnectionOptions(const QString& connOpts) else if (val.toUpper() == "SQL_CP_MATCH_DEFAULT"_L1) v = SQL_CP_MATCH_DEFAULT; else { - qWarning() << "QODBCDriver::open: Unknown option value '" << val << '\''; + qSqlWarning(("QODBCDriver::open: Unknown option value '%1'"_L1) + .arg(val), this); continue; } r = SQLSetConnectAttr(hDbc, SQL_ATTR_CP_MATCH, (SQLPOINTER) size_t(v), 0); @@ -815,11 +827,12 @@ bool QODBCDriverPrivate::setConnectionOptions(const QString& connOpts) // Already handled in QODBCDriver::open() continue; } else { - qWarning() << "QODBCDriver::open: Unknown connection attribute '" << opt << '\''; + qSqlWarning(("QODBCDriver::open: Unknown connection attribute '%1'"_L1) + .arg(opt), this); } if (!SQL_SUCCEEDED(r)) - qSqlWarning(QString::fromLatin1("QODBCDriver::open: Unable to set connection attribute'%1'").arg( - opt), this); + qSqlWarning(("QODBCDriver::open: Unable to set connection attribute '%1'"_L1) + .arg(opt), this); } return true; } @@ -855,7 +868,7 @@ void QODBCDriverPrivate::splitTableQualifier(const QString &qualifier, QString & table = adjustName(l.at(2).toString()); break; default: - qSqlWarning(QString::fromLatin1("QODBCDriver::splitTableQualifier: Unable to split table qualifier '%1'") + qSqlWarning(("QODBCDriver::splitTableQualifier: Unable to split table qualifier '%1'"_L1) .arg(qualifier), this); break; } @@ -919,8 +932,7 @@ QODBCResult::~QODBCResult() if (d->hStmt && d->isStmtHandleValid() && driver() && driver()->isOpen()) { SQLRETURN r = SQLFreeHandle(SQL_HANDLE_STMT, d->hStmt); if (r != SQL_SUCCESS) - qSqlWarning("QODBCDriver: Unable to free statement handle "_L1 - + QString::number(r), d); + qSqlWarning(("QODBCResult: Unable to free statement handle "_L1), d); } } @@ -1151,7 +1163,8 @@ QVariant QODBCResult::data(int field) { Q_D(QODBCResult); if (field >= d->rInf.count() || field < 0) { - qWarning() << "QODBCResult::data: column" << field << "out of range"; + qSqlWarning(("QODBCResult::data: column %1 out of range"_L1) + .arg(QString::number(field)), d); return QVariant(); } if (field < d->fieldCacheIdx) @@ -1277,8 +1290,7 @@ int QODBCResult::numRowsAffected() SQLRETURN r = SQLRowCount(d->hStmt, &affectedRowCount); if (r == SQL_SUCCESS) return affectedRowCount; - else - qSqlWarning("QODBCResult::numRowsAffected: Unable to count affected rows"_L1, d); + qSqlWarning("QODBCResult::numRowsAffected: Unable to count affected rows"_L1, d); return -1; } @@ -1791,8 +1803,7 @@ bool QODBCResult::nextResult() SQLRETURN r = SQLMoreResults(d->hStmt); if (r != SQL_SUCCESS) { if (r == SQL_SUCCESS_WITH_INFO) { - QString message = errorStringFromDiagRecords(qODBCWarn(d)); - qWarning() << "QODBCResult::nextResult():" << message; + qSqlWarning("QODBCResult::nextResult:"_L1, d); } else { if (r != SQL_NO_DATA) setLastError(qMakeError(QCoreApplication::translate("QODBCResult", @@ -2141,9 +2152,10 @@ bool QODBCDriverPrivate::checkDriver() const return false; } if (sup == SQL_FALSE) { - qWarning () << "QODBCDriver::open: Warning - Driver doesn't support all needed functionality (" - << func - << ").\nPlease look at the Qt SQL Module Driver documentation for more information."; + qSqlWarning(("QODBCDriver::checkDriver: Driver doesn't support all needed " + "functionality (func id %1).\nPlease look at the Qt SQL Module " + "Driver documentation for more information."_L1) + .arg(QString::number(func)), this); return false; } } @@ -2158,8 +2170,9 @@ bool QODBCDriverPrivate::checkDriver() const return false; } if (sup == SQL_FALSE) { - qWarning() << "QODBCDriver::checkDriver: Warning - Driver doesn't support some non-critical functions (" - << func << ')'; + qSqlWarning(("QODBCDriver::checkDriver: Driver doesn't support some " + "non-critical functions (func id %1)."_L1) + .arg(QString::number(func)), this); return true; } } @@ -2224,7 +2237,8 @@ void QODBCDriverPrivate::checkHasSQLFetchScroll() SQLRETURN r = SQLGetFunctions(hDbc, SQL_API_SQLFETCHSCROLL, &sup); if ((!SQL_SUCCEEDED(r)) || sup != SQL_TRUE) { hasSQLFetchScroll = false; - qWarning("QODBCDriver::checkHasSQLFetchScroll: Warning - Driver doesn't support scrollable result sets, use forward only mode for queries"); + qSqlWarning("QODBCDriver::checkHasSQLFetchScroll: Driver doesn't support " + "scrollable result sets, use forward only mode for queries"_L1, this); } } @@ -2268,7 +2282,7 @@ bool QODBCDriver::beginTransaction() { Q_D(QODBCDriver); if (!isOpen()) { - qWarning("QODBCDriver::beginTransaction: Database not open"); + qSqlWarning("QODBCDriver::beginTransaction: Database not open"_L1, d); return false; } SQLUINTEGER ac(SQL_AUTOCOMMIT_OFF); @@ -2288,7 +2302,7 @@ bool QODBCDriver::commitTransaction() { Q_D(QODBCDriver); if (!isOpen()) { - qWarning("QODBCDriver::commitTransaction: Database not open"); + qSqlWarning("QODBCDriver::commitTransaction: Database not open"_L1, d); return false; } SQLRETURN r = SQLEndTran(SQL_HANDLE_DBC, @@ -2306,7 +2320,7 @@ bool QODBCDriver::rollbackTransaction() { Q_D(QODBCDriver); if (!isOpen()) { - qWarning("QODBCDriver::rollbackTransaction: Database not open"); + qSqlWarning("QODBCDriver::rollbackTransaction: Database not open"_L1, d); return false; } SQLRETURN r = SQLEndTran(SQL_HANDLE_DBC, @@ -2372,12 +2386,12 @@ QStringList QODBCDriver::tables(QSql::TableType type) const } if (r != SQL_SUCCESS) - qSqlWarning("QODBCDriver::tables Unable to execute table list"_L1, d); + qSqlWarning("QODBCDriver::tables Unable to execute table list"_L1, + hStmt.handle()); r = d->sqlFetchNext(hStmt); if (!SQL_SUCCEEDED(r) && r != SQL_NO_DATA) { - qSqlWarning("QODBCDriver::tables failed to retrieve table/view list: ("_L1 - + QString::number(r) + u':', + qSqlWarning("QODBCDriver::tables failed to retrieve table/view list"_L1, hStmt.handle()); return QStringList(); } @@ -2401,7 +2415,7 @@ QSqlIndex QODBCDriver::primaryIndex(const QString& tablename) const SqlStmtHandle hStmt(d->hDbc); if (!hStmt.isValid()) { - qSqlWarning("QODBCDriver::primaryIndex: Unable to list primary key"_L1, d); + qSqlWarning("QODBCDriver::primaryIndex: Unable to allocate handle"_L1, d); return index; } QString catalog, schema, table; @@ -2437,7 +2451,8 @@ QSqlIndex QODBCDriver::primaryIndex(const QString& tablename) const SQL_NULLABLE); if (r != SQL_SUCCESS) { - qSqlWarning("QODBCDriver::primaryIndex: Unable to execute primary key list"_L1, d); + qSqlWarning("QODBCDriver::primaryIndex: Unable to execute primary key list"_L1, + hStmt.handle()); } else { usingSpecialColumns = true; } @@ -2496,7 +2511,7 @@ QSqlRecord QODBCDriver::record(const QString& tablename) const 0); } if (r != SQL_SUCCESS) - qSqlWarning("QODBCDriver::record: Unable to execute column list"_L1, d); + qSqlWarning("QODBCDriver::record: Unable to execute column list"_L1, hStmt.handle()); r = d->sqlFetchNext(hStmt); // Store all fields in a StringList because some drivers can't detail fields in this FETCH loop |