IGNITE-8838: Fixed ODBC issue with two inserts without closing cursor.

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

Branch: refs/heads/ignite-8446
Commit: 909b644b732a3c5ecf43e8093d4bbdd396cae8dc
Parents: 3fff8a8
Author: Igor Sapego <igors...@gmail.com>
Authored: Wed Jun 20 20:11:06 2018 +0300
Committer: Igor Sapego <igors...@gmail.com>
Committed: Wed Jun 20 20:11:06 2018 +0300

----------------------------------------------------------------------
 .../cpp/core-test/src/compute_test.cpp          |  4 +--
 .../cpp/odbc-test/src/queries_test.cpp          | 35 ++++++++++++++++++++
 .../cpp/odbc-test/src/sql_types_test.cpp        |  4 +--
 .../src/sql_value_expressions_test.cpp          |  2 +-
 modules/platforms/cpp/odbc/src/message.cpp      |  2 +-
 .../cpp/odbc/src/query/batch_query.cpp          |  6 +---
 .../platforms/cpp/odbc/src/query/data_query.cpp |  6 +---
 .../cpp/odbc/src/query/type_info_query.cpp      |  2 +-
 8 files changed, 44 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/909b644b/modules/platforms/cpp/core-test/src/compute_test.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core-test/src/compute_test.cpp 
b/modules/platforms/cpp/core-test/src/compute_test.cpp
index 1fd7670..57a55ae 100644
--- a/modules/platforms/cpp/core-test/src/compute_test.cpp
+++ b/modules/platforms/cpp/core-test/src/compute_test.cpp
@@ -513,7 +513,7 @@ BOOST_AUTO_TEST_CASE(IgniteBroadcastLocalSync)
 {
     Compute compute = node.GetCompute();
 
-    BOOST_CHECKPOINT("Broadcasting");;
+    BOOST_CHECKPOINT("Broadcasting");
     std::vector<std::string> res = compute.Broadcast<std::string>(Func2(8, 5));
 
     BOOST_CHECK_EQUAL(res.size(), 1);
@@ -524,7 +524,7 @@ BOOST_AUTO_TEST_CASE(IgniteBroadcastLocalAsync)
 {
     Compute compute = node.GetCompute();
 
-    BOOST_CHECKPOINT("Broadcasting");;
+    BOOST_CHECKPOINT("Broadcasting");
     Future< std::vector<std::string> > res = 
compute.BroadcastAsync<std::string>(Func2(312, 245));
 
     BOOST_CHECK(!res.IsReady());

http://git-wip-us.apache.org/repos/asf/ignite/blob/909b644b/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 142e277..7561e32 100644
--- a/modules/platforms/cpp/odbc-test/src/queries_test.cpp
+++ b/modules/platforms/cpp/odbc-test/src/queries_test.cpp
@@ -2024,4 +2024,39 @@ BOOST_AUTO_TEST_CASE(TestQueryAndConnectionTimeoutBoth)
     InsertTestBatch(11, 20, 9);
 }
 
+BOOST_AUTO_TEST_CASE(TestSeveralInsertsWithoutClosing)
+{
+    Connect("DRIVER={Apache Ignite};ADDRESS=127.0.0.1:11110;SCHEMA=cache");
+    
+    SQLCHAR request[] = "INSERT INTO TestType(_key, i32Field) VALUES(?, ?)";
+
+    SQLRETURN ret = SQLPrepare(stmt, request, SQL_NTS);
+
+    if (!SQL_SUCCEEDED(ret))
+        BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+    int64_t key = 0;
+    ret = SQLBindParameter(stmt, 1, SQL_PARAM_INPUT, SQL_C_SBIGINT, 
SQL_BIGINT, 0, 0, &key, 0, 0);
+
+    if (!SQL_SUCCEEDED(ret))
+        BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+    int32_t data = 0;
+    ret = SQLBindParameter(stmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 
0, 0, &data, 0, 0);
+
+    if (!SQL_SUCCEEDED(ret))
+        BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+    for (int32_t i = 0; i < 10; ++i)
+    {
+        key = i;
+        data = i * 10;
+
+        ret = SQLExecute(stmt);
+
+        if (!SQL_SUCCEEDED(ret))
+            BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+    }
+}
+
 BOOST_AUTO_TEST_SUITE_END()

http://git-wip-us.apache.org/repos/asf/ignite/blob/909b644b/modules/platforms/cpp/odbc-test/src/sql_types_test.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc-test/src/sql_types_test.cpp 
b/modules/platforms/cpp/odbc-test/src/sql_types_test.cpp
index 404fc6e..60d9d7e 100644
--- a/modules/platforms/cpp/odbc-test/src/sql_types_test.cpp
+++ b/modules/platforms/cpp/odbc-test/src/sql_types_test.cpp
@@ -128,7 +128,7 @@ BOOST_AUTO_TEST_CASE(TestByteArrayParamInsert)
 
     const int8_t data[] = { 'A','B','C','D','E','F','G','H','I','J' };
     std::vector<int8_t> paramData(data, data + sizeof(data) / sizeof(data[0]));
-    SQLCHAR request[] = "INSERT INTO TestType(_key, i8ArrayField) VALUES(?, 
?)";;
+    SQLCHAR request[] = "INSERT INTO TestType(_key, i8ArrayField) VALUES(?, 
?)";
 
     ret = SQLPrepare(stmt, request, SQL_NTS);
 
