SQL/ODBC: Remove code duplication - merge SQLFetch/SQLFetchScroll

... into an own function instead doing the check if fetchScroll is
available in every function.

Change-Id: I8c8a1c8693f667ddf89a660b733e31505427073a
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
(cherry picked from commit 16c27a83f0c9c6f53578dd56024719a709cafcb0)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Christian Ehrlicher 2024-01-21 17:59:31 +01:00 committed by Qt Cherry-pick Bot
parent 0c4dfd15b9
commit e068750afd

View File

@ -115,6 +115,7 @@ public:
DefaultCase defaultCase() const;
QString adjustCase(const QString&) const;
QChar quoteChar();
SQLRETURN sqlFetchNext(SQLHANDLE hStmt) const;
private:
bool isQuoteInitialized = false;
QChar quote = u'"';
@ -688,6 +689,13 @@ QChar QODBCDriverPrivate::quoteChar()
return quote;
}
SQLRETURN QODBCDriverPrivate::sqlFetchNext(SQLHANDLE hStmt) const
{
if (hasSQLFetchScroll)
return SQLFetchScroll(hStmt, SQL_FETCH_NEXT, 0);
return SQLFetch(hStmt);
}
static SQLRETURN qt_string_SQLSetConnectAttr(SQLHDBC handle, SQLINTEGER attr, const QString &val)
{
auto encoded = toSQLTCHAR(val);
@ -2352,13 +2360,7 @@ QStringList QODBCDriver::tables(QSql::TableType type) const
if (r != SQL_SUCCESS)
qSqlWarning("QODBCDriver::tables Unable to execute table list"_L1, d);
if (d->hasSQLFetchScroll)
r = SQLFetchScroll(hStmt,
SQL_FETCH_NEXT,
0);
else
r = SQLFetch(hStmt);
r = d->sqlFetchNext(hStmt);
if (r != SQL_SUCCESS && r != SQL_SUCCESS_WITH_INFO && r != SQL_NO_DATA) {
qSqlWarning("QODBCDriver::tables failed to retrieve table/view list: ("_L1
+ QString::number(r) + u':',
@ -2368,13 +2370,7 @@ QStringList QODBCDriver::tables(QSql::TableType type) const
while (r == SQL_SUCCESS) {
tl.append(qGetStringData(hStmt, 2, -1, d->unicode).toString());
if (d->hasSQLFetchScroll)
r = SQLFetchScroll(hStmt,
SQL_FETCH_NEXT,
0);
else
r = SQLFetch(hStmt);
r = d->sqlFetchNext(hStmt);
}
r = SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
@ -2439,12 +2435,7 @@ QSqlIndex QODBCDriver::primaryIndex(const QString& tablename) const
}
}
if (d->hasSQLFetchScroll)
r = SQLFetchScroll(hStmt,
SQL_FETCH_NEXT,
0);
else
r = SQLFetch(hStmt);
r = d->sqlFetchNext(hStmt);
int fakeId = 0;
QString cName, idxName;
@ -2460,13 +2451,7 @@ QSqlIndex QODBCDriver::primaryIndex(const QString& tablename) const
index.append(rec.field(cName));
index.setName(idxName);
if (d->hasSQLFetchScroll)
r = SQLFetchScroll(hStmt,
SQL_FETCH_NEXT,
0);
else
r = SQLFetch(hStmt);
r = d->sqlFetchNext(hStmt);
}
r = SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
if (r!= SQL_SUCCESS)
@ -2511,24 +2496,12 @@ QSqlRecord QODBCDriver::record(const QString& tablename) const
if (r != SQL_SUCCESS)
qSqlWarning("QODBCDriver::record: Unable to execute column list"_L1, d);
if (d->hasSQLFetchScroll)
r = SQLFetchScroll(hStmt,
SQL_FETCH_NEXT,
0);
else
r = SQLFetch(hStmt);
r = d->sqlFetchNext(hStmt);
// Store all fields in a StringList because some drivers can't detail fields in this FETCH loop
while (r == SQL_SUCCESS) {
fil.append(qMakeFieldInfo(hStmt, d));
if (d->hasSQLFetchScroll)
r = SQLFetchScroll(hStmt,
SQL_FETCH_NEXT,
0);
else
r = SQLFetch(hStmt);
r = d->sqlFetchNext(hStmt);
}
r = SQLFreeHandle(SQL_HANDLE_STMT, hStmt);