/*******************************************************************************
**
** Source File Name = dbcat.c 1.4
**
** 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 DATABASE CATALOG APIs in order to:
** - catalog a database
** - list a directory of databases (showing what was created)
** - uncatalog the database
**
** APIs USED :
** CATALOG DATABASE sqlecadb()
** OPEN DATABASE DIRECTORY SCAN sqledosd()
** GET NEXT DATABASE DIRECTORY ENTRY sqledgne()
** CLOSE DATABASE DIRECTORY SCAN sqledcls()
** UNCATALOG DATABASE sqleuncd()
**
** STRUCTURES USED :
** sqledinfo
** sqlca
**
** OTHER FUNCTIONS USED :
** 'C' COMPILER LIBRARY :
** stdio.h - printf
**
** internal :
** list_db : Displays a directory of databases
**
** 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>
#include <sqlenv.h>
#include "util.h"
#ifdef DB268K
/* Need to include ASLM for 68K applications */
#include <LibraryManager.h>
#endif
#define CHECK_ERR(CE_STR) if (check_error (CE_STR, &sqlca) != 0) return 1;
#if ( defined(DB2OS2) | defined(DB2WIN))
#define DRIVE_SZ 2
#else
/* The "drive" field of the SQLEDINFO is truncated to 50 characters for
display purposes in this program. The actual length of this field is
215 */
#define DRIVE_SZ 50
#endif
#define DB_PATH NULL
#define DB_NODE "db2test"
#define DB_TYPE SQL_REMOTE
int list_db (struct sqlca);
int main (void) {
struct sqlca sqlca;
#ifdef DB268K
/* Before making any API calls for 68K environment,
need to initial the Library Manager */
InitLibraryManager(0,kCurrentZone,kNormalMemory);
atexit(CleanupLibraryManager);
#endif
printf ("this is sample program 'dbcat.c'\n");
printf ("cataloging the database...");
/*****************************\
* CATALOG DATABASE API called *
\*****************************/
sqlecadb ("newdata", "newalias", DB_TYPE, DB_NODE, DB_PATH,
"the new database : newalias", SQL_AUTHENTICATION_SERVER,
NULL, &sqlca);
/* Ignore warning SQL1100W */
if (SQLCODE != 1100) CHECK_ERR("cataloguing the database");
printf ("Listing all databases...\n");
printf ("========================\n");
list_db (sqlca);
printf ("UNCATALOGing the database that was created\n");
/*******************************\
* UNCATALOG DATABASE API called *
\*******************************/
sqleuncd ("newalias", &sqlca);
CHECK_ERR ("uncataloging database");
printf ("Listing all databases [after uncatalogued database]\n");
printf ("===================================================\n");
list_db (sqlca);
return 0;
}
/*******************************************************************************
** Procedure : list_db
**
** Purpose : This procedure displays the data contained in each database
** entries by retreiving the "sqldinfo" structure.
**
*******************************************************************************/
int list_db (struct sqlca sqlca) {
unsigned short index;
unsigned short dbHandle;
unsigned short dbCount;
struct sqledinfo *dbBuffer;
/*****************************************\
* OPEN DATABASE DIRECTORY SCAN API called *
\*****************************************/
sqledosd ("\0", &dbHandle, &dbCount, &sqlca);
if (sqlca.sqlcode == SQLE_RC_NODBDIR) {
printf ("--- Database directory is empty ---\n");
return;
} else {
CHECK_ERR("opening the database directory scan API");
} /* endif */
for (index = 0; index < dbCount; index++) {
/************************************\
* GET NEXT DATABASE ENTRY API called *
\************************************/
sqledgne (dbHandle, &dbBuffer, &sqlca);
CHECK_ERR("getting next database entry API");
/* printing out the node information on to the screen */
printf ("alias name : %.8s\n", dbBuffer->alias);
printf ("database name : %.8s\n", dbBuffer->dbname);
printf ("database drive : %.*s\n",DRIVE_SZ, dbBuffer->drive);
printf ("database directory : %.8s\n", dbBuffer->intname);
printf ("node name : %.8s\n", dbBuffer->nodename);
printf ("database release type : %.20s\n", dbBuffer->dbtype);
printf ("database comment : %.30s\n", dbBuffer->comment);
printf ("database entry type : %d\n", dbBuffer->type);
switch (dbBuffer->authentication) {
case SQL_AUTHENTICATION_SERVER:
printf ("authentication : SERVER\n");
break;
case SQL_AUTHENTICATION_CLIENT:
printf ("authentication : CLIENT\n");
break;
case SQL_AUTHENTICATION_DCS:
printf ("authentication : DCS\n");
break;
default:
break;
} /* endswitch */
printf ("\n");
} /* endfor */
/******************************************\
* CLOSE DATABASE DIRECTORY SCAN API called *
\******************************************/
sqledcls (dbHandle, &sqlca);
CHECK_ERR("closing the node directory scan");
return 0;
}