diff options
Diffstat (limited to 'storage/ndb/test/odbc/client/SQLGetTypeInfoTest.cpp')
-rw-r--r-- | storage/ndb/test/odbc/client/SQLGetTypeInfoTest.cpp | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/storage/ndb/test/odbc/client/SQLGetTypeInfoTest.cpp b/storage/ndb/test/odbc/client/SQLGetTypeInfoTest.cpp new file mode 100644 index 00000000000..5925d1cc1ae --- /dev/null +++ b/storage/ndb/test/odbc/client/SQLGetTypeInfoTest.cpp @@ -0,0 +1,202 @@ +/* Copyright (C) 2003 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + + /** + * @file SQLGetTypeInfoTest.cpp + */ + +#include <common.hpp> +#define GT_MESSAGE_LENGTH 200 + +using namespace std; + +SQLHDBC GT_hdbc; +SQLHSTMT GT_hstmt; +SQLHENV GT_henv; + +void SQLGetTypeInfoTest_DisplayError(SQLSMALLINT GT_HandleType, + SQLHDBC GT_InputHandle); + +/** + * Test to retrieve general information about the data types + * supported by the data source an application is currently connected to. + * + * Tests: + * -# Test The value of FunctionId is not in table 37 + * @return Zero, if test succeeded + */ +int SQLGetTypeInfoTest() +{ + SQLRETURN retcode; + SQLSMALLINT ColumnSize; + unsigned long TypeName; + // SQLCHAR TypeName[128]; + + ndbout << endl << "Start SQLGetTypeInfo Testing" << endl; + + //************************************ + //** Allocate An Environment Handle ** + //************************************ + retcode = SQLAllocHandle(SQL_HANDLE_ENV, + SQL_NULL_HANDLE, + >_henv); + + if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) + ndbout << "Allocated an environment Handle!" << endl; + + //********************************************* + //** Set the ODBC application Version to 3.x ** + //********************************************* + retcode = SQLSetEnvAttr(GT_henv, + SQL_ATTR_ODBC_VERSION, + (SQLPOINTER) SQL_OV_ODBC3, + SQL_IS_UINTEGER); + + if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) + ndbout << "Set the ODBC application Version to 3.X!" << endl; + + //********************************** + //** Allocate A Connection Handle ** + //********************************** + + retcode = SQLAllocHandle(SQL_HANDLE_DBC, + GT_henv, + >_hdbc); + + if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) + ndbout << "Allocated a connection Handle!" << endl; + + // ******************* + // ** Connect to DB ** + // ******************* + retcode = SQLConnect(GT_hdbc, + (SQLCHAR *) connectString(), + SQL_NTS, + (SQLCHAR *) "", + SQL_NTS, + (SQLCHAR *) "", + SQL_NTS); + + + //******************************* + //** Allocate statement handle ** + //******************************* + + retcode = SQLAllocHandle(SQL_HANDLE_STMT, + GT_hdbc, + >_hstmt); + + + //*********************************************** + //** Get DataType From the Current Application ** + //*********************************************** + retcode = SQLGetTypeInfo(GT_hstmt, SQL_CHAR); + ndbout << "retcode =SQLGetTypeInfo()= " << retcode << endl; + if (retcode == SQL_SUCCESS) + { + retcode =SQLBindCol(GT_hstmt, + 2, + SQL_C_ULONG, + TypeName, + sizeof(TypeName), + NULL); + ndbout << "retcode = SQLBindCol()= " << retcode << endl; + + // retcode =SQLBindCol(GT_hstmt, + // 1, + // SQL_C_DEFAULT, + // ColumnSize, + // sizeof(ColumnSize), + // NULL); + + retcode = SQLFetch(GT_hstmt); + ndbout << "retcode = SQLFETCH()=" << retcode << endl; + ndbout << "DataType = " << TypeName << endl; + + } + + //******************************************************* + //** If the Value of DataType is not in Table 37, then ** + //** an exception condition is raised ** + //******************************************************* + retcode = SQLGetTypeInfo(GT_hstmt, 8888888); + if (retcode == -2) + { + ndbout << "retcode = " << retcode << endl; + ndbout << "The value of DataType is not in table 37" << endl; + SQLGetTypeInfoTest_DisplayError(SQL_HANDLE_STMT, GT_hstmt); + } + else if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) + { + ndbout << "retcode = " << retcode << endl; + ndbout << endl << "The value of DataType is not in Table 37" << endl; + SQLGetTypeInfoTest_DisplayError(SQL_HANDLE_STMT, GT_hstmt); + } + else + { + ndbout << "retcode = " << retcode << endl; + ndbout << endl << "The value of DataType is not in Table 37" << endl; + SQLGetTypeInfoTest_DisplayError(SQL_HANDLE_STMT, GT_hstmt); + } + // ********************************* + // ** Disconnect and Free Handles ** + // ********************************* + SQLDisconnect(GT_hdbc); + SQLFreeHandle(SQL_HANDLE_STMT, GT_hstmt); + SQLFreeHandle(SQL_HANDLE_DBC, GT_hdbc); + SQLFreeHandle(SQL_HANDLE_ENV, GT_henv); + + return NDBT_OK; + + } + +void SQLGetTypeInfoTest_DisplayError(SQLSMALLINT GT_HandleType, + SQLHDBC GT_InputHandle) +{ + SQLINTEGER NativeError; + SQLSMALLINT i, MsgLen; + SQLCHAR Msg[GT_MESSAGE_LENGTH]; + SQLRETURN SQLSTATEs; + SQLCHAR Sqlstate[50]; + i = 1; + + ndbout << "-------------------------------------------------" << endl; + ndbout << "Error diagnostics:" << endl; + + while ((SQLSTATEs = SQLGetDiagRec(GT_HandleType, + GT_InputHandle, + i, + Sqlstate, + &NativeError, + Msg, + sizeof(Msg), + &MsgLen)) + != SQL_NO_DATA) +{ + + ndbout << "the HandleType is:" << GT_HandleType << endl; + ndbout << "the InputHandle is :" << (long)GT_InputHandle << endl; + ndbout << "the Msg is :" << (char *) Msg << endl; + ndbout << "the output state is:" << (char *)Sqlstate << endl; + + i ++; + break; + } + ndbout << "-------------------------------------------------" << endl; +} + + + |