SQL/DB2 & ODBC: avoid some code duplication

Avoid some code duplication by using a template parameter for
qMakeError() and qSqlWarning().

Pick-to: 6.10
Change-Id: I698ab063fce6c7be1cb3debdb9e83978eac10409
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
This commit is contained in:
Christian Ehrlicher 2025-06-06 20:21:05 +02:00
parent 2b4effeec8
commit ccf81822cf
2 changed files with 9 additions and 40 deletions

View File

@ -168,18 +168,7 @@ static QString qDB2Warn(const QDB2DriverPrivate* d, QStringList *errorCodes = nu
static QString qDB2Warn(const QDB2ResultPrivate* d, QStringList *errorCodes = nullptr)
{
int errorCode = 0;
QString error = qWarnDB2Handle(SQL_HANDLE_ENV, d->drv_d_func()->hEnv, &errorCode);
if (errorCodes && errorCode != 0) {
*errorCodes << QString::number(errorCode);
errorCode = 0;
}
if (!error.isEmpty())
error += u' ';
error += qWarnDB2Handle(SQL_HANDLE_DBC, d->drv_d_func()->hDbc, &errorCode);
if (errorCodes && errorCode != 0) {
*errorCodes << QString::number(errorCode);
errorCode = 0;
}
QString error = qDB2Warn(d->drv_d_func());
if (!error.isEmpty())
error += u' ';
error += qWarnDB2Handle(SQL_HANDLE_STMT, d->hStmt, &errorCode);
@ -188,34 +177,20 @@ static QString qDB2Warn(const QDB2ResultPrivate* d, QStringList *errorCodes = nu
return error;
}
static void qSqlWarning(const QString& message, const QDB2DriverPrivate* d)
template <typename T>
static void qSqlWarning(const QString &message, const T *d)
{
qWarning("%s\tError: %s", message.toLocal8Bit().constData(),
qDB2Warn(d).toLocal8Bit().constData());
}
static void qSqlWarning(const QString& message, const QDB2ResultPrivate* d)
{
qWarning("%s\tError: %s", message.toLocal8Bit().constData(),
qDB2Warn(d).toLocal8Bit().constData());
}
static QSqlError qMakeError(const QString& err, QSqlError::ErrorType type,
const QDB2DriverPrivate* p)
template <typename T>
static QSqlError qMakeError(const QString &err, QSqlError::ErrorType type,
const T *p)
{
QStringList errorCodes;
const QString error = qDB2Warn(p, &errorCodes);
return QSqlError(QStringLiteral("QDB2: ") + err, error, type,
errorCodes.join(u';'));
}
static QSqlError qMakeError(const QString& err, QSqlError::ErrorType type,
const QDB2ResultPrivate* p)
{
QStringList errorCodes;
const QString error = qDB2Warn(p, &errorCodes);
return QSqlError(QStringLiteral("QDB2: ") + err, error, type,
errorCodes.join(u';'));
return QSqlError("QDB2: "_L1 + err, error, type, errorCodes.join(u';'));
}
static QMetaType qDecodeDB2Type(SQLSMALLINT sqltype)

View File

@ -329,16 +329,10 @@ static void qSqlWarning(const QString &message, T &&val)
qCWarning(lcOdbc) << message << "\tError:" << addMsg;
}
template <typename T>
static QSqlError qMakeError(const QString &err,
QSqlError::ErrorType type,
const QODBCResultPrivate *p)
{
return errorFromDiagRecords(err, type, qODBCWarn(p));
}
static QSqlError qMakeError(const QString &err,
QSqlError::ErrorType type,
const QODBCDriverPrivate *p)
const T *p)
{
return errorFromDiagRecords(err, type, qODBCWarn(p));
}