summaryrefslogtreecommitdiff
path: root/ndb/test/odbc/client/SQLBindColTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ndb/test/odbc/client/SQLBindColTest.cpp')
-rw-r--r--ndb/test/odbc/client/SQLBindColTest.cpp537
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;
+}
+