ING_DB
This commit is contained in:
parent
477da9f9ca
commit
bb6068c47c
|
|
@ -0,0 +1,162 @@
|
||||||
|
# include <stdio.h>
|
||||||
|
# include "gen.h"
|
||||||
|
# include "../h/dbs.h"
|
||||||
|
# include "../h/access.h"
|
||||||
|
# include "../h/aux.h"
|
||||||
|
# include "../h/lock.h"
|
||||||
|
|
||||||
|
int AAccerror; /* error no for fatal errors */
|
||||||
|
long AAccuread; /* read counter for data pages */
|
||||||
|
long AAccuwrite; /* write counter for data pages */
|
||||||
|
long AAccusread; /* read counter for catalog pages */
|
||||||
|
|
||||||
|
AAgetpage(d, tid)
|
||||||
|
register DESC *d;
|
||||||
|
struct tup_id *tid;
|
||||||
|
{
|
||||||
|
register int i;
|
||||||
|
register ACCBUF *b;
|
||||||
|
register ACCBUF *b1;
|
||||||
|
register int lk; /* lock condition*/
|
||||||
|
long pageid;
|
||||||
|
extern long lseek();
|
||||||
|
extern ACCBUF *AAchoose_buf();
|
||||||
|
|
||||||
|
# ifdef xATR3
|
||||||
|
if (AAtTfp(83, 0, "GET_PAGE: %.14s,", d->reldum.relid))
|
||||||
|
AAdumptid(tid);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
AApluck_page(tid, &pageid);
|
||||||
|
if (!(b = AAchoose_buf(d, pageid)))
|
||||||
|
return (-1);
|
||||||
|
AAtop_acc(b);
|
||||||
|
lk = AAcclock && (d->relopn < 0);
|
||||||
|
if ((b->thispage != pageid) || (lk && !(b->bufstatus & BUF_LOCKED)))
|
||||||
|
{
|
||||||
|
if (i = AApageflush(b))
|
||||||
|
return (i);
|
||||||
|
# ifdef xATR1
|
||||||
|
if (AAtTfp(83, 1, "GET_PAGE: read pg %ld rel", pageid))
|
||||||
|
AAdumptid(&d->reltid);
|
||||||
|
# endif
|
||||||
|
b->thispage = pageid;
|
||||||
|
if (lk)
|
||||||
|
{
|
||||||
|
for (b1 = AAcc_head; b1; b1 = b1->modf)
|
||||||
|
if (b1->bufstatus & BUF_LOCKED)
|
||||||
|
AApageflush(b1);
|
||||||
|
if (AAsetpgl(b) < 0)
|
||||||
|
AAsyserr(10018);
|
||||||
|
}
|
||||||
|
# ifdef xATM
|
||||||
|
if (AAtTf(76, 1))
|
||||||
|
timtrace(17, &pageid, &d->reltid);
|
||||||
|
# endif
|
||||||
|
if (lseek(d->relfp, pageid * AApgsize, 0) < 0L)
|
||||||
|
{
|
||||||
|
i = AMSEEK_ERR;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
if (read(d->relfp, b, AApgsize) != AApgsize)
|
||||||
|
{
|
||||||
|
i = AMREAD_ERR;
|
||||||
|
error:
|
||||||
|
AAresetacc(b);
|
||||||
|
return (AAam_error(i));
|
||||||
|
}
|
||||||
|
AAccuread++;
|
||||||
|
if (d->reldum.relstat & S_CATALOG)
|
||||||
|
AAccusread++;
|
||||||
|
# ifdef xATM
|
||||||
|
if (AAtTf(76, 1))
|
||||||
|
timtrace(18, &pageid, &d->reltid);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AApageflush(b)
|
||||||
|
register ACCBUF *b;
|
||||||
|
{
|
||||||
|
register ACCBUF *allbufs;
|
||||||
|
register int err;
|
||||||
|
extern long lseek();
|
||||||
|
|
||||||
|
# ifdef xATR3
|
||||||
|
if (AAtTfp(84, 0, "PAGEFLUSH: buf 0%o rel", b))
|
||||||
|
if (b)
|
||||||
|
AAdumptid(&b->rel_tupid);
|
||||||
|
else
|
||||||
|
putchar('\n');
|
||||||
|
# endif
|
||||||
|
|
||||||
|
allbufs = b? (ACCBUF *) 0: (b = AAcc_head);
|
||||||
|
err = 0;
|
||||||
|
if (!b)
|
||||||
|
return (err);
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (b->bufstatus & BUF_DIRTY)
|
||||||
|
{
|
||||||
|
# ifdef xATR1
|
||||||
|
if (AAtTfp(84, 1, "PAGEFLUSH: write pg %ld stat 0%o rel",
|
||||||
|
b->thispage, b->bufstatus))
|
||||||
|
AAdumptid(&b->rel_tupid);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef xATM
|
||||||
|
if (AAtTf(76, 1))
|
||||||
|
timtrace(19, &b->thispage, &b->rel_tupid);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* temp debug step */
|
||||||
|
if (b->mainpg > 32767)
|
||||||
|
{
|
||||||
|
/* "PAGEFLUSH: mainpg %ld" */
|
||||||
|
AAsyserr(10019, b->mainpg, b->rel_tupid, b->thispage);
|
||||||
|
}
|
||||||
|
b->bufstatus &= ~BUF_DIRTY;
|
||||||
|
if (lseek(b->filedesc, b->thispage * AApgsize, 0) < 0L)
|
||||||
|
{
|
||||||
|
err = AMSEEK_ERR;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
if (write(b->filedesc, b, AApgsize) != AApgsize)
|
||||||
|
{
|
||||||
|
err = AMWRITE_ERR;
|
||||||
|
error:
|
||||||
|
AAresetacc(b);
|
||||||
|
}
|
||||||
|
AAccuwrite++;
|
||||||
|
|
||||||
|
# ifdef xATM
|
||||||
|
if (AAtTf(76, 1))
|
||||||
|
timtrace(20, &b->thispage, &b->rel_tupid);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
if (b->bufstatus & BUF_LOCKED)
|
||||||
|
AAunlpg(b);
|
||||||
|
|
||||||
|
} while (allbufs && (b = b->modf));
|
||||||
|
|
||||||
|
return (AAam_error(err));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
** ACC_ERR -- set global error indicator "AAccerror"
|
||||||
|
*/
|
||||||
|
AAam_error(errnum)
|
||||||
|
register int errnum;
|
||||||
|
{
|
||||||
|
AAccerror = errnum;
|
||||||
|
# ifdef xATR1
|
||||||
|
if (errnum)
|
||||||
|
AAtTfp(85, 0, "ACC_ERR: %d\n", AAccerror);
|
||||||
|
# endif
|
||||||
|
return (errnum);
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue