// // Source File Name = client.sqx // // Licensed Materials - Property of IBM // // (C) COPYRIGHT International Business Machines Corp. 1995, 1997 // All Rights Reserved. // // US Government Users Restricted Rights - Use, duplication or // disclosure restricted by GSA ADP Schedule Contract with IBM Corp. // // // PURPOSE: This file implement the class Administrator with the // public member functions QueryConnSettings, ModifyConnSettings, // RestoreConnSettings and shows how to use CLIENT APIs // in order to: // - set a client // - and query a client // // APIs USED : // SET CLIENT sqlesetc // QUERY CLIENT sqleqryc // // // EXTERNAL DEPENDENCIES : // - Compiling and linking with the IBM Cset++ compiler (AIX and OS/2) // or the Microsoft Visual C++ compiler (Windows) // or the compiler supported on your platform. // // For more information about these samples see the README file. // // For more information on programming in C++, see the // - "Programming in C and C++" section of the Application Development Guide // // For more information on building C++ applications, see the: // - "Building C++ Applications" section of the Application Building Guide. // // For more information on the SQL language see the SQL Reference. // #include <stdio.h> #include <stdlib.h> #include <string.h> #ifndef DB2MAC #include <malloc.h> #endif #include <sqlenv.h> #include "util.h" #ifdef DB268K /* Need to include ASLM for 68K applications */ #include <LibraryManager.h> #endif /* the following strings are used in the Administrator::printConnSettings member function */ #define SQL_CONNECT_1_STR "Enforces the rules for Remote Unit of Work (RUOW) from\ \nprevious releases\ \n TYPE = SQL_1\n\n" #define SQL_CONNECT_2_STR "Supports the multiple databases per unit of work semantics \ \nDUOW\ \n TYPE = SQL_2\n\n" #define SQL_RULES_DB2_STR "Enables the SQL CONNECT statement to switch the current connection to an\ \nestablished (dormant) connection\ \n TYPE = SQL_DB2\n\n" #define SQL_RULES_STD_STR "Permits the establishment of a new connection only through SQL CONNECT\ \nstatement. Under SQL_STD, the SQL SET CONNECTION statement is used to switch\ \nthe current connection to a dormant connection.\ \n TYPE = SQL_STD\n\n" #define SQL_DISCONNECT_EXPL_STR "Breaks those connections that have been explicitly marked for release at commit\ \nby the SQL RELEASE statement\ \n TYPE = SQL_EXPLICIT\n\n" #define SQL_DISCONNECT_COND_STR "Breaks those connections that have no open WITH HOLD cursors at commit,\ \nand those that have been marked for release by the SQL RELEASE statement\ \n TYPE = SQL_CONDITIONAL\n\n" #define SQL_DISCONNECT_AUTO_STR "Breaks all connections at commit\ \n TYPE = SQL_AUTOMATIC\n\n" #define SQL_SYNC_TWOPHASE_STR "Requires a Transaction Manager (TM) to coordinate two-phase commits among\ \ndatabases that support this protocol\ \n TYPE = SQL_TWOPHASE\n\n" #define SQL_SYNC_ONEPHASE_STR "Uses one-phase commits to commit the work done by each database in multiple\ \ndatabase transactions. Enforces single updater, multiple read behaviour\ \n TYPE = SQL_ONEPHASE\n\n" #define SQL_SYNC_NONE_STR "Does not enforce two-phase commits, or singer updater, multiple\ \nread behaviour.\ \n TYPE = SQL_NONE\n\n" #define SQL_MAX_NETBIOS_CONNECTIONS_STR "This specifies the maximum number of concurrent connections that can be\ \nmade using the NETBIOS adapter in an application\ \n CONNECTIONS = %d\n" #define CHECKERR(CE_STR) check_error (CE_STR, &sqlca) #define NUMSETTINGS 5 class Administrator { public: void QueryConnSettings(); void ModifyConnSettings(); void RestoreConnSettings(); private: // member functions int printConnSettings (struct sqle_conn_setting *); private: // variables struct sqle_conn_setting connSetting[NUMSETTINGS]; short temp_val1, temp_val2, temp_val3, temp_val4, temp_val5; }; void Administrator::QueryConnSettings (){ int rc; struct sqlca sqlca; connSetting[0].type = SQL_CONNECT_TYPE; connSetting[1].type = SQL_RULES; connSetting[2].type = SQL_DISCONNECT; connSetting[3].type = SQL_SYNCPOINT; connSetting[4].type = SQL_MAX_NETBIOS_CONNECTIONS; printf ("QUERY CLIENT**************************************************\n"); /*************************\ * QUERY CLIENT API called * \*************************/ sqleqryc (&connSetting[0], NUMSETTINGS, &sqlca); CHECKERR ("QUERY CLIENT"); rc = printConnSettings(&connSetting[0]); } // QueryConnSettings void Administrator::ModifyConnSettings (){ int rc; struct sqlca sqlca; /* save the current values */ temp_val1 = connSetting[0].value; temp_val2 = connSetting[1].value; temp_val3 = connSetting[2].value; temp_val4 = connSetting[3].value; temp_val5 = connSetting[4].value; /* set new values */ connSetting[0].value = SQL_CONNECT_2; connSetting[1].value = SQL_RULES_STD; connSetting[2].value = SQL_DISCONNECT_COND; connSetting[3].value = SQL_SYNC_TWOPHASE; connSetting[4].value = 254; printf ("SET CLIENT****************************************************\n"); printf ("connect type = SQL_CONNECT_2\n"); printf ("rules = SQL_RULES_STD\n"); printf ("disconnect = SQL_DISCONNECT_COND\n"); printf ("syncpoint = SQL_SYNC_TWOPHASE\n"); printf ("max netbios conn. = 254\n"); /***********************\ * SET CLIENT API called * \***********************/ sqlesetc (&connSetting[0], NUMSETTINGS, &sqlca); CHECKERR ("SET CLIENT"); printf ("QUERY CLIENT**************************************************\n"); /*************************\ * QUERY CLIENT API called * \*************************/ sqleqryc (&connSetting[0], NUMSETTINGS, &sqlca); CHECKERR ("QUERY CLIENT"); rc = printConnSettings(&connSetting[0]); } // ModifyConnSettings void Administrator::RestoreConnSettings (){ int rc; struct sqlca sqlca; connSetting[0].value = temp_val1; connSetting[1].value = temp_val2; connSetting[2].value = temp_val3; connSetting[3].value = temp_val4; connSetting[4].value = temp_val5; printf ("SET CLIENT back to original settings *************************\n"); /***********************\ * SET CLIENT API called * \***********************/ sqlesetc (&connSetting[0], NUMSETTINGS, &sqlca); CHECKERR ("SET CLIENT"); } // RestoreConnSettings int Administrator::printConnSettings (struct sqle_conn_setting *connP) { printf ("\n\n\n"); printf ("SQL CONNECTION TYPE\n"); printf ("===================\n"); switch (connP->value){ case SQL_CONNECT_1: printf (SQL_CONNECT_1_STR); break; case SQL_CONNECT_2: printf (SQL_CONNECT_2_STR); break; default: printf ("undefined value = %d\n\n", connP->value); } /* endswitch */ connP++; printf ("SQL RULES\n"); printf ("=========\n"); switch (connP->value) { case SQL_RULES_DB2: printf (SQL_RULES_DB2_STR); break; case SQL_RULES_STD: printf (SQL_RULES_STD_STR); break; default: printf ("undefined value = %d\n\n", connP->value); } /* endswitch */ connP++; printf ("SQL DISCONNECT\n"); printf ("==============\n"); switch (connP->value) { case SQL_DISCONNECT_EXPL: printf(SQL_DISCONNECT_EXPL_STR); break; case SQL_DISCONNECT_COND: printf(SQL_DISCONNECT_COND_STR); break; case SQL_DISCONNECT_AUTO: printf(SQL_DISCONNECT_AUTO_STR); break; default: printf ("undefined value = %d\n\n", connP->value); } /* endswitch */ connP++; printf ("SQL SYNCPOINT\n"); printf ("=============\n"); switch (connP->value) { case SQL_SYNC_TWOPHASE: printf (SQL_SYNC_TWOPHASE_STR); break; case SQL_SYNC_ONEPHASE: printf (SQL_SYNC_ONEPHASE_STR); break; case SQL_SYNC_NONE: printf (SQL_SYNC_NONE_STR); break; default: printf ("undefined value = %d\n\n", connP->value); } /* endswitch */ connP++; printf ("SQL MAX NETBIOS CONNECTIONS\n"); printf ("===========================\n"); printf (SQL_MAX_NETBIOS_CONNECTIONS_STR, connP->value); printf ("\n\n\n"); return 0; } // printConnSettings int main (void) { Administrator admin; #ifdef DB268K /* Before making any API calls for 68K environment, need to initial the Library Manager */ InitLibraryManager(0,kCurrentZone,kNormalMemory); atexit(CleanupLibraryManager); #endif admin.QueryConnSettings(); admin.ModifyConnSettings(); admin.RestoreConnSettings(); return 0; } // end of file : client.sqx