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 2017/08/15 13:47:04 UTC

ignite git commit: IGNITE-6032: ODBC: Added SQL_SCROLL_OPTIONS support for SQLGetInfo

Repository: ignite
Updated Branches:
  refs/heads/master 24cfc2aa1 -> f3d3d1bd7


IGNITE-6032: ODBC: Added SQL_SCROLL_OPTIONS support for SQLGetInfo


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

Branch: refs/heads/master
Commit: f3d3d1bd718068c941e14b4e5949573b0a5d0c6a
Parents: 24cfc2a
Author: Igor Sapego <is...@gridgain.com>
Authored: Tue Aug 15 16:46:07 2017 +0300
Committer: Igor Sapego <is...@gridgain.com>
Committed: Tue Aug 15 16:46:07 2017 +0300

----------------------------------------------------------------------
 .../cpp/odbc-test/src/meta_queries_test.cpp      | 13 +++++++++++++
 .../cpp/odbc/src/config/connection_info.cpp      | 19 ++++++++++++++++++-
 .../platforms/cpp/odbc/src/meta/column_meta.cpp  |  3 +++
 3 files changed, 34 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f3d3d1bd/modules/platforms/cpp/odbc-test/src/meta_queries_test.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc-test/src/meta_queries_test.cpp b/modules/platforms/cpp/odbc-test/src/meta_queries_test.cpp
index ff3695d..5d4e22f 100644
--- a/modules/platforms/cpp/odbc-test/src/meta_queries_test.cpp
+++ b/modules/platforms/cpp/odbc-test/src/meta_queries_test.cpp
@@ -337,4 +337,17 @@ BOOST_AUTO_TEST_CASE(TestGetDataWithSelectQuery)
     CheckSingleRowResultSetWithGetData(stmt);
 }
 
+BOOST_AUTO_TEST_CASE(TestGetInfoScrollOptions)
+{
+    Connect("DRIVER={Apache Ignite};ADDRESS=127.0.0.1:11110;SCHEMA=cache");
+
+    SQLUINTEGER val = 0;
+    SQLRETURN ret = SQLGetInfo(dbc, SQL_SCROLL_OPTIONS, &val, 0, 0);
+
+    if (!SQL_SUCCEEDED(ret))
+        BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_DBC, dbc));
+
+    BOOST_CHECK_NE(val, 0);
+}
+
 BOOST_AUTO_TEST_SUITE_END()

http://git-wip-us.apache.org/repos/asf/ignite/blob/f3d3d1bd/modules/platforms/cpp/odbc/src/config/connection_info.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/src/config/connection_info.cpp b/modules/platforms/cpp/odbc/src/config/connection_info.cpp
index 4e7cc3c..4925957 100644
--- a/modules/platforms/cpp/odbc/src/config/connection_info.cpp
+++ b/modules/platforms/cpp/odbc/src/config/connection_info.cpp
@@ -118,6 +118,7 @@ namespace ignite
                     DBG_STR_CASE(SQL_CONVERT_WLONGVARCHAR);
                     DBG_STR_CASE(SQL_CONVERT_WVARCHAR);
                     DBG_STR_CASE(SQL_CONVERT_GUID);
+                    DBG_STR_CASE(SQL_SCROLL_OPTIONS);
                     DBG_STR_CASE(SQL_PARAM_ARRAY_ROW_COUNTS);
                     DBG_STR_CASE(SQL_PARAM_ARRAY_SELECTS);
                 default:
@@ -628,6 +629,19 @@ namespace ignite
                     SQL_CVT_BINARY | SQL_CVT_VARBINARY | SQL_CVT_LONGVARBINARY | SQL_CVT_GUID;
 #endif //SQL_CONVERT_GUID
 
+#ifdef SQL_SCROLL_OPTIONS
+                // Bitmask enumerating the scroll options supported for scrollable cursors
+                // SQL_SO_FORWARD_ONLY = The cursor only scrolls forward. (ODBC 1.0)
+                // SQL_SO_STATIC = The data in the result set is static. (ODBC 2.0)
+                // SQL_SO_KEYSET_DRIVEN = The driver saves and uses the keys for every row in the result set. (ODBC 1.0)
+                // SQL_SO_DYNAMIC = The driver keeps the keys for every row in the rowset(the keyset size is the same
+                //     as the rowset size). (ODBC 1.0)
+                // SQL_SO_MIXED = The driver keeps the keys for every row in the keyset, and the keyset size is greater
+                //     than the rowset size.The cursor is keyset - driven inside the keyset and dynamic outside the
+                //     keyset. (ODBC 1.0)
+                intParams[SQL_SCROLL_OPTIONS] = SQL_SO_FORWARD_ONLY | SQL_SO_STATIC;
+#endif //SQL_SCROLL_OPTIONS
+
                 //======================= Short Params ========================
 #ifdef SQL_MAX_CONCURRENT_ACTIVITIES
                 // The maximum number of active statements that the driver can
@@ -666,13 +680,16 @@ namespace ignite
             SqlResult::Type ConnectionInfo::GetInfo(InfoType type, void* buf,
                 short buflen, short* reslen) const
             {
-                if (!buf || !buflen)
+                if (!buf)
                     return SqlResult::AI_ERROR;
 
                 StringInfoMap::const_iterator itStr = strParams.find(type);
 
                 if (itStr != strParams.end())
                 {
+                    if (!buflen)
+                        return SqlResult::AI_ERROR;
+
                     unsigned short strlen = static_cast<short>(
                         utility::CopyStringToBuffer(itStr->second,
                             reinterpret_cast<char*>(buf), buflen));

http://git-wip-us.apache.org/repos/asf/ignite/blob/f3d3d1bd/modules/platforms/cpp/odbc/src/meta/column_meta.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/src/meta/column_meta.cpp b/modules/platforms/cpp/odbc/src/meta/column_meta.cpp
index 97fdf80..f1bd9a1 100644
--- a/modules/platforms/cpp/odbc/src/meta/column_meta.cpp
+++ b/modules/platforms/cpp/odbc/src/meta/column_meta.cpp
@@ -60,6 +60,9 @@ namespace ignite
                     DBG_STR_CASE(SQL_DESC_UNNAMED);
                     DBG_STR_CASE(SQL_DESC_UNSIGNED);
                     DBG_STR_CASE(SQL_DESC_UPDATABLE);
+                    DBG_STR_CASE(SQL_COLUMN_LENGTH);
+                    DBG_STR_CASE(SQL_COLUMN_PRECISION);
+                    DBG_STR_CASE(SQL_COLUMN_SCALE);
                 default:
                     break;
                 }