diff options
Diffstat (limited to 'ndb/test/odbc/client/SQLBindColTest.cpp')
-rw-r--r-- | ndb/test/odbc/client/SQLBindColTest.cpp | 537 |
1 files changed, 537 insertions, 0 deletions
diff --git a/ndb/test/odbc/client/SQLBindColTest.cpp b/ndb/test/odbc/client/SQLBindColTest.cpp new file mode 100644 index 00000000000..e2cd4ce73d1 --- /dev/null +++ b/ndb/test/odbc/client/SQLBindColTest.cpp @@ -0,0 +1,537 @@ +/* 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 SQLBindColTest.cpp + */ +#include <common.hpp> +using namespace std; + +#define BindCol_NAME_LEN 10 +#define BindCol_PHONE_LEN 10 +#define BindCol_ADDRESS_LEN 10 +#define BindCol_Price_LEN 10 +#define BindCol_Weight_LEN 10 +#define BindCol_Tax_LEN 10 + +#define BindCol_SQL_MAXIMUM_MESSAGE_LENGTH 200 + +//SQLHDBC BindCol_hdbc; +//SQLHSTMT BindCol_hstmt; +//SQLHENV BindCol_henv; +//SQLHDESC BindCol_hdesc; +//SQLRETURN BCret; + +//SQLCHAR BindCol_Name[BindCol_NAME_LEN], BindCol_Phone[BindCol_PHONE_LEN]; +//SQLCHAR BindCol_Address[BindCol_ADDRESS_LEN]; +//SQLINTEGER NativeError; +//unsigned long BindCol_CustID; + +void BindCol_DisplayError(SQLSMALLINT BindCol_HandleType, + SQLHSTMT BindCol_InputHandle); + +/** + * Test setting column to bind + * for a column in a result + * + * -# Bind columns 1 + * -# Bind columns 2 + * -# Bind columns 3 + * -# Bind columns 4 + * -# Bind columns 5 + * -# Bind columns 6 + * -# Bind columns 7 + * @return Zero, if test succeeded + */ + +int SQLBindColTest() +{ + + SQLHDBC BindCol_hdbc; + SQLHSTMT BindCol_hstmt; + SQLHENV BindCol_henv; + SQLHDESC BindCol_hdesc; + + SQLCHAR SQLStmt1 [240]; + SQLCHAR SQLStmt2 [240]; + SQLCHAR SQLStmt3 [120]; + + SQLRETURN BCret; + + unsigned long BindCol_CustID; + SQLCHAR BindCol_Name[BindCol_NAME_LEN]; + short BindCol_Account; + unsigned short BindCol_Phone; + long BindCol_Price; + float BindCol_Weight; + double BindCol_Tax; + + ndbout << endl << "Start SQLBindCol Testing" << endl; + + //******************************************************************* + //** hstmt + //** Execute a statement to retrieve rows from the Customers table ** + //** We can create the table and insert rows into Customers ** + //******************************************************************* + + //************************************ + //** Allocate An Environment Handle ** + //************************************ + BCret = SQLAllocHandle(SQL_HANDLE_ENV, + SQL_NULL_HANDLE, + &BindCol_henv); + +if (BCret == SQL_SUCCESS || BCret == SQL_SUCCESS_WITH_INFO) + ndbout << "Allocated an environment Handle!" << endl; + + //********************************************* + //** Set the ODBC application Version to 3.x ** + //********************************************* + BCret = SQLSetEnvAttr(BindCol_henv, + SQL_ATTR_ODBC_VERSION, + (SQLPOINTER) SQL_OV_ODBC3, + SQL_IS_UINTEGER); + +if (BCret == SQL_SUCCESS || BCret == SQL_SUCCESS_WITH_INFO) + ndbout << "Set the ODBC application Version to 3.x!" << endl; + +//********************************** +//** Allocate A Connection Handle ** +//********************************** + + BCret = SQLAllocHandle(SQL_HANDLE_DBC, + BindCol_henv, + &BindCol_hdbc); + + if (BCret == SQL_SUCCESS || BCret == SQL_SUCCESS_WITH_INFO) + ndbout << "Allocated a connection Handle!" << endl; + + // ******************* + // ** Connect to DB ** + // ******************* + BCret = SQLConnect(BindCol_hdbc, + (SQLCHAR *) connectString(), + SQL_NTS, + (SQLCHAR *) "", + SQL_NTS, + (SQLCHAR *) "", + SQL_NTS); + + if (BCret == SQL_SUCCESS || BCret == SQL_SUCCESS_WITH_INFO) + ndbout << "Connected to DB : OK!" << endl; + else + { + ndbout << "Failure to Connect DB!" << endl; + return NDBT_FAILED; + } + + //******************************* + //** Allocate statement handle ** + //******************************* + + BCret = SQLAllocHandle(SQL_HANDLE_STMT, + BindCol_hdbc, + &BindCol_hstmt); + if(BCret == SQL_SUCCESS || BCret == SQL_SUCCESS_WITH_INFO) + ndbout << "Allocated a statement handle!" << endl; + + //************************ + //** Define a statement ** + //************************ + + /* Primary key is Integer and Char */ + strcpy((char *) SQLStmt1, "CREATE TABLE Customer1(CustID Integer, Name Char(12), Account Char(12), Phone Char(12), Price Char(6), Weight Char(6), Tax Char(6), Primary Key(CustID, Name))"); + + strcpy((char *) SQLStmt2, "INSERT INTO Customer1 (CustID, Name, Account, Phone, Price, Weight, Tax) VALUES(588, 'peter','6808','7190890', '5.68', '1.58', '0.88')"); + + strcpy((char *) SQLStmt3, "SELECT * FROM Customer1"); + + //************************************************ + //** Prepare and Execute CREATE TABLE statement ** + //************************************************ + ndbout << endl << "Prepare and Execute CREATE TABLE statement ......" << endl; + ndbout << ">>>>" << (char*)SQLStmt1 << "<<<<" << endl; + BCret = SQLExecDirect(BindCol_hstmt, + SQLStmt1, + SQL_NTS); + if (BCret == SQL_SUCCESS) + ndbout << "Prepare and Execute CREATE TABLE statement OK!" + << endl<< endl; + + if (BCret == SQL_ERROR || BCret == SQL_SUCCESS_WITH_INFO) + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + + if (BCret == -2) + { + ndbout << "BCret = SQLExexDirect()=" << BCret << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + } + + //******************************************************* + //** Prepare and Execute INSERT statement with prepare ** + //******************************************************* + ndbout << "Prepare and Execute INSERT statement ......" << endl; + ndbout << ">>>>" << (char*)SQLStmt2 << "<<<<" << endl; + BCret = SQLExecDirect(BindCol_hstmt, + SQLStmt2, + SQL_NTS); + + if (BCret == SQL_SUCCESS) + ndbout << "Prepare and Execute INSERT statement OK!" + << endl << endl; + + if (BCret == SQL_ERROR || BCret == SQL_SUCCESS_WITH_INFO) + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + + if (BCret == -2) + { + ndbout << "BCret = SQLExexDirect()=" << BCret << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + } + + //****************************************** + //** Prepare and EXECUTE SELECT statement ** + //****************************************** + ndbout << "Prepare and Execute SELECT statement ......" << endl; + ndbout << ">>>>" << (char*)SQLStmt3 << "<<<<" << endl; + BCret = SQLExecDirect(BindCol_hstmt, + SQLStmt3, + SQL_NTS); + + if (BCret == SQL_SUCCESS) + ndbout << "Prepare and Execute SELECT statement OK!" + << endl << endl; + + if (BCret == SQL_ERROR || BCret == SQL_SUCCESS_WITH_INFO) + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + + if (BCret == -2) + { + ndbout << "BCret = SQLExexDirect()=" << BCret << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + } + + //******************************* + //** Execute SELECT statement ** + //******************************* + // BCret = SQLExecute(BindCol_hstmt); + // if (BCret == SQL_ERROR || BCret == SQL_SUCCESS_WITH_INFO) + // { + // ndbout << "BCret = " << BCret << endl; + // BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + // } + // else + // { + + if (BCret == SQL_SUCCESS) + ndbout << "Execute INSERT statement OK!" << endl; + + //********************* + //** Test1 ** + //** Bind columns 1 ** + //********************* + + BCret =SQLBindCol(BindCol_hstmt, + 1, + SQL_C_ULONG, + &BindCol_CustID, + sizeof(BindCol_CustID), + NULL); + + if (BCret == SQL_SUCCESS) + { + ndbout << endl << "Bind col 1 OK!" << endl; + } + else if (BCret == SQL_SUCCESS_WITH_INFO) + { + ndbout << "Bind Col 1 OK but with INFO" << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + } + else if (BCret == SQL_ERROR) + { + ndbout << "Bind Col 1 Failed!" << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + return NDBT_FAILED; + } + else + ndbout << endl; + + //********************* + //** Test2 ** + //** Bind columns 2 ** + //********************* + + BCret =SQLBindCol(BindCol_hstmt, + 2, + SQL_C_CHAR, + &BindCol_Name, + BindCol_NAME_LEN, + NULL); + + if (BCret == SQL_SUCCESS) + { + ndbout << "Bind col 2 OK!" << endl; + } + else if (BCret == SQL_SUCCESS_WITH_INFO) + { + ndbout << "Bind Col 2 OK but with INFO" << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + } + else if (BCret == SQL_ERROR) + { + ndbout << "Bind Col 2 Failed!" << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + return NDBT_FAILED; + } + else + ndbout << endl; + + //********************* + //** Test3 ** + //** Bind columns 3 ** + //********************* + + BCret = SQLBindCol(BindCol_hstmt, + 3, + SQL_C_USHORT, + &BindCol_Account, + sizeof(BindCol_Account), + NULL); + + if (BCret == SQL_ERROR) + { + ndbout << "Bind Col 3 Failed!" << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + return NDBT_FAILED; + } + else if (BCret == SQL_SUCCESS_WITH_INFO) + { + ndbout << "Bind Col 3 OK but with INFO" << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + } + else if (BCret == SQL_SUCCESS) + { + ndbout << "Bind col 3 OK!" << endl; + } + else + ndbout << endl; + + //********************* + //** Test4 ** + //** Bind columns 4 ** + //********************* + + BCret = SQLBindCol(BindCol_hstmt, + 4, + SQL_C_USHORT, + &BindCol_Phone, + sizeof(BindCol_Phone), + NULL); + + if (BCret == SQL_ERROR) + { + ndbout << "Bind Col 4 Failed!" << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + return NDBT_FAILED; + } + else if (BCret == SQL_SUCCESS_WITH_INFO) + { + ndbout << "Bind Col 4 OK but with INFO" << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + } + else if (BCret == SQL_SUCCESS) + { + ndbout << "Bind col 4 OK!" << endl; + } + else + ndbout << endl; + + //********************* + //** Test5 ** + //** Bind columns 5 ** + //********************* + + BCret = SQLBindCol(BindCol_hstmt, + 5, + SQL_C_SLONG, + &BindCol_Price, + sizeof(BindCol_Price), + NULL); + + if (BCret == SQL_ERROR) + { + ndbout << "Bind Col 5 Failed!" << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + return NDBT_FAILED; + } + else if (BCret == SQL_SUCCESS_WITH_INFO) + { + ndbout << "Bind Col 5 OK but with INFO" << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + } + else if (BCret == SQL_SUCCESS) + { + ndbout << "Bind col 5 OK!" << endl; + } + else + ndbout << endl; + + //********************* + //** Test6 ** + //** Bind columns 6 ** + //********************* + + BCret = SQLBindCol(BindCol_hstmt, + 6, + SQL_C_FLOAT, + &BindCol_Weight, + sizeof(BindCol_Weight), + NULL); + + if (BCret == SQL_ERROR) + { + ndbout << "Bind Col 6 Failed!" << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + return NDBT_FAILED; + } + else if (BCret == SQL_SUCCESS_WITH_INFO) + { + ndbout << "Bind Col 6 OK but with INFO" << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + } + else if (BCret == SQL_SUCCESS) + { + ndbout << "Bind col 6 OK!" << endl; + } + else + ndbout << endl; + + //********************* + //** Test7 ** + //** Bind columns 7 ** + //********************* + + BCret = SQLBindCol(BindCol_hstmt, + 7, + SQL_C_DOUBLE, + &BindCol_Tax, + sizeof(BindCol_Tax), + NULL); + + if (BCret == SQL_ERROR) + { + ndbout << "Bind Col 7 Failed!" << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + return NDBT_FAILED; + } + else if (BCret == SQL_SUCCESS_WITH_INFO) + { + ndbout << "Bind Col 7 OK but with INFO" << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + } + else if (BCret == SQL_SUCCESS) + { + ndbout << "Bind col 7 OK!" << endl; + } + else + ndbout << endl; + + //} + +//***************************************** +//* Fetch and print each row of data. On ** +//* an error, display a message and exit ** +//***************************************** + +BCret = SQLFetch(BindCol_hstmt); + + ndbout << endl << "BCret = SQLFetch(BindCol_hstmt) = " + << BCret << endl; + +if (BCret == SQL_ERROR) +{ + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); + return NDBT_FAILED; +} +else if (BCret == SQL_SUCCESS_WITH_INFO) +{ + ndbout << "CustID = " << (int)BindCol_CustID << endl; + ndbout << "Name = " << (char *)BindCol_Name << endl; + ndbout << "Account = " << (int)BindCol_Account << endl; + ndbout << "Phone = " << (int)BindCol_Phone << endl; + ndbout << "Price = " << (int)BindCol_Price << endl; + ndbout << "Weight = " << (int)BindCol_Weight << endl; + ndbout << "Tax = " << (int)BindCol_Tax << endl; + BindCol_DisplayError(SQL_HANDLE_STMT, BindCol_hstmt); +} +else +{ + ndbout << "CustID = " << (int)BindCol_CustID << endl; + ndbout << "Name = " << (char *)BindCol_Name << endl; + ndbout << "Account = " << (int)BindCol_Account << endl; + ndbout << "Phone = " << (int)BindCol_Phone << endl; + ndbout << "Price = " << (int)BindCol_Price << endl; + ndbout << "Weight = " << (int)BindCol_Weight << endl; + ndbout << "Tax = " << (int)BindCol_Tax << endl; +} + +// ********************************* +// ** Disconnect and Free Handles ** +// ********************************* +SQLDisconnect(BindCol_hdbc); +SQLFreeHandle(SQL_HANDLE_STMT, BindCol_hstmt); +SQLFreeHandle(SQL_HANDLE_DBC, BindCol_hdbc); +SQLFreeHandle(SQL_HANDLE_ENV, BindCol_henv); + +return NDBT_OK; + +} + +void BindCol_DisplayError(SQLSMALLINT BindCol_HandleType, + SQLHSTMT BindCol_InputHandle) +{ + SQLSMALLINT BindCol_i = 1; + SQLRETURN BindCol__SQLSTATEs; + SQLCHAR BindCol_Sqlstate[5]; + SQLCHAR BindCol_Msg[BindCol_SQL_MAXIMUM_MESSAGE_LENGTH]; + SQLSMALLINT BindCol_MsgLen; + SQLINTEGER NativeError; + + ndbout << "-------------------------------------------------" << endl; + ndbout << "Error diagnostics:" << endl; + + while ((BindCol__SQLSTATEs = SQLGetDiagRec(BindCol_HandleType, + BindCol_InputHandle, + BindCol_i, + BindCol_Sqlstate, + &NativeError, + BindCol_Msg, + sizeof(BindCol_Msg), + &BindCol_MsgLen) + ) != SQL_NO_DATA) + { + + ndbout << "the HandleType is:" << BindCol_HandleType << endl; + ndbout << "the InputHandle is :" << (long)BindCol_InputHandle << endl; + ndbout << "the BindCol_Msg is: " << (char *) BindCol_Msg << endl; + ndbout << "the output state is:" << (char *)BindCol_Sqlstate << endl; + + BindCol_i ++; + break; + } + ndbout << "-------------------------------------------------" << endl; +} + |