diff options
Diffstat (limited to 'storage/ndb/test/odbc/client/SQLGetDataTest.cpp')
-rw-r--r-- | storage/ndb/test/odbc/client/SQLGetDataTest.cpp | 358 |
1 files changed, 358 insertions, 0 deletions
diff --git a/storage/ndb/test/odbc/client/SQLGetDataTest.cpp b/storage/ndb/test/odbc/client/SQLGetDataTest.cpp new file mode 100644 index 00000000000..9d958c6c953 --- /dev/null +++ b/storage/ndb/test/odbc/client/SQLGetDataTest.cpp @@ -0,0 +1,358 @@ +/* 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 SQLGetDataTest.cpp + */ + +#include <common.hpp> +using namespace std; + +#define GD_MESSAGE_LENGTH 200 + +SQLHSTMT GD_hstmt; +SQLHENV GD_henv; +SQLHDBC GD_hdbc; +SQLHDESC GD_hdesc; + +void GetData_DisplayError(SQLSMALLINT GD_HandleType, SQLHSTMT GD_InputHandle); + +/** + * Test to retrieve data for a single unbound column + * in the current row of a result data set + * + * Tests: + * -# Test1 There is no fetched rowset associated with S + * -# Test2 column number is less than zero + * -# Test3 fetched rowset is empty + * @return Zero, if test succeeded + */ + +int SQLGetDataTest() +{ + SQLRETURN retcode; + SQLCHAR ColumnName; + SQLINTEGER CustID; + // SQLCHAR Name, Address, Phone; + SQLCHAR SQLStmt [120]; + SQLCHAR SQLStmt1 [120]; + + //************************************ + //** Allocate An Environment Handle ** + //************************************ + retcode = SQLAllocHandle(SQL_HANDLE_ENV, + SQL_NULL_HANDLE, + &GD_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(GD_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, + GD_henv, + &GD_hdbc); + + if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) + ndbout << "Allocated a connection Handle!" << endl; + + // ******************* + // ** Connect to DB ** + // ******************* + retcode = SQLConnect(GD_hdbc, + (SQLCHAR *) connectString(), + SQL_NTS, + (SQLCHAR *) "", + SQL_NTS, + (SQLCHAR *) "", + SQL_NTS); + + if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) + ndbout << "Connected to DB : OK!" << endl; + else + { + ndbout << "Failure to Connect DB!" << endl; + return NDBT_FAILED; + } + + //******************************* + //** Allocate statement handle ** + //******************************* + + retcode = SQLAllocHandle(SQL_HANDLE_STMT, + GD_hdbc, + &GD_hstmt); + if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) + ndbout << "Allocated a statement handle!" << endl; + + //***************************** + //** Define SELECT statement ** + //***************************** + + strcpy((char *) SQLStmt, "SELECT * FROM Customers"); + + + //*********************************** + //** Prepare SELECT SQL statement ** + //*********************************** + + retcode = SQLPrepare(GD_hstmt, + SQLStmt, + SQL_NTS); + ndbout << endl << "Preparing SELECT, retcode = SQLprepare()= " + << retcode << endl; + + //********************************* + //** Execute prepared statement ** + //********************************* + + // if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) + //{ + + retcode = SQLExecute(GD_hstmt); + + ndbout << "Exexuting SELECT, retcode = SQLExecute()= " + << retcode << endl; + + // if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) + // { + + //***************************************************************** + //** Test1 ** + //** There is no fetched rowset associated with S(SQL-statement) ** + //***************************************************************** + + retcode = SQLGetData(GD_hstmt, + 1, + SQL_C_SLONG, + &CustID, + sizeof(CustID), + NULL); + ndbout << "retcode = SQLGetData()= " << retcode << endl; + + if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) + { + ndbout << endl << "Test 1:" << endl; + ndbout << "There is no fetched rowset associated with SQL" + << " statement. But system reported SUCCESS or" + << " SUCCESS_WITH_INFO. Please check the function!" << endl; + GetData_DisplayError(SQL_HANDLE_STMT, GD_hstmt); + } + else if (retcode == SQL_ERROR) + { + ndbout << endl << "Test 1:" << endl; + ndbout << "There is no fetched rowset associated with SQL" + << " statement. The system reported ERROR " + << " The function is OK!" << endl; + } + else + ndbout << endl; + + //******************************* + //** Fetch Data from database ** + //******************************* + + retcode = SQLFetch(GD_hstmt); + + ndbout << endl + << "Fetching after Executing SELECT, retcode = SQLFetch()= " + << retcode << endl; + + if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) + { + + //************************************** + //** Test2 ** + //** column number is less than zero ** + //************************************** + + retcode = SQLGetData(GD_hstmt, + 0, + SQL_C_ULONG, + &CustID, + sizeof(CustID), + NULL); + + if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) + { + ndbout << "Test 2:" <<"Column number is less than zero" + << " The system reported SUCCESS or SUCCESS_WITH_INFO." + << " Check the function, please!" <<endl; + GetData_DisplayError(SQL_HANDLE_STMT, GD_hstmt); + } + else if (retcode == SQL_ERROR) + { + ndbout << "Test 2:" << "Column number is less than zero." + << " The system reported SQL_ERROR." + << " The function is OK!" << endl; + } + else + ndbout << endl; + } + // } + + // } + + //***************************** + //** Define DELETE statement ** + //***************************** + + // strcpy((char *) SQLStmt1, "DELETE FROM Customers"); + strcpy((char *) SQLStmt1, "DELETE FROM Customers WHERE CustID = 568 AND Name = 'Hans Peter'"); + + //*********************************** + //** Prepare DELETE SQL statement ** + //*********************************** + + retcode = SQLPrepare(GD_hstmt, + SQLStmt1, + SQL_NTS); + ndbout << endl << "Preparing DELETE, retcode = SQLPrepare()= " + << retcode << endl; + + //**************************************** + //** Execute prepared DELETE statement ** + //**************************************** + + // if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) + // { + + retcode = SQLExecute(GD_hstmt); + + ndbout << "Executing DELETE, retcode = SQLExecute()= " + << retcode << endl; + + // if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) + // { + + retcode = SQLFetch(GD_hstmt); + + ndbout << "Fetching after Executing DELETE, retcode = SQLExecute()= " + << retcode << endl; + + if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) + { + + //****************************************************** + //** Test3 ** + //** If the fetched rowset associated with ** + //** Statement is empty, condition is raised: NO DATA ** + //** We can delete all rows in table Customers for ** + //** this case ** + //****************************************************** + + retcode = SQLGetData(GD_hstmt, + 1, + SQL_C_ULONG, + &CustID, + sizeof(CustID), + NULL); + + if (retcode == SQL_ERROR) + { + ndbout << "Test 3:" << endl; + ndbout << "The fetched rowset associated" + << "with Statementhandle is empty. The system" + << " reported SQL_ERROR. Check the function!" << endl; + GetData_DisplayError(SQL_HANDLE_STMT, GD_hstmt); + } + else if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) + { + ndbout << "Test 3:" << endl; + ndbout << "The fetched rowset associated" + << "with Statementhandle is empty. The system" + << " reported SUCCESS. Check the function!" << endl; + GetData_DisplayError(SQL_HANDLE_STMT, GD_hstmt); + } + else if (retcode == 100) + { + ndbout << "Test 3:" << endl; + ndbout << "The fetched rowset associated" + << "with Statementhandle is empty. The system" + << " reported SQL_NO_DATA. The function is OK!" << endl; + } + } + else if (retcode == SQL_ERROR) + { + ndbout << "Test 3 falied!" << endl; + GetData_DisplayError(SQL_HANDLE_STMT, GD_hstmt); + } + else + ndbout << " " << endl; + + // } + // } + + // ********************************* + // ** Disconnect and Free Handles ** + // ********************************* + SQLDisconnect(GD_hdbc); + SQLFreeHandle(SQL_HANDLE_STMT, GD_hstmt); + SQLFreeHandle(SQL_HANDLE_DBC, GD_hdbc); + SQLFreeHandle(SQL_HANDLE_ENV, GD_henv); + + return NDBT_OK; +} + +void GetData_DisplayError(SQLSMALLINT GD_HandleType, SQLHSTMT GD_InputHandle) +{ + + SQLSMALLINT i, MsgLen; + SQLRETURN SQLSTATEs; + SQLCHAR Sqlstate[5], Msg[GD_MESSAGE_LENGTH]; + SQLINTEGER NativeError; + i = 1; + + ndbout << "-------------------------------------------------" << endl; + ndbout << "Error diagnostics:" << endl; + + while ((SQLSTATEs = SQLGetDiagRec(GD_HandleType, + GD_InputHandle, + i, + Sqlstate, + &NativeError, + Msg, + sizeof(Msg), + &MsgLen)) + != SQL_NO_DATA) + { + + ndbout << "the HandleType is:" << GD_HandleType << endl; + ndbout << "the InputHandle is :" << (long)GD_InputHandle << endl; + ndbout << "Phone = " << (char *)Msg << endl; + ndbout << "the output state is:" << (char *)Sqlstate << endl; + + i ++; + break; + } + ndbout << "-------------------------------------------------" << endl; +} + + + |