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