SQLCancelTest.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:7k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13.  /**
  14.  * @file SQLCancelTest.cpp
  15.  */
  16. #include <common.hpp>
  17. #define Cancel_MESSAGE_LENGTH 200
  18. using namespace std;
  19. SQLHDBC     CC_hdbc;
  20. SQLHSTMT    CC_hstmt;
  21. SQLHENV     CC_henv;
  22. SQLHDESC    CC_hdesc;
  23.        
  24. void Cancel_DisplayError(SQLSMALLINT Cancel_HandleType, 
  25.  SQLHSTMT Cancel_InputHandle);
  26. /** 
  27.  * Test to terminate SQL statement precessing
  28.  *
  29.  * Tests:
  30.  * -# normal case test with correct hstmt handle
  31.  * -# SQL_STILL_EXECUTING case test with hstmt handle
  32.  * -# abnormal case test with incorrect hdbc, henv and hdesc handle
  33.  * @return Zero, if test succeeded
  34.  */
  35. int SQLCancelTest()
  36. {
  37.   SQLRETURN   retcode;
  38.   SQLCHAR SQLStmt [120];
  39.   ndbout << endl << "Start SQLCancel Testing" << endl;
  40.   //************************************
  41.   //** Allocate An Environment Handle **
  42.   //************************************
  43.   retcode = SQLAllocHandle(SQL_HANDLE_ENV, 
  44.    SQL_NULL_HANDLE, 
  45.    &CC_henv);
  46.   
  47.   if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  48.     ndbout << "Allocated an environment Handle!" << endl;
  49.   
  50.   //*********************************************
  51.   //** Set the ODBC application Version to 3.x **
  52.   //*********************************************
  53.   retcode = SQLSetEnvAttr(CC_henv, 
  54.   SQL_ATTR_ODBC_VERSION, 
  55.   (SQLPOINTER) SQL_OV_ODBC3, 
  56.   SQL_IS_UINTEGER);
  57.   
  58.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  59.     ndbout << "Set the ODBC application Version to 3.x!" << endl;
  60.   //**********************************
  61.   //** Allocate A Connection Handle **
  62.   //**********************************
  63.   retcode = SQLAllocHandle(SQL_HANDLE_DBC, CC_henv, &CC_hdbc);
  64.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  65.     ndbout << "Allocated a connection Handle!" << endl;
  66.   
  67.   // *******************
  68.   // ** Connect to DB **
  69.   // *******************
  70.   retcode = SQLConnect(CC_hdbc, 
  71.        (SQLCHAR *) connectString(), 
  72.        SQL_NTS, 
  73.        (SQLCHAR *) "", 
  74.        SQL_NTS, 
  75.        (SQLCHAR *) "", 
  76.        SQL_NTS);
  77.   
  78.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  79.     ndbout << "Connected to DB : OK!" << endl;
  80.   else 
  81.     ndbout << "Failure to Connect DB!" << endl;
  82.   
  83.   //*******************************
  84.   //** Allocate statement handle **
  85.   //*******************************
  86.   retcode = SQLAllocHandle(SQL_HANDLE_STMT, CC_hdbc, &CC_hstmt); 
  87.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) 
  88.     ndbout << "Allocated a statement handle!" << endl;
  89.   
  90.   //************************
  91.   //** Define a statement **
  92.   //************************
  93.   strcpy((char *) SQLStmt, 
  94.          "select * FROM Customers");
  95.   //*************************
  96.   //** Prepare a statement **
  97.   //*************************
  98.   retcode = SQLPrepare(CC_hstmt, 
  99.        SQLStmt, 
  100.        SQL_NTS);
  101.   
  102.   //***********************
  103.   //** Execute statement **
  104.   //***********************
  105.   retcode = SQLExecute(CC_hstmt);
  106.   
  107.   //************************************************
  108.   //** Test 1                                     **
  109.   //** Input correct hstmt handle for normal test **
  110.   //************************************************
  111.   retcode = SQLCancel(CC_hstmt);
  112.   if (retcode == SQL_INVALID_HANDLE)
  113.     {
  114.       ndbout << "Test 1" << endl;
  115.       ndbout << "Handle Type is SQL_HANDLE_STMT, but SQL_INVALID_HANDLE" 
  116.      << "still appeared. Please check program" << endl;
  117.     }
  118.   if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO)
  119.     {
  120.       ndbout << "Test 1" << endl;
  121.       Cancel_DisplayError(SQL_HANDLE_STMT, CC_hstmt);
  122.     }
  123.   //************************************************
  124.   //** Test 2                                     **
  125.   //** SQL_STILL_EXECUTING is not defined         **
  126.   //************************************************
  127.   if (retcode == SQL_STILL_EXECUTING)
  128.     {
  129.       ndbout << "Test 2" << endl;
  130.     ndbout << "The function is still processing." << endl;
  131.     }
  132.   if (retcode == SQL_ERROR)
  133.     {
  134.       ndbout << "Test 2" << endl;
  135.       ndbout << "The Asynchronous processing was successfully canceled!" 
  136.      << endl;
  137.     }
  138.   //*********************************
  139.   //** Test 3                      **
  140.   //** Input incorrect henv handle **
  141.   //*********************************
  142.   retcode = SQLCancel(CC_henv);
  143.   if (retcode == SQL_SUCCESS_WITH_INFO || retcode == SQL_SUCCESS)
  144.     { 
  145.       ndbout << "Test 3" << endl;
  146.       ndbout << "Handle Type is SQL_HANDLE_ENV, but SQL_SUCCESS_WITH_INFO" 
  147.      << " still appeared. Please check program" << endl;
  148.       Cancel_DisplayError(SQL_HANDLE_ENV, CC_henv);
  149.     }
  150.   //*********************************
  151.   //** Test 4                      **
  152.   //** Input incorrect hdbc handle **
  153.   //*********************************
  154.   retcode = SQLCancel(CC_hdbc);
  155.   if (retcode == SQL_SUCCESS_WITH_INFO || retcode == SQL_SUCCESS)
  156.   {
  157.    ndbout << "Test 4" << endl;
  158.    ndbout << "Handle Type is SQL_HANDLE_DBC, but SQL_SUCCESS_WITH_INFO" 
  159.    << "still appeared. Please check programm" << endl;
  160.    Cancel_DisplayError(SQL_HANDLE_DBC, CC_hdbc);
  161.   }
  162.   //**********************************
  163.   //** Test 5                       **
  164.   //** Input incorrect handle hdesc **
  165.   //**********************************
  166.   retcode = SQLCancel(CC_hdesc);
  167.   if (retcode == SQL_SUCCESS_WITH_INFO || retcode == SQL_SUCCESS)
  168.     {
  169.       ndbout << endl 
  170.      << "Handle Type is SQL_HANDLE_DESC, but SQL_SUCCESS_WITH_INFO" 
  171.      << "still appeared. Please check program" << endl;
  172.       ndbout << "Test 5" << endl;
  173.       Cancel_DisplayError(SQL_HANDLE_DESC, CC_hdesc);
  174.     }
  175.   // *********************************
  176.   // ** Disconnect and Free Handles **
  177.   // *********************************  
  178.   SQLDisconnect(CC_hdbc);
  179.   SQLFreeHandle(SQL_HANDLE_STMT, CC_hstmt);
  180.   SQLFreeHandle(SQL_HANDLE_DBC, CC_hdbc);
  181.   SQLFreeHandle(SQL_HANDLE_ENV, CC_henv);
  182.   return NDBT_OK;
  183.  }
  184. void Cancel_DisplayError(SQLSMALLINT Cancel_HandleType, 
  185.  SQLHSTMT Cancel_InputHandle)
  186. {
  187.   SQLCHAR   Sqlstate[5];
  188.   SQLRETURN SQLSTATEs;
  189.   SQLINTEGER    NativeError;
  190.   SQLSMALLINT   i, MsgLen;
  191.   SQLCHAR   Msg[Cancel_MESSAGE_LENGTH];
  192.   i = 1;
  193.   
  194.   ndbout << "-------------------------------------------------" << endl;
  195.   ndbout << "Error diagnostics:" << endl;
  196.   
  197.      while ((SQLSTATEs = SQLGetDiagRec(Cancel_HandleType, 
  198.        Cancel_InputHandle, 
  199.        i, 
  200.        Sqlstate, 
  201.        &NativeError, 
  202.        Msg, 
  203.        sizeof(Msg), 
  204.        &MsgLen)) 
  205.     != SQL_NO_DATA)
  206.        {
  207.  ndbout << "the HandleType is:" << Cancel_HandleType << endl;
  208.  ndbout << "the InputHandle is :" << (long)Cancel_InputHandle << endl;
  209.          ndbout << "the Msg is: " << (char *) Msg << endl;
  210.  ndbout << "the output state is:" << (char *)Sqlstate << endl; 
  211.  
  212.  i ++;
  213.  break;
  214.        }
  215.   ndbout << "-------------------------------------------------" << endl;     
  216. }