|
|
1.1 ! root 1: # include <ingres.h> ! 2: # include <symbol.h> ! 3: # include <aux.h> ! 4: # include <tree.h> ! 5: # include "globs.h" ! 6: # include <sccs.h> ! 7: ! 8: SCCSID(@(#)pull_const.c 8.1 12/31/84) ! 9: ! 10: /* ! 11: ** PULL_CONST - Detach and execute all constant clauses in the qualification. ! 12: ** ! 13: ** Pull_const examines the root tree for any constant clauses. ! 14: ** If none are present then it returns TRUE. If there are any ! 15: ** constant clauses, then they are removed, executed and if ! 16: ** TRUE then pull_const returns TRUE and other wise it returns ! 17: ** FALSE. ! 18: ** ! 19: ** This routine is not necessary to decomposition but rather ! 20: ** can be called as an optimization when constant clauses are ! 21: ** expected. Note that without this routine, constant clauses ! 22: ** would only be examined at the bottom level of decomposition. ! 23: ** Thus a multivar query which was true except for a constant clause ! 24: ** would look at the required cross-product space before returning. ! 25: */ ! 26: ! 27: pull_const(root, buf) ! 28: QTREE *root; ! 29: char *buf; ! 30: { ! 31: register QTREE *r, *q, *s; ! 32: QTREE *makroot(); ! 33: ! 34: s = (QTREE *) NULL; ! 35: ! 36: for (r = root; r->right->sym.type != QLEND; ) ! 37: { ! 38: q = r; ! 39: r = r->right; /* r is now the AND node */ ! 40: ! 41: if (r->sym.value.sym_root.lvarc == 0) ! 42: { ! 43: /* we have a constant clause */ ! 44: if (s == 0) ! 45: s = makroot(buf); ! 46: ! 47: /* remove AND from root tree */ ! 48: q->right = r->right; ! 49: ! 50: /* put node into constant tree */ ! 51: r->right = s->right; ! 52: s->right = r; ! 53: ! 54: /* fix up var counts (just for good form!) */ ! 55: r->sym.value.sym_root.rvarm = r->sym.value.sym_root.tvarc = 0; ! 56: ! 57: r = q; ! 58: } ! 59: } ! 60: ! 61: if (s) ! 62: { ! 63: /* run the constant query */ ! 64: return (execsq1(s, -1, NORESULT)); ! 65: } ! 66: ! 67: return (TRUE); ! 68: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.