mirror of
https://github.com/MariaDB/server.git
synced 2025-02-02 20:11:42 +01:00
6386c55cee
BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
537 lines
15 KiB
C++
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;
|
|
}
|
|
|