summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIsrael Lins Albuquerque <israel@proabakus.com.br>2014-03-26 12:45:41 -0300
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-29 08:46:00 +0100
commit075c876f9afd434ccf86664bf978287915468580 (patch)
treebf5c32e7502a777fd18d989dcd1a374ccbc8f36c
parentd4320916227a16590e4ba7eb71004eda4301e26f (diff)
[QtSql]QIBASE]add support for prepared queries in numRowsAffected
Prepared queries need to be handled as procedures. Change-Id: I4b4d7743fe45c416ca83ceb942aa48d79731f2f8 Reviewed-by: Mark Brand <mabrand@mabrand.nl>
-rw-r--r--src/sql/drivers/ibase/qsql_ibase.cpp14
-rw-r--r--tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp12
2 files changed, 24 insertions, 2 deletions
diff --git a/src/sql/drivers/ibase/qsql_ibase.cpp b/src/sql/drivers/ibase/qsql_ibase.cpp
index d50078b5ff..cc26bfe7e8 100644
--- a/src/sql/drivers/ibase/qsql_ibase.cpp
+++ b/src/sql/drivers/ibase/qsql_ibase.cpp
@@ -1313,6 +1313,7 @@ int QIBaseResult::numRowsAffected()
{
static char acCountInfo[] = {isc_info_sql_records};
char cCountType;
+ bool bIsProcedure = false;
switch (d->queryType) {
case isc_info_sql_stmt_select:
@@ -1327,6 +1328,9 @@ int QIBaseResult::numRowsAffected()
case isc_info_sql_stmt_insert:
cCountType = isc_info_req_insert_count;
break;
+ case isc_info_sql_stmt_exec_procedure:
+ bIsProcedure = true; // will sum all changes
+ break;
default:
qWarning() << "numRowsAffected: Unknown statement type (" << d->queryType << ")";
return -1;
@@ -1344,8 +1348,14 @@ int QIBaseResult::numRowsAffected()
pcBuf += 2;
int iValue = isc_vax_integer (pcBuf, sLength);
pcBuf += sLength;
-
- if (cType == cCountType) {
+ if (bIsProcedure) {
+ if (cType == isc_info_req_insert_count || cType == isc_info_req_update_count
+ || cType == isc_info_req_delete_count) {
+ if (iResult == -1)
+ iResult = 0;
+ iResult += iValue;
+ }
+ } else if (cType == cCountType) {
iResult = iValue;
break;
}
diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
index 5f1eb99524..a497fac79a 100644
--- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
+++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
@@ -1069,6 +1069,18 @@ void tst_QSqlQuery::numRowsAffected()
QCOMPARE( q.numRowsAffected(), i );
QCOMPARE( q.numRowsAffected(), i ); // yes, we check twice
+ QVERIFY_SQL( q, prepare( "update " + qtest + " set id = id + :newid" ) );
+ q.bindValue(":newid", 100);
+ QVERIFY_SQL( q, exec() );
+ QCOMPARE( q.numRowsAffected(), i );
+ QCOMPARE( q.numRowsAffected(), i ); // yes, we check twice
+
+ QVERIFY_SQL( q, prepare( "update " + qtest + " set id = id + :newid where NOT(1 = 1)" ) );
+ q.bindValue(":newid", 100);
+ QVERIFY_SQL( q, exec() );
+ QCOMPARE( q.numRowsAffected(), 0 );
+ QCOMPARE( q.numRowsAffected(), 0 ); // yes, we check twice
+
QVERIFY_SQL( q, exec( "insert into " + qtest + " values (42000, 'homer', 'marge')" ) );
QCOMPARE( q.numRowsAffected(), 1 );
QCOMPARE( q.numRowsAffected(), 1 ); // yes, we check twice