|
|
1.1 ! root 1: # include <ingres.h> ! 2: # include <symbol.h> ! 3: # include <tree.h> ! 4: # include "../decomp/globs.h" ! 5: # include "strategy.h" ! 6: # include <sccs.h> ! 7: ! 8: SCCSID(@(#)tidtest.c 8.1 12/31/84) ! 9: ! 10: /* ! 11: ** tid_only_test ! 12: ** Check the qualification list to see if it ! 13: ** contains exactly one simple clause, that ! 14: ** clause refers to a tid as the VAR, and that ! 15: ** the binary operation is opEQ. ! 16: ** ! 17: ** Side Effects: ! 18: ** If the condition holds true, De.ov_hitid and De.ov_lotid ! 19: ** are set to refer to the constant value. ! 20: ** ! 21: ** Returns: ! 22: ** 1 if qualification holds, ! 23: ** 0 on failure. ! 24: ** ! 25: ** Trace Flags: ! 26: ** 89 ! 27: ** ! 28: ** Called From: ! 29: ** strategy ! 30: */ ! 31: tid_only_test() ! 32: { ! 33: register struct symbol *c; ! 34: register int t; ! 35: register struct symbol **q; ! 36: int found; ! 37: int i; ! 38: ! 39: # ifdef xOTR1 ! 40: if (tTf(89, 0)) ! 41: printf("TID_ONLY_TEST\n"); ! 42: # endif ! 43: found = FALSE; ! 44: ! 45: q = De.ov_qlist; /* q holds pointer to qualification */ ! 46: ! 47: if (!q) ! 48: return (0); ! 49: ! 50: ! 51: /* ! 52: ** iterate through the tree ! 53: */ ! 54: for (t = (*q)->type; t != QLEND; t = (*++q)->type) ! 55: { ! 56: /* ! 57: ** The only thing we allow is a single simple ! 58: ** expression with tids. ! 59: */ ! 60: if ( found == TRUE ) ! 61: return ( 0 ); ! 62: ! 63: switch (t) ! 64: { ! 65: case VAR: ! 66: /* ! 67: ** Only allow tids to be vars. ! 68: */ ! 69: if ( (*q)->value.sym_var.attno != 0 ) ! 70: return (0); ! 71: t = (*++q)->type; ! 72: if ( t != INT ) ! 73: return ( 0 ); ! 74: else ! 75: { ! 76: c = *q; /* save pointer to value symbol */ ! 77: t = (*++q)->type; ! 78: if (relop(*q, FALSE) == opEQ ! 79: && (t = (*++q)->type) == AND) ! 80: { ! 81: /* found a simple clause */ ! 82: found = TRUE; ! 83: } ! 84: } ! 85: break; ! 86: ! 87: case INT: ! 88: c = *q++; ! 89: if ((t = (*q)->type) != VAR) ! 90: return ( 0 ); ! 91: else ! 92: { ! 93: if ( (*q)->value.sym_var.attno != 0 ) ! 94: return ( 0 ); ! 95: t = (*++q)->type; ! 96: if ( relop(*q, TRUE) == opEQ && (t = (*++q)->type) == AND) ! 97: { ! 98: /* found a simple clause */ ! 99: found = TRUE; ! 100: } ! 101: else ! 102: return ( 0 ); ! 103: } ! 104: ! 105: default: ! 106: return ( 0 ); ! 107: } ! 108: } ! 109: ! 110: # ifdef xOTR1 ! 111: if (tTf(89, 2)) ! 112: printf("tid_only_test returning %d\n", found); ! 113: # endif ! 114: ! 115: /* ! 116: ** We have found a simple clause using only the tid. ! 117: ** Set the low and high search keys. ! 118: */ ! 119: if ( found == TRUE ) ! 120: { ! 121: register union symvalue *p; ! 122: ! 123: p = &c->value; ! 124: De.ov_lotid = De.ov_hitid = p->sym_data.i2type; ! 125: dec_tid(&De.ov_lotid); ! 126: return (1); ! 127: } ! 128: ! 129: return ( 0 ); ! 130: }/* tid_only_test */ ! 131: ! 132: /* ! 133: ** dec_tid ! 134: ** Decrement the line-id of a tid ! 135: */ ! 136: dec_tid(tid) ! 137: TID *tid; ! 138: { ! 139: tid->line_id--; ! 140: }/* dec_tid */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.