103 lines
1.6 KiB
C
103 lines
1.6 KiB
C
# include "AA_liba.h"
|
|
|
|
AAdelete(p, rel, tid)
|
|
register DESCXX *p;
|
|
register char *rel;
|
|
register long *tid;
|
|
{
|
|
# ifdef AMX_TRACE
|
|
AAtTfp(5, 0,
|
|
# ifdef MSDOS
|
|
"delete rel\t`%.10s'\n",
|
|
# else
|
|
"delete rel\t`%.14s'\n",
|
|
# endif
|
|
rel);
|
|
# endif
|
|
|
|
errno = 0;
|
|
|
|
if (!AA_DESC)
|
|
AAerror(111, "delete");
|
|
|
|
if (!p)
|
|
AAerror(106, rel);
|
|
|
|
if (!AA_NOLOCKS && !(p->xx_excl & M_EXCL))
|
|
AAerror(21, rel);
|
|
|
|
AA_on();
|
|
|
|
AA_TID = *tid;
|
|
AA = AAam_delete(p, tid);
|
|
|
|
# ifdef AM_TRACE
|
|
AAtTfp(5, 14, "##AM_DELETE\t%d\n", AA);
|
|
if (AAtTfp(5, 15, "##\t\told"))
|
|
AAdumptid(tid);
|
|
# endif
|
|
|
|
if (AA < 0)
|
|
AAerror(3, rel);
|
|
|
|
if (ctoi(p->xx_desc.reldum.relindxd) == SECBASE)
|
|
{
|
|
AAp_desc = p;
|
|
AAold_tuple = AA_STUP;
|
|
while (p = p->xx_index)
|
|
AAsecdelete(p);
|
|
}
|
|
|
|
AA_off();
|
|
}
|
|
|
|
|
|
AAsecdelete(i)
|
|
register DESCXX *i;
|
|
{
|
|
char itup[MAXTUP];
|
|
char ikey[MAXTUP];
|
|
long tid;
|
|
|
|
# ifdef AMX_TRACE
|
|
AAtTfp(6, 0,
|
|
# ifdef MSDOS
|
|
"delete index\t`%.10s'\n",
|
|
# else
|
|
"delete index\t`%.14s'\n",
|
|
# endif
|
|
i->xx_desc.reldum.relid);
|
|
# endif
|
|
|
|
errno = 0;
|
|
AAsectup(ikey, i->xx_indom, &AA_TID);
|
|
/* set all keys on index descriptor */
|
|
AAbmove(AA_SET_ALL_KEYS, &i->xx_desc.relgiven[1], MAXKEYS + 1);
|
|
|
|
AA = AAgetequal(i, ikey, itup, &tid);
|
|
|
|
# ifdef AM_TRACE
|
|
AAtTfp(6, 6, "##AM_GETEQUAL\t%d\n", AA);
|
|
if (AAtTfp(6, 7, "##\t\told"))
|
|
AAdumptid(&tid);
|
|
if (AAtTfp(6, 8, "##\t\toldkey"))
|
|
AAprkey(i, ikey);
|
|
if (AAtTfp(6, 9, "##\t\tnewtup"))
|
|
AAprtup(i, itup);
|
|
# endif
|
|
|
|
if (AA)
|
|
AAerror(4, i->xx_desc.reldum.relid);
|
|
|
|
AA = AAam_delete(i, &tid);
|
|
|
|
# ifdef AM_TRACE
|
|
AAtTfp(6, 14, "##AM_DELETE\t%d\n", AA);
|
|
if (AAtTfp(6, 15, "##\t\told"))
|
|
AAdumptid(&tid);
|
|
# endif
|
|
|
|
if (AA < 0)
|
|
AAerror(3, i->xx_desc.reldum.relid);
|
|
}
|