diff --git a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp index 6e6937d85d3..34a823bb65a 100644 --- a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp +++ b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp @@ -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);