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

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 SQLColAttributeTest.cpp
  15.  */
  16. #include <common.hpp>
  17. using namespace std;
  18. #define MAXIMUM_MESSAGE_LENGTH_Test 200
  19. #define BufferLengthTest 156
  20. SQLHSTMT    ColAtt_hstmt;
  21. SQLHSTMT    ColAtt_hdbc;
  22. SQLHENV     ColAtt_henv;
  23. SQLHDESC    ColAtt_hdesc;
  24. SQLCHAR        CharacterAttributePtr;
  25. SQLINTEGER     NumericAttributePtr;
  26. SQLSMALLINT    StringLengthPtr;
  27. SQLRETURN ColAtt_ret;
  28. void ColAtt_DisplayError(SQLSMALLINT ColAtt_HandleType, 
  29.  SQLHSTMT ColAtt_InputHandle);
  30. /** 
  31.  * Test returning descriptor information
  32.  *
  33.  * Tests:
  34.  * -# Call SQLColAttribute, without preceeding SQLPrepare
  35.  * -# ???
  36.  * 
  37.  * @return Zero, if test succeeded
  38.  */
  39. int SQLColAttributeTest()
  40. {
  41.   ndbout << endl << "Start SQLColAttribute Testing" << endl;
  42.   SQLCHAR SQLStmt [120];
  43.   /********************************************************************
  44.    ** Test 1:                                                        **
  45.    **                                                                **
  46.    ** Checks to execute SQLColAttribute, when there is no            **
  47.    ** prepared or executed statement associated with StatementHandle **
  48.    **                                                                **
  49.    ** Intended result:  SQL_ERROR ???                                **
  50.    ********************************************************************/
  51.   ColAtt_ret = SQLColAttribute(ColAtt_hstmt, 
  52.        1, 
  53.        SQL_DESC_AUTO_UNIQUE_VALUE, 
  54.        &CharacterAttributePtr, 
  55.        BufferLengthTest, 
  56.        &StringLengthPtr, 
  57.        &NumericAttributePtr);
  58.   if (ColAtt_ret == SQL_ERROR)
  59.     {
  60.       ndbout << "ColAtt_ret = " << ColAtt_ret << endl;
  61.       ndbout << endl << "There is no prepared or executed" << endl 
  62.      << " statement associated with StatementHandle" << endl;
  63.       ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);
  64.     }
  65.   else if (ColAtt_ret == SQL_SUCCESS_WITH_INFO)
  66.     {
  67.       ndbout << "ColAtt_ret = " << ColAtt_ret << endl;
  68.       ndbout << endl << "There is no prepared or executed" << endl 
  69.      << " statement associated with StatementHandle" << endl;
  70.       ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);
  71.     }
  72.   else if (ColAtt_ret == SQL_SUCCESS)
  73.     {
  74.       ndbout << "ColAtt_ret = " << ColAtt_ret << endl;
  75.       ndbout << endl << "There is no prepared or executed" << endl 
  76.      << " statement associated with StatementHandle" << endl;
  77.       ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);
  78.     }
  79.   else if (ColAtt_ret == -2)
  80.     {
  81.       ndbout << "ColAtt_ret = " << ColAtt_ret << endl;
  82.       ndbout << endl << "There is no prepared or executed" << endl 
  83.      << " statement associated with StatementHandle" << endl;
  84.       ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);
  85.     }
  86.   else 
  87.     {
  88.       ndbout << "ColAtt_ret = " << ColAtt_ret << endl;
  89.       ndbout << endl << "There is no prepared or executed" << endl 
  90.      << " statement associated with StatementHandle" << endl;
  91.       ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);
  92.     }
  93.   //*******************************************************************
  94.   //** Test 2:                                                       **
  95.   //**                                                               **
  96.   //** hstmt                                                         **
  97.   //** Execute a statement to retrieve rows from the Customers table **
  98.   //** We can create the table and insert rows into Mysql            **
  99.   //**                                                               **
  100.   //** Intended result: ???                                          **
  101.   //*******************************************************************
  102.   //************************************
  103.   //** Allocate An Environment Handle **
  104.   //************************************
  105.   ColAtt_ret = SQLAllocHandle(SQL_HANDLE_ENV, 
  106.       SQL_NULL_HANDLE, 
  107.       &ColAtt_henv);
  108.   
  109.   if (ColAtt_ret == SQL_SUCCESS || ColAtt_ret == SQL_SUCCESS_WITH_INFO)
  110.     ndbout << "Allocated an environment Handle!" << endl;
  111.   //*********************************************
  112.   //** Set the ODBC application Version to 2.x **
  113.   //*********************************************
  114.   ColAtt_ret = SQLSetEnvAttr(ColAtt_henv, 
  115.      SQL_ATTR_ODBC_VERSION, 
  116.      (SQLPOINTER) SQL_OV_ODBC2, 
  117.      SQL_IS_UINTEGER);
  118.   
  119.   if (ColAtt_ret == SQL_SUCCESS || ColAtt_ret == SQL_SUCCESS_WITH_INFO)
  120.     ndbout << "Set the ODBC application Version to 2.x!" << endl;
  121.   //**********************************
  122.   //** Allocate A Connection Handle **
  123.   //**********************************
  124.   ColAtt_ret = SQLAllocHandle(SQL_HANDLE_DBC, 
  125.       ColAtt_henv, 
  126.       &ColAtt_hdbc);
  127.   if (ColAtt_ret == SQL_SUCCESS || ColAtt_ret == SQL_SUCCESS_WITH_INFO)
  128.     ndbout << "Allocated a connection Handle!" << endl;
  129.   // *******************
  130.   // ** Connect to DB **
  131.   // *******************
  132.   ColAtt_ret = SQLConnect(ColAtt_hdbc, 
  133.   (SQLCHAR *) connectString(), 
  134.   SQL_NTS, 
  135.   (SQLCHAR *) "", 
  136.   SQL_NTS, 
  137.   (SQLCHAR *) "", 
  138.   SQL_NTS);
  139.   
  140.   if (ColAtt_ret == SQL_SUCCESS || ColAtt_ret == SQL_SUCCESS_WITH_INFO)
  141.     ndbout << "Connected to DB : OK!" << endl;
  142.   else 
  143.     {  
  144.       ndbout << "Failure to Connect DB!" << endl;
  145.       return NDBT_FAILED;
  146.     }
  147.   //*******************************
  148.   //** Allocate statement handle **
  149.   //*******************************
  150.   
  151.   ColAtt_ret = SQLAllocHandle(SQL_HANDLE_STMT, 
  152.       ColAtt_hdbc, 
  153.       &ColAtt_hstmt); 
  154.   if(ColAtt_ret == SQL_SUCCESS || ColAtt_ret == SQL_SUCCESS_WITH_INFO) 
  155.     ndbout << "Allocated a statement handle!" << endl;
  156.   //************************
  157.   //** Define a statement **
  158.   //************************
  159.   /*
  160.   strcpy((char *) SQLStmt, 
  161.  "DELETE FROM Customers WHERE CustID = 6");
  162.    */
  163.     strcpy((char *) SQLStmt, 
  164.     "INSERT INTO Customers (CustID, Name, Address, Phone) VALUES (6, 'Jan', 'LM vag 8', '969696')");
  165.     /*
  166.     strcpy((char *) SQLStmt, 
  167.     "INSERT INTO Customers (CustID, Name, Address, Phone) VALUES (?, ?, ?, ?)");
  168.     */
  169.   //********************************
  170.   //** Prepare  SQL statement     **
  171.   //********************************
  172.   ColAtt_ret = SQLPrepare(ColAtt_hstmt, 
  173.   SQLStmt, 
  174.   SQL_NTS);
  175.   
  176.   if (ColAtt_ret == SQL_SUCCESS || ColAtt_ret == SQL_SUCCESS_WITH_INFO) 
  177.     {
  178.       //**************************************************************
  179.       //** FieldIdentifer is not one of the code valuess in Table 20, 
  180.       //** "Codes used for descriptor fields" 
  181.       //**************************************************************
  182.       ColAtt_ret = SQLColAttribute(ColAtt_hstmt, 
  183.    2, 
  184.    9999, 
  185.    &CharacterAttributePtr, 
  186.    BufferLengthTest, 
  187.    &StringLengthPtr, 
  188.    &NumericAttributePtr);
  189.       
  190.       if (ColAtt_ret == SQL_ERROR || ColAtt_ret == SQL_SUCCESS_WITH_INFO)
  191. {
  192.   ndbout << endl << "FieldIdentifer is not one of the" << endl;  
  193.   ndbout << "code valuess in Table 20, Codes used for" << endl;
  194.   ndbout << "descriptor fields" <<endl;
  195.   ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);
  196. }
  197.       //****************************************************************
  198.       //** Let TYPE is 'ITEM' in Table 20, ColumnNumber is less than one
  199.       //****************************************************************
  200.       ColAtt_ret = SQLColAttribute(ColAtt_hstmt, 
  201.    -1, 
  202.    SQL_DESC_BASE_COLUMN_NAME, 
  203.    &CharacterAttributePtr, 
  204.    BufferLengthTest, 
  205.    &StringLengthPtr, 
  206.    &NumericAttributePtr);
  207.       if (ColAtt_ret == SQL_ERROR || ColAtt_ret == SQL_SUCCESS_WITH_INFO)
  208. {
  209.   ndbout << "Let TYPE is 'ITEM' in Table 20,ColumnNumber" 
  210.  << "is less than one" << endl;
  211.   ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);
  212. }
  213.       
  214.       //*********************************************************
  215.       //** Let TYPE is 'ITEM' in Table 20, FieldIdentifer is zero 
  216.       //*********************************************************
  217.       ColAtt_ret = SQLColAttribute(ColAtt_hstmt, 
  218.    1018, 
  219.    0, 
  220.    &CharacterAttributePtr, 
  221.    BufferLengthTest,
  222.    &StringLengthPtr,
  223.    &NumericAttributePtr);
  224.       
  225.       if (ColAtt_ret == SQL_ERROR || ColAtt_ret == SQL_SUCCESS_WITH_INFO)
  226. {
  227.   ndbout << "Let TYPE is 'ITEM' in Table 20, FieldIdentifer" 
  228.  << " is zero"  <<endl;
  229.   ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);
  230.         }
  231.       //**********************************************************
  232.       //** Let TYPE is 'ITEM' in Table 20, ColumnNumber is greater 
  233.       //** than TOP_LEVEL_COUNT(1044) 
  234.       //*********************************************************
  235.       ColAtt_ret = SQLColAttribute(ColAtt_hstmt, 
  236.    1045, 
  237.    SQL_DESC_BASE_COLUMN_NAME, 
  238.    &CharacterAttributePtr, 
  239.    BufferLengthTest, 
  240.    &StringLengthPtr, 
  241.    &NumericAttributePtr);
  242.       
  243.       if (ColAtt_ret == SQL_ERROR || ColAtt_ret == SQL_SUCCESS_WITH_INFO)
  244. {
  245.   ndbout << "Let TYPE is 'ITEM' in Table 20, ColumnNumber" << endl 
  246.  << "is greater than TOP_LEVEL_COUNT(1044)" << endl;
  247.   ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);
  248. }
  249.       
  250.     }
  251.   // *********************************
  252.   // ** Disconnect and Free Handles **
  253.   // *********************************  
  254.   SQLDisconnect(ColAtt_hdbc);
  255.   SQLFreeHandle(SQL_HANDLE_STMT, ColAtt_hstmt);
  256.   SQLFreeHandle(SQL_HANDLE_DBC, ColAtt_hdbc);
  257.   SQLFreeHandle(SQL_HANDLE_ENV, ColAtt_henv);
  258.   return NDBT_OK;
  259. }
  260. void ColAtt_DisplayError(SQLSMALLINT ColAtt_HandleType, 
  261.  SQLHSTMT ColAtt_InputHandle)
  262. {
  263.   SQLSMALLINT ColAtt_i = 1;
  264.   SQLRETURN ColAtt_SQLSTATEs;
  265.   SQLCHAR ColAtt_Sqlstate[5];
  266.   SQLCHAR ColAtt_Msg[MAXIMUM_MESSAGE_LENGTH_Test];
  267.   SQLSMALLINT ColAtt_MsgLen;
  268.   SQLINTEGER  ColAtt_NativeError;
  269.   ndbout << "-------------------------------------------------" << endl;
  270.   ndbout << "Error diagnostics:" << endl;
  271.   
  272.   while ((ColAtt_SQLSTATEs = SQLGetDiagRec(ColAtt_HandleType, 
  273.    ColAtt_InputHandle, 
  274.    ColAtt_i, 
  275.    ColAtt_Sqlstate, 
  276.    &ColAtt_NativeError, 
  277.    ColAtt_Msg, 
  278.    sizeof(ColAtt_Msg), 
  279.    &ColAtt_MsgLen)) 
  280.  != SQL_NO_DATA)                   
  281.     {
  282.       
  283.       ndbout << "the HandleType is:" << ColAtt_HandleType << endl;
  284.       ndbout << "the InputHandle is :" << (long)ColAtt_InputHandle << endl;
  285.       ndbout << "the ColAtt_Msg is: " << (char *) ColAtt_Msg << endl;
  286.       ndbout << "the output state is:" << (char *)ColAtt_Sqlstate << endl; 
  287.       
  288.       ColAtt_i ++;
  289.       break;
  290.     }
  291.   ndbout << "-------------------------------------------------" << endl;
  292. }