From 6d37140db1bec0510a76eff2b0514eea176f1ded Mon Sep 17 00:00:00 2001 From: Oliver Lehmann Date: Tue, 21 Nov 1989 13:45:58 +0000 Subject: [PATCH] ING_DB --- WEGA/contrib/ingres/dbs/src/amx_lib/AAopenr.c | 158 ++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 WEGA/contrib/ingres/dbs/src/amx_lib/AAopenr.c diff --git a/WEGA/contrib/ingres/dbs/src/amx_lib/AAopenr.c b/WEGA/contrib/ingres/dbs/src/amx_lib/AAopenr.c new file mode 100644 index 0000000..5fbb8ad --- /dev/null +++ b/WEGA/contrib/ingres/dbs/src/amx_lib/AAopenr.c @@ -0,0 +1,158 @@ +# include "AA_liba.h" + +static DESCXX *AA_primary; +extern char *AAusercode; + +/* +** AArefresh - update relation descriptor from system catalog AA_REL +*/ +AArefresh(d) +register DESCXX *d; +{ + if (AA_NOLOCKS || d->xx_refresh) + return; + + d->xx_refresh++; + +# ifdef AMX_TRACE + AAtTfp(37, 0, +# ifdef MSDOS + "refresh rel\t`%.10s'\n", +# else + "refresh rel\t`%.14s'\n", +# endif + d->xx_desc.reldum.relid); +# endif + + /* make believe catalog AA_REL is read only for concurrency */ + /* that means, readed pages are not locked */ + AA_rel->relopn = RELROPEN(AA_rel->relfp); + + if (AA = AAgetpage(AA_rel, &d->xx_desc.reltid)) + AAerror(24, d->xx_desc.reldum.relid); + + AAget_tuple(AA_rel, &d->xx_desc.reltid, d); + AAresetacc(AAcc_head); /* No error is possible */ + + /* restore catalog AA_REL to read/write mode */ + AA_rel->relopn = RELWOPEN(AA_rel->relfp); +} + + +AAopenr(desc, prel) +register DESCXX **desc; +register char *prel; +{ + register DESCXX *d; + +# ifdef AMX_TRACE + AAtTfp(0, 0, "open rel\t`%s'\n", prel); +# endif + + AAopen(desc, prel); + + /* check for valid relation */ + d = *desc; + if (bitset(S_INTEG, d->xx_desc.reldum.relstat)) + AAerror(103, prel); + + if + ( + !AAbequal(AAusercode, d->xx_desc.reldum.relowner, 2) + && bitset(S_PROTALL, d->xx_desc.reldum.relstat) + && bitset(S_PROTRET, d->xx_desc.reldum.relstat) + ) + AAerror(104, prel); + + if (bitset(S_VIEW, d->xx_desc.reldum.relstat)) + AAerror(105, prel); + + AA_primary = d; + +# ifndef MSDOS + if (AA_NOLOCKS || bitset(S_CATALOG, d->xx_desc.reldum.relstat) + || bitset(S_INDEX, d->xx_desc.reldum.relstat)) + return; + + if (AAsetusl(A_RTN, d->xx_desc.reltid, AA = M_SHARE) < 0) + AAerror(108, prel); +# endif +} + + +AAopeni(desc, irel, idom) +register DESCXX **desc; +register char *irel; +register char *idom; +{ +# ifdef AMX_TRACE + AAtTfp(1, 0, "open index\t`%s'\n", irel); +# endif + + AAopen(desc, irel); + (*desc)->xx_indom = idom; + AA_primary->xx_index = *desc; + AA_primary = *desc; +} + + +static int AAopen(desc, rel) +DESCXX **desc; +register char *rel; +{ + register DESCXX *d; + register DESCXX *next; + extern DESCXX *malloc(); + + errno = 0; + + if (!AA_DESC) + AAerror(111, "open"); + + if (*desc) + AAerror(101, rel); + + if (!(d = malloc(sizeof (DESCXX)))) + AAerror(102, rel); + + if (AA = AArelopen(&d->xx_desc, 2, rel)) + AAerror(0, rel); + /* make believe relation rel is read only for concurrency */ + /* that means, readed pages are not locked */ + if (!bitset(S_CATALOG, d->xx_desc.reldum.relstat)) + d->xx_desc.relopn = RELROPEN(d->xx_desc.relfp); + + d->xx_index = (DESCXX *) 0; + d->xx_indom = (char *) 0; + d->xx_ta = (DESCXX *) 0; + d->xx_refresh = 0; + d->xx_excl = 0; + d->xx_locks = 0; + + d->xx_next = (DESCXX *) 0; + for (next = AA_DESC; next->xx_next; next = next->xx_next) + continue; + next->xx_next = d; + *desc = d; +} + + +long AAtupcount(d) +register DESCXX *d; +{ + if (!AA_DESC) + AAerror(111, "tuplecount"); + + AArefresh(d); + return (d->xx_desc.reladds + d->xx_desc.reldum.reltups); +} + + +AAtuplength(d) +register DESCXX *d; +{ + if (!AA_DESC) + AAerror(111, "tuplelength"); + + return (d->xx_desc.reldum.relwid); +}