2.11BSD/ingres/source/decomp/rangetable.c
# include "../ingres.h"
# include "decomp.h"
/*
** Allocation of range table.
** The size of the range table for decomp is
** MAXRANGE plus 2; 1 for a free aggregate slot and 1 for
** a free secondary index slot.
*/
struct rang_tab Rangev[MAXRANGE+2]; /* global range table with extra slot for FREEVAR and SECINDXVAR */
initrange()
{
register struct rang_tab *rt;
for (rt = Rangev; rt <= &Rangev[MAXRANGE+1]; rt++)
rt->relnum = -1;
}
savrang(locrang, var)
int locrang[];
int var;
/*
** Save the entry for var in the range table.
*/
{
register int i;
i = var;
locrang[i] = Rangev[i].relnum;
}
rstrang(locrang, var)
int locrang[];
int var;
/*
** Restore the entry for var from the local range
** table locrang.
*/
{
register int i;
i = var;
Rangev[i].relnum = locrang[i];
}
new_range(var, relnum)
int var;
int relnum;
/*
** Update the range name. It is up to
** the calling routine to openr the new rel.
*/
{
register int i, old;
i = var;
old = Rangev[i].relnum;
Rangev[i].relnum = relnum;
return (old);
}
newquery(locrang)
int locrang[];
/*
** Make a copy of the current range table.
*/
{
register struct rang_tab *rp;
register int *ip, i;
ip = locrang;
rp = Rangev;
for (i = 0; i < MAXRANGE; i++)
*ip++ = (rp++)->relnum;
}
endquery(locrang, reopen)
int locrang[];
int reopen;
/*
** Check the range table to see if any
** relations changed since the last call
** to newquery. If so, they were caused
** by reformat. Restore back the orig relation
** Reopen it if reopen == TRUE.
*/
{
register struct rang_tab *rp;
register int *ip, i;
int old;
rp = Rangev;
ip = locrang;
initp();
for (i = 0; i < MAXRANGE; i++)
{
if (rp->relnum != *ip)
{
# ifdef xDTR1
if (tTf(15, -1))
printf("reformat or reduct changed var %d (%d,%d)\n", i, *ip, rp->relnum);
# endif
old = new_range(i, *ip);
dstr_mark(old);
if (reopen)
openr1(i);
}
ip++;
rp++;
}
dstr_flush(0);
}
char *rangename(var)
int var;
/*
** Return the name of the variable "var"
** in the range table
*/
{
char *rnum_convert();
return (rnum_convert(Rangev[var].relnum));
}