diff --git a/WEGA/contrib/ingres/dbs/src/support/printr.c b/WEGA/contrib/ingres/dbs/src/support/printr.c new file mode 100644 index 0000000..039b28a --- /dev/null +++ b/WEGA/contrib/ingres/dbs/src/support/printr.c @@ -0,0 +1,242 @@ +# include +# include "gen.h" +# include "../h/dbs.h" +# include "../h/aux.h" +# include "../h/access.h" +# include "../h/lock.h" +# include "../h/bs.h" + +# ifdef P8000 +ret_buf AAjmp_buf; +# else +jmp_buf AAjmp_buf; +# endif + +FILE *Dbs_out = stdout; +extern int AAdbstat; + +main(argc, argv) +int argc; +char *argv[]; +{ + register char **av; + register char *q; + register char *p; + register int i; + register int badf; + register int mode; + register int nc; + char style; + char stdbuf[BUFSIZ]; + extern struct out_arg AAout_arg; + extern char *Parmvect[]; + extern char *Flagvect[]; + extern char *AAdbpath; + extern char *AAproc_name; + + AAproc_name = "PRINTR"; + +# ifdef xSTR1 + AAtTrace(&argc, argv, 'X'); +# endif + + mode = -1; + badf = 0; + + /* + ** Scan the argument vector and otherwise initialize. + */ + switch (i = initucode(argc, argv, TRUE, (char *) 0, M_SHARE)) + { + case 0: + case 5: + break; + + case 1: + case 6: + AAsyserr(0, "Die Datenbank '%s' existiert nicht", Parmvect[0]); + + case 2: + AAsyserr(0, "Sie duerfen auf die Datenbank '%s' nicht zugreifen", Parmvect[0]); + + case 3: + AAsyserr(0, "Sie sind kein eingetragener DBS-Nutzer"); + + case 4: + printf("Sie haben keinen Datenbanknamen angegeben\n"); + badf++; + break; + + default: + AAsyserr(22200, AAproc_name, i); + } + + for (av = Flagvect; p = *av; av++) + { + if (p[0] != '-') + goto badflag; + switch (p[1]) + { + case 'H': + case 'h': /* do headers on each page */ + mode = -2; + if (!p[2]) + break; + if (AA_atoi(&p[2], &AAout_arg.linesperpage)) + goto badflag; + break; + + case 'S': + case 's': /* supress headers and footers */ + mode = -3; + if (p[2]) + goto badflag; + break; + + case 'C': + case 'c': /* set cNwidth */ + if (AA_atoi(&p[2], &AAout_arg.c0width)) + { +badflag: + printf("Unbekanntes Flag '%s'\n", p); + badf++; + continue; + } + break; + + case 'I': + case 'i': /* set iNwidth */ + switch (p[2]) + { + case '1': + if (AA_atoi(&p[3], &AAout_arg.i1width)) + goto badflag; + break; + + case '2': + if (AA_atoi(&p[3], &AAout_arg.i2width)) + goto badflag; + break; + + case '4': + if (AA_atoi(&p[3], &AAout_arg.i4width)) + goto badflag; + break; + + default: + goto badflag; + } + break; + + case 'F': + case 'f': /* set fNwidth */ + style = p[3]; + switch (style) + { + case 'E': + case 'e': + case 'F': + case 'f': + case 'G': + case 'g': + case 'N': + case 'n': + break; + + default: + goto badflag; + } + for (q = &p[4]; *q != '.'; q++) + if (!*q) + goto badflag; + *q++ = 0; + switch (p[2]) + { + case '4': +# ifndef NO_F4 + if (AA_atoi(&p[4], &AAout_arg.f4width)) + goto badflag; + if (AA_atoi(q, &AAout_arg.f4prec)) + goto badflag; + AAout_arg.f4style = style; + break; +# endif + + case '8': + if (AA_atoi(&p[4], &AAout_arg.f8width)) + goto badflag; + if (AA_atoi(q, &AAout_arg.f8prec)) + goto badflag; + AAout_arg.f8style = style; + break; + + default: + goto badflag; + } + break; + + case 'V': + case 'v': + if (!p[2] || p[3]) + goto badflag; + AAout_arg.coldelim = p[2]; + break; + + case 'L': + case 'l': + if (!p[2] || p[3]) + goto badflag; + AAout_arg.linedelim = p[2]; + break; + + default: + goto badflag; + } + } + + /* + ** Find end of Parmvect and store mode there + */ + for (nc = 1; Parmvect[nc]; nc++) + continue; + Parmvect[nc] = (char *) mode; + + /* + ** Check for usage errors. + */ + if (nc < 2) + { + badf++; + printf("HINWEIS: printr [flags] db_name {relation}\n"); + } + if (badf) + { + AAunlall(); + fflush(stdout); + exit(-1); + } + + p = Parmvect[0]; /* data base is first parameter */ + if (chdir(AAdbpath) < 0) + AAsyserr(22201, AAproc_name, p); + +# ifdef SETBUF + setbuf(stdout, stdbuf); +# endif + + /* initialize access methods (and AAdmin struct) for user_ovrd test */ + AAam_start(); + + print(nc - 1, &Parmvect[1]); + AAunldb(); + fflush(stdout); + exit(0); +} + + +rubproc() +{ + AAunlall(); + fflush(stdout); + exit(-1); +} diff --git a/WEGA/contrib/ingres/dbs/src/support/purge.c b/WEGA/contrib/ingres/dbs/src/support/purge.c new file mode 100644 index 0000000..4dd2bf3 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/src/support/purge.c @@ -0,0 +1,280 @@ +# include +# include "gen.h" +# include "../h/dbs.h" +# include "../h/aux.h" +# include "../h/lock.h" +# include "../h/bs.h" + +# ifdef P8000 +ret_buf AAjmp_buf; +# else +jmp_buf AAjmp_buf; +# endif + +char All; +char Superuser; +char Ask; +char Purge; +char Clean; +extern int Wait_action; +extern int AAdbstat; +extern char *AAusercode; +long Today; +char SYSNAME[] = "_SYS"; +int s_SYSNAME = sizeof SYSNAME - 1; +extern DESC Reldes; + +struct directory +{ + short inumber; + char fname[14]; + char null; +}; + +/* +** PURGE DATABASE +** +** This stand-alone routine cleans up a database. This includes: +** +** - Destroy temporary relations, i.e., relations with names +** beginning with SYSNAME. +** - Destroy expired relations +** - Clean out junk files, such as core, etc. +** - As a suggested future expansion, reformat relations which +** have many overflow pages, or heaps with lots of old +** deleted tuples, etc. +** +** It may be called by the DBS superuser or by the dba of +** a database. There are two modes. The first is where databases +** to be purged are explicitly named. If none are named, then +** all databases owned by the particular user (or all databases +** if the DBS superuser) are purged. +** +** Flags: +** -p enable the purge feature, i.e., clean out expired +** relations as well as temporary relations. +** -s attempt to run in superuser mode. The user must be +** login USERDBS for this to succeed. +** -a ask the user before each database. +** -f clean out rather than report junk files. +*/ +main(argc, argv) +int argc; +char *argv[]; +{ + register char *db; + register int ret; + extern char *getnxtdb(); + +# ifdef xSTR1 + AAtTrace(&argc, argv, 'X'); +# endif + + /* set up arguments and operating modes */ + initialize(argc, argv); + time(&Today); +# ifdef xSTR2 + AAtTfp(10, 2, "AAusercode: %.2s\n", AAusercode); +# endif + + ret = 0; + while (db = getnxtdb()) + ret += purgedb(db); + fflush(stdout); + exit(ret); +} + + +rubproc() +{ + AAunlall(); + fflush(stdout); + exit(-1); +} + + +/* +** PURGE DATABASE +** +** The database is purged of temporaries, expired relations, and +** junk. +*/ +purgedb(db) +register char *db; +{ + struct relation rel; + struct relation key; + struct tup_id rtid; + struct tup_id rlimtid; + register int i; +# ifdef NON_V7_FS + extern char *read_dir(); + register char *direc; +# else + struct directory direc; + register int fd; + extern long lseek(); +# endif + int ret; + char *pv[2]; + char pbuff[MAXNAME + 3]; + + ret = 0; +# ifdef xSTR2 + AAtTfp(11, 0, "entered purgedb(%s)\n", db); +# endif + printf("Datenbank %s\n", db); + AAam_start(); + + /* set exclusive lock on data base */ +# ifdef xSTR2 + AAtTfp(11, 1, "calling db_lock(%d)\n", M_EXCL); +# endif + db_lock(M_EXCL); + + /* open the relation relation for read-write */ + opencatalog(AA_REL, 2); + + if (AAam_find(&Reldes, NOKEY, &rtid, &rlimtid)) + { + printf("Datenbank %s: Fehler beim Eroeffnen des Katalogs \"relation\"\n", db); + ret++; + goto go_away; + } + + while (!AAam_get(&Reldes, &rtid, &rlimtid, &rel, 1)) + { + i = 0; + + /* check for temp rel */ + if (AAbequal(rel.relid, SYSNAME, s_SYSNAME)) + i++; + + /* check for expired */ + else if (rel.relsave < Today && rel.relsave) + { + printf("**\t\tRelation %.14s: verfallen\n", rel.relid); + if (Purge) + if (ask("Relation loeschen")) + i++; + } + + /* if this relation should be purged -- call destroy */ + if (i) + { + printf("**\t\t purging %.14s\n", rel.relid); + + /* set up parameter vector for destroy */ + AAbmove(rel.relid, pbuff, MAXNAME + 2); + pbuff[MAXNAME + 2] = '\0'; + pv[0] = pbuff; + pv[1] = (char *) -1; + if (destroy(1, pv)) + AAsyserr(21079, pv[0]); + closecatalog(FALSE); /* to flush */ + } + } + + /* open the directory to check for extra files */ +# ifdef NON_V7_FS + if (!open_dir(".")) + { + printf("Fehler beim Eroeffnen des directory %s/.\n"); + ret++; + goto go_away; + } + + /* scan the directory */ + while (direc = read_dir()) + { + /* throw out legitimate files */ + if (AAsequal(direc, ".") || AAsequal(direc, "..") || AAsequal(direc, AA_ADMIN)) + continue; + + /* always purge SYSNAME files */ + if (!AAbequal(direc, SYSNAME, s_SYSNAME)) + { + /* it might be a relation */ + AAam_clearkeys(&Reldes); + AAam_setkey(&Reldes, &key, direc, RELID); + AAam_setkey(&Reldes, &key, &direc[MAXNAME], RELOWNER); + if (AAgetequal(&Reldes, &key, &rel, &rtid) <= 0) + { + /* it is a relation (or should be saved) */ + continue; + } + + /* it is a funny file!!! */ + printf("**\t\tfile\t %s\n", direc); + if (!Clean) + continue; + } + + /* purge the file */ + if (ask("file loeschen") && unlink(direc)) + printf("**\t\tFehler beim Loeschen des file %s\n", direc); + } + close_dir(); +# else + if ((fd = open(".", 0)) < 0) + { + printf("Fehler beim Eroeffnen des directory %s/.\n"); + ret++; + goto go_away; + } + direc.null = 0; + lseek(fd, 32L, 0); + + /* scan the directory */ + while (read(fd, &direc, 16) == 16) + { + /* throw out null entries */ + if (!direc.inumber) + continue; + + /* throw out legitimate files */ + if (AAsequal(direc.fname, AA_ADMIN)) + continue; + + /* always purge SYSNAME files */ + if (!AAbequal(direc.fname, SYSNAME, s_SYSNAME)) + { + if (direc.fname[13]) + { +# ifdef VENIX + AAbmove(direc.fname, pbuff, MAXNAME + 3); + for (i = 0; i < MAXNAME + 2; i++) + if (direc.fname[i] == '#') + direc.fname[i] = ' '; +# endif + /* it might be a relation */ + AAam_clearkeys(&Reldes); + AAam_setkey(&Reldes, &key, direc.fname, RELID); + AAam_setkey(&Reldes, &key, &direc.fname[MAXNAME], RELOWNER); + if (AAgetequal(&Reldes, &key, &rel, &rtid) <= 0) + /* it is a relation (or should be saved) */ + continue; +# ifdef VENIX + AAbmove(pbuff, direc.fname, MAXNAME + 3); +# endif + } + + /* it is a funny file!!! */ + printf("**\t\tfile\t %s\n", direc.fname); + if (!Clean) + continue; + } + + /* purge the file */ + if (ask("file loeschen") && unlink(direc.fname)) + printf("**\t\tFehler beim Loeschen des file %s\n", + direc.fname); + } + close(fd); +# endif +go_away: + closecatalog(TRUE); /* close catalogs */ + AAunlall(); /* unlock the database */ + AAam_exit(); + return (ret); +}