- case -1: /* not specified */
- case 100: /* do not truncate */
- if (!string_relation (zh, zapt, &termp, term_dict,
- attributeSet,
- reg_type, space_split, term_dst))
- return 0;
- logf (LOG_LOG, "dict_lookup_grep: %s", term_dict+prefix_len);
- r = dict_lookup_grep (zh->reg->dict, term_dict, 0,
- grep_info, &max_pos, 0, grep_handle);
- if (r)
- logf (LOG_WARN, "dict_lookup_grep fail %d", r);
- break;
- case 1: /* right truncation */
- term_dict[j++] = '(';
- if (!term_100 (zh->reg->zebra_maps, reg_type,
- &termp, term_dict + j, space_split, term_dst))
- return 0;
- strcat (term_dict, ".*)");
- dict_lookup_grep (zh->reg->dict, term_dict, 0, grep_info,
- &max_pos, 0, grep_handle);
- break;
- case 2: /* keft truncation */
- term_dict[j++] = '('; term_dict[j++] = '.'; term_dict[j++] = '*';
- if (!term_100 (zh->reg->zebra_maps, reg_type,
- &termp, term_dict + j, space_split, term_dst))
- return 0;
- strcat (term_dict, ")");
- dict_lookup_grep (zh->reg->dict, term_dict, 0, grep_info,
- &max_pos, 0, grep_handle);
- break;
- case 3: /* left&right truncation */
- term_dict[j++] = '('; term_dict[j++] = '.'; term_dict[j++] = '*';
- if (!term_100 (zh->reg->zebra_maps, reg_type,
- &termp, term_dict + j, space_split, term_dst))
- return 0;
- strcat (term_dict, ".*)");
- dict_lookup_grep (zh->reg->dict, term_dict, 0, grep_info,
- &max_pos, 0, grep_handle);
- break;
- zh->errCode = 120;
- return -1;
- case 101: /* process # in term */
- term_dict[j++] = '(';
- if (!term_101 (zh->reg->zebra_maps, reg_type,
- &termp, term_dict + j, space_split, term_dst))
- return 0;
- strcat (term_dict, ")");
- r = dict_lookup_grep (zh->reg->dict, term_dict, 0, grep_info,
- &max_pos, 0, grep_handle);
- if (r)
- logf (LOG_WARN, "dict_lookup_grep err, trunc=#: %d", r);
- break;
- case 102: /* Regexp-1 */
- term_dict[j++] = '(';
- if (!term_102 (zh->reg->zebra_maps, reg_type,
- &termp, term_dict + j, space_split, term_dst))
- return 0;
- strcat (term_dict, ")");
- logf (LOG_DEBUG, "Regexp-1 tolerance=%d", r);
- r = dict_lookup_grep (zh->reg->dict, term_dict, 0, grep_info,
- &max_pos, 0, grep_handle);
- if (r)
- logf (LOG_WARN, "dict_lookup_grep err, trunc=regular: %d",
- r);
- break;
- case 103: /* Regexp-2 */
- r = 1;
- term_dict[j++] = '(';
- if (!term_103 (zh->reg->zebra_maps, reg_type,
- &termp, term_dict + j, &r, space_split, term_dst))
- return 0;
- strcat (term_dict, ")");
- logf (LOG_DEBUG, "Regexp-2 tolerance=%d", r);
- r = dict_lookup_grep (zh->reg->dict, term_dict, r, grep_info,
- &max_pos, 2, grep_handle);
- if (r)
- logf (LOG_WARN, "dict_lookup_grep err, trunc=eregular: %d",
- r);
- break;
- case 104: /* process # and ! in term */
- term_dict[j++] = '(';
- if (!term_104 (zh->reg->zebra_maps, reg_type,
- &termp, term_dict + j, space_split, term_dst))
- return 0;
- strcat (term_dict, ")");
- r = dict_lookup_grep (zh->reg->dict, term_dict, 0, grep_info,
- &max_pos, 0, grep_handle);
- if (r)
- logf (LOG_WARN, "dict_lookup_grep err, trunc=#/!: %d", r);
- break;
- case 105: /* process * and ! in term */
- term_dict[j++] = '(';
- if (!term_105 (zh->reg->zebra_maps, reg_type,
- &termp, term_dict + j, space_split, term_dst, 1))
- return 0;
- strcat (term_dict, ")");
- r = dict_lookup_grep (zh->reg->dict, term_dict, 0, grep_info,
- &max_pos, 0, grep_handle);
- if (r)
- logf (LOG_WARN, "dict_lookup_grep err, trunc=*/!: %d", r);
+ char ord_buf[32];
+ int i, ord_len;
+
+ ord = zebraExplain_lookup_attr_su(zh->reg->zei,
+ attp.attset_ordinal,
+ local_attr->local);
+ if (ord < 0)
+ continue;
+ *ol = ord_list_append(stream, *ol, ord);
+ if (prefix_len)
+ term_dict[prefix_len++] = '|';
+ else
+ term_dict[prefix_len++] = '(';
+
+ ord_len = key_SU_encode (ord, ord_buf);
+ for (i = 0; i<ord_len; i++)
+ {
+ term_dict[prefix_len++] = 1;
+ term_dict[prefix_len++] = ord_buf[i];
+ }
+ }
+ bases_ok++;
+ if (prefix_len)
+ attr_ok = 1;
+
+ term_dict[prefix_len++] = ')';
+ term_dict[prefix_len++] = 1;
+ term_dict[prefix_len++] = reg_type;
+ yaz_log(log_level_rpn, "reg_type = %d", term_dict[prefix_len-1]);
+ term_dict[prefix_len] = '\0';
+ j = prefix_len;
+ switch (truncation_value)
+ {
+ case -1: /* not specified */
+ case 100: /* do not truncate */
+ if (!string_relation (zh, zapt, &termp, term_dict,
+ attributeSet,
+ reg_type, space_split, term_dst,
+ &relation_error))
+ {
+ if (relation_error)
+ {
+ zebra_setError(zh, relation_error, 0);
+ return ZEBRA_FAIL;
+ }
+ *term_sub = 0;
+ return ZEBRA_OK;
+ }