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/27 11:39:58 UTC
[25/28] ignite git commit: IGNITE-2442: ODBC projects moved to main
cpp solution.
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc-test/src/teamcity_boost.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc-test/src/teamcity_boost.cpp b/modules/platforms/cpp/odbc-test/src/teamcity_boost.cpp
new file mode 100644
index 0000000..45c666d
--- /dev/null
+++ b/modules/platforms/cpp/odbc-test/src/teamcity_boost.cpp
@@ -0,0 +1,159 @@
+/* Copyright 2011 JetBrains s.r.o.
+ *
+ * Licensed 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.
+ *
+ * $Revision: 88625 $
+*/
+
+#define BOOST_TEST_MODULE IgniteCoreTest
+
+#include <sstream>
+
+#include <boost/test/unit_test_suite_impl.hpp>
+#include <boost/test/results_collector.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+#include <boost/test/unit_test_log.hpp>
+#include <boost/test/included/unit_test.hpp>
+
+#include "teamcity_messages.h"
+
+using namespace boost::unit_test;
+using namespace std;
+
+namespace JetBrains {
+
+// Custom formatter for TeamCity messages
+class TeamcityBoostLogFormatter: public boost::unit_test::unit_test_log_formatter {
+ TeamcityMessages messages;
+ std::string currentDetails;
+ std::string flowId;
+
+public:
+ TeamcityBoostLogFormatter(const std::string &_flowId);
+ TeamcityBoostLogFormatter();
+
+ void log_start(std::ostream&, boost::unit_test::counter_t test_cases_amount);
+ void log_finish(std::ostream&);
+ void log_build_info(std::ostream&);
+
+ void test_unit_start(std::ostream&, boost::unit_test::test_unit const& tu);
+ void test_unit_finish(std::ostream&,
+ boost::unit_test::test_unit const& tu,
+ unsigned long elapsed);
+ void test_unit_skipped(std::ostream&, boost::unit_test::test_unit const& tu);
+
+ void log_exception(std::ostream&,
+ boost::unit_test::log_checkpoint_data const&,
+ boost::unit_test::const_string explanation);
+
+ void log_entry_start(std::ostream&,
+ boost::unit_test::log_entry_data const&,
+ log_entry_types let);
+ void log_entry_value(std::ostream&, boost::unit_test::const_string value);
+ void log_entry_finish(std::ostream&);
+};
+
+// Fake fixture to register formatter
+struct TeamcityFormatterRegistrar {
+ TeamcityFormatterRegistrar() {
+ if (JetBrains::underTeamcity()) {
+ boost::unit_test::unit_test_log.set_formatter(new JetBrains::TeamcityBoostLogFormatter());
+ boost::unit_test::unit_test_log.set_threshold_level(boost::unit_test::log_successful_tests);
+ }
+ }
+};
+BOOST_GLOBAL_FIXTURE(TeamcityFormatterRegistrar);
+
+// Formatter implementation
+string toString(const_string bstr) {
+ stringstream ss;
+
+ ss << bstr;
+
+ return ss.str();
+}
+
+TeamcityBoostLogFormatter::TeamcityBoostLogFormatter(const std::string &_flowId)
+: flowId(_flowId)
+{}
+
+TeamcityBoostLogFormatter::TeamcityBoostLogFormatter()
+: flowId(getFlowIdFromEnvironment())
+{}
+
+void TeamcityBoostLogFormatter::log_start(ostream &out, counter_t test_cases_amount)
+{}
+
+void TeamcityBoostLogFormatter::log_finish(ostream &out)
+{}
+
+void TeamcityBoostLogFormatter::log_build_info(ostream &out)
+{}
+
+void TeamcityBoostLogFormatter::test_unit_start(ostream &out, test_unit const& tu) {
+ messages.setOutput(out);
+
+ if (tu.p_type == tut_case) {
+ messages.testStarted(tu.p_name, flowId);
+ } else {
+ messages.suiteStarted(tu.p_name, flowId);
+ }
+
+ currentDetails.clear();
+}
+
+void TeamcityBoostLogFormatter::test_unit_finish(ostream &out, test_unit const& tu, unsigned long elapsed) {
+ messages.setOutput(out);
+
+ test_results const& tr = results_collector.results(tu.p_id);
+ if (tu.p_type == tut_case) {
+ if(!tr.passed()) {
+ if(tr.p_skipped) {
+ messages.testIgnored(tu.p_name, "ignored", flowId);
+ } else if (tr.p_aborted) {
+ messages.testFailed(tu.p_name, "aborted", currentDetails, flowId);
+ } else {
+ messages.testFailed(tu.p_name, "failed", currentDetails, flowId);
+ }
+ }
+
+ messages.testFinished(tu.p_name, elapsed / 1000, flowId);
+ } else {
+ messages.suiteFinished(tu.p_name, flowId);
+ }
+}
+
+void TeamcityBoostLogFormatter::test_unit_skipped(ostream &out, test_unit const& tu)
+{}
+
+void TeamcityBoostLogFormatter::log_exception(ostream &out, log_checkpoint_data const&, const_string explanation) {
+ string what = toString(explanation);
+
+ out << what << endl;
+ currentDetails += what + "\n";
+}
+
+void TeamcityBoostLogFormatter::log_entry_start(ostream&, log_entry_data const&, log_entry_types let)
+{}
+
+void TeamcityBoostLogFormatter::log_entry_value(ostream &out, const_string value) {
+ out << value;
+ currentDetails += toString(value);
+}
+
+void TeamcityBoostLogFormatter::log_entry_finish(ostream &out) {
+ out << endl;
+ currentDetails += "\n";
+}
+
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc-test/src/teamcity_messages.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc-test/src/teamcity_messages.cpp b/modules/platforms/cpp/odbc-test/src/teamcity_messages.cpp
new file mode 100644
index 0000000..087409e
--- /dev/null
+++ b/modules/platforms/cpp/odbc-test/src/teamcity_messages.cpp
@@ -0,0 +1,150 @@
+/* Copyright 2011 JetBrains s.r.o.
+ *
+ * Licensed 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.
+ *
+ * $Revision: 88625 $
+*/
+
+#include <stdlib.h>
+#include <sstream>
+
+#include "teamcity_messages.h"
+
+using namespace std;
+
+namespace JetBrains {
+
+std::string getFlowIdFromEnvironment() {
+ const char *flowId = getenv("TEAMCITY_PROCESS_FLOW_ID");
+ return flowId == NULL ? "" : flowId;
+}
+
+bool underTeamcity() {
+ return getenv("TEAMCITY_PROJECT_NAME") != NULL;
+}
+
+TeamcityMessages::TeamcityMessages()
+: m_out(&cout)
+{}
+
+void TeamcityMessages::setOutput(ostream &out) {
+ m_out = &out;
+}
+
+string TeamcityMessages::escape(string s) {
+ string result;
+
+ for (size_t i = 0; i < s.length(); i++) {
+ char c = s[i];
+
+ switch (c) {
+ case '\n': result.append("|n"); break;
+ case '\r': result.append("|r"); break;
+ case '\'': result.append("|'"); break;
+ case '|': result.append("||"); break;
+ case ']': result.append("|]"); break;
+ default: result.append(&c, 1);
+ }
+ }
+
+ return result;
+}
+
+void TeamcityMessages::openMsg(const string &name) {
+ // endl for http://jetbrains.net/tracker/issue/TW-4412
+ *m_out << endl << "##teamcity[" << name;
+}
+
+void TeamcityMessages::closeMsg() {
+ *m_out << "]";
+ // endl for http://jetbrains.net/tracker/issue/TW-4412
+ *m_out << endl;
+ m_out->flush();
+}
+
+void TeamcityMessages::writeProperty(string name, string value) {
+ *m_out << " " << name << "='" << escape(value) << "'";
+}
+
+void TeamcityMessages::suiteStarted(string name, string flowid) {
+ openMsg("testSuiteStarted");
+ writeProperty("name", name);
+ if(flowid.length() > 0) {
+ writeProperty("flowId", flowid);
+ }
+
+ closeMsg();
+}
+
+void TeamcityMessages::suiteFinished(string name, string flowid) {
+ openMsg("testSuiteFinished");
+ writeProperty("name", name);
+ if(flowid.length() > 0) {
+ writeProperty("flowId", flowid);
+ }
+
+ closeMsg();
+}
+
+void TeamcityMessages::testStarted(string name, string flowid) {
+ openMsg("testStarted");
+ writeProperty("name", name);
+ if(flowid.length() > 0) {
+ writeProperty("flowId", flowid);
+ }
+
+ closeMsg();
+}
+
+void TeamcityMessages::testFinished(string name, int durationMs, string flowid) {
+ openMsg("testFinished");
+
+ writeProperty("name", name);
+
+ if(flowid.length() > 0) {
+ writeProperty("flowId", flowid);
+ }
+
+ if(durationMs >= 0) {
+ stringstream out;
+ out << durationMs;
+ writeProperty("duration", out.str());
+ }
+
+ closeMsg();
+}
+
+void TeamcityMessages::testFailed(string name, string message, string details, string flowid) {
+ openMsg("testFailed");
+ writeProperty("name", name);
+ writeProperty("message", message);
+ writeProperty("details", details);
+ if(flowid.length() > 0) {
+ writeProperty("flowId", flowid);
+ }
+
+ closeMsg();
+}
+
+void TeamcityMessages::testIgnored(std::string name, std::string message, string flowid) {
+ openMsg("testIgnored");
+ writeProperty("name", name);
+ writeProperty("message", message);
+ if(flowid.length() > 0) {
+ writeProperty("flowId", flowid);
+ }
+
+ closeMsg();
+}
+
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc-test/src/utility_test.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc-test/src/utility_test.cpp b/modules/platforms/cpp/odbc-test/src/utility_test.cpp
new file mode 100644
index 0000000..6c4d104
--- /dev/null
+++ b/modules/platforms/cpp/odbc-test/src/utility_test.cpp
@@ -0,0 +1,81 @@
+/*
+ * 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 _MSC_VER
+# define BOOST_TEST_DYN_LINK
+#endif
+
+#include <boost/test/unit_test.hpp>
+
+#include <ignite/impl/binary/binary_writer_impl.h>
+
+#include <ignite/odbc/utility.h>
+
+using namespace ignite::utility;
+
+BOOST_AUTO_TEST_SUITE(UtilityTestSuite)
+
+BOOST_AUTO_TEST_CASE(TestUtilityRemoveSurroundingSpaces)
+{
+ std::string inStr(" \r \n \t some meaningfull data \n\n \t \r ");
+ std::string expectedOutStr("some meaningfull data");
+
+ std::string realOutStr(RemoveSurroundingSpaces(inStr.begin(), inStr.end()));
+
+ BOOST_REQUIRE(expectedOutStr == realOutStr);
+}
+
+BOOST_AUTO_TEST_CASE(TestUtilityCopyStringToBuffer)
+{
+ char buffer[1024];
+
+ std::string str("Some data. And some more data here.");
+
+ CopyStringToBuffer(str, buffer, sizeof(buffer));
+
+ BOOST_REQUIRE(!strcmp(buffer, str.c_str()));
+
+ CopyStringToBuffer(str, buffer, 11);
+
+ BOOST_REQUIRE(!strcmp(buffer, str.substr(0, 10).c_str()));
+}
+
+BOOST_AUTO_TEST_CASE(TestUtilityReadString)
+{
+ using namespace ignite::impl::binary;
+ using namespace ignite::impl::interop;
+
+ std::string inputStr("Hello World!");
+ std::string outputStr;
+
+ ignite::impl::interop::InteropUnpooledMemory mem(1024);
+ InteropOutputStream outStream(&mem);
+ BinaryWriterImpl writer(&outStream, 0);
+
+ writer.WriteString(inputStr.data(), static_cast<int32_t>(inputStr.size()));
+
+ outStream.Synchronize();
+
+ InteropInputStream inStream(&mem);
+ BinaryReaderImpl reader(&inStream);
+
+ ReadString(reader, outputStr);
+
+ BOOST_REQUIRE(inputStr == outputStr);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/Makefile.am
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/Makefile.am b/modules/platforms/cpp/odbc/Makefile.am
new file mode 100644
index 0000000..09f35fd
--- /dev/null
+++ b/modules/platforms/cpp/odbc/Makefile.am
@@ -0,0 +1,67 @@
+##
+## 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.
+##
+
+ACLOCAL_AMFLAGS = "-Im4"
+
+SUBDIRS = .
+DIST_SUBDIRS = .
+
+AM_CPPFLAGS = -I$(srcdir)/include -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux -DIGNITE_IMPL
+AM_CXXFLAGS = -Wall -std=c++0x
+LIB_LDFLAGS = -no-undefined -version-info 1
+
+COMMON_SRC = os/linux/src/system/socket_client.cpp \
+ src/app/application_data_buffer.cpp \
+ src/app/parameter.cpp \
+ src/common_types.cpp \
+ src/config/configuration.cpp \
+ src/config/connection_info.cpp \
+ src/connection.cpp \
+ src/cursor.cpp \
+ src/decimal.cpp \
+ src/diagnostic/diagnosable_adapter.cpp \
+ src/diagnostic/diagnostic_record.cpp \
+ src/diagnostic/diagnostic_record_storage.cpp \
+ src/environment.cpp \
+ src/meta/column_meta.cpp \
+ src/meta/table_meta.cpp \
+ src/odbc.cpp \
+ src/query/column_metadata_query.cpp \
+ src/query/data_query.cpp \
+ src/query/foreign_keys_query.cpp \
+ src/query/primary_keys_query.cpp \
+ src/query/table_metadata_query.cpp \
+ src/query/type_info_query.cpp \
+ src/result_page.cpp \
+ src/row.cpp \
+ src/statement.cpp \
+ src/type_traits.cpp \
+ src/utility.cpp
+
+
+lib_LTLIBRARIES = libignite-odbc.la
+libignite_odbc_la_SOURCES = $(COMMON_SRC)
+libignite_odbc_la_LDFLAGS = $(LIB_LDFLAGS) -L/usr/local/lib -lignite-common -lignite-binary -ldl -version-info 0:0:0 -release $(PACKAGE_VERSION)
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = ignite-odbc.pc
+
+clean-local:
+ $(RM) *.gcno *.gcda
+
+clean-docs:
+ $(RM) $(DX_CLEANFILES)
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/configure.ac
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/configure.ac b/modules/platforms/cpp/odbc/configure.ac
new file mode 100644
index 0000000..e69d73c
--- /dev/null
+++ b/modules/platforms/cpp/odbc/configure.ac
@@ -0,0 +1,62 @@
+#
+# 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.
+#
+
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ([2.69])
+AC_INIT([Apache Ignite ODBC driver], [1.5.1.7927], [dev@ignite.apache.org], [ignite], [ignite.apache.org])
+AC_CONFIG_SRCDIR(src)
+
+AC_CANONICAL_SYSTEM
+AC_CONFIG_MACRO_DIR([m4])
+AC_LANG([C++])
+
+# Initialize automake
+AM_INIT_AUTOMAKE([-Wall foreign subdir-objects])
+AC_CONFIG_HEADER(config.h)
+
+AM_PROG_AR
+
+# Checks for programs.
+GXX="-g -O2"
+
+AC_PROG_CXX
+
+# Initialize Libtool
+LT_INIT
+
+# Checks for libraries.
+AC_CHECK_LIB([pthread], [pthread_mutex_lock])
+
+# Checks for header files.
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_C_INLINE
+AC_TYPE_INT16_T
+AC_TYPE_INT32_T
+AC_TYPE_INT64_T
+AC_TYPE_INT8_T
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+
+# Checks for library functions.
+AC_FUNC_ERROR_AT_LINE
+
+AC_CONFIG_FILES(Makefile ignite-odbc.pc)
+
+AC_OUTPUT
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/ignite-odbc.pc.in
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/ignite-odbc.pc.in b/modules/platforms/cpp/odbc/ignite-odbc.pc.in
new file mode 100644
index 0000000..13cd7e9
--- /dev/null
+++ b/modules/platforms/cpp/odbc/ignite-odbc.pc.in
@@ -0,0 +1,9 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: ignite-odbc
+Description: Apache Ignite ODBC driver.
+Version: @PACKAGE_VERSION@
+Libs: -L${libdir} -lignite-odbc
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/app/application_data_buffer.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/app/application_data_buffer.h b/modules/platforms/cpp/odbc/include/ignite/odbc/app/application_data_buffer.h
new file mode 100644
index 0000000..051f459
--- /dev/null
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/app/application_data_buffer.h
@@ -0,0 +1,342 @@
+/*
+ * 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_ODBC_DRIVER_APPLICATION_DATA_BUFFER
+#define _IGNITE_ODBC_DRIVER_APPLICATION_DATA_BUFFER
+
+#include <stdint.h>
+
+#include <map>
+
+#include <ignite/guid.h>
+
+#include "ignite/odbc/decimal.h"
+#include "ignite/odbc/common_types.h"
+#include "ignite/odbc/type_traits.h"
+
+namespace ignite
+{
+ namespace odbc
+ {
+ namespace app
+ {
+ /**
+ * User application data buffer.
+ */
+ class ApplicationDataBuffer
+ {
+ public:
+ /**
+ * Default constructor.
+ */
+ ApplicationDataBuffer();
+
+ /**
+ * Constructor.
+ *
+ * @param type Underlying data type.
+ * @param buffer Data buffer pointer.
+ * @param buflen Data buffer length.
+ * @param reslen Resulting data length.
+ * @param offset Pointer to buffer and reslen offset pointer.
+ */
+ ApplicationDataBuffer(type_traits::IgniteSqlType type, void* buffer, SqlLen buflen, SqlLen* reslen, size_t** offset = 0);
+
+ /**
+ * Copy constructor.
+ *
+ * @param other Other instance.
+ */
+ ApplicationDataBuffer(const ApplicationDataBuffer& other);
+
+ /**
+ * Destructor.
+ */
+ ~ApplicationDataBuffer();
+
+ /**
+ * Copy assigment operator.
+ *
+ * @param other Other instance.
+ * @return This.
+ */
+ ApplicationDataBuffer& operator=(const ApplicationDataBuffer& other);
+
+ /**
+ * Set pointer to offset pointer.
+ *
+ * @param offset Pointer to offset pointer.
+ */
+ void SetPtrToOffsetPtr(size_t** offset)
+ {
+ this->offset = offset;
+ }
+
+ /**
+ * Put in buffer value of type int8_t.
+ *
+ * @param value Value.
+ */
+ void PutInt8(int8_t value);
+
+ /**
+ * Put in buffer value of type int16_t.
+ *
+ * @param value Value.
+ */
+ void PutInt16(int16_t value);
+
+ /**
+ * Put in buffer value of type int32_t.
+ *
+ * @param value Value.
+ */
+ void PutInt32(int32_t value);
+
+ /**
+ * Put in buffer value of type int64_t.
+ *
+ * @param value Value.
+ */
+ void PutInt64(int64_t value);
+
+ /**
+ * Put in buffer value of type float.
+ *
+ * @param value Value.
+ */
+ void PutFloat(float value);
+
+ /**
+ * Put in buffer value of type double.
+ *
+ * @param value Value.
+ */
+ void PutDouble(double value);
+
+ /**
+ * Put in buffer value of type string.
+ *
+ * @param value Value.
+ * @return Number of bytes that have been put in buffer.
+ */
+ int32_t PutString(const std::string& value);
+
+ /**
+ * Put in buffer value of type GUID.
+ *
+ * @param value Value.
+ */
+ void PutGuid(const Guid& value);
+
+ /**
+ * Put binary data in buffer.
+ *
+ * @param data Data pointer.
+ * @param len Data length.
+ * @return Number of bytes that have been put in buffer.
+ */
+ int32_t PutBinaryData(void* data, size_t len);
+
+ /**
+ * Put NULL.
+ */
+ void PutNull();
+
+ /**
+ * Put decimal value to buffer.
+ *
+ * @param value Value to put.
+ */
+ void PutDecimal(const Decimal& value);
+
+ /**
+ * Get string.
+ *
+ * @return String value of buffer.
+ */
+ std::string GetString(size_t maxLen) const;
+
+ /**
+ * Get value of type int8_t.
+ *
+ * @return Integer value of type int8_t.
+ */
+ int8_t GetInt8() const;
+
+ /**
+ * Get value of type int16_t.
+ *
+ * @return Integer value of type int16_t.
+ */
+ int16_t GetInt16() const;
+
+ /**
+ * Get value of type int32_t.
+ *
+ * @return Integer value of type int32_t.
+ */
+ int32_t GetInt32() const;
+
+ /**
+ * Get value of type int64_t.
+ *
+ * @return Integer value of type int64_t.
+ */
+ int64_t GetInt64() const;
+
+ /**
+ * Get value of type float.
+ *
+ * @return Integer value of type float.
+ */
+ float GetFloat() const;
+
+ /**
+ * Get value of type double.
+ *
+ * @return Integer value of type double.
+ */
+ double GetDouble() const;
+
+ /**
+ * Get raw data.
+ *
+ * @return Buffer data.
+ */
+ const void* GetData() const;
+
+ /**
+ * Get result data length.
+ *
+ * @return Data length pointer.
+ */
+ const SqlLen* GetResLen() const;
+
+ /**
+ * Get buffer size in bytes.
+ *
+ * @return Buffer size.
+ */
+ SqlLen GetSize() const
+ {
+ return buflen;
+ }
+
+ private:
+ /**
+ * Get raw data.
+ *
+ * @return Buffer data.
+ */
+ void* GetData();
+
+ /**
+ * Get result data length.
+ *
+ * @return Data length pointer.
+ */
+ SqlLen* GetResLen();
+
+ /**
+ * Put value of numeric type in the buffer.
+ *
+ * @param value Numeric value to put.
+ */
+ template<typename T>
+ void PutNum(T value);
+
+ /**
+ * Put numeric value to numeric buffer.
+ *
+ * @param value Numeric value.
+ */
+ template<typename Tbuf, typename Tin>
+ void PutNumToNumBuffer(Tin value);
+
+ /**
+ * Put value to string buffer.
+ *
+ * @param value Value that can be converted to string.
+ */
+ template<typename CharT, typename Tin>
+ void PutValToStrBuffer(const Tin& value);
+
+ /**
+ * Put value to string buffer.
+ * Specialisation for int8_t.
+ * @param value Value that can be converted to string.
+ */
+ template<typename CharT>
+ void PutValToStrBuffer(const int8_t & value);
+
+ /**
+ * Put string to string buffer.
+ *
+ * @param value String value.
+ */
+ template<typename OutCharT, typename InCharT>
+ void PutStrToStrBuffer(const std::basic_string<InCharT>& value);
+
+ /**
+ * Put raw data to any buffer.
+ *
+ * @param data Data pointer.
+ * @param len Data length.
+ */
+ void PutRawDataToBuffer(void *data, size_t len);
+
+ /**
+ * Get int of type T.
+ *
+ * @return Integer value of specified type.
+ */
+ template<typename T>
+ T GetNum() const;
+
+ /**
+ * Apply buffer offset to pointer.
+ * Adds offset to pointer if offset pointer is not null.
+ * @param ptr Pointer.
+ * @return Pointer with applied offset.
+ */
+ template<typename T>
+ T* ApplyOffset(T* ptr) const;
+
+ /** Underlying data type. */
+ type_traits::IgniteSqlType type;
+
+ /** Buffer pointer. */
+ void* buffer;
+
+ /** Buffer length. */
+ SqlLen buflen;
+
+ /** Result length. */
+ SqlLen* reslen;
+
+ /** Pointer to implementation pointer to application offset */
+ size_t** offset;
+ };
+
+ /** Column binging map type alias. */
+ typedef std::map<uint16_t, ApplicationDataBuffer> ColumnBindingMap;
+ }
+ }
+}
+
+#endif
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/app/parameter.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/app/parameter.h b/modules/platforms/cpp/odbc/include/ignite/odbc/app/parameter.h
new file mode 100644
index 0000000..8756f48
--- /dev/null
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/app/parameter.h
@@ -0,0 +1,113 @@
+/*
+ * 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_ODBC_DRIVER_APP_PARAMETER
+#define _IGNITE_ODBC_DRIVER_APP_PARAMETER
+
+#include <stdint.h>
+
+#include <map>
+
+#include <ignite/guid.h>
+#include <ignite/impl/binary/binary_writer_impl.h>
+#include <ignite/impl/binary/binary_reader_impl.h>
+
+#include "ignite/odbc/app/application_data_buffer.h"
+#include "ignite/odbc/type_traits.h"
+
+namespace ignite
+{
+ namespace odbc
+ {
+ namespace app
+ {
+ /**
+ * Statement parameter.
+ */
+ class Parameter
+ {
+ public:
+ /**
+ * Default constructor.
+ */
+ Parameter();
+
+ /**
+ * Constructor.
+ *
+ * @param buffer Underlying data buffer.
+ * @param sqlType IPD type.
+ * @param columnSize IPD column size.
+ * @param decDigits IPD decimal digits.
+ */
+ Parameter(const ApplicationDataBuffer& buffer, int16_t sqlType,
+ size_t columnSize, int16_t decDigits);
+
+ /**
+ * Copy constructor.
+ *
+ * @param other Other instance.
+ */
+ Parameter(const Parameter& other);
+
+ /**
+ * Destructor.
+ */
+ ~Parameter();
+
+ /**
+ * Copy assigment operator.
+ *
+ * @param other Other instance.
+ * @return This.
+ */
+ Parameter& operator=(const Parameter& other);
+
+ /**
+ * Write request using provided writer.
+ * @param writer Writer.
+ */
+ void Write(ignite::impl::binary::BinaryWriterImpl& writer) const;
+
+ /**
+ * Get data buffer.
+ *
+ * @return underlying ApplicationDataBuffer instance.
+ */
+ ApplicationDataBuffer& GetBuffer();
+
+ private:
+ /** Underlying data buffer. */
+ ApplicationDataBuffer buffer;
+
+ /** IPD type. */
+ int16_t sqlType;
+
+ /** IPD column size. */
+ size_t columnSize;
+
+ /** IPD decimal digits. */
+ int16_t decDigits;
+ };
+
+ /** Parameter binging map type alias. */
+ typedef std::map<uint16_t, Parameter> ParameterBindingMap;
+ }
+ }
+}
+
+#endif
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/column.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/column.h b/modules/platforms/cpp/odbc/include/ignite/odbc/column.h
new file mode 100644
index 0000000..dc0b6d9
--- /dev/null
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/column.h
@@ -0,0 +1,149 @@
+/*
+ * 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_ODBC_DRIVER_COLUMN
+#define _IGNITE_ODBC_DRIVER_COLUMN
+
+#include <stdint.h>
+
+#include <ignite/impl/binary/binary_reader_impl.h>
+
+#include "ignite/odbc/app/application_data_buffer.h"
+
+namespace ignite
+{
+ namespace odbc
+ {
+ /**
+ * Result set column.
+ */
+ class Column
+ {
+ public:
+ /**
+ * Default constructor.
+ */
+ Column();
+
+ /**
+ * Copy constructor.
+ *
+ * @param other Another instance.
+ */
+ Column(const Column& other);
+
+ /**
+ * Copy operator.
+ *
+ * @param other Another instance.
+ * @return This.
+ */
+ Column& operator=(const Column& other);
+
+ /**
+ * Destructor.
+ */
+ ~Column();
+
+ /**
+ * Constructor.
+ *
+ * @param reader Reader to be used to retrieve column data.
+ */
+ Column(ignite::impl::binary::BinaryReaderImpl& reader);
+
+ /**
+ * Get column size in bytes.
+ *
+ * @return Column size.
+ */
+ int32_t GetSize() const
+ {
+ return size;
+ }
+
+ /**
+ * Read column data and store it in application data buffer.
+ *
+ * @param dataBuf Application data buffer.
+ * @return Operation result.
+ */
+ SqlResult ReadToBuffer(ignite::impl::binary::BinaryReaderImpl& reader,
+ app::ApplicationDataBuffer& dataBuf);
+
+ /**
+ * Check if the column is in valid state.
+ *
+ * @return True if valid.
+ */
+ bool IsValid() const
+ {
+ return startPos >= 0;
+ }
+
+ /**
+ * Get unread data length.
+ * Find out how many bytes of data are left unread.
+ *
+ * @return Lengh of unread data in bytes.
+ */
+ int32_t GetUnreadDataLength() const
+ {
+ return size - offset;
+ }
+
+ /**
+ * Get unread data length.
+ * Find out how many bytes of data are left unread.
+ *
+ * @return Lengh of unread data in bytes.
+ */
+ int32_t GetEndPosition() const
+ {
+ return endPos;
+ }
+
+ private:
+ /**
+ * Increase offset.
+ *
+ * Increases offset on specified value and makes sure resulting
+ * offset does not exceed column size.
+ *
+ * @param value Offset is incremented on this value.
+ */
+ void IncreaseOffset(int32_t value);
+
+ /** Column type */
+ int8_t type;
+
+ /** Column position in current row. */
+ int32_t startPos;
+
+ /** Column end position in current row. */
+ int32_t endPos;
+
+ /** Current offset in column. */
+ int32_t offset;
+
+ /** Column data size in bytes. */
+ int32_t size;
+ };
+ }
+}
+
+#endif
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/common_types.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/common_types.h b/modules/platforms/cpp/odbc/include/ignite/odbc/common_types.h
new file mode 100644
index 0000000..8e1dbf2
--- /dev/null
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/common_types.h
@@ -0,0 +1,225 @@
+/*
+ * 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_ODBC_DRIVER_COMMON_TYPES
+#define _IGNITE_ODBC_DRIVER_COMMON_TYPES
+
+#include <stdint.h>
+
+namespace ignite
+{
+ namespace odbc
+ {
+
+#ifdef _WIN64
+ typedef long long SqlLen;
+#else
+ typedef long SqlLen;
+#endif
+
+ /**
+ * SQL result.
+ */
+ enum SqlResult
+ {
+ /** Success. */
+ SQL_RESULT_SUCCESS,
+
+ /** Success with info. */
+ SQL_RESULT_SUCCESS_WITH_INFO,
+
+ /** Error. */
+ SQL_RESULT_ERROR,
+
+ /** No more data. */
+ SQL_RESULT_NO_DATA
+ };
+
+ /**
+ * Provides detailed information about the cause of a warning or error.
+ */
+ enum SqlState
+ {
+ /** Undefined state. Internal, should never be exposed to user. */
+ SQL_STATE_UNKNOWN,
+
+ /** Output data has been truncated. */
+ SQL_STATE_01004_DATA_TRUNCATED,
+
+ /** Error in row. */
+ SQL_STATE_01S01_ERROR_IN_ROW,
+
+ /**
+ * The driver did not support the specified value and
+ * substituted a similar value.
+ */
+ SQL_STATE_01S02_OPTION_VALUE_CHANGED,
+
+ /** Invalid cursor state. */
+ SQL_STATE_24000_INVALID_CURSOR_STATE,
+
+ /**
+ * The driver was unable to establish a connection with the data
+ * source.
+ */
+ SQL_STATE_08001_CANNOT_CONNECT,
+
+ /**
+ * The specified ConnectionHandle had already been used
+ * to establish a connection with a data source, and the connection
+ * was still open.
+ */
+ SQL_STATE_08002_ALREADY_CONNECTED,
+
+ /** The connection specified was not open. */
+ SQL_STATE_08003_NOT_CONNECTED,
+
+ /**
+ * An error occurred for which there was no specific SQLSTATE
+ * and for which no implementation-specific SQLSTATE was defined.
+ */
+ SQL_STATE_HY000_GENERAL_ERROR,
+
+ /**
+ * The driver was unable to allocate memory for the specified
+ * handle.
+ */
+ SQL_STATE_HY001_MEMORY_ALLOCATION,
+
+ /** Function sequence error. */
+ SQL_STATE_HY010_SEQUENCE_ERROR,
+
+ /** Column type out of range. */
+ SQL_STATE_HY097_COLUMN_TYPE_OUT_OF_RANGE,
+
+ /**
+ * The driver does not support the feature of ODBC behavior that
+ * the application requested.
+ */
+ SQL_STATE_HYC00_OPTIONAL_FEATURE_NOT_IMPLEMENTED,
+
+ /**
+ * The connection timeout period expired before the data source
+ * responded to the request.
+ */
+ SQL_STATE_HYT01_CONNECTIOIN_TIMEOUT
+ };
+
+ /**
+ * Diagnostic field type.
+ */
+ enum DiagnosticField
+ {
+ /** Field type is unknown to the driver. */
+ IGNITE_SQL_DIAG_UNKNOWN,
+
+ /** 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
+ };
+
+ /**
+ * Environment attribute.
+ */
+ enum EnvironmentAttribute
+ {
+ /** ODBC attribute is unknown to the driver. */
+ IGNITE_SQL_ENV_ATTR_UNKNOWN,
+
+ /** ODBC version. */
+ IGNITE_SQL_ENV_ATTR_ODBC_VERSION,
+
+ /** Null-termination of strings. */
+ IGNITE_SQL_ENV_ATTR_OUTPUT_NTS
+ };
+
+ /**
+ * Convert internal Ignite type into ODBC SQL return code.
+ *
+ * @param result Internal result type.
+ * @return ODBC result type.
+ */
+ int SqlResultToReturnCode(SqlResult result);
+
+ /**
+ * Convert ODBC field type to internal DiagnosticField type value.
+ *
+ * @param field ODBC field type.
+ * @return Internal DiagnosticField type value.
+ */
+ DiagnosticField DiagnosticFieldToInternal(int16_t field);
+
+ /**
+ * Convert environment attribute to internal EnvironmentAttribute type value.
+ *
+ * @param attr Environment attribute.
+ * @return Internal EnvironmentAttribute type value.
+ */
+ EnvironmentAttribute EnvironmentAttributeToInternal(int32_t attr);
+
+
+ }
+}
+
+#endif
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/config/configuration.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/config/configuration.h b/modules/platforms/cpp/odbc/include/ignite/odbc/config/configuration.h
new file mode 100644
index 0000000..f85a5de
--- /dev/null
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/config/configuration.h
@@ -0,0 +1,164 @@
+/*
+ * 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_ODBC_DRIVER_CONFIGURATION
+#define _IGNITE_ODBC_DRIVER_CONFIGURATION
+
+#include <stdint.h>
+#include <string>
+#include <map>
+
+#include <ignite/common/common.h>
+
+namespace ignite
+{
+ namespace odbc
+ {
+ namespace config
+ {
+ /**
+ * ODBC configuration abstraction.
+ */
+ class Configuration
+ {
+ public:
+ /**
+ * Default constructor.
+ */
+ Configuration();
+
+ /**
+ * Destructor.
+ */
+ ~Configuration();
+
+ /**
+ * Fill configuration data using connection string.
+ *
+ * @param str Pointer to string data.
+ * @param len String length.
+ */
+ void FillFromConnectString(const char* str, size_t len);
+
+ /**
+ * Fill configuration data using connection string.
+ *
+ * @param str Connect string.
+ */
+ void FillFromConnectString(const std::string& str);
+
+ /**
+ * Convert configure to connect string.
+ *
+ * @return Connect string.
+ */
+ std::string ToConnectString() const;
+
+ /**
+ * Fill configuration data using config attributes string.
+ *
+ * @param str Pointer to list of zero-terminated strings.
+ * Terminated by two zero bytes.
+ */
+ void FillFromConfigAttributes(const char* attributes);
+
+ /**
+ * Get server port.
+ *
+ * @return Server port.
+ */
+ uint16_t GetPort() const
+ {
+ return port;
+ }
+
+ /**
+ * Get DSN.
+ *
+ * @return Data Source Name.
+ */
+ const std::string& GetDsn() const
+ {
+ return dsn;
+ }
+
+ /**
+ * Get Driver.
+ *
+ * @return Driver name.
+ */
+ const std::string& GetDriver() const
+ {
+ return driver;
+ }
+
+ /**
+ * Get server host.
+ *
+ * @return Server host.
+ */
+ const std::string& GetHost() const
+ {
+ return host;
+ }
+
+ /**
+ * Get cache.
+ *
+ * @return Cache name.
+ */
+ const std::string& GetCache() const
+ {
+ return cache;
+ }
+
+ private:
+ IGNITE_NO_COPY_ASSIGNMENT(Configuration);
+
+ /** Map containing connect arguments. */
+ typedef std::map<std::string, std::string> ArgumentMap;
+
+ /**
+ * Parse connect string into key-value storage.
+ *
+ * @param str String to parse.
+ * @param len String length.
+ * @param params Parsing result.
+ */
+ void ParseAttributeList(const char* str, size_t len, char delimeter, ArgumentMap& args) const;
+
+ /** Data Source Name. */
+ std::string dsn;
+
+ /** Driver name. */
+ std::string driver;
+
+ /** Server hostname. */
+ std::string host;
+
+ /** Port of the server. */
+ uint16_t port;
+
+ /** Cache name. */
+ std::string cache;
+ };
+ }
+
+ }
+}
+
+#endif
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/config/connection_info.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/config/connection_info.h b/modules/platforms/cpp/odbc/include/ignite/odbc/config/connection_info.h
new file mode 100644
index 0000000..7f2738c
--- /dev/null
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/config/connection_info.h
@@ -0,0 +1,98 @@
+/*
+ * 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_ODBC_DRIVER_CONNECTION_INFO
+#define _IGNITE_ODBC_DRIVER_CONNECTION_INFO
+
+#include <stdint.h>
+
+#include <map>
+
+#include <ignite/common/common.h>
+#include <ignite/odbc/common_types.h>
+
+namespace ignite
+{
+ namespace odbc
+ {
+ namespace config
+ {
+ /**
+ * Connection info.
+ */
+ class ConnectionInfo
+ {
+ public:
+ /** Info type. */
+ typedef unsigned short InfoType;
+
+#ifdef ODBC_DEBUG
+ /**
+ * Convert type to string containing its name.
+ * Debug function.
+ * @param type Info type.
+ * @return Null-terminated string containing types name.
+ */
+ static const char* InfoTypeToString(InfoType type);
+#endif
+
+ /**
+ * Constructor.
+ */
+ ConnectionInfo();
+
+ /**
+ * Destructor.
+ */
+ ~ConnectionInfo();
+
+ /**
+ * Get info of any type.
+ * @param type Info type.
+ * @param buf Result buffer pointer.
+ * @param buflen Result buffer length.
+ * @param reslen Result value length pointer.
+ * @return True on success.
+ */
+ SqlResult GetInfo(InfoType type, void* buf, short buflen, short* reslen) const;
+
+ private:
+ IGNITE_NO_COPY_ASSIGNMENT(ConnectionInfo);
+
+ /** Associative array of string parameters. */
+ typedef std::map<InfoType, std::string> StringInfoMap;
+
+ /** Associative array of unsigned integer parameters. */
+ typedef std::map<InfoType, unsigned int> UintInfoMap;
+
+ /** Associative array of unsigned short parameters. */
+ typedef std::map<InfoType, unsigned short> UshortInfoMap;
+
+ /** String parameters. */
+ StringInfoMap strParams;
+
+ /** Integer parameters. */
+ UintInfoMap intParams;
+
+ /** Short parameters. */
+ UshortInfoMap shortParams;
+ };
+ }
+ }
+}
+
+#endif
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/connection.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/connection.h b/modules/platforms/cpp/odbc/include/ignite/odbc/connection.h
new file mode 100644
index 0000000..56037f5
--- /dev/null
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/connection.h
@@ -0,0 +1,258 @@
+/*
+ * 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_ODBC_DRIVER_CONNECTION
+#define _IGNITE_ODBC_DRIVER_CONNECTION
+
+#include <stdint.h>
+
+#include <vector>
+
+#include "ignite/odbc/parser.h"
+#include "ignite/odbc/system/socket_client.h"
+#include "ignite/odbc/config/connection_info.h"
+#include "ignite/odbc/diagnostic/diagnosable_adapter.h"
+
+namespace ignite
+{
+ namespace odbc
+ {
+ class Statement;
+
+ /**
+ * ODBC node connection.
+ */
+ class Connection : public diagnostic::DiagnosableAdapter
+ {
+ friend class Environment;
+ public:
+ /**
+ * Destructor.
+ */
+ ~Connection();
+
+ /**
+ * Get connection info.
+ *
+ * @return Connection info.
+ */
+ const config::ConnectionInfo& GetInfo() const;
+
+ /**
+ * Get info of any type.
+ *
+ * @param type Info type.
+ * @param buf Result buffer pointer.
+ * @param buflen Result buffer length.
+ * @param reslen Result value length pointer.
+ */
+ void GetInfo(config::ConnectionInfo::InfoType type, void* buf, short buflen, short* reslen);
+
+ /**
+ * Establish connection to ODBC server.
+ *
+ * @param server Server (DSN).
+ */
+ void Establish(const std::string& server);
+
+ /**
+ * Establish connection to ODBC server.
+ *
+ * @param host Host.
+ * @param port Port.
+ * @param cache Cache name to connect to.
+ */
+ void Establish(const std::string& host, uint16_t port, const std::string& cache);
+
+ /**
+ * Release established connection.
+ *
+ * @return Operation result.
+ */
+ void Release();
+
+ /**
+ * Create statement associated with the connection.
+ *
+ * @return Pointer to valid instance on success and NULL on failure.
+ */
+ Statement* CreateStatement();
+
+ /**
+ * Send data by established connection.
+ *
+ * @param data Data buffer.
+ * @param len Data length.
+ * @return True on success.
+ */
+ bool Send(const int8_t* data, size_t len);
+
+ /**
+ * Receive next message.
+ *
+ * @param msg Buffer for message.
+ * @return True on success.
+ */
+ bool Receive(std::vector<int8_t>& msg);
+
+ /**
+ * Get name of the assotiated cache.
+ *
+ * @return Cache name.
+ */
+ const std::string& GetCache() const;
+
+ /**
+ * Create diagnostic record associated with the Connection instance.
+ *
+ * @param sqlState SQL state.
+ * @param message Message.
+ * @param rowNum Associated row number.
+ * @param columnNum Associated column number.
+ * @return DiagnosticRecord associated with the instance.
+ */
+ diagnostic::DiagnosticRecord CreateStatusRecord(SqlState sqlState,
+ const std::string& message, int32_t rowNum = 0, int32_t columnNum = 0) const;
+
+ /**
+ * Synchronously send request message and receive response.
+ *
+ * @param req Request message.
+ * @param rsp Response message.
+ * @return True on success.
+ */
+ template<typename ReqT, typename RspT>
+ bool SyncMessage(const ReqT& req, RspT& rsp)
+ {
+ std::vector<int8_t> tempBuffer;
+
+ parser.Encode(req, tempBuffer);
+
+ bool requestSent = Send(tempBuffer.data(), tempBuffer.size());
+
+ if (!requestSent)
+ return false;
+
+ bool responseReceived = Receive(tempBuffer);
+
+ if (!responseReceived)
+ return false;
+
+ parser.Decode(rsp, tempBuffer);
+
+ return true;
+ }
+
+ /**
+ * Perform transaction commit.
+ */
+ void TransactionCommit();
+
+ /**
+ * Perform transaction rollback.
+ */
+ void TransactionRollback();
+
+ private:
+ IGNITE_NO_COPY_ASSIGNMENT(Connection);
+
+ /**
+ * Establish connection to ODBC server.
+ * Internal call.
+ *
+ * @param server Server (DNS).
+ * @return Operation result.
+ */
+ SqlResult InternalEstablish(const std::string& server);
+
+ /**
+ * Establish connection to ODBC server.
+ * Internal call.
+ *
+ * @param host Host.
+ * @param port Port.
+ * @param cache Cache name to connect to.
+ * @return Operation result.
+ */
+ SqlResult InternalEstablish(const std::string& host, uint16_t port, const std::string& cache);
+
+ /**
+ * Release established connection.
+ * Internal call.
+ *
+ * @return Operation result.
+ */
+ SqlResult InternalRelease();
+
+ /**
+ * Get info of any type.
+ * Internal call.
+ *
+ * @param type Info type.
+ * @param buf Result buffer pointer.
+ * @param buflen Result buffer length.
+ * @param reslen Result value length pointer.
+ * @return Operation result.
+ */
+ SqlResult InternalGetInfo(config::ConnectionInfo::InfoType type, void* buf, short buflen, short* reslen);
+
+ /**
+ * Create statement associated with the connection.
+ * Internal call.
+ *
+ * @param Pointer to valid instance on success and NULL on failure.
+ * @return Operation result.
+ */
+ SqlResult InternalCreateStatement(Statement*& statement);
+
+ /**
+ * Perform transaction commit on all the associated connections.
+ * Internal call.
+ *
+ * @return Operation result.
+ */
+ SqlResult InternalTransactionCommit();
+
+ /**
+ * Perform transaction rollback on all the associated connections.
+ * Internal call.
+ *
+ * @return Operation result.
+ */
+ SqlResult InternalTransactionRollback();
+
+ /**
+ * Constructor.
+ */
+ Connection();
+
+ /** Socket. */
+ tcp::SocketClient socket;
+
+ /** State flag. */
+ bool connected;
+
+ /** Cache name. */
+ std::string cache;
+
+ /** Message parser. */
+ Parser parser;
+ };
+ }
+}
+
+#endif
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/cursor.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/cursor.h b/modules/platforms/cpp/odbc/include/ignite/odbc/cursor.h
new file mode 100644
index 0000000..7d4c925
--- /dev/null
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/cursor.h
@@ -0,0 +1,108 @@
+/*
+ * 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_ODBC_DRIVER_CURSOR
+#define _IGNITE_ODBC_DRIVER_CURSOR
+
+#include <stdint.h>
+
+#include <map>
+#include <memory>
+
+#include "ignite/odbc/result_page.h"
+#include "ignite/odbc/common_types.h"
+#include "ignite/odbc/row.h"
+
+namespace ignite
+{
+ namespace odbc
+ {
+ /**
+ * Query result cursor.
+ */
+ class Cursor
+ {
+ public:
+ /**
+ * Constructor.
+ * @param queryId ID of the executed query.
+ */
+ Cursor(int64_t queryId);
+
+ /**
+ * Destructor.
+ */
+ ~Cursor();
+
+ /**
+ * Move cursor to the next result row.
+ * @return False if data update required or no more data.
+ */
+ bool Increment();
+
+ /**
+ * Check if the cursor needs data update.
+ * @return True if the cursor needs data update.
+ */
+ bool NeedDataUpdate() const;
+
+ /**
+ * Check if the cursor has next row row.
+ * @return True if the cursor has next row row.
+ */
+ bool HasNext() const;
+
+ /**
+ * Get query ID.
+ * @return Query ID.
+ */
+ int64_t GetQueryId() const
+ {
+ return queryId;
+ }
+
+ /**
+ * Update current cursor page data.
+ * @param newPage New result page.
+ */
+ void UpdateData(std::auto_ptr<ResultPage>& newPage);
+
+ /**
+ * Get current row.
+ * @return Current row.
+ */
+ Row* GetRow();
+
+ private:
+ IGNITE_NO_COPY_ASSIGNMENT(Cursor);
+
+ /** Cursor id. */
+ int64_t queryId;
+
+ /** Current page. */
+ std::auto_ptr<ResultPage> currentPage;
+
+ /** Row position in current page. */
+ int32_t currentPagePos;
+
+ /** Current row. */
+ std::auto_ptr<Row> currentRow;
+ };
+ }
+}
+
+#endif
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/decimal.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/decimal.h b/modules/platforms/cpp/odbc/include/ignite/odbc/decimal.h
new file mode 100644
index 0000000..abf7f34
--- /dev/null
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/decimal.h
@@ -0,0 +1,126 @@
+/*
+ * 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);
+
+ /**
+ * Convert to double.
+ */
+ operator double() const;
+
+ /**
+ * Get scale.
+ *
+ * @return Scale.
+ */
+ int32_t GetScale() const;
+
+ /**
+ * Get sign.
+ *
+ * @return Sign: -1 if negative and 1 if positive.
+ */
+ int32_t GetSign() const;
+
+ /**
+ * Check if the value is negative.
+ *
+ * @return True if negative and false otherwise.
+ */
+ bool IsNegative() 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/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/diagnostic/diagnosable.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/diagnostic/diagnosable.h b/modules/platforms/cpp/odbc/include/ignite/odbc/diagnostic/diagnosable.h
new file mode 100644
index 0000000..2afd819
--- /dev/null
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/diagnostic/diagnosable.h
@@ -0,0 +1,82 @@
+/*
+ * 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_ODBC_DRIVER_DIAGNOSABLE
+#define _IGNITE_ODBC_DRIVER_DIAGNOSABLE
+
+#include "ignite/odbc/diagnostic/diagnostic_record_storage.h"
+
+namespace ignite
+{
+ namespace odbc
+ {
+ namespace diagnostic
+ {
+ /**
+ * Diagnosable interface.
+ */
+ class Diagnosable
+ {
+ public:
+ /**
+ * Destructor.
+ */
+ virtual ~Diagnosable()
+ {
+ // No-op.
+ }
+
+ /**
+ * Get diagnostic record.
+ *
+ * @return Diagnostic record.
+ */
+ virtual const diagnostic::DiagnosticRecordStorage& GetDiagnosticRecords() const = 0;
+
+ /**
+ * Add new status record.
+ *
+ * @param sqlState SQL state.
+ * @param message Message.
+ * @param rowNum Associated row number.
+ * @param columnNum Associated column number.
+ */
+ virtual void AddStatusRecord(SqlState sqlState, const std::string& message,
+ int32_t rowNum, int32_t columnNum) = 0;
+
+ /**
+ * Add new status record.
+ *
+ * @param sqlState SQL state.
+ * @param message Message.
+ */
+ virtual void AddStatusRecord(SqlState sqlState, const std::string& message) = 0;
+
+ protected:
+ /**
+ * Default constructor.
+ */
+ Diagnosable()
+ {
+ // No-op.
+ }
+ };
+ }
+ }
+}
+
+#endif
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/diagnostic/diagnosable_adapter.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/diagnostic/diagnosable_adapter.h b/modules/platforms/cpp/odbc/include/ignite/odbc/diagnostic/diagnosable_adapter.h
new file mode 100644
index 0000000..5b01f49
--- /dev/null
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/diagnostic/diagnosable_adapter.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_ODBC_DRIVER_DIAGNOSABLE_ADAPTER
+#define _IGNITE_ODBC_DRIVER_DIAGNOSABLE_ADAPTER
+
+#include "ignite/odbc/diagnostic/diagnosable.h"
+
+#define IGNITE_ODBC_API_CALL(...) \
+ diagnosticRecords.Reset(); \
+ SqlResult result = (__VA_ARGS__); \
+ diagnosticRecords.SetHeaderRecord(result)
+
+#define IGNITE_ODBC_API_CALL_ALWAYS_SUCCESS \
+ diagnosticRecords.Reset(); \
+ diagnosticRecords.SetHeaderRecord(SQL_RESULT_SUCCESS)
+
+namespace ignite
+{
+ namespace odbc
+ {
+ class Connection;
+
+ namespace diagnostic
+ {
+ /**
+ * Diagnosable interface.
+ */
+ class DiagnosableAdapter : public Diagnosable
+ {
+ public:
+ /**
+ * Destructor.
+ */
+ virtual ~DiagnosableAdapter()
+ {
+ // No-op.
+ }
+
+ /**
+ * Get diagnostic record.
+ *
+ * @return Diagnostic record.
+ */
+ virtual const diagnostic::DiagnosticRecordStorage& GetDiagnosticRecords() const
+ {
+ return diagnosticRecords;
+ }
+
+ /**
+ * Add new status record.
+ *
+ * @param sqlState SQL state.
+ * @param message Message.
+ * @param rowNum Associated row number.
+ * @param columnNum Associated column number.
+ */
+ virtual void AddStatusRecord(SqlState sqlState, const std::string& message,
+ int32_t rowNum, int32_t columnNum);
+
+ /**
+ * Add new status record.
+ *
+ * @param sqlState SQL state.
+ * @param message Message.
+ */
+ virtual void AddStatusRecord(SqlState sqlState, const std::string& message);
+
+ protected:
+ /**
+ * Constructor.
+ *
+ * @param connection Pointer to connection. Used to create
+ * diagnostic records with connection info.
+ */
+ DiagnosableAdapter(const Connection* connection = 0) :
+ connection(connection)
+ {
+ // No-op.
+ }
+
+ /** Diagnostic records. */
+ diagnostic::DiagnosticRecordStorage diagnosticRecords;
+
+ private:
+ /** Connection. */
+ const Connection* connection;
+ };
+ }
+ }
+}
+
+#endif
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/diagnostic/diagnostic_record.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/diagnostic/diagnostic_record.h b/modules/platforms/cpp/odbc/include/ignite/odbc/diagnostic/diagnostic_record.h
new file mode 100644
index 0000000..87d29c1
--- /dev/null
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/diagnostic/diagnostic_record.h
@@ -0,0 +1,165 @@
+/*
+ * 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_ODBC_DRIVER_DIAGNOSTIC_RECORD
+#define _IGNITE_ODBC_DRIVER_DIAGNOSTIC_RECORD
+
+#include <stdint.h>
+
+#include <vector>
+
+#include <ignite/common/common.h>
+#include "ignite/odbc/common_types.h"
+#include "ignite/odbc/app/application_data_buffer.h"
+
+namespace ignite
+{
+ namespace odbc
+ {
+ namespace diagnostic
+ {
+ /**
+ * Status diagnostic record.
+ */
+ class DiagnosticRecord
+ {
+ public:
+ /**
+ * Default constructor.
+ */
+ DiagnosticRecord();
+
+ /**
+ * Constructor.
+ *
+ * @param sqlState SQL state code.
+ * @param message Message.
+ * @param connectionName Connection name.
+ * @param serverName Server name.
+ * @param rowNum Associated row number.
+ * @param columnNum Associated column number.
+ */
+ DiagnosticRecord(SqlState sqlState, const std::string& message,
+ const std::string& connectionName, const std::string& serverName,
+ int32_t rowNum = 0, int32_t columnNum = 0);
+
+ /**
+ * Destructor.
+ */
+ ~DiagnosticRecord();
+
+ /**
+ * Get class origin.
+ *
+ * @return A string that indicates the document that defines the
+ * class portion of the SQLSTATE value in this record.
+ */
+ const std::string& GetClassOrigin() const;
+
+ /**
+ * Get subclass origin.
+ *
+ * @return A string with the same format and valid values as origin,
+ * that identifies the defining portion of the subclass
+ * portion of the SQLSTATE code.
+ */
+ const std::string& GetSubclassOrigin() const;
+
+ /**
+ * Get record message text.
+ *
+ * @return An informational message on the error or warning.
+ */
+ const std::string& GetMessage() const;
+
+ /**
+ * Get connection name.
+ *
+ * @return A string that indicates the name of the connection that
+ * the diagnostic record relates to.
+ */
+ const std::string& GetConnectionName() const;
+
+ /**
+ * Get server name.
+ *
+ * @return A string that indicates the server name that the
+ * diagnostic record relates to.
+ */
+ const std::string& GetServerName() const;
+
+ /**
+ * Get SQL state of the record.
+ *
+ * @return A five-character SQLSTATE diagnostic code.
+ */
+ const std::string& GetSqlState() const;
+
+ /**
+ * Get row number.
+ *
+ * @return The row number in the rowset, or the parameter number in
+ * the set of parameters, with which the status record is
+ * associated.
+ */
+ int32_t GetRowNumber() const;
+
+ /**
+ * Get column number.
+ *
+ * @return Contains the value that represents the column number
+ * in the result set or the parameter number in the set
+ * of parameters.
+ */
+ int32_t GetColumnNumber() const;
+
+ private:
+ /** SQL state diagnostic code. */
+ SqlState sqlState;
+
+ /** An informational message on the error or warning. */
+ std::string message;
+
+ /**
+ * A string that indicates the name of the connection that
+ * the diagnostic record relates to.
+ */
+ std::string connectionName;
+
+ /**
+ * A string that indicates the server name that the
+ * diagnostic record relates to.
+ */
+ std::string serverName;
+
+ /**
+ * The row number in the rowset, or the parameter number in the
+ * set of parameters, with which the status record is associated.
+ */
+ int32_t rowNum;
+
+ /**
+ * Contains the value that represents the column number in the
+ * result set or the parameter number in the set of parameters.
+ */
+ int32_t columnNum;
+ };
+ }
+ }
+}
+
+#endif
\ No newline at end of file