/******************************************************************************
**
** Source File Name = tabspace.sqc 1.5
**
** 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 TABLESPACE APIs
** in order to:
** - obtain tablespace information using lower level service
** APIs (OPEN, FETCH, CLOSE)
** - obtain tablespace information using a higher level
** APIs (TABLESPACE QUERY, SINGLE TABLESPACE QUERY)
** -
**
** APIs USED :
** TABLESPACE QUERY sqlbmtsq
** SINGLE TABLESPACE QUERY sqlbstpq
** OPEN TABLESPACE QUERY sqlbotsq
** FETCH TABLESPACE QUERY sqlbftpq
** GET TABLESPACE STATISTICS sqlbgtss
** CLOSE TABLESPACE QUERY sqlbctsq
** FREE MEMORY sqlefmem
**
** STRUCTURES USED :
** SQLB_TBSPQRY_DATA
** sqlca
**
** OTHER FUNCTIONS DECLARED :
** 'C' COMPILER LIBRARY :
** stdio.h - printf
**
** internal :
** tabspaceInfo : Displays information on the tablespace passed
** through.
**
** 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 DEPENDANCIES :
** - 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 <malloc.h>
#include <sqlutil.h>
#include <sqlenv.h>
#include "util.h"
EXEC SQL INCLUDE SQLCA;
#define CHECKERR(CE_STR) if (check_error (CE_STR, &sqlca) != 0) return 1;
void tabspaceInfo (struct SQLB_TBSPQRY_DATA *, unsigned long);
int main (int argc, char *argv[]) {
struct sqlca sqlca;
struct SQLB_TBSPQRY_DATA *dataP;
struct SQLB_TBSPQRY_DATA **dataPP;
unsigned long numTS, maxTS, numT, index;
unsigned long i;
EXEC SQL BEGIN DECLARE SECTION;
char dbname[9];
char userid[9];
char passwd[19];
EXEC SQL END DECLARE SECTION;
if (argc != 4) {
printf ("\nUSAGE: tabspace databasename userid passwd\n\n");
return 1;
} /* endif */
printf ("this is sample program: tabspace.c\n\n");
strcpy(dbname, argv[1]);
strcpy(userid, argv[2]);
strcpy(passwd, argv[3]);
EXEC SQL CONNECT TO :dbname USER :userid USING :passwd;
CHECKERR ("CONNECT TO DATABASE");
printf ("Using the following APIs:\n OPEN TABLESPACE QUERY\n"
" FETCH TABLESPACE QUERY\n CLOSE TABLESPACE QUERY\n");
printf ("=========================\n");
/**********************************\
* OPEN TABLESPACE QUERY API called *
\**********************************/
sqlbotsq (&sqlca, SQLB_OPEN_TBS_ALL, &numTS);
CHECKERR ("OPEN TABLESPACE QUERY");
maxTS = numTS;
dataP = (struct SQLB_TBSPQRY_DATA *) malloc (numTS *
sizeof (struct SQLB_TBSPQRY_DATA));
strcpy(dataP->tbspqver,SQLB_TBSPQRY_DATA_ID);
/***********************************\
* FETCH TABLESPACE QUERY API called *
\***********************************/
sqlbftpq (&sqlca, maxTS, dataP, &numTS);
CHECKERR ("FETCH TABLESPACE QUERY");
tabspaceInfo (dataP, numTS);
/************************************\
* CLOSE TABLESPACE QUERY API called *
\************************************/
sqlbctsq (&sqlca);
CHECKERR ("CLOSE TABLESPACE QUERY");
printf ("Using the SINGLE TABLESPACE QUERY API for table ID : 1\n");
printf ("======================================================\n");
/************************************\
* SINGLE TABLESPACE QUERY API called *
\************************************/
sqlbstpq (&sqlca, 1, dataP, SQLB_RESERVED1);
CHECKERR ("SINGLE TABLESPACE QUERY");
tabspaceInfo (dataP, 1);
printf ("Using the TABLESPACE QUERY API\n");
printf ("==============================\n");
/*****************************\
* TABLESPACE QUERY API called *
\*****************************/
sqlbmtsq (&sqlca, &numTS, &(dataPP), SQLB_RESERVED1, SQLB_RESERVED2);
CHECKERR ("TABLESPACE QUERY");
for (i=0; i < numTS; i++ )
tabspaceInfo (dataPP[i], 1);
/************************\
* FREE MEMORY API called *
\************************/
sqlefmem (&sqlca, dataPP);
CHECKERR ("FREE MEMORY");
EXEC SQL CONNECT RESET;
CHECKERR ("CONNECT RESET");
return 0;
}
void tabspaceInfo (struct SQLB_TBSPQRY_DATA *dataP, unsigned long num) {
struct sqlca sqlca;
struct SQLB_TBS_STATS tbs_stats;
unsigned long idx;
for (idx=0; idx < num; idx++, dataP++) {
printf ("Tablespace ID = %ld\n", dataP->id);
printf ("Tablespace Name = %s\n", dataP->name);
/* "Type" and "Content" are stored bitwise in the flag field */
printf ("Type = ");
switch (dataP->flags & 0xF ) {
case SQLB_TBS_SMS:
printf ("System managed space\n");
break;
case SQLB_TBS_DMS:
printf ("Database managed space\n");
break;
default:
printf ("UNKNOWN\n");
break;
} /* endswitch */
printf ("Contents = ");
switch (dataP->flags & 0xF0) {
case SQLB_TBS_ANY:
printf ("regular contents\n");
break;
case SQLB_TBS_LONG:
printf ("long field data\n");
break;
case SQLB_TBS_TMP:
printf ("temp data\n");
break;
default:
printf ("UNKNOWN :%d:\n", dataP->flags & 0xF0);
break;
} /* endswitch */
printf ("State = ");
switch (dataP->tbsState) {
case SQLB_NORMAL:
printf ("Normal\n");
break;
case SQLB_QUIESCED_SHARE:
printf ("Quiesced: SHARE\n");
break;
case SQLB_QUIESCED_UPDATE:
printf ("Quiesced: UPDATE\n");
break;
case SQLB_QUIESCED_EXCLUSIVE:
printf ("Quiesced: EXCLUSIVE\n");
break;
case SQLB_LOAD_PENDING:
printf ("Load pending\n");
break;
case SQLB_DELETE_PENDING:
printf ("Delete pending\n");
break;
case SQLB_BACKUP_PENDING:
printf ("Backup pending\n");
break;
case SQLB_ROLLFORWARD_IN_PROGRESS:
printf ("Roll forward in progress\n");
break;
case SQLB_ROLLFORWARD_PENDING:
printf ("Roll forward pending\n");
break;
case SQLB_RESTORE_PENDING:
printf ("Restore pending\n");
break;
case SQLB_DISABLE_PENDING:
printf ("Disable pending\n");
break;
case SQLB_REORG_IN_PROGRESS:
printf ("Reorg in progress\n");
break;
case SQLB_BACKUP_IN_PROGRESS:
printf ("Backup in progress\n");
break;
case SQLB_STORDEF_PENDING:
printf ("storage must be defined\n");
break;
case SQLB_RESTORE_IN_PROGRESS:
printf ("Restore in progress\n");
break;
case SQLB_STORDEF_ALLOWED:
printf ("storage may be defined\n");
break;
case SQLB_STORDEF_FINAL_VERSION:
printf ("storDef is in 'final' state\n");
break;
case SQLB_STORDEF_CHANGED:
printf ("storDef was changed prior to rollforward\n");
break;
case SQLB_REBAL_IN_PROGRESS:
printf ("dms rebalancer is active\n");
break;
case SQLB_PSTAT_DELETION:
printf ("TBS deletion in progress\n");
break;
case SQLB_PSTAT_CREATION:
printf ("TBS creation in progress\n");
break;
default:
printf ("UNKNOWN\n");
break;
} /* endswitch */
/***************************\
* GET TABLESPACE STATISTICS *
\***************************/
sqlbgtss(&sqlca, dataP->id, &tbs_stats);
if (check_error ("GET TBS STAT", &sqlca) != 0) break;
printf ("Tablespace Statistics\n");
printf ("total pages = %ld\n", tbs_stats.totalPages);
printf ("useable pages = %ld\n",
tbs_stats.useablePages);
printf ("used pages = %ld\n", tbs_stats.usedPages);
printf ("free pages = %ld\n", tbs_stats.freePages);
printf ("high water mark = %ld\n",
tbs_stats.highWaterMark);
printf ("\n\n");
} /* endfor */
}