/*******************************************************************************
**
** Source File Name = client.c 1.2
**
** Licensed Materials - Property of IBM
**
** (C) COPYRIGHT International Business Machines Corp. 1995, 1999
** All Rights Reserved.
**
** US Government Users Restricted Rights - Use, duplication or
** disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
**
**
** PURPOSE :
** an example showing how to use CLIENT APIs in order to:
** - set a client
** - and query a client
**
** APIs USED :
** SET CLIENT sqlesetc
** QUERY CLIENT sqleqryc
**
** STRUCTURES USED :
** sqle_conn_setting
** sqlca
**
** OTHER FUNCTIONS DECLARED :
** 'C' COMPILER LIBRARY :
** stdio.h - printf
**
** internal :
**
** external :
** check_error : Checks for SQLCODE error, and prints out any
** [in util.c] related information available.
** This procedure is located in the util.c file.
**
** EXTERNAL DEPENDENCIES :
** - Ensure existence of database for precompile purposes.
** - Compile and link 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
#define CHECKERR(CE_STR) check_error (CE_STR, &sqlca);
#define NUMSETTINGS 5
int printQuery (struct sqle_conn_setting *);
int main (void) {
int rc;
struct sqlca sqlca;
struct sqle_conn_setting connSetting[NUMSETTINGS];
short temp_val1, temp_val2, temp_val3, temp_val4, temp_val5;
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");
#ifdef DB268K
/* Before making any API calls for 68K environment,
need to initial the Library Manager */
InitLibraryManager(0,kCurrentZone,kNormalMemory);
atexit(CleanupLibraryManager);
#endif
/*************************\
* QUERY CLIENT API called *
\*************************/
sqleqryc (&connSetting[0], NUMSETTINGS, &sqlca);
CHECKERR ("QUERY CLIENT");
rc = printQuery(&connSetting[0]);
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;
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 = printQuery(&connSetting[0]);
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");
return 0;
}
int printQuery (struct sqle_conn_setting *connP) {
printf ("\n\n\n");
printf ("SQL CONNECTION TYPE\n");
printf ("===================\n");
switch (connP->value){
case SQL_CONNECT_1:
printf ("Enforces the rules for Remote Unit of Work (RUOW) from "
"previous releases\n TYPE = SQL_1\n\n");
break;
case SQL_CONNECT_2:
printf ("Supports the multiple databases per unit of work semantics "
"DUOW\n TYPE = SQL_2\n\n");
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 ("Enables the SQL CONNECT statement to switch the current "
"connection to an\nestablished (dormant) connection\n"
" TYPE = SQL_DB2\n\n");
break;
case SQL_RULES_STD:
printf ("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");
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 ("Breaks those connections that have been explicitly marked "
"for release at commit\nby the SQL RELEASE statement\n"
" TYPE = SQL_EXPLICIT\n\n");
break;
case SQL_DISCONNECT_COND:
printf("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");
break;
case SQL_DISCONNECT_AUTO:
printf("Breaks all connections at commit\n TYPE = SQL_AUTOMATIC\n\n");
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 ("Requires a Transaction Manager (TM) to coordinate two-"
"phase commits among\ndatabases that support this protocol\n"
" TYPE = SQL_TWOPHASE\n\n");
break;
case SQL_SYNC_ONEPHASE:
printf ("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");
break;
case SQL_SYNC_NONE:
printf ("Does not enforce two-phase commits, or singer updater, "
"multiple\nread behaviour.\n TYPE = SQL_NONE\n\n");
break;
default:
printf ("undefined value = %d\n\n", connP->value);
} /* endswitch */
connP++;
printf ("SQL MAX NETBIOS CONNECTIONS\n");
printf ("===========================\n");
printf ("This specifies the maximum number of concurrent connections that "
"can be\nmade using the NETBIOS adapter in an application\n");
printf (" CONNECTIONS = %d\n", connP->value);
printf ("\n\n\n");
return 0;
}