IGNITE-2241: Implemented SQLGetTypeInfo.

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

Branch: refs/heads/ignite-1786
Commit: 97c795bb3b34e55e3c06a19654f132f0442ead9b
Parents: a7c3f27
Author: isapego <[email protected]>
Authored: Thu Jan 14 18:38:20 2016 +0300
Committer: isapego <[email protected]>
Committed: Thu Jan 14 18:38:20 2016 +0300

----------------------------------------------------------------------
 .../odbc-driver/include/ignite/odbc/statement.h | 18 +++++++++++----
 .../platforms/cpp/odbc/odbc-driver/src/odbc.cpp | 24 ++++++++++++++------
 .../cpp/odbc/odbc-driver/src/statement.cpp      | 23 +++++++++++++++++++
 3 files changed, 54 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/97c795bb/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/statement.h
----------------------------------------------------------------------
diff --git 
a/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/statement.h 
b/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/statement.h
index 9a42a3e..a42da26 100644
--- a/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/statement.h
+++ b/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/statement.h
@@ -185,7 +185,6 @@ namespace ignite
              * @param schema Schema search pattern.
              * @param table Table search pattern.
              * @param column Column search pattern.
-             * @return True on success.
              */
             void ExecuteGetColumnsMetaQuery(const std::string& schema,
                 const std::string& table, const std::string& column);
@@ -197,7 +196,6 @@ namespace ignite
              * @param schema Schema search pattern.
              * @param table Table search pattern.
              * @param tableType Table type search pattern.
-             * @return True on success.
              */
             void ExecuteGetTablesMetaQuery(const std::string& catalog,
                 const std::string& schema, const std::string& table,
@@ -212,7 +210,6 @@ namespace ignite
              * @param foreignCatalog Foreign key catalog name.
              * @param foreignSchema Foreign key schema name.
              * @param foreignTable Foreign key table name.
-             * @return True on success.
              */
             void ExecuteGetForeignKeysQuery(const std::string& primaryCatalog,
                 const std::string& primarySchema, const std::string& 
primaryTable,
@@ -225,12 +222,18 @@ namespace ignite
              * @param catalog Catalog name.
              * @param schema Schema name.
              * @param table Table name.
-             * @return True on success.
              */
             void ExecuteGetPrimaryKeysQuery(const std::string& catalog,
                 const std::string& schema, const std::string& table);
 
             /**
+             * Get type info.
+             *
+             * @param sqlType SQL type for which to return info or 
SQL_ALL_TYPES.
+             */
+            void ExecuteGetTypeInfoQuery(int16_t sqlType);
+
+            /**
              * Close statement.
              */
             void Close();
@@ -408,6 +411,13 @@ namespace ignite
                 const std::string& schema, const std::string& table);
 
             /**
+             * Get type info.
+             *
+             * @param sqlType SQL type for which to return info or 
SQL_ALL_TYPES.
+             */
+            SqlResult InternalExecuteGetTypeInfoQuery(int16_t sqlType);
+
+            /**
              * Get column attribute.
              *
              * @param colIdx Column index.

http://git-wip-us.apache.org/repos/asf/ignite/blob/97c795bb/modules/platforms/cpp/odbc/odbc-driver/src/odbc.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/odbc-driver/src/odbc.cpp 
b/modules/platforms/cpp/odbc/odbc-driver/src/odbc.cpp
index a27e260..824cb32 100644
--- a/modules/platforms/cpp/odbc/odbc-driver/src/odbc.cpp
+++ b/modules/platforms/cpp/odbc/odbc-driver/src/odbc.cpp
@@ -1193,6 +1193,23 @@ SQLRETURN SQL_API SQLGetDiagRec(SQLSMALLINT     
handleType,
     return SQL_SUCCESS;
 }
 
+SQLRETURN SQL_API SQLGetTypeInfo(SQLHSTMT       stmt,
+                                 SQLSMALLINT    type)
+{
+    using ignite::odbc::Statement;
+
+    LOG_MSG("SQLGetTypeInfo called\n");
+
+    Statement *statement = reinterpret_cast<Statement*>(stmt);
+
+    if (!statement)
+        return SQL_INVALID_HANDLE;
+
+    statement->ExecuteGetTypeInfoQuery(static_cast<int16_t>(type));
+
+    return statement->GetDiagnosticRecords().GetReturnCode();
+}
+
 //
 // ==== Not implemented ====
 //
@@ -1280,13 +1297,6 @@ SQLRETURN SQL_API SQLGetStmtOption(SQLHSTMT     stmt,
     return SQL_SUCCESS;
 }
 
-SQLRETURN SQL_API SQLGetTypeInfo(SQLHSTMT       stmt,
-                                 SQLSMALLINT    type)
-{
-    LOG_MSG("SQLGetTypeInfo called\n");
-    return SQL_SUCCESS;
-}
-
 SQLRETURN SQL_API SQLParamData(SQLHSTMT    stmt,
                                SQLPOINTER* value)
 {

http://git-wip-us.apache.org/repos/asf/ignite/blob/97c795bb/modules/platforms/cpp/odbc/odbc-driver/src/statement.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/odbc-driver/src/statement.cpp 
b/modules/platforms/cpp/odbc/odbc-driver/src/statement.cpp
index b59a993..506afcd 100644
--- a/modules/platforms/cpp/odbc/odbc-driver/src/statement.cpp
+++ b/modules/platforms/cpp/odbc/odbc-driver/src/statement.cpp
@@ -21,6 +21,7 @@
 #include "ignite/odbc/query/table_metadata_query.h"
 #include "ignite/odbc/query/foreign_keys_query.h"
 #include "ignite/odbc/query/primary_keys_query.h"
+#include "ignite/odbc/query/type_info_query.h"
 #include "ignite/odbc/connection.h"
 #include "ignite/odbc/utility.h"
 #include "ignite/odbc/message.h"
@@ -301,6 +302,28 @@ namespace ignite
             return currentQuery->Execute();
         }
 
+        void Statement::ExecuteGetTypeInfoQuery(int16_t sqlType)
+        {
+            IGNITE_ODBC_API_CALL(InternalExecuteGetTypeInfoQuery(sqlType));
+        }
+
+        SqlResult Statement::InternalExecuteGetTypeInfoQuery(int16_t sqlType)
+        {
+            if (!type_traits::IsSqlTypeSupported(sqlType))
+            {
+                
AddStatusRecord(SQL_STATE_HYC00_OPTIONAL_FEATURE_NOT_IMPLEMENTED, "Data type is 
not supported.");
+
+                return SQL_RESULT_ERROR;
+            }
+
+            if (currentQuery.get())
+                currentQuery->Close();
+
+            currentQuery.reset(new query::TypeInfoQuery(*this, sqlType));
+
+            return currentQuery->Execute();
+        }
+
         void Statement::Close()
         {
             IGNITE_ODBC_API_CALL(InternalClose());

Reply via email to