1: # include "../ingres.h" 2: # include "../aux.h" 3: # include "../pipes.h" 4: # include "../tree.h" 5: # include "../symbol.h" 6: # include "../catalog.h" 7: # include "qrymod.h" 8: 9: 10: 11: /* 12: ** D_VIEW -- define view 13: ** 14: ** This procedure connects the tree in with the relation catalog 15: ** and inserts the view tree into the tree catalog. 16: ** 17: ** The information in the pipe is expected to come as follows: 18: ** create for view, with S_VIEW bit set so that a 19: ** physical relation is not created. 20: ** define tree, which will put the translation tree 21: ** into the 'tree' catalog. 22: ** define view, which will connect the two together. 23: ** The first two absolutely must be done before 24: ** this step can be called. 25: ** 26: ** Parameters: 27: ** none 28: ** 29: ** Returns: 30: ** none 31: ** 32: ** Side Effects: 33: ** I/O in 'tree' catalog. 34: ** 35: ** Requires: 36: ** rdpipe -- to get parameters. 37: ** Treeroot -- a ptr to the defintion tree. 38: ** Pipe -- R_up pipe block. 39: ** puttree -- to output the tree to the tree catalog. 40: ** Rangev, Qmode, Resultvar -- for parameter validation. 41: ** 42: ** Called By: 43: ** define 44: ** 45: ** Trace Flags: 46: ** 39 47: ** 48: ** Diagnostics: 49: ** none 50: ** 51: ** Syserrs: 52: ** On inconsistancies in system catalogs. 53: ** 54: ** History: 55: ** 2/19/79 (eric) -- split from define.c. 56: */ 57: 58: extern QTREE *Treeroot; 59: extern struct descriptor Reldes; 60: extern struct pipfrmt Pipe; 61: 62: 63: 64: 65: d_view() 66: { 67: char viewid[MAXNAME + 1]; 68: struct relation relkey, reltup; 69: register QTREE *t; 70: register int i; 71: struct tup_id tid; 72: int treeid; 73: 74: /* 75: ** Read parameters. 76: ** Only parameter is view name (which must match the 77: ** name of the Resultvar). 78: */ 79: 80: if (rdpipe(P_NORM, &Pipe, R_up, viewid, 0) > MAXNAME + 1) 81: syserr("d_view: rdpipe"); 82: pad(viewid, MAXNAME); 83: 84: /* done with pipe... */ 85: rdpipe(P_SYNC, &Pipe, R_up); 86: 87: # ifdef xQTR3 88: /* do some extra validation */ 89: if (Treeroot == NULL) 90: syserr("d_view: NULL Treeroot"); 91: if (Qmode != mdDEFINE) 92: syserr("d_view: Qmode %d", Qmode); 93: if (Resultvar < 0) 94: syserr("d_view: Rv %d", Resultvar); 95: if (!Rangev[Resultvar].rused || !bequal(Rangev[Resultvar].relid, viewid, MAXNAME)) 96: syserr("d_view: rangev %d %.14s", Rangev[Resultvar].rused, 97: Rangev[Resultvar].relid); 98: # endif 99: 100: Rangev[Resultvar].rused = FALSE; 101: Resultvar = -1; 102: Qmode = -1; 103: 104: /* output tree to tree catalog */ 105: treeid = puttree(Treeroot, viewid, Usercode, mdVIEW); 106: 107: /* clear Treeroot to detect some errors */ 108: Treeroot = NULL; 109: }