-/* $Id: rpnsearch.c,v 1.13 2007-05-14 12:33:33 adam Exp $
+/* $Id: rpnsearch.c,v 1.15 2007-10-29 09:25:41 adam Exp $
Copyright (C) 1995-2007
Index Data ApS
char term_tmp[IT_MAX_WORD];
int ord = 0;
const char *index_name;
- int len = key_SU_decode (&ord, (const unsigned char *) name);
+ int len = key_SU_decode(&ord, (const unsigned char *) name);
- zebra_term_untrans (p->zh, p->reg_type, term_tmp, name+len);
+ zebra_term_untrans (p->zh, p->reg_type, term_tmp, name+len);
yaz_log(log_level_rpn, "grep: %d %c %s", ord, name[len], term_tmp);
zebraExplain_lookup_ord(p->zh->reg->zei,
ord, 0 /* index_type */, &db, &index_name);
#define REGEX_CHARS " []()|.*+?!"
+static void add_non_space(const char *start, const char *end,
+ WRBUF term_dict,
+ char *dst_term, int *dst_ptr,
+ const char **map, int q_map_match)
+{
+ size_t sz = end - start;
+ memcpy(dst_term + *dst_ptr, start, sz);
+ (*dst_ptr) += sz;
+ if (!q_map_match)
+ {
+ while (start < end)
+ {
+ if (strchr(REGEX_CHARS, *start))
+ wrbuf_putc(term_dict, '\\');
+ wrbuf_putc(term_dict, *start);
+ start++;
+ }
+ }
+ else
+ {
+ char tmpbuf[80];
+ esc_str(tmpbuf, sizeof(tmpbuf), map[0], strlen(map[0]));
+
+ wrbuf_puts(term_dict, map[0]);
+ }
+}
+
/* term_100: handle term, where trunc = none(no operators at all) */
static int term_100(ZebraMaps zebra_maps, int reg_type,
const char **src, WRBUF term_dict, int space_split,
space_start = space_end = 0;
}
}
- /* add non-space char */
i++;
- memcpy(dst_term+j, s1, s0 - s1);
- j += (s0 - s1);
- if (!q_map_match)
- {
- while (s1 < s0)
- {
- if (strchr(REGEX_CHARS, *s1))
- wrbuf_putc(term_dict, '\\');
- wrbuf_putc(term_dict, *s1);
- s1++;
- }
- }
- else
- {
- char tmpbuf[80];
- esc_str(tmpbuf, sizeof(tmpbuf), map[0], strlen(map[0]));
- wrbuf_puts(term_dict, map[0]);
- }
+ add_non_space(s1, s0, term_dict, dst_term, &j,
+ map, q_map_match);
}
dst_term[j] = '\0';
*src = s0;
break;
i++;
- /* add non-space char */
- memcpy(dst_term+j, s1, s0 - s1);
- j += (s0 - s1);
- if (!q_map_match)
- {
- while (s1 < s0)
- {
- if (strchr(REGEX_CHARS, *s1))
- wrbuf_putc(term_dict, '\\');
- wrbuf_putc(term_dict, *s1);
- s1++;
- }
- }
- else
- {
- char tmpbuf[80];
- esc_str(tmpbuf, sizeof(tmpbuf), map[0], strlen(map[0]));
-
- wrbuf_puts(term_dict, map[0]);
- }
+ add_non_space(s1, s0, term_dict, dst_term, &j,
+ map, q_map_match);
}
}
dst_term[j++] = '\0';
if (space_split && **map == *CHR_SPACE)
break;
- /* add non-space char */
- memcpy(dst_term+j, s1, s0 - s1);
- j += (s0 - s1);
i++;
- if (!q_map_match)
- {
- while (s1 < s0)
- {
- if (strchr(REGEX_CHARS, *s1))
- wrbuf_putc(term_dict, '\\');
- wrbuf_putc(term_dict, *s1);
- s1++;
- }
- }
- else
- {
- char tmpbuf[80];
- esc_str(tmpbuf, sizeof(tmpbuf), map[0], strlen(map[0]));
-
- wrbuf_puts(term_dict, map[0]);
- }
+ add_non_space(s1, s0, term_dict, dst_term, &j,
+ map, q_map_match);
}
}
dst_term[j] = '\0';
break;
i++;
- /* add non-space char */
- memcpy(dst_term+j, s1, s0 - s1);
- j += (s0 - s1);
- if (!q_map_match)
- {
- while (s1 < s0)
- {
- if (strchr(REGEX_CHARS, *s1))
- wrbuf_putc(term_dict, '\\');
- wrbuf_putc(term_dict, *s1);
- s1++;
- }
- }
- else
- {
- char tmpbuf[80];
- esc_str(tmpbuf, sizeof(tmpbuf), map[0], strlen(map[0]));
-
- wrbuf_puts(term_dict, map[0]);
- }
+ add_non_space(s1, s0, term_dict, dst_term, &j,
+ map, q_map_match);
}
}
dst_term[j++] = '\0';
break;
i++;
- /* add non-space char */
- memcpy(dst_term+j, s1, s0 - s1);
- j += (s0 - s1);
- if (!q_map_match)
- {
- while (s1 < s0)
- {
- if (strchr(REGEX_CHARS, *s1))
- wrbuf_putc(term_dict, '\\');
- wrbuf_putc(term_dict, *s1);
- s1++;
- }
- }
- else
- {
- char tmpbuf[80];
- esc_str(tmpbuf, sizeof(tmpbuf), map[0], strlen(map[0]));
-
- wrbuf_puts(term_dict, map[0]);
- }
+ add_non_space(s1, s0, term_dict, dst_term, &j,
+ map, q_map_match);
}
}
if (right_truncate)
wrbuf_putc(term_dict, ')');
break;
case 5:
- if (!term_100 (zh->reg->zebra_maps, reg_type,
- term_sub, term_component, space_split, term_dst))
+ if (!term_100(zh->reg->zebra_maps, reg_type,
+ term_sub, term_component, space_split, term_dst))
{
wrbuf_destroy(term_component);
return 0;
*ol = ord_list_create(stream);
- rpn_char_map_prepare (zh->reg, reg_type, &rcmi);
+ rpn_char_map_prepare(zh->reg, reg_type, &rcmi);
attr_init_APT(&truncation, zapt, 5);
truncation_value = attr_find(&truncation, NULL);
yaz_log(log_level_rpn, "truncation value %d", truncation_value);
termp = *term_sub; /* start of term for each database */
- if (zebraExplain_curDatabase (zh->reg->zei, basenames[base_no]))
+ if (zebraExplain_curDatabase(zh->reg->zei, basenames[base_no]))
{
zebra_setError(zh, YAZ_BIB1_DATABASE_UNAVAILABLE,
basenames[base_no]);
bases_ok++;
*ol = ord_list_append(stream, *ol, ord);
- ord_len = key_SU_encode (ord, ord_buf);
+ ord_len = key_SU_encode(ord, ord_buf);
wrbuf_putc(term_dict, '(');
int i;
for (i = 0; i < *num_result_sets; i++)
rset_delete((*result_sets)[i]);
- grep_info_delete (&grep_info);
+ grep_info_delete(&grep_info);
return res;
}
if ((*result_sets)[*num_result_sets] == 0)
char *val;
ISAM_P isam_p;
- if (zebraExplain_curDatabase (zh->reg->zei, basenames[base_no]))
+ if (zebraExplain_curDatabase(zh->reg->zei, basenames[base_no]))
{
zebra_setError(zh, YAZ_BIB1_DATABASE_UNAVAILABLE,
basenames[base_no]);
attributeSet, &ord) != ZEBRA_OK)
continue;
- ord_len = key_SU_encode (ord, ord_buf);
+ ord_len = key_SU_encode(ord, ord_buf);
memcpy(term_dict, ord_buf, ord_len);
strcpy(term_dict+ord_len, FIRST_IN_FIELD_STR);
val = dict_lookup(zh->reg->dict, term_dict);
wrbuf_destroy(term_num);
return 0;
}
- term_value = atoi (wrbuf_cstr(term_num));
+ term_value = atoi(wrbuf_cstr(term_num));
gen_regular_rel(term_dict, term_value-1, 1);
break;
case 2:
wrbuf_destroy(term_num);
return 0;
}
- term_value = atoi (wrbuf_cstr(term_num));
+ term_value = atoi(wrbuf_cstr(term_num));
gen_regular_rel(term_dict, term_value, 1);
break;
case 4:
wrbuf_destroy(term_num);
return 0;
}
- term_value = atoi (wrbuf_cstr(term_num));
+ term_value = atoi(wrbuf_cstr(term_num));
gen_regular_rel(term_dict, term_value, 0);
break;
case 5:
wrbuf_destroy(term_num);
return 0;
}
- term_value = atoi (wrbuf_cstr(term_num));
+ term_value = atoi(wrbuf_cstr(term_num));
gen_regular_rel(term_dict, term_value+1, 0);
break;
case -1:
wrbuf_destroy(term_num);
return 0;
}
- term_value = atoi (wrbuf_cstr(term_num));
+ term_value = atoi(wrbuf_cstr(term_num));
wrbuf_printf(term_dict, "(0*%d)", term_value);
break;
case 103:
*ol = ord_list_create(stream);
- rpn_char_map_prepare (zh->reg, reg_type, &rcmi);
+ rpn_char_map_prepare(zh->reg, reg_type, &rcmi);
for (base_no = 0; base_no < num_bases; base_no++)
{
termp = *term_sub;
- if (zebraExplain_curDatabase (zh->reg->zei, basenames[base_no]))
+ if (zebraExplain_curDatabase(zh->reg->zei, basenames[base_no]))
{
zebra_setError(zh, YAZ_BIB1_DATABASE_UNAVAILABLE,
basenames[base_no]);
*ol = ord_list_append(stream, *ol, ord);
- ord_len = key_SU_encode (ord, ord_buf);
+ ord_len = key_SU_encode(ord, ord_buf);
wrbuf_putc(term_dict, '(');
for (i = 0; i < ord_len; i++)
if (zapt->term->which != Z_Term_general)
i = 0;
else
- i = atoi_n ((char *) zapt->term->u.general->buf,
+ i = atoi_n((char *) zapt->term->u.general->buf,
zapt->term->u.general->len);
if (i >= sort_sequence->num_specs)
i = 0;
char ord_buf[32];
RSET rset;
WRBUF term_dict = wrbuf_alloc();
- int ord_len = key_SU_encode (ord, ord_buf);
+ int ord_len = key_SU_encode(ord, ord_buf);
int term_type = Z_Term_characterString;
const char *flags = "void";
*/
- dict_grep_cmap (zh->reg->dict, 0, 0);
+ dict_grep_cmap(zh->reg->dict, 0, 0);
for (base_no = 0; base_no < num_bases; base_no++)
{
int level = xpath_len;
int first_path = 1;
- if (zebraExplain_curDatabase (zh->reg->zei, basenames[base_no]))
+ if (zebraExplain_curDatabase(zh->reg->zei, basenames[base_no]))
{
zebra_setError(zh, YAZ_BIB1_DATABASE_UNAVAILABLE,
basenames[base_no]);