- if (rset_no == 0)
- return rsnull_create (NULL); /* FIXME - Use a proper nmem */
- result = rset[0];
- /* FIXME - Use a proper rsmultiand */
- for (i = 1; i<rset_no; i++)
- {
- /*
- rset_bool_parms bool_parms;
- bool_parms.rset_l = result;
- bool_parms.rset_r = rset[i];
- bool_parms.key_size = sizeof(struct it_key);
- bool_parms.cmp = key_compare_it;
- bool_parms.log_item = key_logdump_txt;
- result = rset_create (rset_kind_and, &bool_parms);
- */
- result= rsbool_create_and(NULL, /* FIXME - use a proper nmem */
- sizeof(struct it_key), key_compare_it,
- result, rset[i], key_logdump_txt );
- }
- return result;
+ return res;
+}
+
+static ZEBRA_RES rpn_search_APT_phrase(ZebraHandle zh,
+ Z_AttributesPlusTerm *zapt,
+ const char *termz_org,
+ oid_value attributeSet,
+ NMEM stream,
+ int reg_type, int complete_flag,
+ const char *rank_type,
+ const char *xpath_use,
+ int num_bases, char **basenames,
+ NMEM rset_nmem,
+ RSET *rset,
+ struct rset_key_control *kc)
+{
+ RSET *result_sets = 0;
+ int num_result_sets = 0;
+ ZEBRA_RES res =
+ term_list_trunc(zh, zapt, termz_org, attributeSet,
+ stream, reg_type, complete_flag,
+ rank_type, xpath_use,
+ num_bases, basenames,
+ rset_nmem,
+ &result_sets, &num_result_sets, kc);
+ if (res != ZEBRA_OK)
+ return res;
+ if (num_result_sets == 0)
+ *rset = rset_create_null(rset_nmem, kc, 0);
+ else if (num_result_sets == 1)
+ *rset = result_sets[0];
+ else
+ *rset = rset_create_prox(rset_nmem, kc, kc->scope,
+ num_result_sets, result_sets,
+ 1 /* ordered */, 0 /* exclusion */,
+ 3 /* relation */, 1 /* distance */);
+ if (!*rset)
+ return ZEBRA_FAIL;
+ return ZEBRA_OK;
+}
+
+static ZEBRA_RES rpn_search_APT_or_list(ZebraHandle zh,
+ Z_AttributesPlusTerm *zapt,
+ const char *termz_org,
+ oid_value attributeSet,
+ NMEM stream,
+ int reg_type, int complete_flag,
+ const char *rank_type,
+ const char *xpath_use,
+ int num_bases, char **basenames,
+ NMEM rset_nmem,
+ RSET *rset,
+ struct rset_key_control *kc)
+{
+ RSET *result_sets = 0;
+ int num_result_sets = 0;
+ ZEBRA_RES res =
+ term_list_trunc(zh, zapt, termz_org, attributeSet,
+ stream, reg_type, complete_flag,
+ rank_type, xpath_use,
+ num_bases, basenames,
+ rset_nmem,
+ &result_sets, &num_result_sets, kc);
+ if (res != ZEBRA_OK)
+ return res;
+ if (num_result_sets == 0)
+ *rset = rset_create_null(rset_nmem, kc, 0);
+ else if (num_result_sets == 1)
+ *rset = result_sets[0];
+ else
+ *rset = rset_create_or(rset_nmem, kc, kc->scope, 0 /* termid */,
+ num_result_sets, result_sets);
+ if (!*rset)
+ return ZEBRA_FAIL;
+ return ZEBRA_OK;
+}
+
+static ZEBRA_RES rpn_search_APT_and_list(ZebraHandle zh,
+ Z_AttributesPlusTerm *zapt,
+ const char *termz_org,
+ oid_value attributeSet,
+ NMEM stream,
+ int reg_type, int complete_flag,
+ const char *rank_type,
+ const char *xpath_use,
+ int num_bases, char **basenames,
+ NMEM rset_nmem,
+ RSET *rset,
+ struct rset_key_control *kc)
+{
+ RSET *result_sets = 0;
+ int num_result_sets = 0;
+ ZEBRA_RES res =
+ term_list_trunc(zh, zapt, termz_org, attributeSet,
+ stream, reg_type, complete_flag,
+ rank_type, xpath_use,
+ num_bases, basenames,
+ rset_nmem,
+ &result_sets, &num_result_sets,
+ kc);
+ if (res != ZEBRA_OK)
+ return res;
+ if (num_result_sets == 0)
+ *rset = rset_create_null(rset_nmem, kc, 0);
+ else if (num_result_sets == 1)
+ *rset = result_sets[0];
+ else
+ *rset = rset_create_and(rset_nmem, kc, kc->scope,
+ num_result_sets, result_sets);
+ if (!*rset)
+ return ZEBRA_FAIL;
+ return ZEBRA_OK;