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());
