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