From 5193c14536fafc57c860e9e234e21ddc29d5b6b0 Mon Sep 17 00:00:00 2001 From: Israel Lins Albuquerque Date: Mon, 4 Nov 2013 19:45:28 -0200 Subject: fix parsing of bound SQL statements for PostgreSQL PostgreSQL allows bound variables inside square braces. Task-number: QTBUG-34541 Change-Id: I4f069b3f1078d4cdf172fbac9e0d7d23d20d167a Reviewed-by: Mark Brand --- tests/auto/sql/kernel/qsqlresult/qsqlresult.pro | 2 +- tests/auto/sql/kernel/qsqlresult/testsqldriver.h | 9 +++++++++ tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp | 20 ++++++++++++++++---- 3 files changed, 26 insertions(+), 5 deletions(-) (limited to 'tests') diff --git a/tests/auto/sql/kernel/qsqlresult/qsqlresult.pro b/tests/auto/sql/kernel/qsqlresult/qsqlresult.pro index ef6c7a7e09..114327effb 100644 --- a/tests/auto/sql/kernel/qsqlresult/qsqlresult.pro +++ b/tests/auto/sql/kernel/qsqlresult/qsqlresult.pro @@ -1,7 +1,7 @@ TARGET = tst_qsqlresult CONFIG += testcase -QT = core sql testlib +QT = core core-private sql sql-private testlib SOURCES += tst_qsqlresult.cpp HEADERS += testsqldriver.h diff --git a/tests/auto/sql/kernel/qsqlresult/testsqldriver.h b/tests/auto/sql/kernel/qsqlresult/testsqldriver.h index 9d435a0f7c..eda0658b41 100644 --- a/tests/auto/sql/kernel/qsqlresult/testsqldriver.h +++ b/tests/auto/sql/kernel/qsqlresult/testsqldriver.h @@ -45,6 +45,7 @@ #include #include #include +#include class TestSqlDriverResult : public QSqlResult { @@ -77,6 +78,8 @@ protected: class TestSqlDriver : public QSqlDriver { + Q_DECLARE_PRIVATE(QSqlDriver) + public: TestSqlDriver() {} ~TestSqlDriver() {} @@ -96,6 +99,12 @@ public: int /* port */, const QString & /* options */) { return false; } void close() {} + QSqlDriverPrivate::DBMSType dbmsType() const + { + Q_D(const QSqlDriver); + return d->dbmsType; + } + QSqlResult *createResult() const { return new TestSqlDriverResult(this); } }; diff --git a/tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp b/tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp index ba6b4d1fbf..2462fab879 100644 --- a/tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp +++ b/tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp @@ -79,18 +79,30 @@ void tst_QSqlResult::parseOfBoundValues() QVERIFY(result.savePrepare("SELECT :1 AS ':2'")); QCOMPARE(result.boundValues().count(), 1); QVERIFY(result.savePrepare("SELECT :1 AS [:2]")); - QCOMPARE(result.boundValues().count(), 1); + if (testDriver.dbmsType() == QSqlDriverPrivate::PostgreSQL) + QCOMPARE(result.boundValues().count(), 2); + else + QCOMPARE(result.boundValues().count(), 1); QVERIFY(result.savePrepare("SELECT :1 AS [:2]]]")); - QCOMPARE(result.boundValues().count(), 1); + if (testDriver.dbmsType() == QSqlDriverPrivate::PostgreSQL) + QCOMPARE(result.boundValues().count(), 2); + else + QCOMPARE(result.boundValues().count(), 1); QVERIFY(result.savePrepare("SELECT :1 AS [:2]]]]]")); - QCOMPARE(result.boundValues().count(), 1); + if (testDriver.dbmsType() == QSqlDriverPrivate::PostgreSQL) + QCOMPARE(result.boundValues().count(), 2); + else + QCOMPARE(result.boundValues().count(), 1); QVERIFY(result.savePrepare("SELECT ? AS \"?\"")); QCOMPARE(result.boundValues().count(), 1); QVERIFY(result.savePrepare("SELECT ? AS '?'")); QCOMPARE(result.boundValues().count(), 1); QVERIFY(result.savePrepare("SELECT ? AS [?]")); - QCOMPARE(result.boundValues().count(), 1); + if (testDriver.dbmsType() == QSqlDriverPrivate::PostgreSQL) + QCOMPARE(result.boundValues().count(), 2); + else + QCOMPARE(result.boundValues().count(), 1); QVERIFY(result.savePrepare("SELECT ? AS \"'?\"")); QCOMPARE(result.boundValues().count(), 1); -- cgit v1.2.3