* Sebastian Hammer, Adam Dickmeiss
*
* $Log: zrpn.c,v $
- * Revision 1.53 1996-06-26 09:21:43 adam
+ * Revision 1.54 1996-10-29 14:09:52 adam
+ * Use of cisam system - enabled if setting isamc is 1.
+ *
+ * Revision 1.53 1996/06/26 09:21:43 adam
* Bug fix: local attribute set wasn't obeyed in scan.
*
* Revision 1.52 1996/06/17 14:26:20 adam
#include <charmap.h>
#include <rsisam.h>
+#include <rsisamc.h>
#include <rstemp.h>
#include <rsnull.h>
#include <rsbool.h>
Z_AttributesPlusTerm *zapt;
} AttrType;
+static RSET rset_create_isamx (ZServerInfo *zi, int pos)
+{
+ if (zi->isam)
+ {
+ rset_isam_parms parms;
+
+ parms.pos = pos;
+ parms.is = zi->isam;
+ return rset_create (rset_kind_isam, &parms);
+ }
+ if (zi->isamc)
+ {
+ rset_isamc_parms parms;
+
+ parms.pos = pos;
+ parms.is = zi->isamc;
+ return rset_create (rset_kind_isamc, &parms);
+ }
+ return rset_create (rset_kind_null, NULL);
+}
+
static int attr_find (AttrType *src, oid_value *attributeSetP)
{
while (src->major < src->zapt->num_attributes)
static RSET rset_trunc (ISAM isam, ISAM_P *isam_p, int no)
{
-
+ assert (isam);
qsort (isam_p, no, sizeof(*isam_p), isam_trunc_cmp);
return rset_trunc_r (isam, isam_p, 0, no, 100);
}
return 0;
}
logf (LOG_DEBUG, "dict_lookup_grep: %s", term_dict);
- r = dict_lookup_grep (zi->wordDict, term_dict, 0, grep_info, max_pos,
+ r = dict_lookup_grep (zi->dict, term_dict, 0, grep_info, max_pos,
0, grep_handle);
if (r)
logf (LOG_WARN, "dict_lookup_grep fail, rel=gt: %d", r);
for (i = 0; term_sub[i]; i++)
verbatim_char (term_sub[i], &j, term_dict);
strcpy (term_dict+j, ")");
- r = dict_lookup_grep (zi->wordDict, term_dict, 0, grep_info,
+ r = dict_lookup_grep (zi->dict, term_dict, 0, grep_info,
&max_pos, 0, grep_handle);
if (r)
logf (LOG_WARN, "dict_lookup_grep err, trunc=none:%d", r);
for (i = 0; term_sub[i]; i++)
verbatim_char (term_sub[i], &j, term_dict);
strcpy (term_dict+j, ".*)");
- dict_lookup_grep (zi->wordDict, term_dict, 0, grep_info,
+ dict_lookup_grep (zi->dict, term_dict, 0, grep_info,
&max_pos, 0, grep_handle);
break;
case 2: /* left truncation */
else
verbatim_char (term_sub[i], &j, term_dict);
strcpy (term_dict+j, ")");
- r = dict_lookup_grep (zi->wordDict, term_dict, 0, grep_info,
+ r = dict_lookup_grep (zi->dict, term_dict, 0, grep_info,
&max_pos, 0, grep_handle);
if (r)
logf (LOG_WARN, "dict_lookup_grep err, trunc=#: %d",
break;
case 102: /* regular expression */
sprintf (term_dict + j, "(%s)", term_sub);
- r = dict_lookup_grep (zi->wordDict, term_dict, 0, grep_info,
+ r = dict_lookup_grep (zi->dict, term_dict, 0, grep_info,
&max_pos, 0, grep_handle);
if (r)
logf (LOG_WARN, "dict_lookup_grep err, trunc=regular: %d",
cp += 2;
}
sprintf (term_dict + j, "(%s)", cp);
- r = dict_lookup_grep (zi->wordDict, term_dict, r, grep_info,
+ r = dict_lookup_grep (zi->dict, term_dict, r, grep_info,
&max_pos, j, grep_handle);
if (r)
logf (LOG_WARN, "dict_lookup_grep err, trunc=eregular: %d",
parms.key_size = sizeof(struct it_key);
parms.max_rec = 100;
parms.cmp = key_compare;
- parms.is = zi->wordIsam;
+ parms.is = zi->isam;
parms.no_terms = 0;
if (zapt->term->which != Z_Term_general)
oid_value attributeSet,
int num_bases, char **basenames)
{
- rset_isam_parms parms;
char termz[IT_MAX_WORD+1];
struct grep_info grep_info;
RSET result;
result = rset_create (rset_kind_null, NULL);
else if (grep_info.isam_p_indx == 1)
{
- parms.is = zi->wordIsam;
- parms.pos = *grep_info.isam_p_buf;
- result = rset_create (rset_kind_isam, &parms);
+ result = rset_create_isamx (zi, *grep_info.isam_p_buf);
}
else
- result = rset_trunc (zi->wordIsam, grep_info.isam_p_buf,
+ result = rset_trunc (zi->isam, grep_info.isam_p_buf,
grep_info.isam_p_indx);
#ifdef TERM_COUNT
xfree(grep_info.term_no);
if (grep_info.isam_p_indx == 0)
rset[rset_no] = rset_create (rset_kind_null, NULL);
else if (grep_info.isam_p_indx > 1)
- rset[rset_no] = rset_trunc (zi->wordIsam,
+ rset[rset_no] = rset_trunc (zi->isam,
grep_info.isam_p_buf,
grep_info.isam_p_indx);
else
{
- rset_isam_parms parms;
-
- parms.is = zi->wordIsam;
- parms.pos = *grep_info.isam_p_buf;
- rset[rset_no] = rset_create (rset_kind_isam, &parms);
+ rset[rset_no] = rset_create_isamx (zi, *grep_info.isam_p_buf);
}
assert (rset[rset_no]);
if (++rset_no >= sizeof(rset)/sizeof(*rset))
rfd = rset_open (*r, RSETF_READ|RSETF_SORT_SYSNO);
while (rset_read (*r, rfd, &key))
{
+ logf (LOG_DEBUG, "sysno=%-7d seqno=%d", key.sysno, key.seqno);
if (key.sysno != psysno)
{
rset_write (w, wfd, &key);
oident *attrset;
oid_value attributeSet;
- dict_grep_cmap (zi->wordDict, map_chrs_input);
+ dict_grep_cmap (zi->dict, map_chrs_input);
zlog_rpn (rpn);
zi->errCode = 0;
trans_scan_term (zi, zapt, termz+prefix_len);
- dict_scan (zi->wordDict, termz, &before_tmp, &after_tmp, scan_info,
+ dict_scan (zi->dict, termz, &before_tmp, &after_tmp, scan_info,
scan_handle);
}
glist = odr_malloc (zi->odr, (before+after)*sizeof(*glist));
const char *mterm = NULL;
const char *tst;
RSET rset;
- rset_isam_parms parms;
for (j = 0; j < ord_no; j++)
{
if (j0 == -1)
break;
scan_term_untrans (zi->odr, &glist[i+before].term, mterm);
- parms.is = zi->wordIsam;
- parms.pos = scan_info_array[j0].list[ptr[j0]].isam_p;
- rset = rset_create (rset_kind_isam, &parms);
+ rset =
+ rset_create_isamx (zi, scan_info_array[j0].list[ptr[j0]].isam_p);
ptr[j0]++;
for (j = j0+1; j<ord_no; j++)
(tst=scan_info_array[j].list[ptr[j]].term) &&
!strcmp (tst, mterm))
{
- rset_isam_parms parms;
rset_bool_parms bool_parms;
RSET rset2;
- parms.is = zi->wordIsam;
- parms.pos = scan_info_array[j].list[ptr[j]].isam_p;
- rset2 = rset_create (rset_kind_isam, &parms);
+ rset2 = rset_create_isamx
+ (zi, scan_info_array[j].list[ptr[j]].isam_p);
bool_parms.key_size = sizeof(struct it_key);
bool_parms.cmp = key_compare;
const char *mterm = NULL;
const char *tst;
RSET rset;
- rset_isam_parms parms;
for (j = 0; j <ord_no; j++)
{
scan_term_untrans (zi->odr, &glist[before-1-i].term, mterm);
- parms.is = zi->wordIsam;
- parms.pos = scan_info_array[j0].list[before-1-ptr[j0]].isam_p;
- rset = rset_create (rset_kind_isam, &parms);
+ rset = rset_create_isamx
+ (zi, scan_info_array[j0].list[before-1-ptr[j0]].isam_p);
ptr[j0]++;
(tst=scan_info_array[j].list[before-1-ptr[j]].term) &&
!strcmp (tst, mterm))
{
- rset_isam_parms parms;
rset_bool_parms bool_parms;
RSET rset2;
- parms.is = zi->wordIsam;
- parms.pos = scan_info_array[j].list[before-1-ptr[j]].isam_p;
- rset2 = rset_create (rset_kind_isam, &parms);
+ rset2 = rset_create_isamx (zi,
+ scan_info_array[j].list[before-1-ptr[j]].isam_p);
bool_parms.key_size = sizeof(struct it_key);
bool_parms.cmp = key_compare;