/****************************************************************************** ** ** Source File Name = makeapi.sqc ** 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 : ** This program demonstrates precompiling and binding embedded SQL programs. ** Input parameters from the command line are as follows: ** ** makeapi <program_name>.sqc <database_name> ** ** ** STRUCTURES USED : ** sqlopt ** sqlca ** ** APIs USED : ** START DATABASE MANAGER sqlepstart() ** PREOCOMPILE PROGRAM sqlaprep() ** BIND sqlabndx() ** STOP DATABASE MANAGER sqlepstp() ** ** FUNCTIONS DECLARED : ** 'C' COMPILER LIBRARY : ** stdio.h - printf ** string.h - strncpy ** ** DBMS LIBRARY : ** sqlenv.h - see "APIs USED" above ** ** OTHER : ** ** EXTERNAL DEPENDANCIES : ** - Existing database for precompile purposes. ** - Precompile with the SQL precompiler (PREP in DB2) ** - Binding to a database (BIND in DB2) ** - Compiling and linking with the appropriate compiler ** ** EXAMPLE USAGE: ** - "makeapi updat.sqc sample" ** ** 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> #include <sqlenv.h> #include "utilemb.h" EXEC SQL INCLUDE SQLCA ; int main ( int argc, char *argv[] ) { struct sqlopt * sqloptStructPointer ; struct sqloptions * optionsPointer ; int i, rc ; char programName[15] ; char bindName[15] ; char * extension ; char connInput[19] ; char option ; char *db2path; EXEC SQL BEGIN DECLARE SECTION ; char dbAlias[9] ; char userid[9] ; char passwd[19] ; EXEC SQL END DECLARE SECTION ; if ( argc != 3 ) { printf( "\nUSAGE : makeapi program.sqc db_name\n\n" ) ; return( 1 ) ; } if ( ( extension = strstr( argv[1], "." ) ) == 0 ) { printf("\nInclude the extension with the program name.\n\n"); return( 1 ); } if ( strcmp( extension, ".sqc" ) == 0 ) { strcpy( programName, argv[1] ) ; i = strlen( programName ) - 1 ; while ( i > 0 ) { if ( programName[i] == '.' ) { programName[i] = '\0' ; break ; } i-- ; } } else { printf("\nInclude the '.sqc' extension with the program name.\n\n"); return(1); } strcpy( bindName, programName ) ; strcat( bindName, ".bnd" ) ; printf( "--->starting the Database Manager\n" ) ; /***********************************\ * START DATABASE MANAGER API called * \***********************************/ sqlepstart(NULL, &sqlca) ; printf( "input your user id:\n" ) ; gets( connInput ) ; strcpy( userid, connInput ) ; printf( "input your password:\n" ) ; gets( connInput ) ; strcpy( passwd, connInput ) ; printf( "\n--->Connecting to %s database\n", argv[2] ) ; /* by definition of this program, the last argument must be the name of the database */ strcpy( dbAlias, argv[2] ) ; EXEC SQL CONNECT TO :dbAlias USER :userid USING :passwd ; EMB_SQL_CHECK( "CONNECT TO database" ) ; sqloptStructPointer = ( struct sqlopt * ) malloc( sizeof( struct sqlopt ) + ( sizeof( struct sqloptions ) * 2 ) ) ; sqloptStructPointer->header.allocated = 2 ; sqloptStructPointer->header.used = 2 ; optionsPointer = sqloptStructPointer->option ; optionsPointer->type = SQL_BIND_OPT ; optionsPointer->val = 0 ; /* bind with default name */ optionsPointer++ ; optionsPointer->type = SQL_PKG_OPT ; optionsPointer->val = 0 ; printf( "\n--->precompiling the program: %s\n", argv[1] ) ; /*******************************\ * PRECOMPILE PROGRAM API called * \*******************************/ sqlaprep( argv[1], "message.pb1", sqloptStructPointer, &sqlca ) ; EMB_SQL_CHECK( "precompile program" ) ; printf( "precompiling successful\n" ) ; /* nullifying the options for the BIND API */ optionsPointer = sqloptStructPointer->option ; optionsPointer->type = SQL_NO_OPT ; optionsPointer->val = 0 ; optionsPointer++ ; optionsPointer->type = SQL_NO_OPT ; optionsPointer->val = 0 ; printf( "\n--->binding the application: %s\n", bindName ) ; /*****************\ * BIND API called * \*****************/ sqlabndx( bindName, "message.pb2", sqloptStructPointer, &sqlca ) ; EMB_SQL_CHECK( "binding the application" ) ; printf( "\n--->connect resetting\n" ) ; EXEC SQL CONNECT RESET ; EMB_SQL_CHECK( "CONNECT RESET" ) ; printf( "\nWould you like to stop the Database Manager? (y/n)\n" ) ; option = getc( stdin ) ; if ( option == 'y' ) { printf( "\n--->stopping the Database Manager\n" ) ; /**********************************\ * STOP DATABASE MANAGER API called * \**********************************/ sqlepstp(NULL, &sqlca ) ; EMB_SQL_CHECK( "stopping database manager" ) ; } /* endif */ return( 0 ) ; } /* end of program : makeapi.sqc */