diff --git a/WEGA/contrib/ingres/dbs/src/amx_lib/AA_liba.h b/WEGA/contrib/ingres/dbs/src/amx_lib/AA_liba.h new file mode 100644 index 0000000..3f07fc5 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/src/amx_lib/AA_liba.h @@ -0,0 +1,142 @@ +# include +/* Flag MSDOS is predefined in MSDOS */ +# ifdef MSDOS +# include "../h/gen.h" +# else +# include "../conf/gen.h" +# endif +# ifdef MSDOS +# include "../h/ingres.h" +# include "../h/aux#.h" +# else +# include "../h/dbs.h" +# include "../h/aux.h" +# endif +# include "../h/access.h" +# include "../h/symbol.h" +# include "../h/catalog.h" +# include "../h/lock.h" + +# define AMX_TRACE +# define AM_TRACE + +# ifdef MSDOS +# define AAam_addbuf acc_addbuf +# define AAam_clearkeys clearkeys +# define AAam_delete delete +# define AAam_exit acc_close +# define AAam_flush_rel flush_rel +# define AAam_get get +# define AAam_insert insert +# define AAam_replace replace +# define AAam_setkey setkey +# define AAam_start acc_init +# define AAbequal bequal +# define AAbmove(s,d,l) memcpy(d,s,l) +# define AAcc_head Acc_head +# define AAccerror Accerror +# define AAdatabase Database +# define AAdbname Dbname +# define AAdbpath Dbpath +# define AAdmin Admin +# define AAdparam paramd +# define AAdumptid dumptid +# define AAerrfn errfilen +# define AAget_tuple get_tuple +# define AAgetequal getequal +# define AAgetpage get_page +# define AAicompare icompare +# define AAndxsearch ndxsearch +# define AApageflush pageflush +# define AApath Pathname +# define AApratt printatt +# define AAprkey prkey +# define AAprtup printup +# define AAput_tuple put_tuple +# define AArelclose closer +# define AArelopen openr +# define AAresetacc resetacc +# define AArhash rhash +# define AAsetcsl setcsl +# define AAsetdbl setdbl +# define AAsetpgl setpgl +# define AAsetrll setrll +# define AAstuff_page stuff_page +# define AAtTfp tTfp +# define AAunlall unlall +# define AAunlcs unlcs +# define AAunldb unldb +# define AAunlpg unlpg +# define AAunlrl unlrl +# define AAusercode Usercode +# define RELROPEN(fp) ((fp + 1) * 5) +# define RELWOPEN(fp) ((fp + 1) * -5) +# define attribute domain +extern char *AAdatabase; +extern char *memcpy(); +typedef struct accbuf ACCBUF; +# else +extern char *AAbmove(); +# endif + +# ifndef bitset +# define bitset(b, s) ((b) & (s)) +# define clrbit(b, s) ((s) &= ~(b)) +# endif + +# define DB_SHARE 0010 + +# define AP_EQ 0001 +# define AP_LT 0002 +# define AP_LE 0004 +# define AP_NE 0010 +# define AP_GT 0020 +# define AP_GE 0040 +# define AP_P1 0100 +# define AP_P2 0200 + +# ifdef EBCDIC +# define LAST_CHAR 0377 +# else +# define LAST_CHAR 0177 +# endif + +# define AA_rel AA_0 +# define AA_att AA_1 +# define AA_ind AA_2 + +struct descxx +{ + DESC xx_desc; + struct descxx *xx_next; + struct descxx *xx_index; + char *xx_indom; + struct descxx *xx_ta; + char xx_refresh; + char xx_excl; + short xx_locks; +}; +typedef struct descxx DESCXX; + +extern struct descxx *AA_DESC; +extern struct descxx *AA_TA; /* begin of transaction */ +extern struct descxx *AA_TE; /* end of transaction */ +extern int AA_NOLOCKS; +extern int AA_LOCKS; +extern int AA_PAT; +extern DESC *AA_0; /* relation */ +extern DESC *AA_1; /* attribute */ +extern DESC *AA_2; /* indexes */ +extern int AA; +extern long AA_LOW; +extern long AA_HIGH; +extern long AA_TID; +extern char *AA_STUP; +extern char *AAdbpath; +extern int errno; + +/* UPDATE globals */ +extern struct descxx *AAp_desc; /* global primary description */ +extern char *AAold_tuple; /* global primary tuple pointer */ +extern char AA_SET_ALL_KEYS[]; +extern long AAdaemon; diff --git a/WEGA/contrib/ingres/dbs/src/amx_lib/AAfind.c b/WEGA/contrib/ingres/dbs/src/amx_lib/AAfind.c new file mode 100644 index 0000000..2f663b9 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/src/amx_lib/AAfind.c @@ -0,0 +1,295 @@ +# include "AA_liba.h" + +/* FIND with AP_FULLKEY on HASH */ +AAhash(d, lowtid, hightid, key) +register DESCXX *d; +register struct tup_id *lowtid; +register long *hightid; +char *key; +{ + long pageid; + extern long AArhash(); + +# ifdef AMX_TRACE + AAtTfp(23, 0, +# ifdef MSDOS + "hash\t\t`%.10s' (%d)\n", +# else + "hash\t\t`%.14s' (%d)\n", +# endif + d->xx_desc.reldum.relid, AA_PAT); +# endif + errno = 0; + + if (AA_PAT) + { + /* found a pattern in key */ + AAbmove(&AA_LOW, lowtid, sizeof *lowtid); + *hightid = AA_HIGH; + } + else + { + pageid = AArhash(d, key); + AAstuff_page(lowtid, &pageid); + lowtid->line_id = SCANTID; + *hightid = *((long *) lowtid); + } + +# ifdef AM_TRACE + AAtTfp(23, 10, "##AM_RHASH\n"); + if (AAtTfp(23, 11, "##\t\toldkey")) + AAprkey(d, key); + if (AAtTfp(23, 12, "##\t\tlo_")) + AAdumptid(lowtid); + if (AAtTfp(23, 13, "##\t\thi_")) + AAdumptid(hightid); +# endif + +} + + +/* FIND with AP_FULLKEY on ISAM */ +AAisam(d, lowtid, hightid, given, key) +register DESCXX *d; +register long *lowtid; +register long *hightid; +register char *given; +register char *key; +{ +# ifdef AMX_TRACE + AAtTfp(24, 0, +# ifdef MSDOS + "isam\t\t`%.10s' (%d)\n", +# else + "isam\t\t`%.14s' (%d)\n", +# endif + d->xx_desc.reldum.relid, AA_PAT); +# endif + errno = 0; + + if (AA_PAT) + { + /* found a pattern in key */ + AAlisam(d, lowtid, given, key); + AAhisam(d, hightid, given, key); + } + else + { + AA = AAndxsearch(d, lowtid, key, -1, 1); + +# ifdef AM_TRACE + AAtTfp(24, 10, "##AM_=_SEARCH\t%d\n", AA); + if (AAtTfp(24, 11, "##\t\toldkey")) + AAprkey(d, key); + if (AAtTfp(24, 12, "##\t\tnew")) + AAdumptid(lowtid); +# endif + + if (AA) + AAerror(8, d->xx_desc.reldum.relid); + *hightid = *lowtid; + } +} + + +/* FIND with AP_LOWKEY or AP_RANGEKEY on ISAM */ +AAlisam(d, tid, given, lowkey, highkey) +register DESCXX *d; +long *tid; +char *given; +char *lowkey; +char *highkey; +{ + register int i; + register char *dom; + register int len; + register int g; + register char *k; + register char *t; + struct accessparam ap; + char tuple[MAXTUP]; + +# ifdef AMX_TRACE + AAtTfp(25, 0, +# ifdef MSDOS + "low isam\t`%.10s' (%d)\n", +# else + "low isam\t`%.14s' (%d)\n", +# endif + d->xx_desc.reldum.relid, AA_PAT); +# endif + errno = 0; + + /* clear out key conditions */ + for (i = d->xx_desc.reldum.relatts; i; --i) + d->xx_desc.relgiven[i] = 0; + + AAdparam(d, &ap); + dom = ap.keydno; + + while (i = *dom++) + { + if (bitset(AP_EQ | AP_GT, g = given[i - 1])) + { + d->xx_desc.relgiven[i] = AP_GT; + len = d->xx_desc.reloff[i]; + k = len + (bitset(AP_LT, g)? highkey: lowkey); + t = len + tuple; + len = ctou(d->xx_desc.relfrml[i]); + if (bitset(bitset(AP_LT, g)? AP_P2: AP_P1, g)) + AApatmove(k, t, len, -1); + else + AAbmove(k, t, len); + } + } + + AA = AAndxsearch(d, tid, tuple, -1, 0); + +# ifdef AM_TRACE + AAtTfp(25, 10, "##AM_<_SEARCH\t%d\n", AA); + if (AAtTfp(25, 11, "##\t\toldkey")) + AAprkey(d, tuple); + if (AAtTfp(25, 12, "##\t\tlo_")) + AAdumptid(tid); +# endif + + if (AA) + AAerror(9, d->xx_desc.reldum.relid); + + /* restore key conditions */ + AAbmove(given, &d->xx_desc.relgiven[1], d->xx_desc.reldum.relatts); +} + + +/* FIND with AP_HIGHKEY or AP_RANGEKEY on ISAM */ +AAhisam(d, tid, given, key) +register DESCXX *d; +long *tid; +char *given; +char *key; +{ + register int i; + register char *dom; + register int len; + register int g; + register char *k; + register char *t; + struct accessparam ap; + char tuple[MAXTUP]; + +# ifdef AMX_TRACE + AAtTfp(26, 0, +# ifdef MSDOS + "high isam\t`%.10s' (%d)\n", +# else + "high isam\t`%.14s' (%d)\n", +# endif + d->xx_desc.reldum.relid, AA_PAT); +# endif + errno = 0; + + /* clear out key conditions */ + for (i = d->xx_desc.reldum.relatts; i; --i) + d->xx_desc.relgiven[i] = 0; + + AAdparam(d, &ap); + dom = ap.keydno; + + while (i = *dom++) + { + if (bitset(AP_EQ | AP_LT, g = given[i - 1])) + { + d->xx_desc.relgiven[i] = AP_LT; + len = d->xx_desc.reloff[i]; + k = len + key; + t = len + tuple; + len = ctou(d->xx_desc.relfrml[i]); + if (bitset(AP_P1, g)) + AApatmove(k, t, len, 1); + else + AAbmove(k, t, len); + } + } + + AA = AAndxsearch(d, tid, tuple, 1, 0); + +# ifdef AM_TRACE + AAtTfp(26, 10, "##AM_>_SEARCH\t%d\n", AA); + if (AAtTfp(26, 11, "##\t\toldkey")) + AAprkey(d, tuple); + if (AAtTfp(26, 13, "##\t\thi_")) + AAdumptid(tid); +# endif + + if (AA) + AAerror(10, d->xx_desc.reldum.relid); + + /* restore key conditions */ + AAbmove(given, &d->xx_desc.relgiven[1], d->xx_desc.reldum.relatts); +} + + +/* +** AApatmove -- copy a symbol to a new buffer area. +** +** AApatmove checks the symbol for +** pattern matching characters. +** +** Note that PAT_RBRAC need not be checked for +** since it is not a pattern matching char unless +** PAT_LBRAC appears before it. +** +** If op is opLTLE then add a pad character +** whose value is the largest possible char +** value. +** +** If any ranges of characters are found, +** then the lowest/highest char is taken from +** range. +*/ +static AApatmove(key, tuple, len, op) +register char *key; +char *tuple; +register int len; +int op; /* op: LE = +1 */ + /* GE = -1 */ +{ + register int c; + register int newc; + register char *tup; + + tup = tuple; + tuple += len; + + while (len--) + { + /* copy chars processing ANY, ONE or LBRAC chars if any */ + if ((c = *key++) == PAT_ANY || c == PAT_ONE) + break; + + if (c == PAT_LBRAC) + { + /* if string is empty, ignore it */ + if (!len--) + break; + + if ((c = *key++) == PAT_RBRAC) + continue; /* empty [] */ + + while (len-- && ((newc = *key++) != PAT_RBRAC)) + { + /* ignore '-' */ + if (newc == '-') + continue; + + /* check for char larger/smaller than 'c' */ + if (op * (newc - c) > 0) + c = newc; + } + } + + *tup++ = c; /* copy next char */ + } + while (tup < tuple) + *tup++ = (op > 0)? LAST_CHAR: 0; +} diff --git a/WEGA/contrib/ingres/dbs/src/amx_lib/AAsetkey.c b/WEGA/contrib/ingres/dbs/src/amx_lib/AAsetkey.c new file mode 100644 index 0000000..6bdcb86 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/src/amx_lib/AAsetkey.c @@ -0,0 +1,250 @@ +# include "AA_liba.h" + + +int AA_PAT; /* pattern matching flag */ + +AAclearkeys(d, rel) +register DESCXX *d; +register char *rel; +{ +# ifdef AMX_TRACE + AAtTfp(27, 0, +# ifdef MSDOS + "clear keys\t`%.10s'\n", +# else + "clear keys\t`%.14s'\n", +# endif + rel); +# endif + + AA_PAT = 0; + errno = 0; + + if (!d) + AAerror(106, rel); + + AAam_clearkeys(d); +} + + +/* +** hunts through a string and converts the pattern matching +** characters and replaces with the corresponding cntrl chars +** +** Searches a string up to a null byte for one of the pattern +** matching characters '*', '?', '[', and ']'. It then converts +** these characters to their internal control character equivalents. +*/ +AAsetpat(d, key, val, dom, cond) +register DESCXX *d; +char *key; +register char *val; +register int dom; +int cond; +{ + register char *v; + register int pat; + register int c; + char val_buf[MAXFIELD]; + +# ifdef AMX_TRACE + AAtTfp(28, 0, +# ifdef MSDOS + "set pattern\t`%.10s' dom %d cond 0%o\n", +# else + "set pattern\t`%.14s' dom %d cond 0%o\n", +# endif + d->xx_desc.reldum.relid, dom, cond); +# endif + + for (pat = 0, v = val_buf; *val; val++) + { + if (*val == '\\') + { + *v++ = *++val; + continue; + } + switch (*val) + { + case '*': + *v++ = PAT_ANY; + goto pat_found; + + case '?': + *v++ = PAT_ONE; + goto pat_found; + + case '[': + *v++ = PAT_LBRAC; + goto pat_found; + + case ']': + *v++ = PAT_RBRAC; +pat_found: + pat++; + continue; + } + if (((c = *val & LAST_CHAR) < ' ' && c != '\n' && c != '\t') || c == LAST_CHAR) + c = ' '; /* convert to blank */ + *v++ = c; + } + *v = 0; + + AAsetkey(d, key, val_buf, dom, cond); + + if (!pat) + return; + + if ((pat = d->xx_desc.relxtra[dom]) && (!AA_PAT || AA_PAT > pat)) + AA_PAT = pat; + + switch (cond) + { + case AP_NE: + if (bitset(AP_GT, cond)) + goto set_p2; + /* fall through */ + + case AP_GT: + case AP_GT | AP_GE: + if (bitset(AP_LT, cond)) + { +set_p2: + d->xx_desc.relgiven[dom] |= AP_P2; +# ifdef AM_TRACE + goto all_set; +# else + return; +# endif + } + } + /* all others */ + d->xx_desc.relgiven[dom] |= AP_P1; + +# ifdef AM_TRACE +all_set: + AAtTfp(28, 10, "##AM_SETPAT\tnewcond 0%o\n", d->xx_desc.relgiven[dom]); +# endif +} + + +/* +** Searches a string up to a null byte for one of the pattern +** matching characters PAT_ANY, PAT_ONE, PAT_LBRAC, and PAT_RBRAC. +*/ +AAsetind(d, key, val, dom, cond) +register DESCXX *d; +char *key; +char *val; +register int dom; +int cond; +{ + register char *v; + register int len; + register int c; + register int pat; + +# ifdef AMX_TRACE + AAtTfp(36, 0, +# ifdef MSDOS + "set index key\t`%.10s' dom %d cond 0%o\n", +# else + "set index key\t`%.14s' dom %d cond 0%o\n", +# endif + d->xx_desc.reldum.relid, dom, cond); +# endif + + pat = 0; + if (d->xx_desc.relfrmt[dom] == CHAR) + { + len = ctou(d->xx_desc.relfrml[dom]); + for (v = val; len; --len) + if ((c = *v++) == PAT_ANY || c == PAT_ONE || c == PAT_LBRAC || c == PAT_RBRAC) + pat++; + } + + AAsetkey(d, key, val, dom, cond); + + if (!pat) + return; + + if ((pat = d->xx_desc.relxtra[dom]) && (!AA_PAT || AA_PAT > pat)) + AA_PAT = pat; + + switch (cond) + { + case AP_NE: + if (bitset(AP_GT, cond)) + goto set_p2; + /* fall through */ + + case AP_GT: + case AP_GT | AP_GE: + if (bitset(AP_LT, cond)) + { +set_p2: + d->xx_desc.relgiven[dom] |= AP_P2; +# ifdef AM_TRACE + goto all_set; +# else + return; +# endif + } + } + /* all others */ + d->xx_desc.relgiven[dom] |= AP_P1; + +# ifdef AM_TRACE +all_set: + AAtTfp(36, 10, "##AM_SETIND\tnewcond 0%o\n", d->xx_desc.relgiven[dom]); +# endif +} + + +AAsetkey(d, key, val, dom, cond) +register DESCXX *d; +char *key; +char *val; +register int dom; +int cond; +{ + if (dom <= 0 || dom > d->xx_desc.reldum.relatts) + { + AA = dom; + AAerror(13, d->xx_desc.reldum.relid); + } + +# ifdef AMX_TRACE + AAtTfp(21, 0, +# ifdef MSDOS + "set key val\t`%.10s' dom %d cond 0%o\n", +# else + "set key val\t`%.14s' dom %d cond 0%o\n", +# endif + d->xx_desc.reldum.relid, dom, cond); +# endif + + switch (cond) + { + case AP_EQ: + case AP_LT: + case AP_LT | AP_LE: + case AP_GT: + case AP_GT | AP_GE: + case AP_NE: + cond |= d->xx_desc.relgiven[dom]; + AAam_setkey(d, key, val, dom); + d->xx_desc.relgiven[dom] = cond; + +# ifdef AM_TRACE + AAtTfp(21, 10, "##AM_SETKEY\tnewcond 0%o\n", cond); + if (AAtTfp(21, 11, "##\t\tnewkey")) + AAprkey(d, key); +# endif + + return; + } + + AA = cond; + AAerror(14, d->xx_desc.reldum.relid); +} diff --git a/WEGA/contrib/ingres/dbs/src/libq/IIp_err.c b/WEGA/contrib/ingres/dbs/src/libq/IIp_err.c new file mode 100644 index 0000000..e242e97 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/src/libq/IIp_err.c @@ -0,0 +1,112 @@ +# include +# include "gen.h" +# include "../h/version.h" + +char IIversion[] = VERSION; + +# define AAbmove IIbmove +# define AAztack IIconcatv +# define AA_iocv IIitos +# define AApath IIPathname +# define AAerrfn IIerrfilen +# define AA_ERRFN II_ERRFN +# define AAversion IIversion + +# include "../gutil/errfilen.c" +# include "../h/pipes.h" +# include "IIglobals.h" + +# ifdef EBCDIC +# define LAST_CHAR 0377 +# else +# define LAST_CHAR 0177 +# endif + +/* +** IIP_ERR +** +** This routine processes an IIerror call for printout.This involves doing +** a lookup in the .../sys/etc/error? files, where ? is the thous- +** ands digit of the error number. The associated error message +** then goes through parameter substitution and is printed. +** +** In the current version, the error message is just printed. +*/ +char *IIp_err(err_num, argc, argv) +int err_num; +int argc; +char **argv; +{ + register char *p; + register int c; + register FILE *iop; + short i; + char buf[100]; + extern char *IIerrfilen(); + + /* open the appropriate error file */ + p = IIerrfilen(err_num / 1000); + +# ifdef xETR2 + if (IIdebug > 1) + printf("P_ERR: file \"%s\"\n", p); +# endif + + if (!(iop = fopen(p, "r"))) + return ((char *) 0); + + /* read in the code and check for correct */ + for ( ; ; ) + { + p = buf; + while ((c = getc(iop)) != '\t') + { + if (c <= 0) + { + fclose(iop); + return ((char *) 0); + } + *p++ = c; + } + *p = 0; + if (IIatoi(buf, &i)) + goto error; + if (i != err_num) + { + while ((c = getc(iop)) != ERRDELIM) + if (c <= 0) + { +error: + IIsyserr("P_ERR: Formatfehler im file %d", err_num); + } + getc(iop); /* throw out the newline */ + continue; + } + + /* got the correct line, print it doing parameter substitution */ + printf("%d: ", err_num); + for ( ; ; ) + { + c = getc(iop); + if (c <= 0 || c == ERRDELIM) + { + putchar('\n'); + fclose(iop); + return ((char *) 1); + } + if (c == '%') + { + c = getc(iop); + for (p = argv[c - '0']; c = *p; p++) + { + if (c < ' ' || c >= LAST_CHAR) + printf("\\0%o", c); + else + putchar(c); + } + continue; + } + putchar(c); + } + } +}