mariadb/ndb/test/odbc/client/SQLBindColTest.cpp
unknown 6386c55cee Initial revision of NDB Cluster files
BitKeeper/etc/logging_ok:
  Logging to logging@openlogging.org accepted
2004-04-14 10:53:21 +02:00

537 lines
15 KiB
C++

/* 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;
}