Annotation of 42BSD/ingres/source/ctlmod/init_qt.c, revision 1.1

1.1     ! root        1: # include      "ctlmod.h"
        !             2: # include      <ingres.h>
        !             3: # include      <aux.h>
        !             4: # include      <tree.h>
        !             5: # include      <sccs.h>
        !             6: 
        !             7: SCCSID(@(#)init_qt.c   7.1     2/5/81)
        !             8: 
        !             9: /*
        !            10: **  INIT_QT -- initialize query tree
        !            11: **
        !            12: **     This routine saves and initializes the global portion
        !            13: **     of a query tree.  It must be called before doing any
        !            14: **     creation of a query tree which depends on or modifies
        !            15: **     the global portion of a query tree.
        !            16: **
        !            17: **     The global portion of a query tree includes the range
        !            18: **     table, the query mode, etc.
        !            19: **
        !            20: **     The algorithm for saving the query tree global portion
        !            21: **     ("Qt") is somewhat obscure.  To understand it, it is
        !            22: **     critical to be clear that every query tree is associated
        !            23: **     with a context, but not every context is associated with
        !            24: **     a query tree.  We further constrain that a context
        !            25: **     is associated with at most one query tree; if more than
        !            26: **     one is needed in a single context, it is always safe
        !            27: **     to reuse the previous one.
        !            28: **
        !            29: **     When we allocate a new context (in 'initp'), the current
        !            30: **     Qt (if in use) is associated with the save image of the
        !            31: **     context.  When we call init_qt, we check to see if such
        !            32: **     an association exists.  If so, we save Qt, and adjust
        !            33: **     the old context to point to the save image of Qt.  When
        !            34: **     we call init_qt again, Qt will be active, but not
        !            35: **     associated with a context save image; thus, we do not
        !            36: **     save Qt.  On context restore, if it has a pointer to a
        !            37: **     saved Qt, we restore that also.
        !            38: **
        !            39: **     Parameters:
        !            40: **             none.
        !            41: **     
        !            42: **     Returns:
        !            43: **             none
        !            44: **     
        !            45: **     Side Effects:
        !            46: **             Qt possibly gets saved in an area set up by
        !            47: **                     calling malloc.
        !            48: **     
        !            49: **     Trace Flags:
        !            50: **             none
        !            51: */
        !            52: 
        !            53: init_qt()
        !            54: {
        !            55:        extern char     *malloc();
        !            56:        register char   *p;
        !            57: 
        !            58:        /*
        !            59:        **  Save Qt if associated with a saved context.
        !            60:        */
        !            61: 
        !            62:        if (Qt.qt_ctx != NULL)
        !            63:        {
        !            64:                p = malloc(sizeof Qt);
        !            65:                if (p == NULL)
        !            66:                        syserr("init_qt: no mem");
        !            67:                bmove((char *)&Qt, p, sizeof Qt);
        !            68:                ((ctx_t *)Qt.qt_ctx)->ctx_qt = p;
        !            69:                Qt.qt_ctx = NULL;
        !            70:        }
        !            71: 
        !            72:        /* mark the Qt as active */
        !            73:        Qt.qt_active++;
        !            74: }

unix.superglobalmegacorp.com

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