diff options
Diffstat (limited to 'ndb/test/odbc/client/SQLGetCursorNameTest.cpp')
-rw-r--r-- | ndb/test/odbc/client/SQLGetCursorNameTest.cpp | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/ndb/test/odbc/client/SQLGetCursorNameTest.cpp b/ndb/test/odbc/client/SQLGetCursorNameTest.cpp new file mode 100644 index 00000000000..1e3ed9f557e --- /dev/null +++ b/ndb/test/odbc/client/SQLGetCursorNameTest.cpp @@ -0,0 +1,221 @@ +/* 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 SQLGetCursorNameTest.cpp + */ + +#include <common.hpp> +using namespace std; + +#define GCN_MESSAGE_LENGTH 50 + +SQLHSTMT GCN_hstmt; +SQLHDESC GCN_hdesc; +SQLHENV GCN_henv; +SQLHDBC GCN_hdbc; + +void GCN_DisplayError(SQLSMALLINT GCN_HandleType, + SQLHDESC GCN_InputHandle); + +/** + * Test to assign a user-defined name to a cursor that is + * associated with an active SQL statement handle + * + * Tests: + * -# if there is no user-defined cursor name, then try to + * get user-definedcursor name + * -# get cursor name in normal case + * + * @return Zero, if test succeeded + */ + +int SQLGetCursorNameTest() +{ + SQLRETURN retcode; + SQLCHAR SQLStmt [120]; + SQLCHAR CursorName [80]; + SQLSMALLINT CNameSize; + + ndbout << endl << "Start SQLGetCursorName Testing" << endl; + + //************************************ + //** Allocate An Environment Handle ** + //************************************ + retcode = SQLAllocHandle(SQL_HANDLE_ENV, + SQL_NULL_HANDLE, + &GCN_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(GCN_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, + GCN_henv, + &GCN_hdbc); + + if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) + ndbout << "Allocated a connection Handle!" << endl; + + // ******************* + // ** Connect to DB ** + // ******************* + retcode = SQLConnect(GCN_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, + GCN_hdbc, + &GCN_hstmt); + + if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) + ndbout << "Allocated a statement handle!" << endl; + + //************************ + //** Define a statement ** + //************************ + + strcpy((char *) SQLStmt, + "SELECT * FROM Customers WHERE Address = 'LM Vag 8'"); + + //************************* + //** Prepare a statement ** + //************************* + + retcode = SQLPrepare(GCN_hstmt, + SQLStmt, + SQL_NTS); + + //************************************************************************* + //** if there is no user-defined cursor name, try to get the cursor name ** + //************************************************************************* + retcode = SQLGetCursorName(GCN_hstmt, + CursorName, + sizeof(CursorName), + &CNameSize); + + if (retcode != SQL_SUCCESS) + { + ndbout << endl << "retcode =" << retcode << endl; + GCN_DisplayError(SQL_HANDLE_STMT, GCN_hstmt); + } + else + ndbout << endl << "The cursor name is : " << (char *) CursorName << endl; + + //************************* + //** Set the cursor name ** + //************************* + retcode = SQLSetCursorName(GCN_hstmt, + (char *)"Customer_CURSOR", + SQL_NTS); + + //*************************** + //** Execute the statement ** + //*************************** + retcode = SQLExecute(GCN_hstmt); + + //********************************************** + //** retrieve and display the new cursor name ** + //********************************************** + retcode = SQLGetCursorName(GCN_hstmt, + CursorName, + sizeof(CursorName), + &CNameSize); + + if (retcode != SQL_SUCCESS) + { + ndbout << endl << "retcode =" << retcode << endl; + GCN_DisplayError(SQL_HANDLE_STMT, GCN_hstmt); + } + else + ndbout << endl << "The cursor name is : " << (char *) CursorName << endl; + + //**************** + // Free Handles ** + //**************** + SQLDisconnect(GCN_hdbc); + SQLFreeHandle(SQL_HANDLE_STMT, GCN_hstmt); + SQLFreeHandle(SQL_HANDLE_DBC, GCN_hdbc); + SQLFreeHandle(SQL_HANDLE_ENV, GCN_henv); + + return NDBT_OK; + + } + + +void GCN_DisplayError(SQLSMALLINT GCN_HandleType, SQLHDESC GCN_InputHandle) +{ + + SQLINTEGER NativeError; + SQLCHAR Sqlstate[5], Msg[GCN_MESSAGE_LENGTH]; + SQLRETURN SQLSTATEs; + SQLSMALLINT i, MsgLen; + i = 1; + + ndbout << "-------------------------------------------------" << endl; + ndbout << "Error diagnostics:" << endl; + + while ((SQLSTATEs = SQLGetDiagRec(GCN_HandleType, + GCN_InputHandle, i, + Sqlstate, + &NativeError, + Msg, + sizeof(Msg), + &MsgLen)) + != SQL_NO_DATA) + { + + ndbout << "the HandleType is:" << GCN_HandleType << endl; + ndbout << "the InputHandle is :" << (long)GCN_InputHandle << endl; + ndbout << "the Msg is: " << (char *) Msg << endl; + ndbout << "the output state is:" << (char *)Sqlstate << endl; + + i ++; + } + ndbout << "-------------------------------------------------" << endl; +} + + + |