/*******************************************************************************
**
** Source File Name = apsqlca.c
**
** Licensed Materials - Property of IBM
**
** (C) COPYRIGHT International Business Machines Corp. 1995, 2000
** All Rights Reserved.
**
** US Government Users Restricted Rights - Use, duplication or
** disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
**
**
** PURPOSE :
** Shows how to use the CLI function SQLGetSQLCA.
**
** For more information about these samples see the README file.
**
** For more information on programming in CLI see the:
** - "Building CLI Applications" section of the Application Building Guide, and the
** - CLI Guide and Reference.
**
** For more information on the SQL language see the SQL Reference.
**
*******************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlcli1.h>
#include "utilcli.h" /* Header file for CLI sample code */
/*******************************************************************
** main
*******************************************************************/
int main( int argc, char * argv[] )
{ SQLRETURN sqlrc = SQL_SUCCESS;
int rc = 0;
SQLHANDLE henv; /* environment handle */
SQLHANDLE hdbc; /* connection handle */
SQLHANDLE hstmt; /* statement handle */
SQLCHAR * stmt1 = ( SQLCHAR * ) "SELECT * FROM org";
SQLCHAR * stmt2 = ( SQLCHAR * ) "SELECT * FROM staff";
char dbAlias[SQL_MAX_DSN_LENGTH + 1] ;
char user[MAX_UID_LENGTH + 1] ;
char pswd[MAX_PWD_LENGTH + 1] ;
struct sqlca sqlca;
/* checks the command line arguments */
rc = CmdLineArgsCheck1( argc, argv, dbAlias, user, pswd );
if ( rc != 0 ) return( rc ) ;
printf("\n\nCLI APP.: HOW TO USE SQLGetSQLCA.\n");
printf("\nUSE THE CLI FUNCTIONS\n");
printf("-SQLAllocHandle\n-SQLSetConnectAttr\n");
printf("-SQLConnect\n-SQLSetStmtAttr\n");
printf("-SQLPrepare\n-SQLGetSQLCA\n");
printf("-SQLDisconnect\n-SQLFreeHandle\n");
printf("TO SHOW HOW TO USE SQLGetSQLCA:\n");
/* allocate an environment handle */
sqlrc = SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv ) ;
if ( sqlrc != SQL_SUCCESS )
{ printf( "\n--ERROR while allocating the environment handle.\n" ) ;
printf( " sqlrc = %d\n", sqlrc);
printf( " line = %d\n", __LINE__);
printf( " file = %s\n", __FILE__);
return( 1 ) ;
}
/* allocate a database connection handle */
sqlrc = SQLAllocHandle( SQL_HANDLE_DBC, henv, &hdbc ) ;
HANDLE_CHECK( SQL_HANDLE_ENV, henv, sqlrc, &henv, &hdbc ) ;
/* set AUTOCOMMIT on */
sqlrc = SQLSetConnectAttr( hdbc,
SQL_ATTR_AUTOCOMMIT,
(SQLPOINTER)SQL_AUTOCOMMIT_ON, SQL_NTS) ;
HANDLE_CHECK( SQL_HANDLE_DBC, hdbc, sqlrc, &henv, &hdbc ) ;
/* connect to the database */
printf( "\n Connecting to the database %s ...\n", dbAlias ) ;
sqlrc = SQLConnect( hdbc,
(SQLCHAR *)dbAlias, SQL_NTS,
(SQLCHAR *)user, SQL_NTS,
(SQLCHAR *)pswd, SQL_NTS
) ;
HANDLE_CHECK( SQL_HANDLE_DBC, hdbc, sqlrc, &henv, &hdbc ) ;
printf( " Connected to the database %s.\n", dbAlias ) ;
/* allocate one or more statement handle */
sqlrc = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ;
HANDLE_CHECK( SQL_HANDLE_DBC, hdbc, sqlrc, &henv, &hdbc ) ;
/* disable deferred prepare*/
printf("\n Disable deffered prepare.\n");
sqlrc = SQLSetStmtAttr( hstmt,
SQL_ATTR_DEFERRED_PREPARE,
(SQLPOINTER) SQL_DEFERRED_PREPARE_OFF ,
0);
HANDLE_CHECK( SQL_HANDLE_STMT, hstmt, sqlrc, &henv, &hdbc ) ;
/********* Start using the statement handle *******************/
/* prepare the statement */
printf(" Prepare the statement\n");
printf(" %s\n", stmt1);
sqlrc = SQLPrepare( hstmt, stmt1, SQL_NTS ) ;
HANDLE_CHECK( SQL_HANDLE_STMT, hstmt, sqlrc, &henv, &hdbc ) ;
/*--> 00000622.snippet */
/* call SQLGetSQLCA */
printf(" Call SQLGetSQLCA and print some SQLCA fields.\n");
sqlrc = SQLGetSQLCA( henv, hdbc, hstmt, &sqlca ) ;
HANDLE_CHECK( SQL_HANDLE_STMT, hstmt, sqlrc, &henv, &hdbc ) ;
/* 00000622.snippet <--*/
printf(" Relative cost estimate of the resources\n");
printf(" required to process the statement = %lu\n",
sqlca.sqlerrd[3]);
printf(" Estimate of the number of rows that will be returned\n");
printf(" to the user when the statement is executed = %ld\n",
sqlca.sqlerrd[2]);
/* prepare the statement */
printf(" Prepare the statement\n");
printf(" %s\n", stmt2);
sqlrc = SQLPrepare( hstmt, stmt2, SQL_NTS ) ;
HANDLE_CHECK( SQL_HANDLE_STMT, hstmt, sqlrc, &henv, &hdbc ) ;
/* call SQLGetSQLCA */
printf(" Call SQLGetSQLCA and print some SQLCA fields.\n");
sqlrc = SQLGetSQLCA( henv, hdbc, hstmt, &sqlca ) ;
HANDLE_CHECK( SQL_HANDLE_STMT, hstmt, sqlrc, &henv, &hdbc ) ;
printf(" Relative cost estimate of the resources\n");
printf(" required to process the statement = %lu\n",
sqlca.sqlerrd[3]);
printf(" Estimate of the number of rows that will be returned\n");
printf(" to the user when the statement is executed = %ld\n",
sqlca.sqlerrd[2]);
/********* Stop using the statement handles ********************/
/* free the statement handle */
sqlrc = SQLFreeHandle( SQL_HANDLE_STMT, hstmt ) ;
HANDLE_CHECK( SQL_HANDLE_STMT, hstmt, sqlrc, &henv, &hdbc ) ;
/* disconnect from the database */
printf( "\n Disconnecting from the database %s ...\n", dbAlias ) ;
sqlrc = SQLDisconnect( hdbc ) ;
HANDLE_CHECK( SQL_HANDLE_DBC, hdbc, sqlrc, &henv, &hdbc ) ;
printf( " Disconnected from the database %s.\n", dbAlias ) ;
/* free the connection handle */
sqlrc = SQLFreeHandle( SQL_HANDLE_DBC, hdbc ) ;
HANDLE_CHECK( SQL_HANDLE_DBC, hdbc, sqlrc, &henv, &hdbc ) ;
/* free the environment handle */
sqlrc = SQLFreeHandle( SQL_HANDLE_ENV, henv ) ;
ENV_HANDLE_CHECK( henv, sqlrc ) ;
return( 0 ) ;
} /* end main */