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: }

Defined functions

pull_const defined in line 8; used 1 times
Last modified: 1986-04-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 791
Valid CSS Valid XHTML 1.0 Strict