Annotation of 42BSD/ingres/source/h/tree.h, revision 1.1.1.1

1.1       root        1: /*
                      2: **  TREE.H -- defines the structure of a querytree
                      3: **
                      4: **     Version:
                      5: **             @(#)tree.h      7.1     2/5/81
                      6: */
                      7: 
                      8: 
                      9: # ifndef QT_HDR_SIZ
                     10: 
                     11: # include      <ingres.h>
                     12: 
                     13: 
                     14: /*
                     15: **     Structures Used In The Value Fields of Querytree nodes
                     16: */
                     17: 
                     18: /*
                     19: **  VAR node
                     20: **
                     21: **     This node type contains info for a tuple variable.
                     22: **     varno -- index into range table
                     23: **     attno -- attribute number in this relation
                     24: **     varfrmt -- type of this domain
                     25: **     varfrml -- length of this domain
                     26: **     valptr -- pointer to value when bound.
                     27: **
                     28: **     If varno == -1, then this variable has been substituted; to
                     29: **     get the actual VAR node, follow the chain of valptr's.
                     30: */
                     31: 
                     32: struct varnode
                     33: {
                     34:        char    varno;                  /* variable number */
                     35:        char    attno;                  /* attribute number */
                     36:        char    varfrmt;                /* type */
                     37:        char    varfrml;                /* length */
                     38:        ANYTYPE *valptr;                /* pointer to value */
                     39: };
                     40: 
                     41: 
                     42: /*
                     43: **     STRUCTURE FOR AND, AGHEAD, AND ROOT NODES
                     44: **
                     45: **             In the parser and qrymod none of these fields are used.
                     46: **             Decomp maintains information about the variables
                     47: **             in the left and right descendents of the nodes.
                     48: **             The "rootuser" flag is present only in the ROOT and AGHEAD
                     49: **             nodes.  It is TRUE only in the original ROOT node of the query.
                     50: */
                     51: 
                     52: struct rootnode                /* AND, AGHEAD, ROOT nodes */
                     53: {
                     54:        char    tvarc;                  /* total of var's in sub-tree */
                     55:        char    lvarc;                  /* # of variables in left branch */
                     56:        short   lvarm;                  /* bit map of var's in left branch */
                     57:        short   rvarm;                  /* bit map of var's in right branch*/
                     58:        short   rootuser;               /* flag: TRUE if root of user generated query */
                     59: };
                     60: 
                     61: struct opnode                  /* AOP, BOP, UOP nodes */
                     62: {
                     63:        short   opno;                   /* operator number */
                     64:        char    opfrmt;                 /* format of function */
                     65:        char    opfrml;                 /* length of function */
                     66:        char    agfrmt;                 /* in AOP, format of result */
                     67:        char    agfrml;                 /* in AOP, length of result */
                     68: };
                     69: 
                     70: struct resdomnode              /* RESDOM node */
                     71: {
                     72:        short   resno;                  /* result domain number */
                     73:        char    resfrmt;                /* result format */
                     74:        char    resfrml;                /* result length */
                     75: };
                     76: 
                     77: 
                     78: struct srcid                   /* SOURCEID node */
                     79: {
                     80:        short   srcvar;                 /* variable number */
                     81:        DESC    srcdesc;                /* descriptor for this var */
                     82: };
                     83: 
                     84: 
                     85: /*
                     86: **     SYMVALUE UNION
                     87: **
                     88: **             This union contains all of the types available
                     89: **             in the value field of a querytree node.
                     90: */
                     91: 
                     92: union symvalue
                     93: {
                     94:        union anytype           sym_data;
                     95:        struct varnode          sym_var;
                     96:        struct rootnode         sym_root;
                     97:        struct opnode           sym_op;
                     98:        struct resdomnode       sym_resdom;
                     99:        struct srcid            sym_srcid;
                    100: };
                    101: 
                    102: 
                    103: /*
                    104: **     SYMBOL DEFINITION
                    105: **
                    106: **             Basic symbol structure. "Type" is one of the symbols
                    107: **             in "symbol.h", "len" is the length of the "value"
                    108: **             field (0 to 255 bytes), "value" is variable length and
                    109: **             holds the actual value (if len != 0) of the node.
                    110: **             The "value" is one of the types contained in "union symvalue".
                    111: **
                    112: **             On a thirty-two bit machine, there are two bytes of padding
                    113: **             after type and length.  These two bytes are discarded 
                    114: **             when a symbol is written to a pipe.
                    115: */
                    116: 
                    117: struct symbol
                    118: {
                    119:        char            type;                   /* type codes in symbol.h */
                    120:        char            len;                    /* length in bytes of value field */
                    121:        union symvalue  value;
                    122: };
                    123: 
                    124: typedef struct symbol  SYMBOL;
                    125: 
                    126: 
                    127: /*
                    128: **     QUERYTREE NODE
                    129: **
                    130: **             Basic node in the querytree. Each node has a left and
                    131: **             right descendent. If the node is a leaf node then the
                    132: **             left and right pointers will be NULL. Depending on the
                    133: **             "type" field of the symbol structure, there may be additional
                    134: **             information.
                    135: */
                    136: 
                    137: struct querytree
                    138: {
                    139:        struct querytree        *left;
                    140:        struct querytree        *right;
                    141:        struct symbol           sym;
                    142: };
                    143: 
                    144: typedef struct querytree       QTREE;
                    145: 
                    146: 
                    147: /*
                    148: **     SUNDRY CONSTANTS
                    149: **
                    150: **             There are several differences in the handling of data
                    151: **             structures on 16 and 32 bit machines:
                    152: **                     1).  A pointer to  memory is either 2 or 4 bytes.
                    153: **                     2).  Padding is inserted in structures to insure
                    154: **                             alignment of 16 and 32 bit numbers.
                    155: **
                    156: **             For these reasons the following constant definitions
                    157: **             are useful for machine independent allocation.
                    158: **
                    159: **             These are based on the PDP11 compile flag.
                    160: **
                    161: **             QT_HDR_SIZ -- size of left and right pointers, typ,
                    162: **                     len and padding
                    163: **             SYM_HDR_SIZ -- size of type and len in symbol
                    164: **                     structure -- includes any padding before
                    165: **                     the value field
                    166: **             TYP_LEN_SIZ -- size of type and len in symbol
                    167: **                     structure -- without padding
                    168: **
                    169: **             INGRES FOLKS: don't change these back to sizeof's!!!
                    170: **                           The PDP-11 compiler doesn't understand!
                    171: */
                    172: 
                    173: # ifdef PDP11
                    174: # define       QT_HDR_SIZ      6
                    175: # define       SYM_HDR_SIZ     2
                    176: # define       TYP_LEN_SIZ     2
                    177: # else
                    178: # define       QT_HDR_SIZ      12
                    179: # define       SYM_HDR_SIZ     4
                    180: # define       TYP_LEN_SIZ     2
                    181: 
                    182: 
                    183: 
                    184: 
                    185: # endif PDP11
                    186: 
                    187: 
                    188: 
                    189: 
                    190: 
                    191: /*
                    192: **  Query Tree Header.
                    193: **
                    194: **     Qt_ctx should be of type 'ctx_t *', but it is 'char *'
                    195: **             to insure that we don't need ctlmod.h.
                    196: */
                    197: 
                    198: struct qthdr
                    199: {
                    200:        char    qt_active;              /* if set, Qt area is in use */
                    201:        char    *qt_ctx;                /* pointer to context */
                    202:        short   qt_qmode;               /* query mode */
                    203:        short   qt_resvar;              /* result variable number */
                    204:        RANGEV  qt_rangev[MAXRANGE];    /* the range table */
                    205:        short   qt_remap[MAXRANGE];     /* variable remapping (for QM) */
                    206: }  Qt;
                    207: 
                    208: 
                    209: # endif QT_HDR_SIZ

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.