summaryrefslogtreecommitdiffstats
path: root/src/sql
diff options
context:
space:
mode:
authorAndy Shaw <andy.shaw@qt.io>2020-06-11 10:49:50 +0200
committerAndy Shaw <andy.shaw@qt.io>2020-06-22 06:54:16 +0200
commit8ba9d2e0220777bc1a2322eeece7fa9a5c55a96d (patch)
tree9231f5edac1f2a23c9a4b3537ab2d6e22cf5421b /src/sql
parent590ac717a2c073292027111d5c99d68fb17b160c (diff)
Change boundValues() to return a QVariantList
This enables the order of boundValues to be consistent as with a QMap it could have been reordered which can be a problem for positional bindings. [ChangeLog][QtSQL] Changed signature of QSqlQuery::boundValues() to return a QVariantList Fixes: QTBUG-51609 Change-Id: I1c80fa8522fa7352723420b6fc9ec466406315fb Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'src/sql')
-rw-r--r--src/sql/doc/snippets/sqldatabase/sqldatabase.cpp18
-rw-r--r--src/sql/doc/src/qt6-changes.qdoc66
-rw-r--r--src/sql/kernel/qsqlquery.cpp25
-rw-r--r--src/sql/kernel/qsqlquery.h6
4 files changed, 83 insertions, 32 deletions
diff --git a/src/sql/doc/snippets/sqldatabase/sqldatabase.cpp b/src/sql/doc/snippets/sqldatabase/sqldatabase.cpp
index c28e750b16..001e2ba3b2 100644
--- a/src/sql/doc/snippets/sqldatabase/sqldatabase.cpp
+++ b/src/sql/doc/snippets/sqldatabase/sqldatabase.cpp
@@ -50,7 +50,6 @@
#include <QCoreApplication>
#include <QtSql>
-#include <QMap>
#include <iostream>
using namespace std;
@@ -202,23 +201,12 @@ void QSqlQuery_snippets()
QSqlQuery query;
{
- // examine with named binding
+ // examine with named or positional binding
//! [14]
- QMap<QString, QVariant> sqlIterator(query.boundValues());
- for (auto i = sqlIterator.begin(); i != sqlIterator.end(); ++i) {
- cout << i.key().toUtf8().data() << ": "
- << i.value().toString().toUtf8().data() << "\n";
- }
-//! [14]
- }
-
- {
- // examine with positional binding
-//! [15]
- QList<QVariant> list = query.boundValues().values();
+ QVariantList list = query.boundValues();
for (int i = 0; i < list.size(); ++i)
cout << i << ": " << list.at(i).toString().toUtf8().data() << "\n";
-//! [15]
+//! [14]
}
}
diff --git a/src/sql/doc/src/qt6-changes.qdoc b/src/sql/doc/src/qt6-changes.qdoc
new file mode 100644
index 0000000000..4bde13e0ed
--- /dev/null
+++ b/src/sql/doc/src/qt6-changes.qdoc
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Free Documentation License Usage
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of
+** this file. Please review the following information to ensure
+** the GNU Free Documentation License version 1.3 requirements
+** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+ \page qtsql-changes-qt6.html
+ \title Porting to Qt 6 - Qt Sql
+
+ Qt 6 is a result of the conscious effort to make the framework more
+ efficient and easy to use.
+
+ We try to maintain binary and source compatibility for all the public
+ APIs in each release. But some changes were inevitable in an effort to
+ make Qt a better framework.
+
+ In this topic we summarize those changes in Qt Sql, and provide guidance
+ to handle them.
+
+ \section1 QSqlQuery
+
+ \section2 boundValues() Signature
+
+ The return type for boundValues() has been changed from QMap<QString, QVariant>
+ to a QVariantList. The order can be relied upon so it will be in the order of the
+ binding in the prepared query. Change code like the following:
+
+ \code
+ QMap<QString, QVariant> values = boundValues();
+ int id = values[":id"].value().toInt();
+ \endcode
+
+ \code
+ QList<QVariant> values = boundValues().values();
+ int id = values.at(0).toInt();
+ \endcode
+
+ to:
+
+ \code
+ QList<QVariant> values = boundValues().values();
+ int id = values.at(0).toInt();
+ \endcode
+*/
diff --git a/src/sql/kernel/qsqlquery.cpp b/src/sql/kernel/qsqlquery.cpp
index 98e65b019c..1e848f4168 100644
--- a/src/sql/kernel/qsqlquery.cpp
+++ b/src/sql/kernel/qsqlquery.cpp
@@ -180,7 +180,7 @@ QSqlQueryPrivate::~QSqlQueryPrivate()
them in the same query.
You can retrieve the values of all the fields in a single variable
- (a map) using boundValues().
+ using boundValues().
\note Not all SQL operations support binding values. Refer to your database
system's documentation to check their availability.
@@ -1144,27 +1144,24 @@ QVariant QSqlQuery::boundValue(int pos) const
}
/*!
- Returns a map of the bound values.
+ \since 6.0
- With named binding, the bound values can be examined in the
- following ways:
+ Returns a list of bound values.
- \snippet sqldatabase/sqldatabase.cpp 14
+ The order of the list is in binding order, irrespective of whether
+ named or positional binding is used.
- With positional binding, the code becomes:
+ The bound values can be examined in the following way:
- \snippet sqldatabase/sqldatabase.cpp 15
+ \snippet sqldatabase/sqldatabase.cpp 14
\sa boundValue(), bindValue(), addBindValue()
*/
-QMap<QString,QVariant> QSqlQuery::boundValues() const
-{
- QMap<QString,QVariant> map;
- const QVector<QVariant> values(d->sqlResult->boundValues());
- for (int i = 0; i < values.count(); ++i)
- map[d->sqlResult->boundValueName(i)] = values.at(i);
- return map;
+QVariantList QSqlQuery::boundValues() const
+{
+ const QVariantList values(d->sqlResult->boundValues());
+ return values;
}
/*!
diff --git a/src/sql/kernel/qsqlquery.h b/src/sql/kernel/qsqlquery.h
index 3be04c492c..b270441273 100644
--- a/src/sql/kernel/qsqlquery.h
+++ b/src/sql/kernel/qsqlquery.h
@@ -43,18 +43,18 @@
#include <QtSql/qtsqlglobal.h>
#include <QtSql/qsqldatabase.h>
#include <QtCore/qstring.h>
+#include <QtCore/qvariant.h>
QT_BEGIN_NAMESPACE
-class QVariant;
class QSqlDriver;
class QSqlError;
class QSqlResult;
class QSqlRecord;
-template <class Key, class T> class QMap;
class QSqlQueryPrivate;
+
class Q_SQL_EXPORT QSqlQuery
{
public:
@@ -107,7 +107,7 @@ public:
void addBindValue(const QVariant& val, QSql::ParamType type = QSql::In);
QVariant boundValue(const QString& placeholder) const;
QVariant boundValue(int pos) const;
- QMap<QString, QVariant> boundValues() const;
+ QVariantList boundValues() const;
QString executedQuery() const;
QVariant lastInsertId() const;
void finish();