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:09 UTC
[07/50] ignite git commit: IGNITE-2223: Implementation of Decimal
type.
IGNITE-2223: Implementation of Decimal type.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/e5a2bfb6
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/e5a2bfb6
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/e5a2bfb6
Branch: refs/heads/ignite-1786
Commit: e5a2bfb62ea5ce3f8027ca55a15b3a516f845172
Parents: 2a1f1c0
Author: isapego <is...@gridgain.com>
Authored: Mon Jan 11 21:08:54 2016 +0300
Committer: isapego <is...@gridgain.com>
Committed: Mon Jan 11 21:08:54 2016 +0300
----------------------------------------------------------------------
.../include/ignite/odbc/common_types.h | 47 ++++++++
.../odbc-driver/include/ignite/odbc/decimal.h | 107 +++++++++++++++++++
.../odbc-driver/project/vs/odbc-driver.vcxproj | 2 +
.../project/vs/odbc-driver.vcxproj.filters | 6 ++
.../cpp/odbc/odbc-driver/src/decimal.cpp | 85 +++++++++++++++
5 files changed, 247 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/e5a2bfb6/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/common_types.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/common_types.h b/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/common_types.h
index f503654..c656fae 100644
--- a/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/common_types.h
+++ b/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/common_types.h
@@ -44,6 +44,9 @@ namespace ignite
/**
* Convert internal Ignite type into ODBC SQL return code.
+ *
+ * @param result Internal result type.
+ * @return ODBC result type.
*/
int SqlResultToReturnCode(SqlResult result);
@@ -110,28 +113,72 @@ namespace ignite
SQL_STATE_HYT01_CONNECTIOIN_TIMEOUT
};
+ /**
+ * Diagnostic field type.
+ */
enum DiagnosticField
{
+ /** Header record field: Count of rows in the cursor. */
IGNITE_SQL_DIAG_HEADER_CURSOR_ROW_COUNT,
+
+ /**
+ * Header record field: String that describes the SQL statement
+ * that the underlying function executed.
+ */
IGNITE_SQL_DIAG_HEADER_DYNAMIC_FUNCTION,
+
+ /**
+ * Header record field: Numeric code that describes the SQL
+ * statement that was executed by the underlying function.
+ */
IGNITE_SQL_DIAG_HEADER_DYNAMIC_FUNCTION_CODE,
+
+ /** Header record field: Number of status records. */
IGNITE_SQL_DIAG_HEADER_NUMBER,
+
+ /** Header record field: Last operation return code. */
IGNITE_SQL_DIAG_HEADER_RETURNCODE,
+
+ /** Header record field: Row count. */
IGNITE_SQL_DIAG_HEADER_ROW_COUNT,
+ /** Status record field: Class origin. */
IGNITE_SQL_DIAG_STATUS_CLASS_ORIGIN,
+
+ /** Status record field: Column number. */
IGNITE_SQL_DIAG_STATUS_COLUMN_NUMBER,
+
+ /** Status record field: Connection name. */
IGNITE_SQL_DIAG_STATUS_CONNECTION_NAME,
+
+ /** Status record field: Message text. */
IGNITE_SQL_DIAG_STATUS_MESSAGE_TEXT,
+
+ /** Status record field: Native result code. */
IGNITE_SQL_DIAG_STATUS_NATIVE,
+
+ /** Status record field: Row number. */
IGNITE_SQL_DIAG_STATUS_ROW_NUMBER,
+
+ /** Status record field: Server name. */
IGNITE_SQL_DIAG_STATUS_SERVER_NAME,
+
+ /** Status record field: SQLSTATE. */
IGNITE_SQL_DIAG_STATUS_SQLSTATE,
+
+ /** Status record field: Subclass origin. */
IGNITE_SQL_DIAG_STATUS_SUBCLASS_ORIGIN,
+ /** Field type is unknown to the driver. */
IGNITE_SQL_DIAG_UNKNOWN
};
+ /**
+ * Convert ODBC field type to internal DiagnosticField type value.
+ *
+ * @param field ODBC field type.
+ * @return Internal DiagnosticField type value.
+ */
DiagnosticField DiagnosticFieldToInternal(int16_t field);
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e5a2bfb6/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/decimal.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/decimal.h b/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/decimal.h
new file mode 100644
index 0000000..7b5188b
--- /dev/null
+++ b/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/decimal.h
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _IGNITE_DECIMAL
+#define _IGNITE_DECIMAL
+
+#include <stdint.h>
+
+namespace ignite
+{
+ //TODO: move to binary or common library.
+ class Decimal
+ {
+ friend void swap(Decimal& first, Decimal& second);
+ public:
+ /**
+ * Default constructor.
+ */
+ Decimal();
+
+ /**
+ * Constructor.
+ *
+ * @param scale Scale.
+ * @param mag Magnitude. Value is copied.
+ * @param len Magnitude length in bytes.
+ */
+ Decimal(int32_t scale, const int8_t* mag, int32_t len);
+
+ /**
+ * Copy constructor.
+ *
+ * @param other Other instance.
+ */
+ Decimal(const Decimal& other);
+
+ /**
+ * Destructor.
+ */
+ ~Decimal();
+
+ /**
+ * Copy operator.
+ *
+ * @param other Other instance.
+ * @return This.
+ */
+ Decimal& operator=(const Decimal& other);
+
+ /**
+ * Get scale.
+ *
+ * @return Scale.
+ */
+ int32_t GetScale() const;
+
+ /**
+ * Get magnitude length.
+ *
+ * @return Magnitude length.
+ */
+ int32_t GetLength() const;
+
+ /**
+ * Get magnitude pointer.
+ *
+ * @return Magnitude pointer.
+ */
+ const int8_t* GetMagnitude() const;
+
+ private:
+ /** Scale. */
+ int32_t scale;
+
+ /** Magnitude lenght. */
+ int32_t len;
+
+ /** Magnitude. */
+ int8_t* magnitude;
+ };
+
+ /**
+ * Swap function for the Decimal type.
+ *
+ * @param first First instance.
+ * @param second Second instance.
+ */
+ void swap(Decimal& first, Decimal& second);
+}
+
+
+
+#endif
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/e5a2bfb6/modules/platforms/cpp/odbc/odbc-driver/project/vs/odbc-driver.vcxproj
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/odbc-driver/project/vs/odbc-driver.vcxproj b/modules/platforms/cpp/odbc/odbc-driver/project/vs/odbc-driver.vcxproj
index 55587df..a85adf3 100644
--- a/modules/platforms/cpp/odbc/odbc-driver/project/vs/odbc-driver.vcxproj
+++ b/modules/platforms/cpp/odbc/odbc-driver/project/vs/odbc-driver.vcxproj
@@ -157,6 +157,7 @@
<ClCompile Include="..\..\src\config\connection_info.cpp" />
<ClCompile Include="..\..\src\connection.cpp" />
<ClCompile Include="..\..\src\cursor.cpp" />
+ <ClCompile Include="..\..\src\decimal.cpp" />
<ClCompile Include="..\..\src\diagnostic\diagnosable_adapter.cpp" />
<ClCompile Include="..\..\src\diagnostic\diagnostic_record.cpp" />
<ClCompile Include="..\..\src\diagnostic\diagnostic_record_storage.cpp" />
@@ -186,6 +187,7 @@
<ClInclude Include="..\..\include\ignite\odbc\config\connection_info.h" />
<ClInclude Include="..\..\include\ignite\odbc\connection.h" />
<ClInclude Include="..\..\include\ignite\odbc\cursor.h" />
+ <ClInclude Include="..\..\include\ignite\odbc\decimal.h" />
<ClInclude Include="..\..\include\ignite\odbc\diagnostic\diagnosable.h" />
<ClInclude Include="..\..\include\ignite\odbc\diagnostic\diagnosable_adapter.h" />
<ClInclude Include="..\..\include\ignite\odbc\diagnostic\diagnostic_record.h" />
http://git-wip-us.apache.org/repos/asf/ignite/blob/e5a2bfb6/modules/platforms/cpp/odbc/odbc-driver/project/vs/odbc-driver.vcxproj.filters
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/odbc-driver/project/vs/odbc-driver.vcxproj.filters b/modules/platforms/cpp/odbc/odbc-driver/project/vs/odbc-driver.vcxproj.filters
index 9631946..650bfe4 100644
--- a/modules/platforms/cpp/odbc/odbc-driver/project/vs/odbc-driver.vcxproj.filters
+++ b/modules/platforms/cpp/odbc/odbc-driver/project/vs/odbc-driver.vcxproj.filters
@@ -103,6 +103,9 @@
<ClCompile Include="..\..\os\win\src\system\socket_client.cpp">
<Filter>Code\system</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\decimal.cpp">
+ <Filter>Code</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="module.def">
@@ -201,5 +204,8 @@
<ClInclude Include="..\..\include\ignite\odbc\system\socket_client.h">
<Filter>Code\system</Filter>
</ClInclude>
+ <ClInclude Include="..\..\include\ignite\odbc\decimal.h">
+ <Filter>Code</Filter>
+ </ClInclude>
</ItemGroup>
</Project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/e5a2bfb6/modules/platforms/cpp/odbc/odbc-driver/src/decimal.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/odbc-driver/src/decimal.cpp b/modules/platforms/cpp/odbc/odbc-driver/src/decimal.cpp
new file mode 100644
index 0000000..2df48d8
--- /dev/null
+++ b/modules/platforms/cpp/odbc/odbc-driver/src/decimal.cpp
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <cstring>
+#include <utility>
+
+#include "ignite/odbc/decimal.h"
+
+namespace ignite
+{
+
+ Decimal::Decimal() :
+ scale(0), len(0), magnitude(0)
+ {
+ }
+
+ Decimal::Decimal(int32_t scale, const int8_t * mag, int32_t len) :
+ scale(scale), len(len), magnitude(0)
+ {
+ magnitude = new int8_t[len];
+
+ memcpy(magnitude, mag, len);
+ }
+
+ Decimal::Decimal(const Decimal & other) :
+ scale(other.scale), len(other.len), magnitude(0)
+ {
+ magnitude = new int8_t[len];
+
+ memcpy(magnitude, other.magnitude, len);
+ }
+
+ Decimal::~Decimal()
+ {
+ if (magnitude)
+ delete[] magnitude;
+ }
+
+ Decimal& Decimal::operator=(const Decimal& other)
+ {
+ Decimal tmp(other);
+
+ swap(tmp, *this);
+
+ return *this;
+ }
+
+ int32_t Decimal::GetScale() const
+ {
+ return scale;
+ }
+
+ int32_t Decimal::GetLength() const
+ {
+ return scale;
+ }
+
+ const int8_t * Decimal::GetMagnitude() const
+ {
+ return magnitude;
+ }
+
+ void swap(Decimal & first, Decimal & second)
+ {
+ using std::swap;
+
+ std::swap(first.scale, second.scale);
+ std::swap(first.len, second.len);
+ std::swap(first.magnitude, second.magnitude);
+ }
+}