mariadb/ndb/test/odbc/client/SQLGetDataTest.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

358 lines
10 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 SQLGetDataTest.cpp
*/
#include <common.hpp>
using namespace std;
#define GD_MESSAGE_LENGTH 200
SQLHSTMT GD_hstmt;
SQLHENV GD_henv;
SQLHDBC GD_hdbc;
SQLHDESC GD_hdesc;
void GetData_DisplayError(SQLSMALLINT GD_HandleType, SQLHSTMT GD_InputHandle);
/**
* Test to retrieve data for a single unbound column
* in the current row of a result data set
*
* Tests:
* -# Test1 There is no fetched rowset associated with S
* -# Test2 column number is less than zero
* -# Test3 fetched rowset is empty
* @return Zero, if test succeeded
*/
int SQLGetDataTest()
{
SQLRETURN retcode;
SQLCHAR ColumnName;
SQLINTEGER CustID;
// SQLCHAR Name, Address, Phone;
SQLCHAR SQLStmt [120];
SQLCHAR SQLStmt1 [120];
//************************************
//** Allocate An Environment Handle **
//************************************
retcode = SQLAllocHandle(SQL_HANDLE_ENV,
SQL_NULL_HANDLE,
&GD_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(GD_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,
GD_henv,
&GD_hdbc);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
ndbout << "Allocated a connection Handle!" << endl;
// *******************
// ** Connect to DB **
// *******************
retcode = SQLConnect(GD_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,
GD_hdbc,
&GD_hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
ndbout << "Allocated a statement handle!" << endl;
//*****************************
//** Define SELECT statement **
//*****************************
strcpy((char *) SQLStmt, "SELECT * FROM Customers");
//***********************************
//** Prepare SELECT SQL statement **
//***********************************
retcode = SQLPrepare(GD_hstmt,
SQLStmt,
SQL_NTS);
ndbout << endl << "Preparing SELECT, retcode = SQLprepare()= "
<< retcode << endl;
//*********************************
//** Execute prepared statement **
//*********************************
// if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
//{
retcode = SQLExecute(GD_hstmt);
ndbout << "Exexuting SELECT, retcode = SQLExecute()= "
<< retcode << endl;
// if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
// {
//*****************************************************************
//** Test1 **
//** There is no fetched rowset associated with S(SQL-statement) **
//*****************************************************************
retcode = SQLGetData(GD_hstmt,
1,
SQL_C_SLONG,
&CustID,
sizeof(CustID),
NULL);
ndbout << "retcode = SQLGetData()= " << retcode << endl;
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
ndbout << endl << "Test 1:" << endl;
ndbout << "There is no fetched rowset associated with SQL"
<< " statement. But system reported SUCCESS or"
<< " SUCCESS_WITH_INFO. Please check the function!" << endl;
GetData_DisplayError(SQL_HANDLE_STMT, GD_hstmt);
}
else if (retcode == SQL_ERROR)
{
ndbout << endl << "Test 1:" << endl;
ndbout << "There is no fetched rowset associated with SQL"
<< " statement. The system reported ERROR "
<< " The function is OK!" << endl;
}
else
ndbout << endl;
//*******************************
//** Fetch Data from database **
//*******************************
retcode = SQLFetch(GD_hstmt);
ndbout << endl
<< "Fetching after Executing SELECT, retcode = SQLFetch()= "
<< retcode << endl;
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
//**************************************
//** Test2 **
//** column number is less than zero **
//**************************************
retcode = SQLGetData(GD_hstmt,
0,
SQL_C_ULONG,
&CustID,
sizeof(CustID),
NULL);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
ndbout << "Test 2:" <<"Column number is less than zero"
<< " The system reported SUCCESS or SUCCESS_WITH_INFO."
<< " Check the function, please!" <<endl;
GetData_DisplayError(SQL_HANDLE_STMT, GD_hstmt);
}
else if (retcode == SQL_ERROR)
{
ndbout << "Test 2:" << "Column number is less than zero."
<< " The system reported SQL_ERROR."
<< " The function is OK!" << endl;
}
else
ndbout << endl;
}
// }
// }
//*****************************
//** Define DELETE statement **
//*****************************
// strcpy((char *) SQLStmt1, "DELETE FROM Customers");
strcpy((char *) SQLStmt1, "DELETE FROM Customers WHERE CustID = 568 AND Name = 'Hans Peter'");
//***********************************
//** Prepare DELETE SQL statement **
//***********************************
retcode = SQLPrepare(GD_hstmt,
SQLStmt1,
SQL_NTS);
ndbout << endl << "Preparing DELETE, retcode = SQLPrepare()= "
<< retcode << endl;
//****************************************
//** Execute prepared DELETE statement **
//****************************************
// if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
// {
retcode = SQLExecute(GD_hstmt);
ndbout << "Executing DELETE, retcode = SQLExecute()= "
<< retcode << endl;
// if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
// {
retcode = SQLFetch(GD_hstmt);
ndbout << "Fetching after Executing DELETE, retcode = SQLExecute()= "
<< retcode << endl;
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
//******************************************************
//** Test3 **
//** If the fetched rowset associated with **
//** Statement is empty, condition is raised: NO DATA **
//** We can delete all rows in table Customers for **
//** this case **
//******************************************************
retcode = SQLGetData(GD_hstmt,
1,
SQL_C_ULONG,
&CustID,
sizeof(CustID),
NULL);
if (retcode == SQL_ERROR)
{
ndbout << "Test 3:" << endl;
ndbout << "The fetched rowset associated"
<< "with Statementhandle is empty. The system"
<< " reported SQL_ERROR. Check the function!" << endl;
GetData_DisplayError(SQL_HANDLE_STMT, GD_hstmt);
}
else if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
ndbout << "Test 3:" << endl;
ndbout << "The fetched rowset associated"
<< "with Statementhandle is empty. The system"
<< " reported SUCCESS. Check the function!" << endl;
GetData_DisplayError(SQL_HANDLE_STMT, GD_hstmt);
}
else if (retcode == 100)
{
ndbout << "Test 3:" << endl;
ndbout << "The fetched rowset associated"
<< "with Statementhandle is empty. The system"
<< " reported SQL_NO_DATA. The function is OK!" << endl;
}
}
else if (retcode == SQL_ERROR)
{
ndbout << "Test 3 falied!" << endl;
GetData_DisplayError(SQL_HANDLE_STMT, GD_hstmt);
}
else
ndbout << " " << endl;
// }
// }
// *********************************
// ** Disconnect and Free Handles **
// *********************************
SQLDisconnect(GD_hdbc);
SQLFreeHandle(SQL_HANDLE_STMT, GD_hstmt);
SQLFreeHandle(SQL_HANDLE_DBC, GD_hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, GD_henv);
return NDBT_OK;
}
void GetData_DisplayError(SQLSMALLINT GD_HandleType, SQLHSTMT GD_InputHandle)
{
SQLSMALLINT i, MsgLen;
SQLRETURN SQLSTATEs;
SQLCHAR Sqlstate[5], Msg[GD_MESSAGE_LENGTH];
SQLINTEGER NativeError;
i = 1;
ndbout << "-------------------------------------------------" << endl;
ndbout << "Error diagnostics:" << endl;
while ((SQLSTATEs = SQLGetDiagRec(GD_HandleType,
GD_InputHandle,
i,
Sqlstate,
&NativeError,
Msg,
sizeof(Msg),
&MsgLen))
!= SQL_NO_DATA)
{
ndbout << "the HandleType is:" << GD_HandleType << endl;
ndbout << "the InputHandle is :" << (long)GD_InputHandle << endl;
ndbout << "Phone = " << (char *)Msg << endl;
ndbout << "the output state is:" << (char *)Sqlstate << endl;
i ++;
break;
}
ndbout << "-------------------------------------------------" << endl;
}