summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/sql/kernel/qsqlresult.cpp2
-rw-r--r--tests/auto/sql/kernel/kernel.pro1
-rw-r--r--tests/auto/sql/kernel/qsqlresult/qsqlresult.pro9
-rw-r--r--tests/auto/sql/kernel/qsqlresult/testsqldriver.h95
-rw-r--r--tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp72
5 files changed, 177 insertions, 2 deletions
diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp
index 0396e127ec..1259360dd4 100644
--- a/src/sql/kernel/qsqlresult.cpp
+++ b/src/sql/kernel/qsqlresult.cpp
@@ -162,8 +162,6 @@ QString QSqlResultPrivate::positionalToNamedBinding()
for (int i = 0; i < n; ++i) {
QChar ch = sql.at(i);
if (ch == QLatin1Char('?') && !inQuote) {
- // Update the holder position since we are changing the holder name lengths
- holders[count].holderPos = result.size();
result += qFieldSerial(count++);
} else {
if (ch == QLatin1Char('\''))
diff --git a/tests/auto/sql/kernel/kernel.pro b/tests/auto/sql/kernel/kernel.pro
index 74e98c0dde..312f8fcfde 100644
--- a/tests/auto/sql/kernel/kernel.pro
+++ b/tests/auto/sql/kernel/kernel.pro
@@ -8,3 +8,4 @@ SUBDIRS=\
qsqlrecord \
qsqlthread \
qsql \
+ qsqlresult \
diff --git a/tests/auto/sql/kernel/qsqlresult/qsqlresult.pro b/tests/auto/sql/kernel/qsqlresult/qsqlresult.pro
new file mode 100644
index 0000000000..d43b644138
--- /dev/null
+++ b/tests/auto/sql/kernel/qsqlresult/qsqlresult.pro
@@ -0,0 +1,9 @@
+TARGET = tst_qsqlresult
+CONFIG += testcase
+
+QT = core sql testlib
+
+SOURCES += tst_qsqlresult.cpp
+HEADERS += testsqldriver.h
+
+DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/sql/kernel/qsqlresult/testsqldriver.h b/tests/auto/sql/kernel/qsqlresult/testsqldriver.h
new file mode 100644
index 0000000000..bf088354f1
--- /dev/null
+++ b/tests/auto/sql/kernel/qsqlresult/testsqldriver.h
@@ -0,0 +1,95 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef TESTSQLDRIVER_H
+#define TESTSQLDRIVER_H
+
+#include <QtSql/QSqlResult>
+#include <QtSql/QSqlDriver>
+#include <QtSql/QSqlRecord>
+
+class TestSqlDriverResult : public QSqlResult
+{
+public:
+ TestSqlDriverResult(const QSqlDriver *driver)
+ : QSqlResult(driver) {}
+ ~TestSqlDriverResult() {}
+
+ bool savePrepare(const QString& sqlquery)
+ {
+ return QSqlResult::savePrepare(sqlquery);
+ }
+
+protected:
+ QVariant data(int /* index */) { return QVariant(); }
+ bool isNull(int /* index */) { return false; }
+ bool reset(const QString & /* query */) { return false; }
+ bool fetch(int /* index */) { return false; }
+ bool fetchFirst() { return false; }
+ bool fetchLast() { return false; }
+ int size() { return 0; }
+ int numRowsAffected() { return 0; }
+ QSqlRecord record() const { return QSqlRecord(); }
+};
+
+class TestSqlDriver : public QSqlDriver
+{
+public:
+ TestSqlDriver() {}
+ ~TestSqlDriver() {}
+
+ bool hasFeature(DriverFeature f) const {
+ switch (f) {
+ case QSqlDriver::PreparedQueries:
+ case QSqlDriver::NamedPlaceholders:
+ return true;
+ }
+ return false;
+ }
+ bool open(const QString & /* db */, const QString & /* user */,
+ const QString & /* password */, const QString & /* host */,
+ int /* port */, const QString & /* options */)
+ { return false; }
+ void close() {}
+ QSqlResult *createResult() const { return new TestSqlDriverResult(this); }
+};
+
+#endif // TESTSQLDRIVER_H
diff --git a/tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp b/tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp
new file mode 100644
index 0000000000..6f2d0ab941
--- /dev/null
+++ b/tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/QtTest>
+#include <QtSql/QtSql>
+
+#include "testsqldriver.h"
+
+class tst_QSqlResult : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QSqlResult();
+
+private slots:
+ void positionalToNamedBinding();
+
+};
+
+tst_QSqlResult::tst_QSqlResult()
+{
+}
+
+void tst_QSqlResult::positionalToNamedBinding()
+{
+ TestSqlDriver testDriver;
+ TestSqlDriverResult result(&testDriver);
+ QString query("INSERT INTO MYTABLE (ID, NAME, BIRTH) VALUES(?, ?, ?)");
+ QVERIFY(result.savePrepare(query));
+}
+
+QTEST_MAIN( tst_QSqlResult )
+#include "tst_qsqlresult.moc"