|
|
1.1 ! root 1: # include <ingres.h> ! 2: # include <aux.h> ! 3: # include <tree.h> ! 4: # include <symbol.h> ! 5: # include "parser.h" ! 6: # include <sccs.h> ! 7: ! 8: SCCSID(@(#)xdot.c 7.1 2/5/81) ! 9: ! 10: extern QTREE *tree(); ! 11: extern QTREE *addresdom(); ! 12: ! 13: /* ! 14: ** XDOT ! 15: ** add to attribute stash any missing attributes in the ! 16: ** source relation and then build tree with all attribs ! 17: ** in the 'attid' order. This algorithm assumes that ! 18: ** the function 'attadd' insert attributes into the list ! 19: ** in 'attid' order from 1 -> N. ! 20: */ ! 21: QTREE * ! 22: xdot(slot) ! 23: int slot; ! 24: { ! 25: PARRNG *rptr; ! 26: struct attribute tuple; ! 27: register struct attribute *ktuple; ! 28: struct attribute ktup; ! 29: TID tid; ! 30: TID limtid; ! 31: QTREE *tempt; ! 32: register QTREE *vnode; ! 33: int ik; ! 34: register struct atstash *aptr; ! 35: ! 36: extern PARRNG Parrng[]; ! 37: extern char *Trname; ! 38: extern DESC Attdes; ! 39: ! 40: rptr = &Parrng[slot]; ! 41: ! 42: # ifdef xPTR2 ! 43: tTfp(35, 0, "ALL being processed for %12s\n", ! 44: rptr->vardesc.relvname); ! 45: # endif ! 46: ! 47: if (rptr->vardesc.reldum.relatts <= 0) ! 48: syserr("xdot: rptr->vardesc.reldum.relatts %d.\n", rptr->vardesc.reldum.relatts); ! 49: /* if attstash is missing any attribs then fill in list */ ! 50: if (rptr->vardesc.reldum.relatts != attcount(slot)) ! 51: { ! 52: /* get all entries in attrib relation */ ! 53: clearkeys(&Attdes); ! 54: ktuple = &ktup; ! 55: setkey(&Attdes, ktuple, rptr->vardesc.reldum.relid, ATTRELID); ! 56: setkey(&Attdes, ktuple, rptr->vardesc.reldum.relowner, ATTOWNER); ! 57: if (ik = find(&Attdes, EXACTKEY, &tid, &limtid, ktuple)) ! 58: syserr("bad find in xdot '%d'", ik); ! 59: while (!get(&Attdes, &tid, &limtid, &tuple, 1)) ! 60: if (!kcompare(&Attdes, &tuple, ktuple)) ! 61: /* add any that are not in the stash */ ! 62: if (!attfind(slot, tuple.attname)) ! 63: attadd(slot, &tuple); ! 64: } ! 65: ! 66: /* build tree for ALL */ ! 67: tempt = NULL; ! 68: aptr = rptr->attlist; ! 69: while (aptr != 0) ! 70: { ! 71: vnode = tree(NULL, NULL, VAR, sizeof(struct varnode), slot, aptr); ! 72: Trname = aptr->atbname; ! 73: tempt = addresdom(tempt, vnode); ! 74: aptr = aptr->atbnext; ! 75: } ! 76: ! 77: # ifdef xPTR3 ! 78: tTfp(35, 0, "end of xdot %12s\n", rptr->vardesc.relvname); ! 79: # endif ! 80: ! 81: return(tempt); ! 82: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.