sqlcolattributetest.cpp

来自「MySQL数据库开发源码 值得一看哦」· C++ 代码 · 共 329 行

CPP
329
字号
/* 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 SQLColAttributeTest.cpp */#include <common.hpp>using namespace std;#define MAXIMUM_MESSAGE_LENGTH_Test 200#define BufferLengthTest 156SQLHSTMT    ColAtt_hstmt;SQLHSTMT    ColAtt_hdbc;SQLHENV     ColAtt_henv;SQLHDESC    ColAtt_hdesc;SQLCHAR        CharacterAttributePtr;SQLINTEGER     NumericAttributePtr;SQLSMALLINT    StringLengthPtr;SQLRETURN ColAtt_ret;void ColAtt_DisplayError(SQLSMALLINT ColAtt_HandleType, 			 SQLHSTMT ColAtt_InputHandle);/**  * Test returning descriptor information * * Tests: * -# Call SQLColAttribute, without preceeding SQLPrepare * -# ??? *  * @return Zero, if test succeeded */int SQLColAttributeTest(){  ndbout << endl << "Start SQLColAttribute Testing" << endl;  SQLCHAR SQLStmt [120];  /********************************************************************   ** Test 1:                                                        **   **                                                                **   ** Checks to execute SQLColAttribute, when there is no            **   ** prepared or executed statement associated with StatementHandle **   **                                                                **   ** Intended result:  SQL_ERROR ???                                **   ********************************************************************/  ColAtt_ret = SQLColAttribute(ColAtt_hstmt, 			       1, 			       SQL_DESC_AUTO_UNIQUE_VALUE, 			       &CharacterAttributePtr, 			       BufferLengthTest, 			       &StringLengthPtr, 			       &NumericAttributePtr);  if (ColAtt_ret == SQL_ERROR)    {      ndbout << "ColAtt_ret = " << ColAtt_ret << endl;      ndbout << endl << "There is no prepared or executed" << endl 	     << " statement associated with StatementHandle" << endl;      ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);    }  else if (ColAtt_ret == SQL_SUCCESS_WITH_INFO)    {      ndbout << "ColAtt_ret = " << ColAtt_ret << endl;      ndbout << endl << "There is no prepared or executed" << endl 	     << " statement associated with StatementHandle" << endl;      ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);    }  else if (ColAtt_ret == SQL_SUCCESS)    {      ndbout << "ColAtt_ret = " << ColAtt_ret << endl;      ndbout << endl << "There is no prepared or executed" << endl 	     << " statement associated with StatementHandle" << endl;      ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);    }  else if (ColAtt_ret == -2)    {      ndbout << "ColAtt_ret = " << ColAtt_ret << endl;      ndbout << endl << "There is no prepared or executed" << endl 	     << " statement associated with StatementHandle" << endl;      ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);    }  else     {      ndbout << "ColAtt_ret = " << ColAtt_ret << endl;      ndbout << endl << "There is no prepared or executed" << endl 	     << " statement associated with StatementHandle" << endl;      ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);    }  //*******************************************************************  //** Test 2:                                                       **  //**                                                               **  //** hstmt                                                         **  //** Execute a statement to retrieve rows from the Customers table **  //** We can create the table and insert rows into Mysql            **  //**                                                               **  //** Intended result: ???                                          **  //*******************************************************************  //************************************  //** Allocate An Environment Handle **  //************************************  ColAtt_ret = SQLAllocHandle(SQL_HANDLE_ENV, 			      SQL_NULL_HANDLE, 			      &ColAtt_henv);    if (ColAtt_ret == SQL_SUCCESS || ColAtt_ret == SQL_SUCCESS_WITH_INFO)    ndbout << "Allocated an environment Handle!" << endl;  //*********************************************  //** Set the ODBC application Version to 2.x **  //*********************************************  ColAtt_ret = SQLSetEnvAttr(ColAtt_henv, 			     SQL_ATTR_ODBC_VERSION, 			     (SQLPOINTER) SQL_OV_ODBC2, 			     SQL_IS_UINTEGER);    if (ColAtt_ret == SQL_SUCCESS || ColAtt_ret == SQL_SUCCESS_WITH_INFO)    ndbout << "Set the ODBC application Version to 2.x!" << endl;  //**********************************  //** Allocate A Connection Handle **  //**********************************  ColAtt_ret = SQLAllocHandle(SQL_HANDLE_DBC, 			      ColAtt_henv, 			      &ColAtt_hdbc);  if (ColAtt_ret == SQL_SUCCESS || ColAtt_ret == SQL_SUCCESS_WITH_INFO)    ndbout << "Allocated a connection Handle!" << endl;  // *******************  // ** Connect to DB **  // *******************  ColAtt_ret = SQLConnect(ColAtt_hdbc, 			  (SQLCHAR *) connectString(), 			  SQL_NTS, 			  (SQLCHAR *) "", 			  SQL_NTS, 			  (SQLCHAR *) "", 			  SQL_NTS);    if (ColAtt_ret == SQL_SUCCESS || ColAtt_ret == SQL_SUCCESS_WITH_INFO)    ndbout << "Connected to DB : OK!" << endl;  else     {        ndbout << "Failure to Connect DB!" << endl;      return NDBT_FAILED;    }  //*******************************  //** Allocate statement handle **  //*******************************    ColAtt_ret = SQLAllocHandle(SQL_HANDLE_STMT, 			      ColAtt_hdbc, 			      &ColAtt_hstmt);   if(ColAtt_ret == SQL_SUCCESS || ColAtt_ret == SQL_SUCCESS_WITH_INFO)     ndbout << "Allocated a statement handle!" << endl;  //************************  //** Define a statement **  //************************  /*  strcpy((char *) SQLStmt, 	 "DELETE FROM Customers WHERE CustID = 6");   */    strcpy((char *) SQLStmt,     "INSERT INTO Customers (CustID, Name, Address, Phone) VALUES (6, 'Jan', 'LM vag 8', '969696')");    /*    strcpy((char *) SQLStmt,     "INSERT INTO Customers (CustID, Name, Address, Phone) VALUES (?, ?, ?, ?)");    */  //********************************  //** Prepare  SQL statement     **  //********************************  ColAtt_ret = SQLPrepare(ColAtt_hstmt, 			  SQLStmt, 			  SQL_NTS);    if (ColAtt_ret == SQL_SUCCESS || ColAtt_ret == SQL_SUCCESS_WITH_INFO)     {      //**************************************************************      //** FieldIdentifer is not one of the code valuess in Table 20,       //** "Codes used for descriptor fields"       //**************************************************************      ColAtt_ret = SQLColAttribute(ColAtt_hstmt, 				   2, 				   9999, 				   &CharacterAttributePtr, 				   BufferLengthTest, 				   &StringLengthPtr, 				   &NumericAttributePtr);            if (ColAtt_ret == SQL_ERROR || ColAtt_ret == SQL_SUCCESS_WITH_INFO)	{	  ndbout << endl << "FieldIdentifer is not one of the" << endl;  	  ndbout << "code valuess in Table 20, Codes used for" << endl;	  ndbout << "descriptor fields" <<endl;	  ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);	}      //****************************************************************      //** Let TYPE is 'ITEM' in Table 20, ColumnNumber is less than one      //****************************************************************      ColAtt_ret = SQLColAttribute(ColAtt_hstmt, 				   -1, 				   SQL_DESC_BASE_COLUMN_NAME, 				   &CharacterAttributePtr, 				   BufferLengthTest, 				   &StringLengthPtr, 				   &NumericAttributePtr);      if (ColAtt_ret == SQL_ERROR || ColAtt_ret == SQL_SUCCESS_WITH_INFO)	{	  ndbout << "Let TYPE is 'ITEM' in Table 20,ColumnNumber" 		 << "is less than one" << endl;	  ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);	}            //*********************************************************      //** Let TYPE is 'ITEM' in Table 20, FieldIdentifer is zero       //*********************************************************      ColAtt_ret = SQLColAttribute(ColAtt_hstmt, 				   1018, 				   0, 				   &CharacterAttributePtr, 				   BufferLengthTest,				   &StringLengthPtr,				   &NumericAttributePtr);            if (ColAtt_ret == SQL_ERROR || ColAtt_ret == SQL_SUCCESS_WITH_INFO)	{	  ndbout << "Let TYPE is 'ITEM' in Table 20, FieldIdentifer" 		 << " is zero"  <<endl;	  ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);        }      //**********************************************************      //** Let TYPE is 'ITEM' in Table 20, ColumnNumber is greater       //** than TOP_LEVEL_COUNT(1044)       //*********************************************************      ColAtt_ret = SQLColAttribute(ColAtt_hstmt, 				   1045, 				   SQL_DESC_BASE_COLUMN_NAME, 				   &CharacterAttributePtr, 				   BufferLengthTest, 				   &StringLengthPtr, 				   &NumericAttributePtr);            if (ColAtt_ret == SQL_ERROR || ColAtt_ret == SQL_SUCCESS_WITH_INFO)	{	  ndbout << "Let TYPE is 'ITEM' in Table 20, ColumnNumber" << endl 		 << "is greater than TOP_LEVEL_COUNT(1044)" << endl;	  ColAtt_DisplayError(SQL_HANDLE_STMT, ColAtt_hstmt);	}          }  // *********************************  // ** Disconnect and Free Handles **  // *********************************    SQLDisconnect(ColAtt_hdbc);  SQLFreeHandle(SQL_HANDLE_STMT, ColAtt_hstmt);  SQLFreeHandle(SQL_HANDLE_DBC, ColAtt_hdbc);  SQLFreeHandle(SQL_HANDLE_ENV, ColAtt_henv);  return NDBT_OK;}void ColAtt_DisplayError(SQLSMALLINT ColAtt_HandleType, 			 SQLHSTMT ColAtt_InputHandle){  SQLSMALLINT ColAtt_i = 1;  SQLRETURN ColAtt_SQLSTATEs;  SQLCHAR ColAtt_Sqlstate[5];  SQLCHAR ColAtt_Msg[MAXIMUM_MESSAGE_LENGTH_Test];  SQLSMALLINT ColAtt_MsgLen;  SQLINTEGER  ColAtt_NativeError;  ndbout << "-------------------------------------------------" << endl;  ndbout << "Error diagnostics:" << endl;    while ((ColAtt_SQLSTATEs = SQLGetDiagRec(ColAtt_HandleType, 					   ColAtt_InputHandle, 					   ColAtt_i, 					   ColAtt_Sqlstate, 					   &ColAtt_NativeError, 					   ColAtt_Msg, 					   sizeof(ColAtt_Msg), 					   &ColAtt_MsgLen)) 	 != SQL_NO_DATA)                       {            ndbout << "the HandleType is:" << ColAtt_HandleType << endl;      ndbout << "the InputHandle is :" << (long)ColAtt_InputHandle << endl;      ndbout << "the ColAtt_Msg is: " << (char *) ColAtt_Msg << endl;      ndbout << "the output state is:" << (char *)ColAtt_Sqlstate << endl;             ColAtt_i ++;      break;    }  ndbout << "-------------------------------------------------" << endl;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?