[Libreoffice-commits] core.git: connectivity/qa connectivity/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Sat Nov 24 22:16:12 UTC 2018


 connectivity/qa/connectivity/mysql/mysql.cxx            |   11 +++++++++--
 connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx |    8 +++++++-
 2 files changed, 16 insertions(+), 3 deletions(-)

New commits:
commit 878c36f829fd88cda95ca218a2cf03003f50e53d
Author:     Tamas Bunth <tamas.bunth at collabora.co.uk>
AuthorDate: Fri Nov 23 18:31:37 2018 +0100
Commit:     Tamás Bunth <btomi96 at gmail.com>
CommitDate: Sat Nov 24 23:15:51 2018 +0100

    mysqlc: next() should move cursor from Last
    
    XResultSet::next() should move cursor when called while cursor is on the
    last position. It is not documented, but older versions of the mysqlc
    extension are implemented that way. The cursor goes to the so called
    afterlast position.
    
    Even so, the next() call on the last position should return false.
    
    Change-Id: I0fd145c920077151364a6a8c12e05290496b99c8
    Reviewed-on: https://gerrit.libreoffice.org/63895
    Tested-by: Jenkins
    Reviewed-by: Tamás Bunth <btomi96 at gmail.com>

diff --git a/connectivity/qa/connectivity/mysql/mysql.cxx b/connectivity/qa/connectivity/mysql/mysql.cxx
index 44488848b5d6..16172439df0f 100644
--- a/connectivity/qa/connectivity/mysql/mysql.cxx
+++ b/connectivity/qa/connectivity/mysql/mysql.cxx
@@ -173,9 +173,16 @@ void MysqlTestDriver::testIntegerInsertAndQuery()
         CPPUNIT_ASSERT_MESSAGE("not enough result after query", hasRow);
         CPPUNIT_ASSERT_EQUAL(i, xRow->getLong(1)); // first and only column
     }
-    bool hasRow = xResultSet->next();
-    // no more rows
+    CPPUNIT_ASSERT_MESSAGE("Cursor is not on last position.",
+                           xResultSet->isLast()); // cursor is on last position
+    CPPUNIT_ASSERT_EQUAL(ROW_COUNT, xResultSet->getRow()); // which is the last position
+
+    bool hasRow = xResultSet->next(); // go to afterlast
+    // no more rows, next should return false
     CPPUNIT_ASSERT_MESSAGE("next returns true after last row", !hasRow);
+    // cursor should be in afterlast position
+    CPPUNIT_ASSERT_EQUAL(ROW_COUNT + 1, xResultSet->getRow());
+    CPPUNIT_ASSERT_MESSAGE("Cursor is not on after-last position.", xResultSet->isAfterLast());
 
     nUpdateCount = xStatement->executeUpdate("DROP TABLE myTestTable");
     CPPUNIT_ASSERT_EQUAL(0, nUpdateCount); // it's a DDL statement
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx b/connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx
index f0f83e42c3a7..5ee7aa943206 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx
@@ -691,8 +691,14 @@ sal_Bool SAL_CALL OResultSet::next()
     MutexGuard aGuard(m_aMutex);
     checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
     ensureResultFetched();
-    if (m_nRowPosition + 1 >= m_nRowCount)
+    if (m_nRowPosition + 1 > m_nRowCount) // afterlast
         return false;
+    if (m_nRowPosition + 1 == m_nRowCount) // last
+    {
+        // return false but take it to afterlast anyway
+        ++m_nRowPosition;
+        return false;
+    }
     ++m_nRowPosition;
     return true;
 }


More information about the Libreoffice-commits mailing list