Annotation of 43BSD/ingres/source/iutil/gettree.c, revision 1.1

1.1     ! root        1: # include      <ingres.h>
        !             2: # include      <catalog.h>
        !             3: # include      <tree.h>
        !             4: # include      <symbol.h>
        !             5: # include      <sccs.h>
        !             6: 
        !             7: SCCSID(@(#)gettree.c   8.2     1/15/85)
        !             8: 
        !             9: 
        !            10: /*
        !            11: **  GETTREE -- get tree from 'tree' catalog
        !            12: **
        !            13: **     This function, given an internal treeid, fetches and builds
        !            14: **     that tree from the 'tree' catalog.  There is nothing exciting
        !            15: **     except the mapping of variables, done by mapvars().
        !            16: **
        !            17: **     Parameters:
        !            18: **             treeid -- internal id of tree to fetch and build.
        !            19: **             init -- passed to 'readqry' to tell whether or not
        !            20: **                     to initialize the query buffer.
        !            21: **
        !            22: **     Returns:
        !            23: **             Pointer to root of tree.
        !            24: **
        !            25: **     Side Effects:
        !            26: **             file activity.  Space in Qbuf is used up.
        !            27: **
        !            28: **     Trace Flags:
        !            29: **             13
        !            30: */
        !            31: 
        !            32: QTREE *
        !            33: gettree(treerelid, treeowner, treetype, treeid, init)
        !            34: char   *treerelid;
        !            35: char   *treeowner;
        !            36: char   treetype;
        !            37: int    treeid;
        !            38: int    init;
        !            39: {
        !            40:        register QTREE  *t;
        !            41:        extern int      relntrrd();
        !            42:        register int    i;
        !            43:        extern QTREE    *readqry();
        !            44: 
        !            45:        /* initialize relntrrd() for this treeid */
        !            46:        relntrrd(0, NULL, 0, treerelid, treeowner, treetype, treeid);
        !            47: 
        !            48:        /* read and build query tree */
        !            49:        t = readqry(relntrrd, 0, init);
        !            50: 
        !            51:        /* remap varno's to be unique */
        !            52:        if (!init)
        !            53:                mapvars(t);
        !            54: 
        !            55:        return (t);
        !            56: }
        !            57: /*
        !            58: **  RELNTRRD -- read tree from 'tree' relation
        !            59: **
        !            60: **     This looks exactly like the 'pipetrrd' call, except that info
        !            61: **     comes from the 'tree' talolog instead of from the pipe.  It
        !            62: **     must be initialized by calling it with a NULL pointer and
        !            63: **     the segment name wanted as 'treeid'.
        !            64: **
        !            65: **     Parameters:
        !            66: **             dummyx -- a placeholder parameter to make this
        !            67: **                     routine compatible with pb_get.
        !            68: **             ptr -- NULL -- "initialize".
        !            69: **                     else -- pointer to read area.
        !            70: **             cnt -- count of number of bytes to read.
        !            71: **             treerelid -- if ptr == NULL, the relation name
        !            72: **                     associated with the tree; ignored otherwise.
        !            73: **             treeowner -- if ptr == NULL, the owner of the relation
        !            74: **                     associated with the tree; ignored otherwise.
        !            75: **             treetype -- if ptr == NULL, the type of the tree
        !            76: **                     (view, prot, etc.); ignored otherwise.
        !            77: **             treeid -- if ptr == NULL, this is the tree id,
        !            78: **                     otherwise this parameter is not supplied.
        !            79: **
        !            80: **     Returns:
        !            81: **             count of actual number of bytes read.
        !            82: **
        !            83: **     Side Effects:
        !            84: **             activity in database.
        !            85: **             static variables are adjusted correctly.  Note that
        !            86: **                     this routine can be used on only one tree
        !            87: **                     at one time.
        !            88: */
        !            89: 
        !            90: relntrrd(dummyx, ptr, cnt, treerelid, treeowner, treetype, treeid)
        !            91: char   *ptr;
        !            92: int    cnt;
        !            93: char   *treerelid;
        !            94: char   *treeowner;
        !            95: char   treetype;
        !            96: int    treeid;
        !            97: {
        !            98:        static struct tree      trseg;
        !            99:        static char             *trp;
        !           100:        static short            seqno;
        !           101:        static  int             bytesleft;
        !           102:        register char           *p;
        !           103:        register int            n;
        !           104:        register int            i;
        !           105:        struct tree             trkey;
        !           106:        TID                     tid;
        !           107:        extern DESC             Treedes;
        !           108: 
        !           109:        p = ptr;
        !           110:        n = cnt;
        !           111: 
        !           112:        if (p == NULL)
        !           113:        {
        !           114:                /* initialize -- make buffer appear empty */
        !           115:                trp = &trseg.treetree[sizeof trseg.treetree];
        !           116:                bytesleft = 0;
        !           117:                bmove(treerelid, trseg.treerelid, MAXNAME);
        !           118:                bmove(treeowner, trseg.treeowner, 2);
        !           119:                trseg.treetype = treetype;
        !           120:                trseg.treeid = treeid;
        !           121:                seqno = 0;
        !           122:                opencatalog("tree", OR_READ);
        !           123: 
        !           124: #              ifdef xQTR2
        !           125:                if (tTf(13, 6))
        !           126:                        printf("relntrrd: n=%.12s o=%.2s t=%d i=%d\n",
        !           127:                            treerelid, treeowner, treetype, treeid);
        !           128: #              endif
        !           129: 
        !           130:                return (0);
        !           131:        }
        !           132: 
        !           133:        /* fetch characters */
        !           134:        while (n-- > 0)
        !           135:        {
        !           136:                /* check for segment empty */
        !           137:                if ( bytesleft == 0 )
        !           138:                {
        !           139:                        /* then read new segment */
        !           140:                        clearkeys(&Treedes);
        !           141:                        setkey(&Treedes, &trkey, trseg.treerelid, TREERELID);
        !           142:                        setkey(&Treedes, &trkey, trseg.treeowner, TREEOWNER);
        !           143:                        setkey(&Treedes, &trkey, &trseg.treetype, TREETYPE);
        !           144:                        setkey(&Treedes, &trkey, &trseg.treeid, TREEID);
        !           145:                        setkey(&Treedes, &trkey, &seqno, TREESEQ);
        !           146:                        seqno++;
        !           147:                        if ((i = getequal(&Treedes, &trkey, &trseg, &tid)) != 0)
        !           148:                                syserr("relnrdtr: getequal %d", i);
        !           149:                        trp = &trseg.treetree[0];
        !           150:                        bytesleft = sizeof (trseg.treetree);
        !           151:                }
        !           152: 
        !           153:                /* do actual character fetch */
        !           154:                *p++ = *trp++;
        !           155:                bytesleft--;
        !           156:        }
        !           157: 
        !           158:        return (cnt);
        !           159: }

unix.superglobalmegacorp.com

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