summaryrefslogtreecommitdiff
path: root/storage/ndb/test/odbc/client/SQLGetFunctionsTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'storage/ndb/test/odbc/client/SQLGetFunctionsTest.cpp')
-rw-r--r--storage/ndb/test/odbc/client/SQLGetFunctionsTest.cpp284
1 files changed, 284 insertions, 0 deletions
diff --git a/storage/ndb/test/odbc/client/SQLGetFunctionsTest.cpp b/storage/ndb/test/odbc/client/SQLGetFunctionsTest.cpp
new file mode 100644
index 00000000000..c6feb8ec033
--- /dev/null
+++ b/storage/ndb/test/odbc/client/SQLGetFunctionsTest.cpp
@@ -0,0 +1,284 @@
+/* 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 SQLGetFunctionsTest.cpp
+ */
+
+
+#include <common.hpp>
+#define GF_MESSAGE_LENGTH 200
+
+using namespace std;
+
+SQLHDBC GF_hdbc;
+SQLHSTMT GF_hstmt;
+SQLHENV GF_henv;
+
+void SQLGetFunctions_DisplayError(SQLSMALLINT GF_HandleType,
+ SQLHDBC GF_InputHandle);
+
+/**
+ * Test whether a specific ODBC API function is supported by
+ * the driver an application is currently connected to.
+ *
+ * In this test program, we can change ODBC function values in order to
+ * know different which fuction is supported by ODBC drivers
+ * Tests:
+ * -# Test1 There is no established SQL-connection
+ * -# Test2 ConnectionHandle does not identify an allocated SQL-connection
+ * -# Test3 The value of FunctionId is not in table 27
+ * -# Test4 Normal case test
+ * @return Zero, if test succeeded
+ */
+
+int SQLGetFunctionsTest()
+{
+ SQLUSMALLINT TableExists, Supported;
+ SQLCHAR SQLStmt [120];
+ SQLRETURN retcode;
+
+ ndbout << endl << "Start SQLGetFunctions Testing" << endl;
+
+ //**********************************************************
+ //** Test 1 **
+ //** If there is no established SQL-connection associated **
+ //** with allocated SQL-connection **
+ //**********************************************************
+
+ retcode = SQLGetFunctions(GF_hdbc, SQL_API_SQLTABLES, &TableExists);
+ if (retcode == -2)
+{
+ ndbout << endl << "Test 1" << endl;
+ ndbout << "retcode = " << retcode << endl;
+ ndbout << endl << "There is no established SQL-connection" << endl;
+ ndbout << "associated with allocated SQL_connection" << endl;
+ SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
+}
+ else if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
+{
+ ndbout << endl << "Test 1" << endl;
+ ndbout << "retcode = " << retcode << endl;
+ ndbout << endl << "There is no established SQL-connection" << endl;
+ ndbout << "associated with allocated SQL_connection" << endl;
+ SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
+}
+ else
+{
+ ndbout << endl << "Test 1" << endl;
+ ndbout << "retcode = " << retcode << endl;
+ ndbout << endl << "There is no established SQL-connection" << endl;
+ ndbout << "associated with allocated SQL_connection" << endl;
+ SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
+}
+
+ //************************************
+ //** Allocate An Environment Handle **
+ //************************************
+ retcode = SQLAllocHandle(SQL_HANDLE_ENV,
+ SQL_NULL_HANDLE,
+ &GF_henv);
+
+ if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
+ ndbout << "Allocated an environment Handle!" << endl;
+
+ //*********************************************
+ //** Set the ODBC application Version to 3.x **
+ //*********************************************
+ retcode = SQLSetEnvAttr(GF_henv,
+ SQL_ATTR_ODBC_VERSION,
+ (SQLPOINTER) SQL_OV_ODBC3,
+ SQL_IS_UINTEGER);
+
+ if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
+ ndbout << "Set the ODBC application Version to 3.X!" << endl;
+
+ //**********************************
+ //** Allocate A Connection Handle **
+ //**********************************
+
+ retcode = SQLAllocHandle(SQL_HANDLE_DBC,
+ GF_henv,
+ &GF_hdbc);
+
+ if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
+ ndbout << "Allocated a connection Handle!" << endl;
+
+ // *******************
+ // ** Connect to DB **
+ // *******************
+ retcode = SQLConnect(GF_hdbc,
+ (SQLCHAR*) connectString(),
+ SQL_NTS,
+ (SQLCHAR*) "",
+ SQL_NTS,
+ (SQLCHAR*) "",
+ SQL_NTS);
+
+ if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
+{
+
+ //*************************************************************
+ //** Test 2 **
+ //** If ConnectionHandle does not identify an allocated **
+ //** SQL-connection, then an exception condition is raised **
+ //*************************************************************
+ retcode = SQLGetFunctions(GF_hdbc, SQL_API_SQLTABLES, &TableExists);
+ if (retcode == -2)
+{
+ ndbout << endl << "Test 2" << endl;
+ ndbout << "retcode = " << retcode << endl;
+ ndbout << "If ConnectionHandle does not identify an allocated" << endl;
+ ndbout << "SQL-connection,an exception condition is raised" << endl;
+ SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
+}
+ else if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
+{
+ ndbout << endl << "Test 2" << endl;
+ ndbout << "retcode = " << retcode << endl;
+ ndbout << "If ConnectionHandle does not identify an allocated" << endl;
+ ndbout << "SQL-connection,an exception condition is raised" << endl;
+ SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
+}
+ else
+{
+ ndbout << endl << "Test 2 :" << endl;
+ ndbout << "retcode = " << retcode << endl;
+ ndbout << "If ConnectionHandle does not identify an allocated" << endl;
+ ndbout << "SQL-connection,an exception condition is raised" << endl;
+ SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
+}
+
+ //*************************************************************
+ //** Test 3 **
+ //** If the value of FunctionId is not in table 27, "Codes **
+ //** used to identify SQL/CLI routines" **
+ //*************************************************************
+
+ retcode = SQLGetFunctions(GF_hdbc, 88888, &TableExists);
+ ndbout<< "TableExists = " << TableExists << endl;
+ if (retcode == -2)
+{
+ ndbout << "retcode = " << retcode << endl;
+ ndbout << "Test 3 : The value of FunctionId is not in table 27" << endl;
+ SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
+}
+ else if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO)
+{
+ ndbout << "retcode = " << retcode << endl;
+ ndbout << "Test 3 : The value of FunctionId is not in table 27" << endl;
+ SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
+}
+ else
+{
+ ndbout << "retcode = " << retcode << endl;
+ ndbout << "Test 3 : The value of FunctionId is not in table 27" << endl;
+ SQLGetFunctions_DisplayError(SQL_HANDLE_STMT, GF_hstmt);
+}
+
+ //******************
+ //** Test 4 **
+ //** Normal case **
+ //******************
+ ndbout << "Test 4:" << endl;
+ retcode = SQLGetFunctions(GF_hdbc, SQL_API_SQLBROWSECONNECT, &Supported);
+ ndbout << "retcode = " << retcode << endl;
+ if (Supported == TRUE)
+{
+ ndbout << "Supported = " << Supported << endl;
+ ndbout << "SQLBrowseConnect is supported by the current data source"
+ << endl;
+}
+ else
+{
+ ndbout << "Supported = " << Supported << endl;
+ ndbout << "SQLBrowseConnect isn't supported by the current data source"
+ << endl;
+}
+
+
+ //******************
+ //** Test 5 **
+ //** Normal case **
+ //******************
+ ndbout << endl << "Test 5:" << endl;
+ retcode = SQLGetFunctions(GF_hdbc, SQL_API_SQLFETCH, &Supported);
+ ndbout << "retcode = " << retcode << endl;
+ if (Supported == TRUE)
+{
+ ndbout << "Supported = " << Supported << endl;
+ ndbout << "SQLFETCH is supported by the current data source" << endl;
+}
+ else
+{
+ ndbout << "Supported = " << Supported << endl;
+ ndbout << "SQLFETCH isn't supported by the current data source" << endl;
+}
+
+}
+
+ // *********************************
+ // ** Disconnect and Free Handles **
+ // *********************************
+ SQLDisconnect(GF_hdbc);
+ SQLFreeHandle(SQL_HANDLE_STMT, GF_hstmt);
+ SQLFreeHandle(SQL_HANDLE_DBC, GF_hdbc);
+ SQLFreeHandle(SQL_HANDLE_ENV, GF_henv);
+
+ return NDBT_OK;
+
+}
+
+
+void SQLGetFunctions_DisplayError(SQLSMALLINT GF_HandleType,
+ SQLHDBC GF_InputHandle)
+{
+ SQLRETURN SQLSTATEs;
+ SQLCHAR Sqlstate[50];
+ SQLINTEGER NativeError;
+ SQLSMALLINT i, MsgLen;
+ SQLCHAR Msg[GF_MESSAGE_LENGTH];
+ i = 1;
+
+ ndbout << "-------------------------------------------------" << endl;
+ ndbout << "Error diagnostics:" << endl;
+
+ Msg[0] = 0;
+ while ((SQLSTATEs = SQLGetDiagRec(GF_HandleType,
+ GF_InputHandle,
+ i,
+ Sqlstate,
+ &NativeError,
+ Msg,
+ sizeof(Msg),
+ &MsgLen))
+ != SQL_NO_DATA)
+ {
+
+ ndbout << "the HandleType is:" << GF_HandleType << endl;
+ ndbout << "the InputHandle is :" << (long)GF_InputHandle << endl;
+ ndbout << "the Msg is :" << (char *) Msg << endl;
+ ndbout << "the output state is:" << (char *)Sqlstate << endl;
+
+ i ++;
+ Msg[0] = 0;
+ break;
+ }
+ ndbout << "-------------------------------------------------" << endl;
+}
+
+
+