QSqlResult: remove bad API returning non-const reference
QSqlResult::boundValues is a const member function, but returned a non- const reference to a QList<QVariant>. This is a bad and potentially dangerous API, as callers can modify the list stored in QSqlResult. Move that API into the removed_api translation unit, remove it from Qt 6.6 on and replace it with two suitable overloads where the const version returns a QVariantList by value, and the non-const overload returns a mutable reference. Driver implementations that used to call the const overload to get a mutable reference are now calling the non-const overload instead (those calls are all made in the non-const exec() or equivalent driver implementations). As a drive-by, replace "vector" with "list" in the documentation. Change-Id: I6e4fd8f5749b939cdb609bf5876735e9b30b2b5a Reviewed-by: Marc Mutz <marc.mutz@qt.io> (cherry picked from commit 3f72b0d5fc70d3cf7daa4badccd5a40fc8b0726a) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
1b5b090a5a
commit
d924253c91
@ -9,10 +9,6 @@ QT_USE_NAMESPACE
|
||||
|
||||
#if QT_SQL_REMOVED_SINCE(6, 4)
|
||||
|
||||
// #include <qotherheader.h>
|
||||
// // implement removed functions from qotherheader.h
|
||||
// order sections alphabetically to reduce chances of merge conflicts
|
||||
|
||||
#endif // QT_SQL_REMOVED_SINCE(6, 4)
|
||||
|
||||
#if QT_SQL_REMOVED_SINCE(6, 5)
|
||||
@ -36,8 +32,21 @@ void QSqlTableModel::setQuery(const QSqlQuery &query)
|
||||
|
||||
#endif // QT_CONFIG(sqlmodel)
|
||||
|
||||
#endif // QT_SQL_REMOVED_SINCE(6, 5)
|
||||
|
||||
#if QT_SQL_REMOVED_SINCE(6, 6)
|
||||
|
||||
#include "qsqlresult.h"
|
||||
#include <QtSql/private/qsqlresult_p.h>
|
||||
|
||||
// #include <qotherheader.h>
|
||||
// // implement removed functions from qotherheader.h
|
||||
// order sections alphabetically to reduce chances of merge conflicts
|
||||
|
||||
#endif // QT_SQL_REMOVED_SINCE(6, 5)
|
||||
QList<QVariant> &QSqlResult::boundValues() const
|
||||
{
|
||||
Q_D(const QSqlResult);
|
||||
return const_cast<QSqlResultPrivate *>(d)->values;
|
||||
}
|
||||
|
||||
#endif // QT_SQL_REMOVED_SINCE(6, 6)
|
||||
|
@ -784,17 +784,32 @@ int QSqlResult::boundValueCount() const
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns a vector of the result's bound values for the current
|
||||
Returns a list of the result's bound values for the current
|
||||
record (row).
|
||||
|
||||
\sa boundValueCount()
|
||||
*/
|
||||
QList<QVariant> &QSqlResult::boundValues() const
|
||||
QVariantList QSqlResult::boundValues(QT6_IMPL_NEW_OVERLOAD) const
|
||||
{
|
||||
Q_D(const QSqlResult);
|
||||
return const_cast<QSqlResultPrivate *>(d)->values;
|
||||
return d->values;
|
||||
}
|
||||
|
||||
/*!
|
||||
\overload
|
||||
|
||||
Returns a mutable reference to the list of the result's bound values
|
||||
for the current record (row).
|
||||
|
||||
\sa boundValueCount()
|
||||
*/
|
||||
QVariantList &QSqlResult::boundValues(QT6_IMPL_NEW_OVERLOAD)
|
||||
{
|
||||
Q_D(QSqlResult);
|
||||
return d->values;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
Returns the binding syntax used by prepared queries.
|
||||
*/
|
||||
|
@ -69,8 +69,12 @@ protected:
|
||||
QSql::ParamType bindValueType(const QString& placeholder) const;
|
||||
QSql::ParamType bindValueType(int pos) const;
|
||||
int boundValueCount() const;
|
||||
// ### Qt 7 - don't return a non-const reference from a const function
|
||||
#if QT_SQL_REMOVED_SINCE(6, 6)
|
||||
QList<QVariant> &boundValues() const;
|
||||
#endif
|
||||
QVariantList &boundValues(QT6_DECL_NEW_OVERLOAD);
|
||||
QVariantList boundValues(QT6_DECL_NEW_OVERLOAD) const;
|
||||
|
||||
QString executedQuery() const;
|
||||
QStringList boundValueNames() const;
|
||||
QString boundValueName(int pos) const;
|
||||
|
Loading…
x
Reference in New Issue
Block a user