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

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 SQLGetFunctionsTest.cpp
  15.  */
  16. #include <common.hpp>
  17. #define GF_MESSAGE_LENGTH 200
  18. using namespace std;
  19. SQLHDBC     GF_hdbc;
  20. SQLHSTMT    GF_hstmt;
  21. SQLHENV     GF_henv;
  22.        
  23. void SQLGetFunctions_DisplayError(SQLSMALLINT GF_HandleType, 
  24.   SQLHDBC GF_InputHandle);
  25. /** 
  26.  * Test whether a specific ODBC API function is supported by
  27.  * the driver an application is currently connected to.
  28.  *
  29.  * In this test program, we can change ODBC function values in order to
  30.  * know different which fuction is supported by ODBC drivers
  31.  * Tests:
  32.  * -# Test1 There is no established SQL-connection
  33.  * -# Test2 ConnectionHandle does not identify an allocated SQL-connection 
  34.  * -# Test3 The value of FunctionId is not in table 27
  35.  * -# Test4 Normal case test
  36.  * @return Zero, if test succeeded
  37.  */
  38. int SQLGetFunctionsTest()
  39. {
  40.   SQLUSMALLINT TableExists, Supported;
  41.   SQLCHAR SQLStmt [120];
  42.   SQLRETURN retcode;
  43.   ndbout << endl << "Start SQLGetFunctions Testing" << endl;
  44.   //**********************************************************
  45.   //** Test 1                                               **
  46.   //** If there is no established SQL-connection associated **
  47.   //** with allocated SQL-connection                        **
  48.   //**********************************************************
  49.   retcode = SQLGetFunctions(GF_hdbc, SQL_API_SQLTABLES, &TableExists);
  50.   if (retcode == -2)
  51. {
  52.   ndbout << endl << "Test 1" << endl;
  53.   ndbout << "retcode = " << retcode << endl;
  54.   ndbout << endl << "There is no established SQL-connection" << endl;
  55.   ndbout << "associated with allocated SQL_connection" << endl;
  56.   SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
  57. }
  58.   else if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  59. {
  60.   ndbout << endl << "Test 1" << endl;
  61.   ndbout << "retcode = " << retcode << endl;
  62.   ndbout << endl << "There is no established SQL-connection" << endl;
  63.   ndbout << "associated with allocated SQL_connection" << endl;
  64.   SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
  65. }
  66.   else
  67. {
  68.   ndbout << endl << "Test 1" << endl;
  69.   ndbout << "retcode = " << retcode << endl;
  70.   ndbout << endl << "There is no established SQL-connection" << endl;
  71.   ndbout << "associated with allocated SQL_connection" << endl;
  72.   SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
  73. }
  74.   //************************************
  75.   //** Allocate An Environment Handle **
  76.   //************************************
  77.   retcode = SQLAllocHandle(SQL_HANDLE_ENV, 
  78.    SQL_NULL_HANDLE, 
  79.    &GF_henv);
  80.   
  81.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  82.     ndbout << "Allocated an environment Handle!" << endl;
  83.   //*********************************************
  84.   //** Set the ODBC application Version to 3.x **
  85.   //*********************************************
  86.   retcode = SQLSetEnvAttr(GF_henv,
  87.   SQL_ATTR_ODBC_VERSION, 
  88.   (SQLPOINTER) SQL_OV_ODBC3, 
  89.   SQL_IS_UINTEGER);
  90.   
  91.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  92.     ndbout << "Set the ODBC application Version to 3.X!" << endl;
  93.   //**********************************
  94.   //** Allocate A Connection Handle **
  95.   //**********************************
  96.   retcode = SQLAllocHandle(SQL_HANDLE_DBC, 
  97.    GF_henv, 
  98.    &GF_hdbc);
  99.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  100.     ndbout << "Allocated a connection Handle!" << endl;
  101.   // *******************
  102.   // ** Connect to DB **
  103.   // *******************
  104.   retcode = SQLConnect(GF_hdbc, 
  105.        (SQLCHAR*) connectString(), 
  106.        SQL_NTS, 
  107.        (SQLCHAR*) "", 
  108.        SQL_NTS,
  109.        (SQLCHAR*) "", 
  110.        SQL_NTS);
  111.   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) 
  112. {
  113.     //*************************************************************
  114.     //** Test 2                                                  **
  115.     //** If ConnectionHandle does not identify an allocated      **
  116.     //** SQL-connection, then an exception condition is raised   **
  117.     //*************************************************************
  118.     retcode = SQLGetFunctions(GF_hdbc, SQL_API_SQLTABLES, &TableExists);
  119.     if (retcode == -2)
  120. {
  121.   ndbout << endl << "Test 2" << endl;
  122.   ndbout << "retcode = " << retcode << endl;
  123.   ndbout << "If ConnectionHandle does not identify an allocated" << endl;
  124.   ndbout << "SQL-connection,an exception condition is raised" << endl;
  125.   SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
  126. }
  127.   else if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  128. {
  129.   ndbout << endl << "Test 2" << endl;
  130.   ndbout << "retcode = " << retcode << endl;
  131.   ndbout << "If ConnectionHandle does not identify an allocated" << endl;
  132.   ndbout << "SQL-connection,an exception condition is raised" << endl;
  133.   SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
  134. }
  135.    else
  136. {
  137.   ndbout << endl << "Test 2 :" << endl;
  138.   ndbout << "retcode = " << retcode << endl;
  139.   ndbout << "If ConnectionHandle does not identify an allocated" << endl;
  140.   ndbout << "SQL-connection,an exception condition is raised" << endl;
  141.   SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
  142. }
  143.     //*************************************************************
  144.     //** Test 3                                                  **
  145.     //** If the value of FunctionId is not in table 27, "Codes   **
  146.     //** used to identify SQL/CLI routines"                      **
  147.     //*************************************************************
  148.     
  149.  retcode = SQLGetFunctions(GF_hdbc, 88888, &TableExists);
  150.  ndbout<< "TableExists = " << TableExists << endl;
  151.  if (retcode == -2)
  152. {
  153.   ndbout << "retcode = " << retcode << endl;
  154.   ndbout << "Test 3 : The value of FunctionId is not in table 27" << endl;
  155.   SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
  156. }
  157.  else if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO)
  158. {
  159.   ndbout << "retcode = " << retcode << endl;
  160.   ndbout << "Test 3 : The value of FunctionId is not in table 27" << endl;
  161.   SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
  162. }
  163.  else
  164. {
  165.   ndbout << "retcode = " << retcode << endl;
  166.   ndbout << "Test 3 : The value of FunctionId is not in table 27" << endl;
  167.   SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
  168. }
  169.   //******************
  170.   //** Test 4       **
  171.   //** Normal case  **
  172.   //******************
  173.   ndbout << "Test 4:" << endl;
  174.   retcode = SQLGetFunctions(GF_hdbc, SQL_API_SQLBROWSECONNECT, &Supported);
  175.   ndbout << "retcode = " << retcode << endl;
  176.   if (Supported == TRUE)
  177. {
  178.   ndbout << "Supported = " << Supported << endl;
  179.   ndbout << "SQLBrowseConnect is supported by the current data source" 
  180.  << endl;
  181. }
  182.   else
  183. {
  184.   ndbout << "Supported = " << Supported << endl;
  185.   ndbout << "SQLBrowseConnect isn't supported by the current data source" 
  186.  << endl;
  187. }
  188.   //******************
  189.   //** Test 5       **
  190.   //** Normal case  **
  191.   //******************
  192.   ndbout << endl << "Test 5:" << endl;
  193.   retcode = SQLGetFunctions(GF_hdbc, SQL_API_SQLFETCH, &Supported);
  194.   ndbout << "retcode = " << retcode << endl;
  195.   if (Supported == TRUE)
  196. {
  197.   ndbout << "Supported = " << Supported << endl;
  198.   ndbout << "SQLFETCH is supported by the current data source" << endl;
  199. }
  200.   else
  201. {
  202.   ndbout << "Supported = " << Supported << endl;
  203.   ndbout << "SQLFETCH isn't supported by the current data source" << endl;
  204. }
  205. }
  206.   // *********************************
  207.   // ** Disconnect and Free Handles **
  208.   // *********************************  
  209.   SQLDisconnect(GF_hdbc);
  210.   SQLFreeHandle(SQL_HANDLE_STMT, GF_hstmt);
  211.   SQLFreeHandle(SQL_HANDLE_DBC, GF_hdbc);
  212.   SQLFreeHandle(SQL_HANDLE_ENV, GF_henv);
  213.  return NDBT_OK;
  214. }
  215. void SQLGetFunctions_DisplayError(SQLSMALLINT GF_HandleType, 
  216.   SQLHDBC GF_InputHandle)
  217. {
  218.   SQLRETURN   SQLSTATEs;
  219.   SQLCHAR Sqlstate[50];
  220.   SQLINTEGER    NativeError;
  221.   SQLSMALLINT   i, MsgLen;
  222.   SQLCHAR   Msg[GF_MESSAGE_LENGTH];
  223.   i = 1;
  224.   
  225.   ndbout << "-------------------------------------------------" << endl;
  226.   ndbout << "Error diagnostics:" << endl;
  227.   
  228.   Msg[0] = 0;
  229.   while ((SQLSTATEs = SQLGetDiagRec(GF_HandleType, 
  230.     GF_InputHandle, 
  231.     i, 
  232.     Sqlstate, 
  233.     &NativeError, 
  234.     Msg, 
  235.     sizeof(Msg), 
  236.     &MsgLen)) 
  237.  != SQL_NO_DATA)                   
  238.     {
  239.     
  240.       ndbout << "the HandleType is:" << GF_HandleType << endl;
  241.       ndbout << "the InputHandle is :" << (long)GF_InputHandle << endl;
  242.       ndbout << "the Msg is :" << (char *) Msg << endl;
  243.       ndbout << "the output state is:" << (char *)Sqlstate << endl; 
  244.       
  245.       i ++;
  246.       Msg[0] = 0;
  247.       break;
  248.     }
  249.   ndbout << "-------------------------------------------------" << endl;  
  250. }