|
|
1.1 ! root 1: # include <ingres.h> ! 2: # include <aux.h> ! 3: # include <tree.h> ! 4: # include <symbol.h> ! 5: # include <catalog.h> ! 6: # include <pv.h> ! 7: # include <func.h> ! 8: # include "qrymod.h" ! 9: # include <sccs.h> ! 10: ! 11: SCCSID(@(#)d_view.c 8.1 12/31/84) ! 12: ! 13: ! 14: ! 15: /* ! 16: ** D_VIEW -- define view ! 17: ** ! 18: ** This procedure connects the tree in with the relation catalog ! 19: ** and inserts the view tree into the tree catalog. ! 20: ** ! 21: ** The information in the pipe is expected to come as follows: ! 22: ** create for view, with S_VIEW bit set so that a ! 23: ** physical relation is not created. ! 24: ** define tree, which will put the translation tree ! 25: ** into the 'tree' catalog. ! 26: ** define view, which will connect the two together. ! 27: ** The first two absolutely must be done before ! 28: ** this step can be called. ! 29: ** ! 30: ** Parameters: ! 31: ** none ! 32: ** ! 33: ** Returns: ! 34: ** none ! 35: ** ! 36: ** Side Effects: ! 37: ** I/O in 'tree' catalog. ! 38: ** ! 39: ** Trace Flags: ! 40: ** 39 ! 41: */ ! 42: ! 43: extern DESC Reldes; ! 44: ! 45: extern d_view(), null_fn(); ! 46: extern short tTqm[80]; ! 47: ! 48: struct fn_def DefViewFn = ! 49: { ! 50: "DVIEW", ! 51: d_view, ! 52: null_fn, ! 53: null_fn, ! 54: NULL, ! 55: 0, ! 56: tTqm, ! 57: 80, ! 58: 'Q', ! 59: 0 ! 60: }; ! 61: ! 62: ! 63: ! 64: ! 65: d_view(pc, pv) ! 66: int pc; ! 67: PARM *pv; ! 68: { ! 69: char viewid[MAXNAME + 1]; ! 70: struct relation relkey, reltup; ! 71: register QTREE *t; ! 72: register int i; ! 73: struct tup_id tid; ! 74: int treeid; ! 75: ! 76: /* ! 77: ** Read parameters. ! 78: */ ! 79: ! 80: if (pv->pv_type != PV_STR) ! 81: syserr("d_view: viewid"); ! 82: pmove(pv->pv_val.pv_str, viewid, MAXNAME, ' '); ! 83: pv++; ! 84: ! 85: if (pv->pv_type != PV_QTREE) ! 86: syserr("d_view: tree"); ! 87: t = (QTREE *) pv->pv_val.pv_qtree; ! 88: pv++; ! 89: ! 90: # ifdef xQTR3 ! 91: /* do some extra validation */ ! 92: if (Qt.qt_qmode != mdVIEW) ! 93: syserr("d_view: Qt.qt_qmode %d", Qt.qt_qmode); ! 94: if (Qt.qt_resvar < 0) ! 95: syserr("d_view: Rv %d", Qt.qt_resvar); ! 96: if (Qt.qt_rangev[Qt.qt_resvar].rngvdesc == NULL || ! 97: !bequal(Qt.qt_rangev[Qt.qt_resvar].rngvdesc->reldum.relid, viewid, MAXNAME)) ! 98: syserr("d_view: rangev %d %.14s", Qt.qt_rangev[Qt.qt_resvar].rngvdesc, ! 99: Qt.qt_rangev[Qt.qt_resvar].rngvdesc->reldum.relid); ! 100: # endif ! 101: ! 102: declare(Qt.qt_resvar, NULL); ! 103: Qt.qt_resvar = -1; ! 104: Qt.qt_qmode = -1; ! 105: ! 106: /* output tree to tree catalog */ ! 107: treeid = puttree(t, viewid, Usercode, mdVIEW); ! 108: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.