SQLColAttributeTest2.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 SQLColAttributeTest2.cpp
  15.  */
  16. #include <common.hpp>
  17. using namespace std;
  18. #define MAXIMUM_MESSAGE_LENGTH_Test2 200
  19. #define BufferLengthTest2 156
  20. SQLHSTMT    ColAtt_hstmtTest2;
  21. SQLHSTMT    ColAtt_hdbcTest2;
  22. SQLHENV     ColAtt_henvTest2;
  23. SQLHDESC    ColAtt_hdescTest2;
  24. SQLCHAR        CharacterAttributePtrTest2;
  25. SQLINTEGER     NumericAttributePtrTest2;
  26. SQLSMALLINT    StringLengthPtrTest2;
  27. SQLRETURN ColAtt_retTest2;
  28. void ColAtt_DisplayErrorTest2(SQLSMALLINT ColAttTest2_HandleType, 
  29.       SQLHSTMT ColAttTest2_InputHandle);
  30. /** 
  31.  * Test returning descriptor information
  32.  *
  33.  * Test:
  34.  * -# Call SQLColAttribute without preceeding SQLExecute
  35.  * -# Let TYPE is 'ITEM' in Table 20, FieldIdentifer is zero
  36.  * -# Let TYPE is 'ITEM' in Table 20, ColumnNumber is less than one
  37.  * -# FieldIdentifer is not one of the code valuess in Table 20
  38.  * -# Let TYPE is 'ITEM' in Table 20, ColumnNumber is greater than 1044
  39.  * 
  40.  * @return Zero, if test succeeded
  41.  */
  42. int SQLColAttributeTest2()
  43. {
  44.   ndbout << endl << "Start SQLColAttribute Testing2" << endl;
  45.   SQLCHAR SQLStmt [120];
  46.   //*******************************************************************
  47.   //** Test                                                          **
  48.   //**                                                               **
  49.   //** hstmt                                                         **
  50.   //** Prepare a statement without executing the statement           **
  51.   //**                                                               **
  52.   //** Intended result:  table Customer should not have new row      **
  53.   //*******************************************************************
  54.   //************************************
  55.   //** Allocate An Environment Handle **
  56.   //************************************
  57.   ColAtt_retTest2 = SQLAllocHandle(SQL_HANDLE_ENV, 
  58.    SQL_NULL_HANDLE, 
  59.    &ColAtt_henvTest2);
  60.   
  61.   if (ColAtt_retTest2 == SQL_SUCCESS || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO)
  62.     ndbout << "Allocated an environment Handle!" << endl;
  63.   //*********************************************
  64.   //** Set the ODBC application Version to 3.x **
  65.   //*********************************************
  66.   ColAtt_retTest2 = SQLSetEnvAttr(ColAtt_henvTest2, 
  67.   SQL_ATTR_ODBC_VERSION, 
  68.   (SQLPOINTER) SQL_OV_ODBC3, 
  69.   SQL_IS_UINTEGER);
  70.   
  71.   if (ColAtt_retTest2 == SQL_SUCCESS || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO)
  72.     ndbout << "Set the ODBC application Version to 2.x!" << endl;
  73.   //**********************************
  74.   //** Allocate A Connection Handle **
  75.   //**********************************
  76.   ColAtt_retTest2 = SQLAllocHandle(SQL_HANDLE_DBC, 
  77.    ColAtt_henvTest2, 
  78.    &ColAtt_hdbcTest2);
  79.   if (ColAtt_retTest2 == SQL_SUCCESS || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO)
  80.     ndbout << "Allocated a connection Handle!" << endl;
  81.   // *******************
  82.   // ** Connect to DB **
  83.   // *******************
  84.   ColAtt_retTest2 = SQLConnect(ColAtt_hdbcTest2, 
  85.        (SQLCHAR *) connectString(), 
  86.        SQL_NTS, 
  87.        (SQLCHAR *) "", 
  88.        SQL_NTS, 
  89.        (SQLCHAR *) "", 
  90.        SQL_NTS);
  91.   
  92.   if (ColAtt_retTest2 == SQL_SUCCESS || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO)
  93.     ndbout << "Connected to DB : OK!" << endl;
  94.   else 
  95.     {  
  96.       ndbout << "Failure to Connect DB!" << endl;
  97.       return NDBT_FAILED;
  98.     }
  99.   //*******************************
  100.   //** Allocate statement handle **
  101.   //*******************************
  102.   
  103.   ColAtt_retTest2 = SQLAllocHandle(SQL_HANDLE_STMT, 
  104.    ColAtt_hdbcTest2, 
  105.    &ColAtt_hstmtTest2); 
  106.   if(ColAtt_retTest2 == SQL_SUCCESS || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO) 
  107.     ndbout << "Allocated a statement handle!" << endl;
  108.   //************************
  109.   //** Define a statement **
  110.   //************************
  111.   /*
  112.   strcpy((char *) SQLStmt, 
  113.  "DELETE FROM Customers WHERE CustID = 6");
  114.    */
  115.     strcpy((char *) SQLStmt, 
  116.     "INSERT INTO Customers (CustID, Name, Address, Phone) VALUES (6, 'Jan', 'LM vag 8', '969696')");
  117.     /*
  118.     strcpy((char *) SQLStmt, 
  119.     "INSERT INTO Customers (CustID, Name, Address, Phone) VALUES (?, ?, ?, ?)");
  120.     */
  121.   //********************************
  122.   //** Prepare  SQL statement     **
  123.   //********************************
  124.   ColAtt_retTest2 = SQLPrepare(ColAtt_hstmtTest2, 
  125.   SQLStmt, 
  126.   SQL_NTS);
  127.   
  128.   if (ColAtt_retTest2 == SQL_SUCCESS || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO) 
  129.     {
  130.       //**************************************************************
  131.       //** FieldIdentifer is not one of the code valuess in Table 20, 
  132.       //** "Codes used for descriptor fields" 
  133.       //**************************************************************
  134.       ColAtt_retTest2 = SQLColAttribute(ColAtt_hstmtTest2, 
  135. 2, 
  136. 9999, 
  137. &CharacterAttributePtrTest2, 
  138. BufferLengthTest2, 
  139. &StringLengthPtrTest2, 
  140. &NumericAttributePtrTest2);
  141.       
  142.       if (ColAtt_retTest2 == SQL_ERROR || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO)
  143. {
  144.   ndbout << endl << "FieldIdentifer is not one of the" << endl;  
  145.   ndbout << "code valuess in Table 20, Codes used for" << endl;
  146.   ndbout << "descriptor fields" <<endl;
  147.   ColAtt_DisplayErrorTest2(SQL_HANDLE_STMT, ColAtt_hstmtTest2);
  148. }
  149.       //****************************************************************
  150.       //** Let TYPE is 'ITEM' in Table 20, ColumnNumber is less than one
  151.       //****************************************************************
  152.       ColAtt_retTest2 = SQLColAttribute(ColAtt_hstmtTest2, 
  153. -1, 
  154. SQL_DESC_BASE_COLUMN_NAME, 
  155. &CharacterAttributePtrTest2, 
  156. BufferLengthTest2, 
  157. &StringLengthPtrTest2, 
  158. &NumericAttributePtrTest2);
  159.       
  160.       if (ColAtt_retTest2 == SQL_ERROR || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO)
  161. {
  162.   ndbout << "Let TYPE is 'ITEM' in Table 20,ColumnNumber" 
  163.  << "is less than one" << endl;
  164.   ColAtt_DisplayErrorTest2(SQL_HANDLE_STMT, ColAtt_hstmtTest2);
  165. }
  166.       
  167.       //*********************************************************
  168.       //** Let TYPE is 'ITEM' in Table 20, FieldIdentifer is zero 
  169.       //*********************************************************
  170.       ColAtt_retTest2 = SQLColAttribute(ColAtt_hstmtTest2, 
  171. 1018, 
  172. 0, 
  173. &CharacterAttributePtrTest2, 
  174. BufferLengthTest2, 
  175. &StringLengthPtrTest2, 
  176. &NumericAttributePtrTest2);
  177.       
  178.       if (ColAtt_retTest2 == SQL_ERROR || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO)
  179. {
  180.   ndbout << "Let TYPE is 'ITEM' in Table 20, FieldIdentifer" 
  181.  << " is zero"  <<endl;
  182.   ColAtt_DisplayErrorTest2(SQL_HANDLE_STMT, ColAtt_hstmtTest2);
  183.         }
  184.       //**********************************************************
  185.       //** Let TYPE is 'ITEM' in Table 20, ColumnNumber is greater 
  186.       //** than TOP_LEVEL_COUNT(1044) 
  187.       //*********************************************************
  188.       ColAtt_retTest2 = SQLColAttribute(ColAtt_hstmtTest2, 
  189. 1045, 
  190. SQL_DESC_BASE_COLUMN_NAME, 
  191. &CharacterAttributePtrTest2, 
  192. BufferLengthTest2, 
  193. &StringLengthPtrTest2, 
  194. &NumericAttributePtrTest2);
  195.       
  196.       if (ColAtt_retTest2 == SQL_ERROR || ColAtt_retTest2 == SQL_SUCCESS_WITH_INFO)
  197. {
  198.   ndbout << "Let TYPE is 'ITEM' in Table 20, ColumnNumber" << endl 
  199.  << "is greater than TOP_LEVEL_COUNT(1044)" << endl;
  200.   ColAtt_DisplayErrorTest2(SQL_HANDLE_STMT, ColAtt_hstmtTest2);
  201. }
  202.       
  203.     }
  204.   // *********************************
  205.   // ** Disconnect and Free Handles **
  206.   // *********************************  
  207.   SQLDisconnect(ColAtt_hdbcTest2);
  208.   SQLFreeHandle(SQL_HANDLE_STMT, ColAtt_hstmtTest2);
  209.   SQLFreeHandle(SQL_HANDLE_DBC, ColAtt_hdbcTest2);
  210.   SQLFreeHandle(SQL_HANDLE_ENV, ColAtt_henvTest2);
  211.   return NDBT_OK;
  212. }
  213. void ColAtt_DisplayErrorTest2(SQLSMALLINT ColAttTest2_HandleType, 
  214.       SQLHSTMT ColAttTest2_InputHandle)
  215. {
  216.   SQLSMALLINT ColAtt_i = 1;
  217.   SQLRETURN ColAtt_SQLSTATEs;
  218.   SQLCHAR ColAtt_Sqlstate[5];
  219.   SQLCHAR ColAtt_Msg[MAXIMUM_MESSAGE_LENGTH_Test2];
  220.   SQLSMALLINT ColAtt_MsgLen;
  221.   SQLINTEGER  ColAtt_NativeError;
  222.   ndbout << "-------------------------------------------------" << endl;
  223.   ndbout << "Error diagnostics:" << endl;
  224.   
  225.   while ((ColAtt_SQLSTATEs = SQLGetDiagRec(ColAttTest2_HandleType, 
  226.    ColAttTest2_InputHandle, 
  227.    ColAtt_i, 
  228.    ColAtt_Sqlstate, 
  229.    &ColAtt_NativeError, 
  230.    ColAtt_Msg, 
  231.    sizeof(ColAtt_Msg), 
  232.    &ColAtt_MsgLen)) 
  233.  != SQL_NO_DATA)                   
  234.     {
  235.       
  236.       ndbout << "the HandleType is:" << ColAttTest2_HandleType << endl;
  237.       ndbout << "the InputHandle is :" << (long)ColAttTest2_InputHandle << endl;
  238.       ndbout << "the ColAtt_Msg is: " << (char *) ColAtt_Msg << endl;
  239.       ndbout << "the output state is:" << (char *)ColAtt_Sqlstate << endl; 
  240.       
  241.       ColAtt_i ++;
  242.       break;
  243.     }
  244.   ndbout << "-------------------------------------------------" << endl;
  245. }