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

1.1       root        1: # include      <pv.h>
                      2: # include      <ingres.h>
                      3: # include      <access.h>
                      4: # include      <aux.h>
                      5: # include      <catalog.h>
                      6: # include      <symbol.h>
                      7: # include      <func.h>
                      8: # include      <sccs.h>
                      9: # include      <errors.h>
                     10: 
                     11: SCCSID(@(#)rmqm.c      8.3     2/8/85)
                     12: 
                     13: /*
                     14: **  RMQM -- DBU to delete protection and integrity constraints
                     15: **
                     16: **     Trace Flags:
                     17: **             43
                     18: */
                     19: 
                     20: 
                     21: extern short   tTdbu[];
                     22: extern int     dest_const();
                     23: extern int     null_fn();
                     24: 
                     25: struct fn_def RmqmFn =
                     26: {
                     27:        "RMQM",
                     28:        dest_const,
                     29:        null_fn,
                     30:        null_fn,
                     31:        NULL,
                     32:        0,
                     33:        tTdbu,
                     34:        100,
                     35:        'Z',
                     36:        0
                     37: };
                     38: /*
                     39: **  DEST_CONST -- destroy constraints
                     40: **
                     41: **     Parameters:
                     42: **             pc -- number of parameters in pv
                     43: **             pv -- pv [0] == DESTPROT destroy permission
                     44: **                              == DESTINTEG destroy integrity constraint
                     45: **                     pv [1]    relation from which to destroy constraint
                     46: **                     pv [2] == if (pc != 2) relation from which to delete
                     47: **                                     constraints
                     48: **                     pv[3] ... pv[pc - 1] == id of constraint
                     49: **
                     50: **     Returns:
                     51: **             0
                     52: **
                     53: **     Side Effects:
                     54: **             destroys constraints. Involves activity on catalogs 'relation',
                     55: **             protect, integrities, and tree.
                     56: **
                     57: **     Trace Flags:
                     58: **             43, 0
                     59: */
                     60: 
                     61: dest_const(pc, pv)
                     62: int    pc;
                     63: PARM   pv[];
                     64: {
                     65:        DESC                    d;
                     66:        register int            i;
                     67:        int                     mode;
                     68:        extern struct admin     Admin;
                     69: 
                     70: #      ifdef xZTR1
                     71:        if (tTf(43, 0))
                     72:        {
                     73:                printf("dest_const: ");
                     74:                prvect(pc, pv);
                     75:        }
                     76: #      endif
                     77: 
                     78:        if (!(Admin.adhdr.adflags & A_QRYMOD))
                     79:                return (0);
                     80:        i = openr(&d, OR_RELTID, pv[1].pv_val.pv_str);
                     81:        if (i < 0)
                     82:                syserr("dest_const: openr(%s) %d", pv[1].pv_val.pv_str, i);
                     83: 
                     84:        if (i == 1 || !bequal(Usercode, d.reldum.relowner, UCODE_SZ))
                     85:        {
                     86:                error(RELNOEXIST, pv[1].pv_val.pv_str, 0);
                     87:                return (0);
                     88:        }
                     89: 
                     90:        mode = atoi(pv[0].pv_val.pv_str);
                     91:        if (mode == DESTPROT)
                     92:                dest_prot(&d, &pv[2]);
                     93:        else if (mode == DESTINTEG)
                     94:                dest_integ(&d, &pv[2]);
                     95:        else
                     96:                syserr("dest_const: bad mode %d", mode);
                     97:        return (0);
                     98: }
                     99: /*
                    100: **  DEST_INTEG -- directs destruction of integrity constraints
                    101: **
                    102: **     Parameters:
                    103: **             desc -- descriptor for relation
                    104: **             intv -- PV_EOF terminated list of id strings, if first element
                    105: **                     is PV_EOF means "all"
                    106: **
                    107: **     Returns:
                    108: **             none
                    109: **
                    110: **     Side Effects:
                    111: **             deletes integrity constraint. Activity on 'relation', integrities,
                    112: **             and tree.
                    113: */
                    114: 
                    115: dest_integ(d, intv)
                    116: register DESC  *d;
                    117: PARM           intv[];
                    118: {
                    119:        extern DESC             Intdes;
                    120:        struct integrity        tuple, key;
                    121:        struct tree             tkey;
                    122:        register                i, j;
                    123:        int                     tree_const();
                    124:        int                     int_inttree();
                    125: 
                    126: #      ifdef xZTR1
                    127:        if (tTf(43, 1))
                    128:                printf("dest_integ((%s, %s)...)\n", d->reldum.relid, d->reldum.relowner);
                    129: #      endif
                    130: 
                    131:        i_cat("integrities", &Intdes, &key, d->reldum.relid, INTRELID,
                    132:        d->reldum.relowner, INTRELOWNER, mdINTEG, &tkey);
                    133: 
                    134:        if (intv[0].pv_type == PV_EOF)
                    135:        {
                    136:                /* destroy integrity 'relation' ALL */
                    137:                if (!(d->reldum.relstat & S_INTEG))
                    138:                        return (0);
                    139:                del_all(d, &Intdes, &key, &tuple, &tkey, S_INTEG,
                    140:                tree_const, int_inttree);
                    141:                return (0);
                    142:        }
                    143:        /* destroy integrity 'relation' int {, int} */
                    144:        for (i = 0; intv[i].pv_type != PV_EOF; i++)
                    145:                del_int(&Intdes, &key, &tuple, &tkey, intv[i].pv_val.pv_str, INTTREE, 
                    146:                tree_const, int_inttree);
                    147: 
                    148:        /* rescan to output error messages */
                    149:        for (j = 0; j < i; j++)
                    150:                if (*(intv[j].pv_val.pv_str))
                    151:                        error(BADINTEG, intv[j].pv_val.pv_str, 0);
                    152: 
                    153:        /* finally, check that there are still integrity constraints
                    154:        ** on the relation, if not must reset the S_INTEG bit in the relation
                    155:        ** relation tuple for that relation.
                    156:        */
                    157:        chk_const(d, &Intdes, &key, &tuple, d->reldum.relid, INTRELID, d->reldum.relowner,
                    158:        INTRELOWNER, S_INTEG);
                    159: }
                    160: /*
                    161: **  DEST_PROT -- directs destruction of protection constraints
                    162: **
                    163: **     Parameters:
                    164: **             desc -- descriptor for relation
                    165: **             intv -- PV_EOF terminated list of id strings, if first element
                    166: **                     is PV_EOF means "all"
                    167: **
                    168: **     Returns:
                    169: **             none
                    170: **
                    171: **     Side Effects:
                    172: **             deletes protection constraint. Activity on 'relation', 
                    173: **             protect, and tree.
                    174: **
                    175: **     Trace Flags:
                    176: **             43, 2
                    177: */
                    178: 
                    179: 
                    180: dest_prot(d, intv)
                    181: register DESC  *d;
                    182: PARM           intv[];
                    183: {
                    184:        extern DESC     Prodes;
                    185:        struct protect  tuple, key;
                    186:        struct tree     tkey;
                    187:        register        i, j;
                    188:        int             propermid;
                    189:        int             prot_protree();
                    190:        int             tree_prot();
                    191: 
                    192: #      ifdef xZTR1
                    193:        if (tTf(43, 2))
                    194:                printf("dest_prot((%s, %s)...)\n", d->reldum.relid, d->reldum.relowner);
                    195: #      endif
                    196: 
                    197:        i_cat("protect", &Prodes, &key, d->reldum.relid, PRORELID, d->reldum.relowner,
                    198:        PRORELOWN, mdPROT, &tkey);
                    199: 
                    200:        if (intv[0].pv_type == PV_EOF)
                    201:        {
                    202:                /* destroy permit 'relation' ALL */
                    203:                if (!(d->reldum.relstat & S_PROTRET) || !(d->reldum.relstat & S_PROTALL))
                    204:                        r_relstat(d, S_PROTRET | S_PROTALL, 1);
                    205:                if (!(d->reldum.relstat & S_PROTUPS))
                    206:                        return (0);
                    207:                del_all(d, &Prodes, &key, &tuple, &tkey, S_PROTUPS,
                    208:                tree_prot, prot_protree);
                    209:                return (0);
                    210:        }
                    211:        /* destroy permit 'relation' int {, int} */
                    212:        for (i = 0; intv[i].pv_type != PV_EOF; i++)
                    213:        {
                    214:                propermid = atoi(intv[i].pv_val.pv_str);
                    215:                if (propermid == 0)
                    216:                {
                    217:                        if (!(d->reldum.relstat & S_PROTALL))
                    218:                        {
                    219:                                r_relstat(d, S_PROTALL, 1);
                    220:                                intv[i].pv_val.pv_str = 0;
                    221:                        }
                    222:                        continue;
                    223:                }
                    224:                else if (propermid == 1)
                    225:                {
                    226:                        if (!(d->reldum.relstat & S_PROTRET))
                    227:                        {
                    228:                                r_relstat(d, S_PROTRET, 1);
                    229:                                intv[i].pv_val.pv_str = 0;
                    230:                        }
                    231:                        continue;
                    232:                }
                    233:                del_int(&Prodes, &key, &tuple, &tkey, intv[i].pv_val.pv_str, PROPERMID, 
                    234:                tree_prot, prot_protree);
                    235:        }
                    236:        /* rescan to output error messages */
                    237:        for (j = 0; j < i; j++)
                    238:                if (intv[j].pv_val.pv_str && intv[j].pv_val.pv_str[0] )
                    239:                        error(BADPROT, intv[j].pv_val.pv_str, 0);
                    240: 
                    241:        /* finally, check that there are still permissions
                    242:        ** on the relation, if not must reset the S_PROTUPS bit in the relation
                    243:        ** relation tuple for that relation's relstat.
                    244:        */
                    245:        chk_const(d, &Prodes, &key, &tuple, d->reldum.relid, PRORELID,
                    246:        d->reldum.relowner, PRORELOWN, S_PROTUPS);
                    247: }
                    248: /*
                    249: **  I_CAT -- prepare catalogs for deletin of constraint
                    250: **
                    251: **     Initializes treerelid, treeowner, and treetype fields
                    252: **     of tree key. Also relation id and owner fields of
                    253: **     appropriate catalog c_desc, with key 'key'.
                    254: **
                    255: **     Parameters:
                    256: **             c_name -- name of catalog for opencatalog
                    257: **             c_desc -- descriptor of catalog
                    258: **             key -- key for catalog
                    259: **             relid -- relation.relid for relation to be de-constrained
                    260: **             id_attno -- attno of relid in constraint catalog c_desc
                    261: **             relowner -- relation.relowner for rel to be de-constrained
                    262: **             own_attno -- attno of owner in constrain catalog
                    263: **             type -- treetype for tree tuple (depends on catalog)
                    264: **             tkey -- key for tree catalog
                    265: **
                    266: **     Returns:
                    267: **             none
                    268: **
                    269: **     Side Effects:
                    270: **             opencatalogs the constraint catalog c_desc, and the "tree" rel
                    271: **             for READ/WRITE. Sets keys.
                    272: **
                    273: **     Trace Flags:
                    274: **             43, 3
                    275: */
                    276: 
                    277: i_cat(c_name, c_desc, key, relid, id_attno, relowner, own_attno, type, tkey)
                    278: char           *c_name;
                    279: DESC           *c_desc;
                    280: char           *key;
                    281: char           *relid;
                    282: int            id_attno;
                    283: char           *relowner;
                    284: int            own_attno;
                    285: int            type;
                    286: struct tree    *tkey;
                    287: {
                    288:        extern DESC     Treedes;
                    289:        char            realtype;
                    290: 
                    291: #      ifdef xZTR1
                    292:        if (tTf(43, 3))
                    293:                printf("i_cat(c_name \"%s\", relid %s id_attno %d relowner %s own_attno %d type %d)\n",
                    294:                c_name, relid, id_attno, relowner, own_attno, type);
                    295: #      endif
                    296: 
                    297:        realtype = type;
                    298:        opencatalog("tree", OR_WRITE);
                    299:        setkey(&Treedes, tkey, relid, TREERELID);
                    300:        setkey(&Treedes, tkey, relowner, TREEOWNER);
                    301:        setkey(&Treedes, tkey, &realtype, TREETYPE);
                    302:        opencatalog(c_name, OR_WRITE);
                    303:        clearkeys(c_desc);
                    304:        setkey(c_desc, key, relid, id_attno);
                    305:        setkey(c_desc, key, relowner, own_attno);
                    306: }
                    307: /*
                    308: **  DEL_ALL -- delete all constraints for a given relation
                    309: **
                    310: **     Deletes all constraints of a given type given by a constraint
                    311: **     catalog 'c_desc'. Note that Protection constraints 0 & 1, given
                    312: **     by relation.relstat field are not deleted here.
                    313: **
                    314: **     Parameters:
                    315: **             r_desc -- descriptor for relation to de-constrain (for
                    316: **                     r_relstat)
                    317: **             c_desc -- constraint catalog descriptor
                    318: **             key -- c_desc's key
                    319: **             tuple -- c_desc's tuple (needed because sizeof tuple is not
                    320: **                     known here, so must be allocated beforehand)
                    321: **             tkey -- tree key with TREERELID and TREERELOWNER setkeyed
                    322: **             bit -- bits in relstat to reset after deleting all constraints
                    323: **             tree_pred -- called with constraint tuple to determine
                    324: **                     wether a tree tuple is present or not (as can happen
                    325: **                     for protect catalog)
                    326: **             tree_field -- should return the treeid from tuple
                    327: **
                    328: **     Returns:
                    329: **             none
                    330: **
                    331: **     Side Effects:
                    332: **             tree and constraint catalog activity
                    333: **
                    334: **     Requires:
                    335: **             del_tree()
                    336: **             r_relstat()
                    337: **
                    338: **     Called By:
                    339: **             dest_????
                    340: **
                    341: **     Trace Flags:
                    342: **             43, 4
                    343: **
                    344: **     Syserrs:
                    345: **             bad find, get, delete, flush_rel
                    346: **
                    347: **     History:
                    348: **             1/10/79 -- (marc) written
                    349: */
                    350: 
                    351: del_all(r_desc, c_desc, key, tuple, tkey, bit, tree_pred, tree_field)
                    352: DESC           *r_desc;
                    353: DESC           *c_desc;
                    354: char           *key;
                    355: char           *tuple;
                    356: struct tree    *tkey;
                    357: int            bit;
                    358: int            (*tree_pred)();
                    359: int            (*tree_field)();
                    360: {
                    361:        TID             lotid, hitid;
                    362:        register int    i;
                    363: 
                    364: #      ifdef xZTR1
                    365:        if (tTf(43, 4))
                    366:                printf("del_all(bit=0%o)\n", bit);
                    367: #      endif
                    368: 
                    369:        if (i = find(c_desc, EXACTKEY, &lotid, &hitid, key))
                    370:                syserr("del_all: find %d", i);
                    371:        while (!(i = get(c_desc, &lotid, &hitid, tuple, TRUE)))
                    372:        {
                    373:                if (!kcompare(c_desc, tuple, key))
                    374:                {
                    375:                        /* for each constraint of for a relation */
                    376:                        if (i = delete(c_desc, &lotid))
                    377:                                syserr("del_all: delete %d", i);
                    378:                        /* for crash recovery */
                    379:                        if (i = flush_rel(c_desc, FALSE))
                    380:                                syserr("del_all: flush_rel %d", i);
                    381:                        /* if there is a tree tuple, destroy it */
                    382:                        if ((*tree_pred)(tuple))
                    383:                                del_tree(tkey, (*tree_field)(tuple));
                    384:                }
                    385:        }
                    386:        if (i != 1)
                    387:                syserr("del_all: get %d", i);
                    388:        /* turn off bit in relstat field */
                    389:        r_relstat(r_desc, bit, 0);
                    390: }
                    391: /*
                    392: **  DEL_INT -- delete from a constraint catalog a constraint
                    393: **
                    394: **     Parameters:
                    395: **             c_desc -- catalog descriptor
                    396: **             key -- catalog key
                    397: **             tuple -- catalog tuple (needed because tuple size unknown here)
                    398: **             tkey -- tree key with TREERELID and TREERELOWNER setkeyed
                    399: **             constid -- integer constraint id in string form
                    400: **             constattno -- attno of comstraint number in c_desc
                    401: **             tree_pred -- predicate on existence of tree tuple 
                    402: **             tree_field -- returns treeid from constrain tuple
                    403: **
                    404: **     Returns:
                    405: **             none
                    406: **
                    407: **     Side Effects:
                    408: **             constraint and tree catalog activity.
                    409: **             *constid set to 0 if constraint id exists.
                    410: **
                    411: **     Requires:
                    412: **             del_tree()
                    413: **
                    414: **     Called By:
                    415: **             dest_????
                    416: **
                    417: **     Trace Flags:
                    418: **             43, 5
                    419: **
                    420: **     Syserrs:
                    421: **             bad atoi (parser error), getequal, delete, flush_rel
                    422: **
                    423: **     History:
                    424: **             1/10/79 -- (marc) written
                    425: */
                    426: 
                    427: del_int(c_desc, key, tuple, tkey, constid, constattno, tree_pred, tree_field)
                    428: DESC           *c_desc;
                    429: char           *key;
                    430: char           *tuple;
                    431: struct tree    *tkey;
                    432: char           *constid;
                    433: int            constattno;
                    434: int            (*tree_pred)();
                    435: int            (*tree_field)();
                    436: {
                    437:        TID             tid;
                    438:        register int    i;
                    439:        short           constnum;
                    440: 
                    441: #      ifdef xZTR1
                    442:        if (tTf(43, 5))
                    443:                printf("del_int(constid=%s, constattno=%d)\n", 
                    444:                constid, constattno);
                    445: #      endif
                    446: 
                    447:        constnum = atoi(constid);
                    448:        setkey(c_desc, key, &constnum, constattno);
                    449:        if (!(i = getequal(c_desc, key, tuple, &tid)))
                    450:        {
                    451:                if (i = delete(c_desc, &tid))
                    452:                        syserr("del_int(%d) %d", constid, i);
                    453:                if ((*tree_pred)(tuple))
                    454:                        del_tree(tkey, (*tree_field)(tuple));
                    455:                *constid = '\0';
                    456:                return;
                    457:        }
                    458:        else if (i != 1)
                    459:                syserr("dest_int: getequal %d", i);
                    460:        /* bad constnum */
                    461: }
                    462: /*
                    463: **  DEST_TREE -- destroy a tree tuple with for a given treeid
                    464: **
                    465: **     Deletes all tuples from tree with 'treeid' and previously set
                    466: **     keys.
                    467: **
                    468: **     Parameters:
                    469: **             key -- tre key
                    470: **             treeid -- integer treeid
                    471: **
                    472: **     Returns:
                    473: **             none
                    474: **
                    475: **     Side Effects:
                    476: **             tree activity
                    477: **
                    478: **     Trace Flags:
                    479: **             43, 6
                    480: */
                    481: 
                    482: del_tree(key, treeid)
                    483: struct tree    *key;
                    484: int            treeid;
                    485: {
                    486:        struct tree     tuple;
                    487:        TID             lotid, hitid;
                    488:        register int    i;
                    489:        register int    flag;
                    490:        short           realid;
                    491:        extern DESC     Treedes;
                    492: 
                    493: #      ifdef xZTR1
                    494:        if (tTf(43, 6))
                    495:                printf("del_tree(treeid=%d)\n", treeid);
                    496: #      endif
                    497: 
                    498:        realid = treeid;
                    499:        setkey(&Treedes, key, &realid, TREEID);
                    500:        if (i = find(&Treedes, EXACTKEY, &lotid, &hitid, key))
                    501:                syserr("del_tree: bad find %d treeid %d", i, treeid);
                    502:        flag = 0;
                    503:        while (!(i = get(&Treedes, &lotid, &hitid, &tuple, TRUE)))
                    504:        {
                    505:                if (!kcompare(&Treedes, &tuple, key))
                    506:                {
                    507:                        if (i = delete(&Treedes, &lotid))
                    508:                                syserr("del_tree: delete treeid %d %d", treeid, i);
                    509:                        if (!flag)
                    510:                                flag++;
                    511:                }
                    512:        }
                    513:        if (i != 1)
                    514:                syserr("del_tree: bad get %d", i);
                    515:        if (!flag)
                    516:                syserr("del_tree: no tuples qualified treeid %d", treeid);
                    517:        if (i = flush_rel(&Treedes, FALSE))
                    518:                syserr("del_tree: flush_rel(&Treedes) %d", i);
                    519: }
                    520: /*
                    521: **  CHK_CONST -- check constraint catlg for tuples for a rel, and reset relatin.relstat
                    522: **
                    523: **     Parameters:
                    524: **             r_desc -- reon desc for de-constrained relation
                    525: **             c_desc -- catalog desc
                    526: **             key -- catalog key (here unknown size)
                    527: **             tuple -- " tuple space " " " " "
                    528: **             relid -- relation name
                    529: **             id_attno -- attno of relid
                    530: **             relowner -- relation owner
                    531: **             own_attno -- relowner attno
                    532: **             bit -- bits to reset in relstat if there are no constraints left
                    533: **
                    534: **     Returns:
                    535: **             none
                    536: **
                    537: **     Side Effects:
                    538: **             reads catalog, maybe changes relstat field of relation
                    539: **             relations's r_desc tuple
                    540: **
                    541: **     Trace Flags:
                    542: **             43, 7
                    543: */
                    544: 
                    545: chk_const(r_desc, c_desc, key, tuple, relid, id_attno, relowner, own_attno, bit)
                    546: DESC   *r_desc;
                    547: DESC   *c_desc;
                    548: char   *key;
                    549: char   *tuple;
                    550: char   *relid;
                    551: int    id_attno;
                    552: char   *relowner;
                    553: int    own_attno;
                    554: int    bit;
                    555: {
                    556:        TID             tid;
                    557:        register int    i;
                    558: 
                    559: 
                    560: #      ifdef xZTR1
                    561:        if (tTf(43, 7))
                    562:                printf("chk_const: relid %s id_attno %d relowner %s own_attno %d bit 0%o)\n",
                    563:                relid, id_attno, relowner, own_attno, bit);
                    564: #      endif
                    565: 
                    566:        clearkeys(c_desc);
                    567:        setkey(c_desc, key, relid, id_attno);
                    568:        setkey(c_desc, key, relowner, own_attno);
                    569:        if ((i = getequal(c_desc, key, tuple, &tid)) == 1)
                    570:                r_relstat(r_desc, bit, 0);
                    571:        else if (i < 0)
                    572:                syserr("chk_const: getequal %d", i);
                    573: }
                    574: /*
                    575: **  R_RELSTAT -- set or reset bits in the relation.relstat field
                    576: **
                    577: **     Does the above for relation described by desc.
                    578: **
                    579: **     Parameters:
                    580: **             d -- relation to have relation.relstat field changed
                    581: **             bit -- bits to set or reset
                    582: **             action -- 0 reset, 1 set
                    583: **
                    584: **     Returns:
                    585: **             none
                    586: **
                    587: **     Side Effects:
                    588: **             relation is opened for READ/WRITE, relstat changed
                    589: **
                    590: **     Trace Flags:
                    591: **             43, 8
                    592: */
                    593: 
                    594: 
                    595: r_relstat(d, bit, action)
                    596: register DESC  *d;
                    597: int            bit;
                    598: int            action;
                    599: {
                    600:        struct relation tuple, key;
                    601:        TID             tid;
                    602:        register int    i;
                    603:        extern DESC     Reldes;
                    604: 
                    605: #      ifdef xZTR1
                    606:        if (tTf(43, 8))
                    607:                printf("r_relstat(bit=0%o, action %d)\n",
                    608:                bit, action);
                    609: #      endif
                    610: 
                    611:        opencatalog("relation", OR_WRITE);
                    612:        clearkeys(&Reldes);
                    613:        setkey(&Reldes, &key, d->reldum.relid, RELID);
                    614:        setkey(&Reldes, &key, d->reldum.relowner, RELOWNER);
                    615:        if (i = getequal(&Reldes, &key, &tuple, &tid))
                    616:                syserr("r_relstat: getequal %s, %s, %d", d->reldum.relid,
                    617:                d->reldum.relowner, i);
                    618:        if (action)
                    619:        {
                    620:                if (tuple.relstat == (i = tuple.relstat | bit))
                    621:                        return;
                    622:                tuple.relstat = i;
                    623:        }
                    624:        else
                    625:        {
                    626:                if (tuple.relstat == (i = tuple.relstat & ~bit))
                    627:                        return;
                    628:                tuple.relstat = i;
                    629:        }
                    630:        if ((i = replace(&Reldes, &tid, &tuple, 0)) < 0 || i == 2)
                    631:                syserr("r_relstat: replace %d", i);
                    632:        if (i = flush_rel(&Reldes, FALSE))
                    633:                syserr("r_relstat: flush_rel(&Reldes) %d", i);
                    634: }
                    635: /*
                    636: **  TREE_CONST -- True predicate
                    637: **
                    638: **     Called indirectly by routines wishing to know if
                    639: **     a integrity constraint has an associated tree tuple.
                    640: **     As this is always the case, returns TRUE always.
                    641: **
                    642: **     Parameters:
                    643: **             i -- integrity tuple
                    644: **
                    645: **     Returns:
                    646: **             TRUE
                    647: **
                    648: **     Side Effects:
                    649: **             none
                    650: **
                    651: **     Trace Flags:
                    652: **             43, 9
                    653: */
                    654: 
                    655: tree_const(i)
                    656: struct integrity       *i;
                    657: {
                    658: #      ifdef xZTR1
                    659:        if (tTf(43, 9))
                    660:                printf("tree_const()\n");
                    661: #      endif
                    662: 
                    663:        return (TRUE);
                    664: }
                    665: /*
                    666: **  TREE_PROT -- Protection tuple tree predicate
                    667: **
                    668: **     Called indirectly by routines wishing to know if
                    669: **     a protection constraint has an associated tree tuple.
                    670: **
                    671: **     Parameters:
                    672: **             p -- protect tuple
                    673: **
                    674: **     Returns:
                    675: **             TRUE -- if p->protree != -1
                    676: **             FLASE -- otherwise
                    677: **
                    678: **     Side Effects:
                    679: **             none
                    680: **
                    681: **     Trace Flags:
                    682: **             43, 9
                    683: */
                    684: 
                    685: tree_prot(p)
                    686: struct protect *p;
                    687: {
                    688: #      ifdef xZTR1
                    689:        if (tTf(43, 9))
                    690:                printf("tree_prot(p->protree=%d)\n", p->protree);
                    691: #      endif
                    692: 
                    693:        if (p->protree == -1)
                    694:                return (FALSE);
                    695:        else
                    696:                return (TRUE);
                    697: }
                    698: /*
                    699: **  PROT_PROTREE -- get protree field of a protection tuple
                    700: **
                    701: **     Parameters:
                    702: **             p -- protect tuple
                    703: **
                    704: **     Returns:
                    705: **             p->protree
                    706: **
                    707: **     Side Effects:
                    708: **             none
                    709: **
                    710: **     Trace Flags:
                    711: **             43, 9
                    712: */
                    713: 
                    714: prot_protree(p)
                    715: struct protect *p;
                    716: {
                    717: #      ifdef xZTR1
                    718:        if (tTf(43, 9))
                    719:                printf("prot_protree(protree=%d)\n", p->protree);
                    720: #      endif
                    721: 
                    722:        return (p->protree);
                    723: }
                    724: /*
                    725: **  INT_INTTREE -- get inttree field of a integrity tuple
                    726: **
                    727: **     Parameters:
                    728: **             i -- integrity tuple
                    729: **
                    730: **     Returns:
                    731: **             i->inttree
                    732: **
                    733: **     Side Effects:
                    734: **             none
                    735: **
                    736: **     Trace Flags:
                    737: **             43, 9
                    738: */
                    739: 
                    740: int_inttree(i)
                    741: struct integrity       *i;
                    742: {
                    743: #      ifdef xZTR1
                    744:        if (tTf(43, 9))
                    745:                printf("int_inttree(inttree=%d)\n", i->inttree);
                    746: #      endif
                    747: 
                    748:        return (i->inttree);
                    749: }

unix.superglobalmegacorp.com

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