Annotation of 43BSD/ingres/source/dbu/display.c, revision 1.1.1.1

1.1       root        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: }

unix.superglobalmegacorp.com

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