X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=index%2Fzrpn.c;h=1099c27f1a30e67af7f36bcd01d1993080a19b2b;hb=45554249f7785e31125a062dc410a93ef693f574;hp=37230b2f2ea53e00e20be0f3b9f7887defca5f06;hpb=4fc8ef20b8a1d0ceb0d414c64d315437c881a471;p=idzebra-moved-to-github.git diff --git a/index/zrpn.c b/index/zrpn.c index 37230b2..1099c27 100644 --- a/index/zrpn.c +++ b/index/zrpn.c @@ -4,7 +4,31 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: zrpn.c,v $ - * Revision 1.46 1996-05-15 11:57:56 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 + * Function gen_regular_rel changed to handle negative numbers. + * + * Revision 1.51 1996/06/11 10:54:15 quinn + * Relevance work + * + * Revision 1.50 1996/06/07 08:51:53 adam + * Bug fix: Character mapping was broken (introducued by last revision). + * + * Revision 1.49 1996/06/04 10:18:11 adam + * Search/scan uses character mapping module. + * + * Revision 1.48 1996/05/28 15:15:01 adam + * Bug fix: Didn't handle unknown database correctly. + * + * Revision 1.47 1996/05/15 18:36:28 adam + * Function trans_term transforms unsearchable characters to blanks. + * + * Revision 1.46 1996/05/15 11:57:56 adam * Fixed bug introduced by set/field mapping in search operations. * * Revision 1.45 1996/05/14 11:34:00 adam @@ -169,26 +193,14 @@ #include "zserver.h" #include "attribute.h" +#include #include +#include #include #include #include #include -int index_word_prefix_map (char *string, oid_value attrSet, int attrUse, - char *basename) -{ - attent *attp; - - logf (LOG_DEBUG, "oid_value attrSet = %d, attrUse = %d", attrSet, attrUse); - attp = att_getentbyatt (attrSet, attrUse); - if (!attp) - return -1; - logf (LOG_DEBUG, "ord=%d", attp->attset_ordinal); - return index_word_prefix (string, attp->attset_ordinal, - attp->local_attributes->local, basename); -} - typedef struct { int type; int major; @@ -196,6 +208,27 @@ typedef struct { 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) @@ -487,22 +520,30 @@ static int isam_trunc_cmp (const void *p1, const void *p2) 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); } -struct grep_info { - ISAM_P *isam_p_buf; - int isam_p_size; - int isam_p_indx; -}; +#define TERM_COUNT + +struct grep_info { +#ifdef TERM_COUNT + int *term_no; +#endif + ISAM_P *isam_p_buf; + int isam_p_size; + int isam_p_indx; +}; static void add_isam_p (const char *info, struct grep_info *p) { if (p->isam_p_indx == p->isam_p_size) { ISAM_P *new_isam_p_buf; +#ifdef TERM_COUNT + int *new_term_no; +#endif p->isam_p_size = 2*p->isam_p_size + 100; new_isam_p_buf = xmalloc (sizeof(*new_isam_p_buf) * @@ -514,6 +555,18 @@ static void add_isam_p (const char *info, struct grep_info *p) xfree (p->isam_p_buf); } p->isam_p_buf = new_isam_p_buf; + +#ifdef TERM_COUNT + new_term_no = xmalloc (sizeof(*new_term_no) * + p->isam_p_size); + if (p->term_no) + { + memcpy (new_term_no, p->isam_p_buf, + p->isam_p_indx * sizeof(*p->term_no)); + xfree (p->term_no); + } + p->term_no = new_term_no; +#endif } assert (*info == sizeof(*p->isam_p_buf)); memcpy (p->isam_p_buf + p->isam_p_indx, info+1, sizeof(*p->isam_p_buf)); @@ -522,19 +575,45 @@ static void add_isam_p (const char *info, struct grep_info *p) static int grep_handle (char *name, const char *info, void *p) { - logf (LOG_DEBUG, "dict name: %s", name); add_isam_p (info, p); return 0; } +/* gen_regular_rel - generate regular expression from relation + * val: border value (inclusive) + * islt: 1 if <=; 0 if >=. + */ static void gen_regular_rel (char *dst, int val, int islt) { - int dst_p = 1; + int dst_p; int w, d, i; int pos = 0; char numstr[20]; - *dst = '('; + logf (LOG_DEBUG, "gen_regular_rel. val=%d, islt=%d", val, islt); + if (val >= 0) + { + if (islt) + strcpy (dst, "(-[0-9]+|"); + else + strcpy (dst, "("); + } + else + { + if (!islt) + { + strcpy (dst, "([0-9]+|-"); + dst_p = strlen (dst); + islt = 1; + } + else + { + strcpy (dst, "(-"); + islt = 0; + } + val = -val; + } + dst_p = strlen (dst); sprintf (numstr, "%d", val); for (w = strlen(numstr); --w >= 0; pos++) { @@ -655,7 +734,7 @@ static int relational_term (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, 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); @@ -711,6 +790,7 @@ static int field_term (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, { zi->errCode = 109; /* Database unavailable */ zi->errString = basenames[base_no]; + return -1; } for (local_attr = attp->local_attributes; local_attr; local_attr = local_attr->next) @@ -725,20 +805,16 @@ static int field_term (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, term_dict[prefix_len++] = '|'; else term_dict[prefix_len++] = '('; - if ((ord >= 'A' && ord <= 'Z') || (ord >= 'a' && ord <= 'z')) - term_dict[prefix_len++] = ord; - else - { - term_dict[prefix_len++] = '\\'; - term_dict[prefix_len++] = ord; - } + term_dict[prefix_len++] = 1; + term_dict[prefix_len++] = ord; } if (!prefix_len) { zi->errCode = 114; return -1; } - term_dict[prefix_len++] = ')'; + term_dict[prefix_len++] = ')'; + term_dict[prefix_len++] = 1; term_dict[prefix_len++] = regType; term_dict[prefix_len] = '\0'; if (!relational_term (zi, zapt, term_sub, term_dict, @@ -755,7 +831,7 @@ static int field_term (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, 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); @@ -765,7 +841,7 @@ static int field_term (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, 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 */ @@ -783,7 +859,7 @@ static int field_term (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, 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", @@ -791,7 +867,7 @@ static int field_term (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, 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", @@ -806,7 +882,7 @@ static int field_term (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, 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", @@ -822,14 +898,42 @@ static int field_term (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, static void trans_term (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, char *termz) { - size_t i, sizez; + size_t sizez; Z_Term *term = zapt->term; sizez = term->u.general->len; if (sizez > IT_MAX_WORD-1) sizez = IT_MAX_WORD-1; - for (i = 0; i < sizez; i++) - termz[i] = index_char_cvt (term->u.general->buf[i]); + memcpy (termz, term->u.general->buf, sizez); + termz[sizez] = '\0'; +} + +static void trans_scan_term (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, + char *termz) +{ + Z_Term *term = zapt->term; + char **map; + const char *cp = (const char *) term->u.general->buf; + const char *cp_end = cp + term->u.general->len; + const char *src; + int i = 0; + int prev_space = 0; + int len; + + while ((len = (cp_end - cp)) > 0) + { + map = map_chrs_input (&cp, len); + if (**map == *CHR_SPACE) + { + if (prev_space) + continue; + prev_space = 1; + } + else + prev_space = 0; + for (src = *map; *src; src++) + termz[i++] = *src; + } termz[i] = '\0'; } @@ -842,13 +946,15 @@ static RSET rpn_search_APT_relevance (ZServerInfo *zi, char termz[IT_MAX_WORD+1]; char term_sub[IT_MAX_WORD+1]; struct grep_info grep_info; - char *p0 = termz, *p1 = NULL; + char *p0 = termz; RSET result; + int term_index = 0; 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) { @@ -857,33 +963,58 @@ static RSET rpn_search_APT_relevance (ZServerInfo *zi, } trans_term (zi, zapt, termz); +#ifdef TERM_COUNT + grep_info.term_no = 0; +#endif grep_info.isam_p_indx = 0; grep_info.isam_p_size = 0; grep_info.isam_p_buf = NULL; while (1) { - if ((p1 = strchr (p0, ' '))) + char **map; + char *p2, *p1; + + p1 = p0; + while (*(p0 = p1)) { - memcpy (term_sub, p0, p1-p0); - term_sub[p1-p0] = '\0'; + map = map_chrs_input (&p1, strlen(p1)); + if (**map != *CHR_SPACE) + break; } - else - strcpy (term_sub, p0); + if (!*p0) + break; + + p1 = p0; + while (*(p2 = p1)) + { + map = map_chrs_input (&p1, strlen(p1)); + if (**map == *CHR_SPACE) + break; + } + if (p2 == p0) + break; + memcpy (term_sub, p0, p2-p0); + term_sub[p2-p0] = '\0'; + p0 = p2; if (field_term (zi, zapt, term_sub, 'w', attributeSet, &grep_info, num_bases, basenames)) return NULL; - if (!p1) - break; - p0 = p1; - while (*++p0 == ' ') - ; +#ifdef TERM_COUNT + for (; term_index < grep_info.isam_p_indx; term_index++) + grep_info.term_no[term_index] = parms.no_terms; + parms.no_terms++; +#endif } + parms.term_no = grep_info.term_no; parms.isam_positions = grep_info.isam_p_buf; parms.no_isam_positions = grep_info.isam_p_indx; if (grep_info.isam_p_indx > 0) result = rset_create (rset_kind_relevance, &parms); else result = rset_create (rset_kind_null, NULL); +#ifdef TERM_COUNT + xfree(grep_info.term_no); +#endif xfree (grep_info.isam_p_buf); return result; } @@ -893,7 +1024,6 @@ static RSET rpn_search_APT_cphrase (ZServerInfo *zi, 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; @@ -905,6 +1035,9 @@ static RSET rpn_search_APT_cphrase (ZServerInfo *zi, } trans_term (zi, zapt, termz); +#ifdef TERM_COUNT + grep_info.term_no = 0; +#endif grep_info.isam_p_indx = 0; grep_info.isam_p_size = 0; grep_info.isam_p_buf = NULL; @@ -916,51 +1049,14 @@ static RSET rpn_search_APT_cphrase (ZServerInfo *zi, 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, - grep_info.isam_p_indx); - xfree (grep_info.isam_p_buf); - return result; -} -static RSET rpn_search_APT_word (ZServerInfo *zi, - Z_AttributesPlusTerm *zapt, - 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; - - if (zapt->term->which != Z_Term_general) - { - zi->errCode = 124; - return NULL; - } - trans_term (zi, zapt, termz); - - grep_info.isam_p_indx = 0; - grep_info.isam_p_size = 0; - grep_info.isam_p_buf = NULL; - - if (field_term (zi, zapt, termz, 'w', attributeSet, &grep_info, - num_bases, basenames)) - return NULL; - if (grep_info.isam_p_indx < 1) - 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); - } - 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); +#endif xfree (grep_info.isam_p_buf); return result; } @@ -1058,7 +1154,7 @@ static RSET rpn_search_APT_phrase (ZServerInfo *zi, { char termz[IT_MAX_WORD+1]; char term_sub[IT_MAX_WORD+1]; - char *p0 = termz, *p1 = NULL; + char *p0 = termz; RSET rset[60], result; int i, rset_no = 0; struct grep_info grep_info; @@ -1070,18 +1166,40 @@ static RSET rpn_search_APT_phrase (ZServerInfo *zi, } trans_term (zi, zapt, termz); +#ifdef TERM_COUNT + grep_info.term_no = 0; +#endif grep_info.isam_p_size = 0; grep_info.isam_p_buf = NULL; while (1) { - if ((p1 = strchr (p0, ' '))) + char **map; + char *p2, *p1; + + p1 = p0; + while (*(p0 = p1)) { - memcpy (term_sub, p0, p1-p0); - term_sub[p1-p0] = '\0'; + map = map_chrs_input (&p1, strlen(p1)); + if (**map != *CHR_SPACE) + break; } - else - strcpy (term_sub, p0); + if (!*p0) + break; + + p1 = p0; + while (*(p2 = p1)) + { + map = map_chrs_input (&p1, strlen(p1)); + if (**map == *CHR_SPACE) + break; + } + if (p2 == p0) + break; + + memcpy (term_sub, p0, p2-p0); + term_sub[p2-p0] = '\0'; + p0 = p2; grep_info.isam_p_indx = 0; if (field_term (zi, zapt, term_sub, 'w', attributeSet, &grep_info, @@ -1090,26 +1208,20 @@ static RSET rpn_search_APT_phrase (ZServerInfo *zi, 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)) break; - if (!p1) - break; - p0 = p1; - while (*++p0 == ' ') - ; } +#ifdef TERM_COUNT + xfree(grep_info.term_no); +#endif xfree (grep_info.isam_p_buf); if (rset_no == 0) return rset_create (rset_kind_null, NULL); @@ -1194,8 +1306,8 @@ static RSET rpn_search_APT (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, if (completeness_value == 2 || completeness_value == 3) return rpn_search_APT_cphrase (zi, zapt, attributeSet, num_bases, basenames); - return rpn_search_APT_word (zi, zapt, attributeSet, - num_bases, basenames); + return rpn_search_APT_phrase (zi, zapt, attributeSet, + num_bases, basenames); case 3: /* key */ break; case 4: /* year */ @@ -1224,8 +1336,8 @@ static RSET rpn_search_APT (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, case 107: /* local-number */ return rpn_search_APT_local (zi, zapt, attributeSet); case 108: /* string */ - return rpn_search_APT_word (zi, zapt, attributeSet, - num_bases, basenames); + return rpn_search_APT_phrase (zi, zapt, attributeSet, + num_bases, basenames); case 109: /* numeric string */ break; } @@ -1329,6 +1441,7 @@ void count_set_save (RSET *r, int *count) 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); @@ -1375,6 +1488,7 @@ int rpn_search (ZServerInfo *zi, oident *attrset; oid_value attributeSet; + dict_grep_cmap (zi->dict, map_chrs_input); zlog_rpn (rpn); zi->errCode = 0; @@ -1430,6 +1544,20 @@ static int scan_handle (char *name, const char *info, int pos, void *client) } +static void scan_term_untrans (ODR odr, char **dstp, const char *src) +{ + char *dst = odr_malloc (odr, strlen(src)*2+1); + *dstp = dst; + + while (*src) + { + const char *cp = map_chrs_output (&src); + while (*cp) + *dst++ = *cp++; + } + *dst = '\0'; +} + int rpn_scan (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, oid_value attributeset, int num_bases, char **basenames, @@ -1454,17 +1582,17 @@ int rpn_scan (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, logf (LOG_DEBUG, "scan, position = %d, num = %d", pos, num); + if (attributeset == VAL_NONE) + attributeset = VAL_BIB1; + attr_init (&use, zapt, 1); - use_value = attr_find (&use, NULL); + use_value = attr_find (&use, &attributeset); logf (LOG_DEBUG, "use value %d", use_value); attr_init (&completeness, zapt, 6); completeness_value = attr_find (&completeness, NULL); logf (LOG_DEBUG, "completeness value %d", completeness_value); - if (attributeset == VAL_NONE) - attributeset = VAL_BIB1; - if (use_value == -1) use_value = 1016; for (base_no = 0; base_no < num_bases && ord_no < 32; base_no++) @@ -1519,8 +1647,10 @@ int rpn_scan (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, (completeness_value==2 || completeness_value==3) ? 'p': 'w'; termz[prefix_len] = 0; strcpy (scan_info->prefix, termz); - trans_term (zi, zapt, termz+prefix_len); - dict_scan (zi->wordDict, termz, &before_tmp, &after_tmp, scan_info, + + trans_scan_term (zi, zapt, termz+prefix_len); + + dict_scan (zi->dict, termz, &before_tmp, &after_tmp, scan_info, scan_handle); } glist = odr_malloc (zi->odr, (before+after)*sizeof(*glist)); @@ -1534,7 +1664,6 @@ int rpn_scan (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, const char *mterm = NULL; const char *tst; RSET rset; - rset_isam_parms parms; for (j = 0; j < ord_no; j++) { @@ -1548,12 +1677,9 @@ int rpn_scan (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, } if (j0 == -1) break; - glist[i+before].term = odr_malloc (zi->odr, strlen(mterm)+1); - strcpy (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); + scan_term_untrans (zi->odr, &glist[i+before].term, mterm); + rset = + rset_create_isamx (zi, scan_info_array[j0].list[ptr[j0]].isam_p); ptr[j0]++; for (j = j0+1; jwordIsam; - 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; @@ -1598,7 +1722,6 @@ int rpn_scan (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, const char *mterm = NULL; const char *tst; RSET rset; - rset_isam_parms parms; for (j = 0; j odr, strlen(mterm)+1); - strcpy (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); + scan_term_untrans (zi->odr, &glist[before-1-i].term, mterm); + + rset = rset_create_isamx + (zi, scan_info_array[j0].list[before-1-ptr[j0]].isam_p); ptr[j0]++; @@ -1627,13 +1749,11 @@ int rpn_scan (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, (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;