1: # include   <ingres.h>
   2: # include   <aux.h>
   3: # include   <catalog.h>
   4: # include   <tree.h>
   5: # include   <symbol.h>
   6: # include   <access.h>
   7: # include   <func.h>
   8: # include   <pv.h>
   9: # include   <sccs.h>
  10: # include   <errors.h>
  11: 
  12: SCCSID(@(#)display.c	8.3	2/8/85)
  13: 
  14: /*
  15: **  DISPLAY -- display query corresponding to view, permission,
  16: **		or intgerity declaration
  17: */
  18: 
  19: 
  20: 
  21: 
  22: extern short    tTdbu[];
  23: extern int  display();
  24: extern int  null_fn();
  25: 
  26: struct fn_def DsplayFn =
  27: {
  28:     "DISPLAY",
  29:     display,
  30:     null_fn,
  31:     null_fn,
  32:     NULL,
  33:     0,
  34:     tTdbu,
  35:     100,
  36:     'Z',
  37:     0
  38: };
  39: /*
  40: **  DISPLAY -- display query
  41: **
  42: **	Parameters:
  43: **		pc -- number of args in pv
  44: **		pv -- pv[i] == 4 for VIEW, 5 for PERMIT, 6 for INTEGRITY
  45: **				where i % 2 == 0
  46: **		pv[i] -- relation names for which pv[i-1] is mode
  47: **				where i%2==1
  48: **
  49: **	Returns:
  50: **		0 -- total success
  51: **		err -- error number of last error
  52: **
  53: **	Side Effects:
  54: **		prints out definition of appropriate characteristic of relation
  55: **
  56: **	Trace Flags:
  57: **		33, -1
  58: */
  59: 
  60: 
  61: display(pc, pv)
  62: int pc;
  63: PARM    pv[];
  64: {
  65:     register int    ac;
  66:     register PARM   *av;
  67:     extern DESC Treedes;
  68:     register int    i;
  69:     int     err;
  70:     char        err_array[PV_MAXPC];
  71:     auto int    mode;
  72: 
  73: #	ifdef xZTR1
  74:     if (tTf(50, -1))
  75:     {
  76:         printf("display: ");
  77:         prvect(pc, pv);
  78:     }
  79: #	endif
  80: 
  81:     err = 0;
  82:     if (pc % 2 != 0)
  83:         syserr("display: bad param count %d", pc);
  84:     opencatalog("tree", OR_READ);
  85: 
  86:     for (ac = 0, av = pv; ac < pc; av++, ac++)
  87:     {
  88:         mode = atoi(av->pv_val.pv_str);
  89:         av++;
  90:         err_array[ac++] = 0;
  91:         err_array[ac] = disp(av->pv_val.pv_str, mode);
  92:     }
  93:     for (ac = 0, av = pv; ac < pc; av++, ac++)
  94:     {
  95:         if (err_array[ac])
  96:             err = error(DISPERRBASE + err_array[ac], (av->pv_val).pv_str, 0);
  97:     }
  98:     return (err);
  99: }
 100: /*
 101: ** DISP -- display integrity, permit, or define query on a relation
 102: **
 103: **	Finds a relation owned by the user or the DBA and passes
 104: **	the name and owner to the appropritae routine depending on
 105: **	mode.
 106: **
 107: **	Parameters:
 108: **		relation -- relation on which query is to be printed
 109: **		mode -- the print mode:
 110: **			4 -- view
 111: **			5 -- permit
 112: **			6 -- integrity
 113: **
 114: **	Returns:
 115: **		0 -- success
 116: **		1 -- no such relation, or none seeable by the user.
 117: **		3 -- VIEW mode and relation not a view
 118: **		4 -- PERMIT and no permissions on relation
 119: **		5 -- INTEGRITY mode and no integrity constraints
 120: **
 121: **	Trace Flags:
 122: **		33, 8
 123: */
 124: 
 125: disp(relation, mode)
 126: char    *relation;
 127: int mode;
 128: {
 129:     DESC        d;
 130:     register int    i;
 131:     extern char *Resrel;
 132: 
 133: #	ifdef xZTR1
 134:     if (tTf(50, 8))
 135:         printf("disp: relation %s\n", relation);
 136: #	endif
 137: 
 138:     Resrel = relation;
 139:     i = openr(&d, OR_RELTID, relation);
 140:     if (i > 0)
 141:         return (1);
 142:     else if (i < 0)
 143:         syserr("disp: openr(%s) ret %d", relation, i);
 144:     switch (mode)
 145:     {
 146:       case 4:       /* View query */
 147:         if (d.reldum.relstat & S_VIEW)
 148:             pr_def(relation, d.reldum.relowner);
 149:         else
 150:             return (3);
 151:         break;
 152: 
 153:       case 5:
 154:         if (pr_prot(relation, &d))
 155:             return (4);
 156:         break;
 157: 
 158:       case 6:
 159:         if (d.reldum.relstat & S_INTEG)
 160:             pr_integrity(relation, d.reldum.relowner);
 161:         else
 162:             return (5);
 163:         break;
 164: 
 165:       default:
 166:         syserr("disp: mode == %d", mode);
 167:     }
 168:     return (0);
 169: }
 170: /*
 171: **  PR_DEF -- Print "define view" query of a view
 172: **
 173: **	Parameters:
 174: **		relation -- relation in question
 175: **		owner -- relowner
 176: **
 177: **	Returns:
 178: **		none
 179: **
 180: **	Side Effects:
 181: **		reads a tree, clears range table
 182: **
 183: **	Trace Flags:
 184: **		33, 9
 185: */
 186: 
 187: pr_def(relation, owner)
 188: char    *relation;
 189: char    *owner;
 190: {
 191:     register QTREE  *t;
 192:     QTREE       *gettree();
 193: 
 194: #	ifdef xZTR1
 195:     if (tTf(50, 9))
 196:         printf("pr_def(relation=\"%s\", owner=%s)\n", relation, owner);
 197: #	endif
 198: 
 199:     printf("View %s defined:\n\n", relation);
 200:     clrrange();
 201: 
 202:     /* Treeid == 0 because views have only one definition */
 203:     t = gettree(relation, owner, mdVIEW, 0,FALSE);
 204:     pr_range();
 205:     printf("define view ");
 206:     pr_tree(t);
 207: }
 208: /*
 209: **  PR_INTEGRITY -- print out integrity constraints on a relation
 210: **
 211: **	Finds all integrity tuples for this unique relation, and
 212: **	calls pr_int() to print a query from them.
 213: **
 214: **	Parameters:
 215: **		relid -- rel name
 216: **		relowner -- 2 byte owner id
 217: **
 218: **	Returns:
 219: **		none
 220: **
 221: **	Side Effects:
 222: **		file activity, query printing
 223: **
 224: **	Trace Flags:
 225: **		33, 9
 226: */
 227: 
 228: pr_integrity(relid, relowner)
 229: char    *relid;
 230: char    *relowner;
 231: {
 232:     extern DESC     Intdes;
 233:     TID         hitid, lotid;
 234:     struct integrity    key, tuple;
 235:     register int        i;
 236: 
 237: 
 238: #	ifdef xZTR1
 239:     if (tTf(50, 9))
 240:         printf("pr_integrity(relid =%s, relowner=%s)\n",
 241:         relid, relowner);
 242: #	endif
 243: 
 244:     printf("Integrity constraints on %s are:\n\n", relid);
 245:     opencatalog("integrities", OR_READ);
 246: 
 247:     /* get integrities tuples for relid, relowner */
 248:     clearkeys(&Intdes);
 249:     setkey(&Intdes, &key, relid, INTRELID);
 250:     setkey(&Intdes, &key, relowner, INTRELOWNER);
 251:     if (i = find(&Intdes, EXACTKEY, &lotid, &hitid, &key))
 252:         syserr("pr_integrity: find %d", i);
 253:     for ( ; ; )
 254:     {
 255:         if (i = get(&Intdes, &lotid, &hitid, &tuple, TRUE))
 256:             break;
 257:         if (kcompare(&Intdes, &tuple, &key) == 0)
 258:             pr_int(&tuple, relid);
 259:     }
 260:     if (i != 1)
 261:         syserr("pr_integrity: get %d", i);
 262: }
 263: /*
 264: **  PR_INT -- print an integrity definition given a integrities tuple
 265: **
 266: **	Parameters:
 267: **		i -- integrity tuple
 268: **
 269: **	Returns:
 270: **		none
 271: **
 272: **	Side Effects:
 273: **		prints a query
 274: **		reads a tree
 275: */
 276: 
 277: pr_int(i, relid)
 278: register struct integrity   *i;
 279: char                *relid;
 280: {
 281:     register QTREE  *t;
 282:     QTREE       *gettree();
 283: 
 284:     clrrange();
 285:     t = gettree(i->intrelid, i->intrelowner, mdINTEG, i->inttree);
 286:     printf("Integrity constraint %d -\n\n", i->inttree);
 287:     pr_range();
 288: 
 289:     printf("define integrity on ");
 290:     pr_rv(Qt.qt_resvar = i->intresvar);
 291:     printf(" is ");
 292:     pr_qual(t->right);
 293:     printf("\n\n\n");
 294: 
 295: }

Defined functions

disp defined in line 125; used 1 times
  • in line 91
display defined in line 61; used 2 times
pr_def defined in line 187; used 1 times
pr_int defined in line 277; used 1 times
pr_integrity defined in line 228; used 1 times

Defined variables

DsplayFn defined in line 26; never used
Last modified: 1986-04-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 948
Valid CSS Valid XHTML 1.0 Strict