From 776c488b6f6a88eb8dacafa992bf61f0167df6a3 Mon Sep 17 00:00:00 2001 From: Israel Lins Date: Thu, 7 Feb 2013 16:18:05 -0300 Subject: QSqlResult: fix parsing of bound SQL statements Parsing for bound SQL parameters now handles identifier quoting using double quotes (") and square brackets ([]). The following has only 1 bound value but previously 2 were detected: SELECT 1 AS "A?b[?']]]de?ghi", ? Task-number: QTBUG-27159 Change-Id: Icfd02187e1126ff3b5ed11df8d4e599f574e61bf Reviewed-by: Mark Brand --- tests/auto/sql/kernel/qsqlresult/testsqldriver.h | 5 ++++ .../auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp | 34 ++++++++++++++++++++++ 2 files changed, 39 insertions(+) (limited to 'tests/auto/sql') diff --git a/tests/auto/sql/kernel/qsqlresult/testsqldriver.h b/tests/auto/sql/kernel/qsqlresult/testsqldriver.h index 720b819839..7040ddf360 100644 --- a/tests/auto/sql/kernel/qsqlresult/testsqldriver.h +++ b/tests/auto/sql/kernel/qsqlresult/testsqldriver.h @@ -58,6 +58,11 @@ public: return QSqlResult::savePrepare(sqlquery); } + QVector boundValues() const + { + return QSqlResult::boundValues(); + } + protected: QVariant data(int /* index */) { return QVariant(); } bool isNull(int /* index */) { return false; } diff --git a/tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp b/tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp index 7e901d4b2c..ba6b4d1fbf 100644 --- a/tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp +++ b/tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp @@ -53,6 +53,7 @@ public: private slots: void positionalToNamedBinding(); + void parseOfBoundValues(); }; @@ -66,6 +67,39 @@ void tst_QSqlResult::positionalToNamedBinding() TestSqlDriverResult result(&testDriver); QString query("INSERT INTO MYTABLE (ID, NAME, BIRTH) VALUES(?, ?, ?)"); QVERIFY(result.savePrepare(query)); + QCOMPARE(result.boundValues().count(), 3); +} + +void tst_QSqlResult::parseOfBoundValues() +{ + TestSqlDriver testDriver; + TestSqlDriverResult result(&testDriver); + QVERIFY(result.savePrepare("SELECT :1 AS \":2\"")); + QCOMPARE(result.boundValues().count(), 1); + QVERIFY(result.savePrepare("SELECT :1 AS ':2'")); + QCOMPARE(result.boundValues().count(), 1); + QVERIFY(result.savePrepare("SELECT :1 AS [:2]")); + QCOMPARE(result.boundValues().count(), 1); + QVERIFY(result.savePrepare("SELECT :1 AS [:2]]]")); + QCOMPARE(result.boundValues().count(), 1); + QVERIFY(result.savePrepare("SELECT :1 AS [:2]]]]]")); + 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); + + 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); + QVERIFY(result.savePrepare("SELECT ? AS [\"?']")); + QCOMPARE(result.boundValues().count(), 1); } QTEST_MAIN( tst_QSqlResult ) -- cgit v1.2.3