Re: dbschema -ss
Posted in 1997
This is a multi-part message in MIME format.
--------------565E321E7E78
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Nils Myklebust wrote:
>
> root@candle.pha.pa.us wrote:
>
> :Jerry A. Van Zant <jvz@opendata.com> wrote:
> :: Jacob Salomon <jake@apparel.net> wrote in article
> :: <EDDqJL.7Ku@nonexistent.com>...
> :: > Quickie question:
> :: >
> :: > Is the -ss option available for dbschema in the latest versions of
> :: > OnLine 5? LIke 5.07 or 5.08?
> :: >
> :: > I have a client (on 5.02) who may have to rebuild their databases
> :: > because the are at the limit for transaction logs and created them too
I just remembered, I wrote such a beasty several years ago. It depends
on a database/table containing dbspace #s and names, but it is easily
modified to use a file with that information or to parse tbstat -d
output. I have sent it to Jake Solomon, I attach it here for anyone
who might need it.
Art S. Kagel
--------------565E321E7E78
Content-Type: text/plain; charset=us-ascii; name="myschema.ec"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="myschema.ec"
/*
Program Id: schema
Program Description: this program will generate an sql schema for a
specified database or a set of tables. Adds
features not found in Informix' dbschema.
Author: Art S. Kagel from Rick Friedman's dbschema_cc for Sybase
Date: May of 1992
Version: 1.0
Comments:
Revisions:
Usage: schema [-h hostname] -d databasename [-t tablename] [filename]
RCS Header
----------
$Header: /home/kagel/.mine/RCS/schema.ec,v 1.6 1993/07/29 19:51:52 kagel Exp $
RCS Log
-------
$Log: schema.ec,v $
# Revision 1.6 1993/07/29 19:51:52 kagel
# Added RCS headers.
#
# Revision 1.5 1993/05/11 12:31:50 kagel
# *** empty log message ***
#
# Revision 1.5 1993/05/11 12:31:50 kagel
# *** empty log message ***
#
# Revision 1.4 1993/05/10 14:10:59 kagel
# *** empty log message ***
#
# Revision 1.3 1993/05/05 13:45:51 kagel
# *** empty log message ***
#
# Revision 1.2 1993/05/04 20:09:37 kagel
# Fixed definition of datetime range type FRACTION was "FRACT".
#
# Revision 1.1 1993/05/04 17:39:19 kagel
# Initial revision
#
Revision 1.2 93/01/17 09:52:50 ask
Missed a change to the extent size warning.
Revision 1.1 93/01/17 09:47:26 ask
Initial revision
*/
#include <stdio.h>
#include <sys/types.h>
#ifdef i386
#include <string.h>
#else
#include <strings.h>
#endif
EXEC SQL INCLUDE sqlca;
EXEC SQL INCLUDE sqltypes;
EXEC SQL INCLUDE datetime;
static char rcs_header[] = "$Header: /home/kagel/.mine/RCS/schema.ec,v 1.6 1993/07/29 19:51:52 kagel Exp $";
struct sqlca_s sqlca;
EXEC SQL BEGIN DECLARE SECTION;
struct {
char tabname[19];
long tabid;
long partnum, fextsize, nextsize;
char locklevel[2];
long npused;
char tabtype[2];
int nrows;
} systables, prev;
struct {
long tabid;
char colname[19];
short colno;
short coltype;
short collength;
int colmin;
int colmax;
} syscolumns;
struct {
char idxname[19];
long tabid;
char idxtype[2], clustered[2];
short part[16];
} sysindexes;
struct {
long constrid;
char constrname[19];
long tabid;
char constrtype[2],
idxname[19];
} sysconstraints;
int isconstraint;
struct {
short dbsid;
char dbsname[19];
} sys_dbspaces[32];
struct {
char servername[19], dbname[19], tabname[19];
} syssyntable;
struct {
char viewtext[65];
} sysviews;
char databasename[19], host[19], statement[2048];
char database[38], tablename[19], dbspace[57];
EXEC SQL END DECLARE SECTION;
extern int optind;
extern char *optarg;
char *a_space, *strchr();
char dtparts[7][10] = { "YEAR",
"MONTH",
"DAY",
"HOUR",
"MINUTE",
"SECOND",
"FRACTION" };
static char columns[1024][19];
#define TBSFACT 16777216L
#define FALSE (0)
#define TRUE (!FALSE)
void usage( char *program );
void print_auths( FILE * );
void print_indexes( FILE * );
main(int argc, char *argv[])
{
static pass_no = 1;
int i, j, c, errflag=0, dflag=0, tflag=0, hflag=0, allows_nulls;
long loadflag = FALSE, colwidth, pt1, pt2, fr1, fr2, gotdbs;
FILE *outfile = stdout;
char filename[1025], part1[10], part2[10];
static char tempstr[1024];
EXEC SQL BEGIN DECLARE SECTION;
char username[9], priv[2];
EXEC SQL END DECLARE SECTION;
prev.tabname[0] = (char)0;
strcpy( tablename, "*" );
host[0] = (char)0;
while ((c = getopt(argc, argv, "ld:t:h:")) != EOF){
switch(c) {
case 'l':
loadflag = TRUE;
break;
case 'd':
if (dflag)
errflag++;
else{
dflag++;
strncpy(databasename, optarg, 18);
databasename[18] = (char)0;
}
break;
case 't':
if (tflag)
errflag++;
else{
tflag++;
strncpy(tablename, optarg, 18);
tablename[18] = (char)0;
}
break;
case 'h':
if (hflag)
errflag++;
else{
hflag++;
strncpy(host, optarg, 18);
host[18] = (char)0;
}
break;
case '?':
default:
errflag++;
break;
}
}
if (optind < argc) {
strcpy( filename, argv[optind] );
fprintf( stdout, "Writing schema to: %s\\n", filename );
outfile = fopen( filename, "w" );
if (!outfile) {
fprintf( stderr, "Cannot open output: %s.\\n", filename );
exit(3);
}
}
if (errflag || dflag == 0){
usage( argv[0] );
exit (1);
}
if(strcmp(databasename,"")==0 || ( tflag == 1 && strcmp(tablename,"")==0)){
usage( argv[0] );
exit (1);
}
sqlstart(); /* Start Server process. */
/* Access requested database */
if (host[0] != (char)0)
sprintf( database, "//%s/%s", host, databasename );
else
strcpy( database, databasename );
EXEC SQL
DATABASE :database;
if ( sqlca.sqlcode ) {
fprintf( stderr,
"Cannot access database (%s); error=%d, isam=%d\\n",
database,
sqlca.sqlcode,
sqlca.sqlerrd[1] );
rexit(1);
}