# 2.11BSD#431 - /usr/ingres/source/decomp/setvar.c

##### Functions

    clearvar          X
    setvar            X

       1: # include   "../ingres.h"
       2: # include   "../tree.h"
       3: # include   "../symbol.h"
       4: # include   "decomp.h"
       5:
       6: /*
       7: ** SETVAR -- Routines to convert a VAR to a constant and back to a VAR
       8: **
       9: **	This file contains the routines for tuple substitution.
      10: **
      11: **	Setvar -- Make a VAR node reference its position in the tuple.
      12: **
      13: **	Clrvar -- Make the VAR node refer back to a VAR
      14: */
      15:
      16: setvar(tree1, var, intid, tuple)
      17: struct querytree    *tree1;
      18: int         var;
      19: long            *intid;
      20: char            *tuple;
      21:
      22: /*
      23: ** Setvar -- Var's are changed to reference their values in a tuple.
      24: **	ROOT and AND nodes are changed to update the variable maps.
      25: */
      26:
      27: {
      28:     register struct querytree   *tree;
      29:     register int            mask, nvc;
      30:     struct descriptor       *readopen();
      31:     extern struct querytree     *ckvar();
      32:
      33:     tree = tree1;
      34:     if (!tree)
      35:         return;
      36:     switch (tree->sym.type)
      37:     {
      38:       case VAR:
      39:         if (((struct qt_var *)(tree=ckvar(tree)))->varno == var)
      40:         {
      41: #			ifdef xDTR1
      42:             if (tTf(12, 0))
      43:             {
      44:                 printf("setvar:%d;tree:", var);
      45:                 writenod(tree);
      46:             }
      47: #			endif
      48:             if (((struct qt_var *)tree)->attno)
      49:                 ((struct qt_var *)tree)->valptr = tuple +
      50:                     readopen(var)->reloff[((struct qt_var *)tree)->attno];
      51:             else
      52:                 ((struct qt_var *)tree)->valptr = (char *) intid;
      53:         }
      54:         return;
      55:
      56:       case ROOT:
      57:       case AND:
      58:         mask = 01 << var;
      59:         nvc = ((struct qt_root *)tree)->tvarc;
      60:         if (((struct qt_root *)tree)->lvarm & mask)
      61:         {
      62:             setvar(tree->left, var, intid, tuple);
      63:             ((struct qt_root *)tree)->lvarm &=  ~mask;
      64:             --((struct qt_root *)tree)->lvarc;
      65:             nvc = ((struct qt_root *)tree)->tvarc - 1;
      66:         }
      67:         if (((struct qt_root *)tree)->rvarm & mask)
      68:         {
      69:             setvar(tree->right, var, intid, tuple);
      70:             ((struct qt_root *)tree)->rvarm &=  ~mask;
      71:             nvc = ((struct qt_root *)tree)->tvarc - 1;
      72:         }
      73:         ((struct qt_root *)tree)->tvarc = nvc;
      74:         return;
      75:
      76:       default:
      77:         setvar(tree->left, var, intid, tuple);
      78:         setvar(tree->right, var, intid, tuple);
      79:         return;
      80:     }
      81: }
      82:
      83:
      84: clearvar(tree1, var1)
      85: struct querytree    *tree1;
      86: int         var1;
      87:
      88: /*
      89: **	Clearvar is the opposite of setvar. For
      90: **	each occurence of var1 in the tree, clear
      91: **	the valptr.
      92: */
      93:
      94: {
      95:     register struct querytree   *tree;
      96:     int             var;
      97:     extern struct querytree     *ckvar();
      98:
      99:     tree = tree1;
     100:     if (!tree)
     101:         return;
     102:
     103:     var = var1;
     104:     if (tree->sym.type == VAR)
     105:     {
     106:         if (((struct qt_var *)(tree = ckvar(tree)))->varno == var)
     107:             ((struct qt_var *)tree)->valptr = 0;
     108:         return;
     109:     }
     110:     clearvar(tree->left, var);
     111:     clearvar(tree->right, var);
     112: }

#### Defined functions

clearvar defined in line 84; used 4 times

- in line 110-111(2)
- in /usr/ingres/source/decomp/decomp.c line 238-240(2)

setvar defined in line 16; used 5 times

- in line 62, 69, 77-78(2)
- in /usr/ingres/source/decomp/decomp.c line 177

Last modified: 1995-04-14 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 964 |