You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by is...@apache.org on 2018/09/22 13:10:00 UTC

ignite git commit: IGNITE-8930: ODBC cursors closed properly on server side

Repository: ignite
Updated Branches:
  refs/heads/master 1382df19f -> d9f2b2040


IGNITE-8930: ODBC cursors closed properly on server side

This closes #4810


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/d9f2b204
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/d9f2b204
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/d9f2b204

Branch: refs/heads/master
Commit: d9f2b204099effe9fd5a4d8809e91fbda826b062
Parents: 1382df1
Author: Igor Sapego <is...@apache.org>
Authored: Sat Sep 22 16:09:08 2018 +0300
Committer: Igor Sapego <is...@apache.org>
Committed: Sat Sep 22 16:09:08 2018 +0300

----------------------------------------------------------------------
 .../cpp/odbc-test/src/queries_test.cpp          | 44 ++++++++++++++++++++
 .../platforms/cpp/odbc/src/query/data_query.cpp | 10 +----
 2 files changed, 46 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/d9f2b204/modules/platforms/cpp/odbc-test/src/queries_test.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc-test/src/queries_test.cpp b/modules/platforms/cpp/odbc-test/src/queries_test.cpp
index fb4557f..471f7d7 100644
--- a/modules/platforms/cpp/odbc-test/src/queries_test.cpp
+++ b/modules/platforms/cpp/odbc-test/src/queries_test.cpp
@@ -2081,6 +2081,50 @@ BOOST_AUTO_TEST_CASE(TestManyCursors)
     }
 }
 
+BOOST_AUTO_TEST_CASE(TestManyCursors2)
+{
+    Connect("DRIVER={Apache Ignite};ADDRESS=127.0.0.1:11110;SCHEMA=cache");
+
+    SQLRETURN ret = SQLFreeHandle(SQL_HANDLE_STMT, stmt);
+
+    if (!SQL_SUCCEEDED(ret))
+        BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+    for (int32_t i = 0; i < 1000; ++i)
+    {
+        ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
+
+        if (!SQL_SUCCEEDED(ret))
+            BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+        SQLCHAR req[] = "SELECT 1";
+
+        ret = SQLExecDirect(stmt, req, SQL_NTS);
+
+        if (!SQL_SUCCEEDED(ret))
+            BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+        int32_t res = 0;
+        SQLLEN resLen = 0;
+        ret = SQLBindCol(stmt, 1, SQL_INTEGER, &res, 0, &resLen);
+
+        if (!SQL_SUCCEEDED(ret))
+            BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+        ret = SQLFetch(stmt);
+
+        if (!SQL_SUCCEEDED(ret))
+            BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+        BOOST_REQUIRE_EQUAL(res, 1);
+
+        ret = SQLFreeHandle(SQL_HANDLE_STMT, stmt);
+
+        if (!SQL_SUCCEEDED(ret))
+            BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+    }
+}
+
 BOOST_AUTO_TEST_CASE(TestManyCursorsTwoSelects1)
 {
     Connect("DRIVER={Apache Ignite};ADDRESS=127.0.0.1:11110;SCHEMA=cache");

http://git-wip-us.apache.org/repos/asf/ignite/blob/d9f2b204/modules/platforms/cpp/odbc/src/query/data_query.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/src/query/data_query.cpp b/modules/platforms/cpp/odbc/src/query/data_query.cpp
index dbaa848..4ba354d 100644
--- a/modules/platforms/cpp/odbc/src/query/data_query.cpp
+++ b/modules/platforms/cpp/odbc/src/query/data_query.cpp
@@ -204,19 +204,13 @@ namespace ignite
 
             bool DataQuery::IsClosedRemotely() const
             {
-                for (size_t i = rowsAffectedIdx + 1; i < rowsAffected.size(); ++i)
+                for (size_t i = 0; i < rowsAffected.size(); ++i)
                 {
                     if (rowsAffected[i] < 0)
                         return false;
                 }
 
-                if (rowsAffected[rowsAffectedIdx] >= 0)
-                    return true;
-
-                if (cachedNextPage.get())
-                    return cachedNextPage->IsLast();
-
-                return cursor->IsClosedRemotely();
+                return true;
             }
 
             SqlResult::Type DataQuery::MakeRequestExecute()