summaryrefslogtreecommitdiffstats
path: root/tests/auto/sql
diff options
context:
space:
mode:
authorHonglei Zhang <honglei.zhang@nokia.com>2011-11-18 10:50:07 +0200
committerQt by Nokia <qt-info@nokia.com>2011-11-23 08:36:14 +0100
commit1d3cfdbfa18585901c214a035d270baacc61048e (patch)
treef1e4ec035e9adae782491cf8d92d59c19e0d11b1 /tests/auto/sql
parentd1e7294cd2c99a0de5bb838cc6acd106ec52f76e (diff)
SQLite support only one statement at a time
SQLite driver support only one statement at a time. This fix makes the exec and prepare call failed if more than one statements are given. This is bug fix for QTBUG-21884. Also the behaviour is documented in the API specification. Task-number: QTBUG-21884 Change-Id: If1e25a0dd9f9ee38961ef478fc7909f6b05e360a Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
Diffstat (limited to 'tests/auto/sql')
-rw-r--r--tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
index a88a26d24d..df3a4dd95e 100644
--- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
+++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
@@ -213,6 +213,8 @@ private slots:
void QTBUG_5765();
void QTBUG_14132_data() { generic_data("QOCI"); }
void QTBUG_14132();
+ void QTBUG_21884_data() { generic_data("QSQLITE"); }
+ void QTBUG_21884();
void sqlite_constraint_data() { generic_data("QSQLITE"); }
void sqlite_constraint();
@@ -323,6 +325,7 @@ void tst_QSqlQuery::dropTestTables( QSqlDatabase db )
<< qTableName("bug6421", __FILE__).toUpper()
<< qTableName("bug5765", __FILE__)
<< qTableName("bug6852", __FILE__)
+ << qTableName("bug21884", __FILE__)
<< qTableName( "qtest_lockedtable", __FILE__ )
<< qTableName( "Planet", __FILE__ )
<< qTableName( "task_250026", __FILE__ )
@@ -3083,6 +3086,50 @@ void tst_QSqlQuery::QTBUG_5765()
QCOMPARE(q.value(0).toInt(), 123);
}
+/**
+* This test case tests multiple statements in one execution.
+* Sqlite driver doesn't support multiple statement at one time.
+* If more than one statement is given, the exec or prepare function
+* return failure to the client.
+*/
+void tst_QSqlQuery::QTBUG_21884()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ QSqlQuery q(db);
+
+ QStringList stList;
+ QString tableName(qTableName("bug21884", __FILE__ ));
+ stList << "create table " + tableName + "(id integer primary key, note string)";
+ stList << "select * from " + tableName + ";";
+ stList << "select * from " + tableName + "; \t\n\r";
+ stList << "drop table " + tableName;
+
+
+ foreach (const QString& st, stList) {
+ QVERIFY_SQL(q, exec(st));
+ }
+
+ foreach (const QString& st, stList) {
+ QVERIFY_SQL(q, prepare(st));
+ QVERIFY_SQL(q, exec());
+ }
+
+ stList.clear();
+ stList << "create table " + tableName + "(id integer primary key); select * from " + tableName;
+ stList << "create table " + tableName + "(id integer primary key); syntax error!;";
+ stList << "create table " + tableName + "(id integer primary key);;";
+ stList << "create table " + tableName + "(id integer primary key);\'\"\a\b\b\v";
+
+ foreach (const QString&st , stList) {
+ QVERIFY2(!q.prepare(st), qPrintable(QString("the statement is expected to fail! ") + st));
+ QVERIFY2(!q.exec(st), qPrintable(QString("the statement is expected to fail! ") + st));
+ }
+}
+
+
void tst_QSqlQuery::oraOCINumber()
{
QFETCH( QString, dbName );