You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2016/01/25 12:55:35 UTC

[33/50] ignite git commit: IGNITE-2242: Adjusted offset incrementation.

IGNITE-2242: Adjusted offset incrementation.


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

Branch: refs/heads/ignite-1786
Commit: 0d47aa7eebb0eade89af2408de8310c1ea84965a
Parents: 895901a
Author: isapego <is...@gridgain.com>
Authored: Wed Jan 20 18:42:04 2016 +0300
Committer: isapego <is...@gridgain.com>
Committed: Wed Jan 20 18:42:04 2016 +0300

----------------------------------------------------------------------
 .../ignite/odbc/app/application_data_buffer.h   |  6 ++--
 .../src/app/application_data_buffer.cpp         | 30 ++++++++++++++++++--
 .../cpp/odbc/odbc-driver/src/column.cpp         | 10 +++----
 3 files changed, 37 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/0d47aa7e/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/app/application_data_buffer.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/app/application_data_buffer.h b/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/app/application_data_buffer.h
index d77f598..051f459 100644
--- a/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/app/application_data_buffer.h
+++ b/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/app/application_data_buffer.h
@@ -132,8 +132,9 @@ namespace ignite
                  * Put in buffer value of type string.
                  *
                  * @param value Value.
+                 * @return Number of bytes that have been put in buffer.
                  */
-                void PutString(const std::string& value);
+                int32_t PutString(const std::string& value);
 
                 /**
                  * Put in buffer value of type GUID.
@@ -147,8 +148,9 @@ namespace ignite
                  *
                  * @param data Data pointer.
                  * @param len Data length.
+                 * @return Number of bytes that have been put in buffer.
                  */
-                void PutBinaryData(void* data, size_t len);
+                int32_t PutBinaryData(void* data, size_t len);
 
                 /**
                  * Put NULL.

http://git-wip-us.apache.org/repos/asf/ignite/blob/0d47aa7e/modules/platforms/cpp/odbc/odbc-driver/src/app/application_data_buffer.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/odbc-driver/src/app/application_data_buffer.cpp b/modules/platforms/cpp/odbc/odbc-driver/src/app/application_data_buffer.cpp
index 5096820..e10011b 100644
--- a/modules/platforms/cpp/odbc/odbc-driver/src/app/application_data_buffer.cpp
+++ b/modules/platforms/cpp/odbc/odbc-driver/src/app/application_data_buffer.cpp
@@ -318,9 +318,12 @@ namespace ignite
                 PutNum(value);
             }
 
-            void ApplicationDataBuffer::PutString(const std::string & value)
+            int32_t ApplicationDataBuffer::PutString(const std::string & value)
             {
                 using namespace type_traits;
+
+                int32_t used = 0;
+
                 switch (type)
                 {
                     case IGNITE_ODBC_C_TYPE_SIGNED_TINYINT:
@@ -342,6 +345,8 @@ namespace ignite
 
                         PutNum(numValue);
 
+                        used = static_cast<int32_t>(value.size());
+
                         break;
                     }
 
@@ -356,6 +361,8 @@ namespace ignite
 
                         PutNum(numValue);
 
+                        used = static_cast<int32_t>(value.size());
+
                         break;
                     }
 
@@ -365,6 +372,8 @@ namespace ignite
                     {
                         PutStrToStrBuffer<char>(value);
 
+                        used = static_cast<int32_t>(GetSize()) - 1;
+
                         break;
                     }
 
@@ -372,6 +381,8 @@ namespace ignite
                     {
                         PutStrToStrBuffer<wchar_t>(value);
 
+                        used = (static_cast<int32_t>(GetSize()) / 2) - 1;
+
                         break;
                     }
 
@@ -381,11 +392,14 @@ namespace ignite
                             *GetResLen() = SQL_NO_TOTAL;
                     }
                 }
+
+                return used < 0 ? 0 : used;
             }
 
             void ApplicationDataBuffer::PutGuid(const Guid & value)
             {
                 using namespace type_traits;
+
                 switch (type)
                 {
                     case IGNITE_ODBC_C_TYPE_CHAR:
@@ -425,15 +439,21 @@ namespace ignite
                 }
             }
 
-            void ApplicationDataBuffer::PutBinaryData(void *data, size_t len)
+            int32_t ApplicationDataBuffer::PutBinaryData(void *data, size_t len)
             {
                 using namespace type_traits;
+
+                int32_t used = 0;
+
                 switch (type)
                 {
                     case IGNITE_ODBC_C_TYPE_BINARY:
                     case IGNITE_ODBC_C_TYPE_DEFAULT:
                     {
                         PutRawDataToBuffer(data, len);
+
+                        used = static_cast<int32_t>(GetSize());
+
                         break;
                     }
 
@@ -453,6 +473,8 @@ namespace ignite
 
                         PutStrToStrBuffer<char>(converter.str());
 
+                        used = static_cast<int32_t>(GetSize()) - 1;
+
                         break;
                     }
 
@@ -472,6 +494,8 @@ namespace ignite
 
                         PutStrToStrBuffer<wchar_t>(converter.str());
 
+                        used = static_cast<int32_t>(GetSize() / 2) - 1;
+
                         break;
                     }
 
@@ -481,6 +505,8 @@ namespace ignite
                             *GetResLen() = SQL_NO_TOTAL;
                     }
                 }
+
+                return used < 0 ? 0 : used;
             }
 
             void ApplicationDataBuffer::PutNull()

http://git-wip-us.apache.org/repos/asf/ignite/blob/0d47aa7e/modules/platforms/cpp/odbc/odbc-driver/src/column.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/odbc-driver/src/column.cpp b/modules/platforms/cpp/odbc/odbc-driver/src/column.cpp
index 27c413a..7b2f1e9 100644
--- a/modules/platforms/cpp/odbc/odbc-driver/src/column.cpp
+++ b/modules/platforms/cpp/odbc/odbc-driver/src/column.cpp
@@ -373,9 +373,9 @@ namespace ignite
                     std::string str;
                     utility::ReadString(reader, str);
 
-                    dataBuf.PutString(str.substr(offset));
+                    int32_t written = dataBuf.PutString(str.substr(offset));
 
-                    IncreaseOffset(static_cast<int32_t>(dataBuf.GetSize() - 1));
+                    IncreaseOffset(written);
 
                     break;
                 }
@@ -395,7 +395,7 @@ namespace ignite
                 {
                     dataBuf.PutNull();
 
-                    IncreaseOffset(static_cast<int32_t>(dataBuf.GetSize()));
+                    IncreaseOffset(size);
 
                     break;
                 }
@@ -411,9 +411,9 @@ namespace ignite
 
                     stream->ReadInt8Array(&data[0], static_cast<int32_t>(data.size()));
 
-                    dataBuf.PutBinaryData(data.data() + offset, static_cast<size_t>(len - offset));
+                    int32_t written = dataBuf.PutBinaryData(data.data() + offset, static_cast<size_t>(len - offset));
 
-                    IncreaseOffset(static_cast<int32_t>(dataBuf.GetSize()));
+                    IncreaseOffset(written);
 
                     break;
                 }