home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / iutil / get.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-01-23  |  2.1 KB  |  102 lines

  1. # include    <ingres.h>
  2. # include    <aux.h>
  3. # include    <access.h>
  4. # include    <sccs.h>
  5.  
  6. SCCSID(@(#)get.c    8.1    12/31/84)
  7.  
  8. /*
  9. **  GET - get a single tuple
  10. **
  11. **    Get either gets the next sequencial tuple after
  12. **    "tid" or else gets the tuple specified by tid.
  13. **
  14. **    If getnxt == TRUE, then tid is incremented to the next
  15. **    tuple after tid. If there are no more, then get returns
  16. **    1. Otherwise get returns 0 and "tid" is set to the tid of
  17. **    the returned tuple.
  18. **
  19. **    Under getnxt mode, the previous page is reset before
  20. **    the next page is read. This is done to prevent the previous
  21. **    page from hanging around in the am's buffers when we "know"
  22. **    that it will not be referenced again.
  23. **
  24. **    If getnxt == FALSE then the tuple specified by tid is
  25. **    returned. If the tuple was deleted previously,
  26. **    get retuns 2 else get returns 0.
  27. **
  28. **    If getnxt is true, limtid holds the the page number
  29. **    of the first page past the end point. Limtid and the
  30. **    initial value of tid are set by calls to FIND.
  31. **
  32. **    returns:
  33. **        <0  fatal error
  34. **        0   success
  35. **        1   end of scan (getnxt=TRUE only)
  36. **        2   tuple deleted (getnxt=FALSE only)
  37. */
  38.  
  39.  
  40. get(d, tid, limtid, tuple, getnxt)
  41. register DESC    *d;
  42. register TID    *tid;
  43. TID        *limtid;
  44. int        getnxt;
  45. char        *tuple;
  46. {
  47.     register int    i;
  48.     long        pageid, lpageid;
  49.  
  50. #    ifdef xATR1
  51.     if (tTf(23, 0))
  52.     {
  53.         printf("get: %.14s,", d->reldum.relid);
  54.         dumptid(tid);
  55.         printf("get: lim");
  56.         dumptid(limtid);
  57.     }
  58. #    endif
  59.     if (get_page(d, tid))
  60.     {
  61.         return (-1);
  62.     }
  63.     if (getnxt)
  64.     {
  65.         pluck_page(limtid, &lpageid);
  66.         do
  67.         {
  68.             while (((++(tid->line_id)) & I1MASK) >= Acc_head->nxtlino)
  69.             {
  70.                 tid->line_id = -1;
  71.                 pageid = Acc_head->ovflopg;
  72.                 stuff_page(tid, &pageid);
  73.                 if (pageid == 0)
  74.                 {
  75.                     pageid = Acc_head->mainpg;
  76.                     stuff_page(tid, &pageid);
  77.                     if (pageid == 0 || pageid == lpageid + 1)
  78.                         return (1);
  79.                 }
  80.                 if (i = resetacc(Acc_head))
  81.                     return (i);
  82.                 if (i = get_page(d, tid))
  83.                     return (i);
  84.             }
  85.         } while (!Acc_head->linetab[-(tid->line_id & I1MASK)]);
  86.     }
  87.     else
  88.     {
  89.         if (i = invalid(tid))
  90.             return (i);
  91.     }
  92.     get_tuple(d, tid, tuple);
  93. #    ifdef xATR2
  94.     if (tTf(23, 1))
  95.     {
  96.         printf("get: ");
  97.         printup(d, tuple);
  98.     }
  99. #    endif
  100.     return (0);
  101. }
  102.