1: # include <ingres.h> 2: # include <catalog.h> 3: # include <sccs.h> 4: 5: SCCSID(@(#)get_p_tid.c 8.2 1/15/85) 6: 7: /* 8: ** GET_P_TID -- Get the primary tid for a relation for locking 9: ** 10: ** Finds the correct tid for locking the relation. If the 11: ** relation is a primary relation, then the tid of the 12: ** relation is returned. 13: ** 14: ** If the relation is a secondary index then the tid of the 15: ** primary relation is returned. 16: ** 17: ** Parameters: 18: ** des - an open descriptor for the relation. 19: ** tidp - a pointer to a place to store the tid. 20: ** 21: ** Returns: 22: ** none 23: ** 24: ** Side Effects: 25: ** alters the value stored in "tidp", 26: ** may cause access to the indexes relation 27: ** 28: ** Called By: 29: ** modify 30: */ 31: 32: 33: 34: get_p_tid(d, tp) 35: register DESC *d; 36: register TID *tp; 37: { 38: register int i; 39: struct index indkey, itup; 40: DESC ides; 41: extern DESC Inddes; 42: 43: if (d->reldum.relindxd < 0) 44: { 45: /* this is a secondary index. lock the primary rel */ 46: opencatalog("indexes", OR_READ); 47: setkey(&Inddes, &indkey, d->reldum.relowner, IOWNERP); 48: setkey(&Inddes, &indkey, d->reldum.relid, IRELIDI); 49: if (getequal(&Inddes, &indkey, &itup, tp)) 50: syserr("No prim for %.14s", d->reldum.relid); 51: 52: if (i = openr(&ides, OR_RELTID, itup.irelidp)) 53: syserr("openr prim %d,%.14s", i, itup.irelidp); 54: 55: bmove(&ides.reltid, tp, sizeof (*tp)); 56: } 57: else 58: bmove(&d->reltid, tp, sizeof (*tp)); 59: }