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 2020/12/02 16:39:29 UTC
[ignite] branch master updated: IGNITE-13793: Implement SQLRowCount
for SELECT
This is an automated email from the ASF dual-hosted git repository.
isapego pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new 652f37b IGNITE-13793: Implement SQLRowCount for SELECT
652f37b is described below
commit 652f37b1709d6ef430eb490b179ecfae2f3d95dd
Author: Igor Sapego <is...@apache.org>
AuthorDate: Wed Dec 2 19:38:30 2020 +0300
IGNITE-13793: Implement SQLRowCount for SELECT
This closes #8525
---
.../platforms/cpp/odbc-test/src/queries_test.cpp | 38 ++++++++++++++++++++--
modules/platforms/cpp/odbc/src/cursor.cpp | 7 ++--
.../platforms/cpp/odbc/src/query/data_query.cpp | 6 +++-
3 files changed, 46 insertions(+), 5 deletions(-)
diff --git a/modules/platforms/cpp/odbc-test/src/queries_test.cpp b/modules/platforms/cpp/odbc-test/src/queries_test.cpp
index 6cded84..60333ff 100644
--- a/modules/platforms/cpp/odbc-test/src/queries_test.cpp
+++ b/modules/platforms/cpp/odbc-test/src/queries_test.cpp
@@ -1629,7 +1629,7 @@ BOOST_AUTO_TEST_CASE(TestErrorMessage)
BOOST_AUTO_TEST_CASE(TestAffectedRows)
{
- Connect("DRIVER={Apache Ignite};ADDRESS=127.0.0.1:11110;SCHEMA=cache");
+ Connect("DRIVER={Apache Ignite};ADDRESS=127.0.0.1:11110;SCHEMA=cache;PAGE_SIZE=1024");
const int recordsNum = 100;
@@ -1670,7 +1670,41 @@ BOOST_AUTO_TEST_CASE(TestAffectedRows)
if (!SQL_SUCCEEDED(ret))
BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
- BOOST_CHECK_EQUAL(affected, 0);
+ BOOST_CHECK_EQUAL(affected, 1024);
+}
+
+BOOST_AUTO_TEST_CASE(TestAffectedRowsOnSelect)
+{
+ Connect("DRIVER={Apache Ignite};ADDRESS=127.0.0.1:11110;SCHEMA=cache;PAGE_SIZE=123");
+
+ const int recordsNum = 1000;
+
+ // Inserting values.
+ InsertTestStrings(recordsNum);
+
+ // Just selecting everything to make sure everything is OK
+ SQLCHAR selectReq[] = "SELECT _key, strField FROM TestType ORDER BY _key";
+
+ SQLRETURN ret = SQLExecDirect(stmt, selectReq, sizeof(selectReq));
+
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ for (int i = 0; i < 200; ++i)
+ {
+ SQLLEN affected = -1;
+ ret = SQLRowCount(stmt, &affected);
+
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ BOOST_CHECK_EQUAL(affected, 123);
+
+ ret = SQLFetch(stmt);
+
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+ }
}
BOOST_AUTO_TEST_CASE(TestMultipleSelects)
diff --git a/modules/platforms/cpp/odbc/src/cursor.cpp b/modules/platforms/cpp/odbc/src/cursor.cpp
index b41f5b1..cee18d8 100644
--- a/modules/platforms/cpp/odbc/src/cursor.cpp
+++ b/modules/platforms/cpp/odbc/src/cursor.cpp
@@ -21,8 +21,11 @@ namespace ignite
{
namespace odbc
{
- Cursor::Cursor(int64_t queryId) : queryId(queryId), currentPage(),
- currentPagePos(0), currentRow()
+ Cursor::Cursor(int64_t queryId) :
+ queryId(queryId),
+ currentPage(),
+ currentPagePos(0),
+ currentRow()
{
// No-op.
}
diff --git a/modules/platforms/cpp/odbc/src/query/data_query.cpp b/modules/platforms/cpp/odbc/src/query/data_query.cpp
index a93e5a3..54723a1 100644
--- a/modules/platforms/cpp/odbc/src/query/data_query.cpp
+++ b/modules/platforms/cpp/odbc/src/query/data_query.cpp
@@ -189,7 +189,11 @@ namespace ignite
int64_t DataQuery::AffectedRows() const
{
int64_t affected = rowsAffectedIdx < rowsAffected.size() ? rowsAffected[rowsAffectedIdx] : 0;
- return affected < 0 ? 0 : affected;
+
+ if (affected >= 0)
+ return affected;
+
+ return connection.GetConfiguration().GetPageSize();
}
SqlResult::Type DataQuery::NextResultSet()