|
|
researchv10 Dan Cross
/*
* Query optimization module
*/
#include <malloc.h>
#include <string.h>
typedef struct {
char *tag;
short count;
short copy[512];
} opt_t;
extern char *pq_open();
char *
opt_open(argv)
char *argv[];
{
opt_t *opt = (opt_t *) malloc(sizeof (opt_t));
if ((opt->tag = pq_open(argv)) == 0) {
free((char *) opt);
return 0;
}
opt->count = -1;
return (char *) opt;
}
opt_close(opt)
opt_t *opt;
{
int rv = pq_close(opt->tag);
free((char *) opt);
return rv;
}
opt_read(opt, argv)
register opt_t *opt;
register char *argv[];
{
register int rv, i;
if ((rv = pq_read(opt->tag, argv)) > 0)
for (i = opt->count; i >= 0; i--)
argv[i] = argv[opt->copy[i]];
return rv;
}
opt_write(opt, argv)
register opt_t *opt;
register char *argv[];
{
register int i, j, k = 0;
char *vec[512];
for (i = 0; argv[i]; i++) {
for (j = 0; j < k; j++)
if (eqattr(argv[i], vec[j])) {
if (!strchr(vec[j], '='))
vec[j] = argv[i];
break;
}
if (j == k)
vec[k++] = argv[i];
opt->copy[i] = j;
}
opt->copy[i] = k;
opt->count = i;
vec[k] = 0;
return pq_write(opt->tag, vec);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.