@@ -161,7 +161,7 @@ BOOST_AUTO_TEST_CASE(TestByteParamInsert)
 {
     SQLRETURN ret;
 
-    SQLCHAR request[] = "INSERT INTO TestType(_key, i8Field) VALUES(?, ?)";;
+    SQLCHAR request[] = "INSERT INTO TestType(_key, i8Field) VALUES(?, ?)";
 
     ret = SQLPrepare(stmt, request, SQL_NTS);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/909b644b/modules/platforms/cpp/odbc-test/src/sql_value_expressions_test.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc-test/src/sql_value_expressions_test.cpp 
b/modules/platforms/cpp/odbc-test/src/sql_value_expressions_test.cpp
index a115dab..fd12688 100644
--- a/modules/platforms/cpp/odbc-test/src/sql_value_expressions_test.cpp
+++ b/modules/platforms/cpp/odbc-test/src/sql_value_expressions_test.cpp
@@ -51,7 +51,7 @@ BOOST_AUTO_TEST_CASE(TestCase)
                 "THEN (i32Field / 2) "
                 "ELSE (i32Field / 3) "
             "END "
-        "FROM TestType", in.i32Field / 3);;
+        "FROM TestType", in.i32Field / 3);
 }
 
 BOOST_AUTO_TEST_CASE(TestCast)

http://git-wip-us.apache.org/repos/asf/ignite/blob/909b644b/modules/platforms/cpp/odbc/src/message.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/src/message.cpp 
b/modules/platforms/cpp/odbc/src/message.cpp
index d78b28d..53d429b 100644
--- a/modules/platforms/cpp/odbc/src/message.cpp
+++ b/modules/platforms/cpp/odbc/src/message.cpp
@@ -274,7 +274,7 @@ namespace ignite
             if (status == ResponseStatus::SUCCESS)
                 ReadOnSuccess(reader, ver);
             else
-                utility::ReadString(reader, error);;
+                utility::ReadString(reader, error);
         }
 
         void Response::ReadOnSuccess(impl::binary::BinaryReaderImpl&, const 
ProtocolVersion&)

http://git-wip-us.apache.org/repos/asf/ignite/blob/909b644b/modules/platforms/cpp/odbc/src/query/batch_query.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/src/query/batch_query.cpp 
b/modules/platforms/cpp/odbc/src/query/batch_query.cpp
index 235daf8..8dada3c 100644
--- a/modules/platforms/cpp/odbc/src/query/batch_query.cpp
+++ b/modules/platforms/cpp/odbc/src/query/batch_query.cpp
@@ -50,11 +50,7 @@ namespace ignite
             SqlResult::Type BatchQuery::Execute()
             {
                 if (executed)
-                {
-                    diag.AddStatusRecord(SqlState::SHY010_SEQUENCE_ERROR, 
"Query cursor is in open state already.");
-
-                    return SqlResult::AI_ERROR;
-                }
+                    Close();
 
                 int32_t maxPageSize = 
connection.GetConfiguration().GetPageSize();
                 int32_t rowNum = params.GetParamSetSize();

http://git-wip-us.apache.org/repos/asf/ignite/blob/909b644b/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 8b80a29..6974c7f 100644
--- a/modules/platforms/cpp/odbc/src/query/data_query.cpp
+++ b/modules/platforms/cpp/odbc/src/query/data_query.cpp
@@ -52,11 +52,7 @@ namespace ignite
             SqlResult::Type DataQuery::Execute()
             {
                 if (cursor.get())
-                {
-                    diag.AddStatusRecord(SqlState::SHY010_SEQUENCE_ERROR, 
"Query cursor is in open state already.");
-
-                    return SqlResult::AI_ERROR;
-                }
+                    InternalClose();
 
                 return MakeRequestExecute();
             }

http://git-wip-us.apache.org/repos/asf/ignite/blob/909b644b/modules/platforms/cpp/odbc/src/query/type_info_query.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/src/query/type_info_query.cpp 
b/modules/platforms/cpp/odbc/src/query/type_info_query.cpp
index 939458a..c45779e 100644
--- a/modules/platforms/cpp/odbc/src/query/type_info_query.cpp
+++ b/modules/platforms/cpp/odbc/src/query/type_info_query.cpp
@@ -394,7 +394,7 @@ namespace ignite
 
             bool TypeInfoQuery::DataAvailable() const
             {
-                return cursor != types.end();;
+                return cursor != types.end();
             }
 
             int64_t TypeInfoQuery::AffectedRows() const

Reply via email to