+// returns a xmalloced SOLR query corresponding to the pquery in client
+// TODO Could prob. be merge with the similar make_cqlquery
+static char *make_solrquery(struct client *cl)
+{
+ solr_transform_t sqlt = solr_transform_create();
+ Z_RPNQuery *zquery;
+ char *r;
+ WRBUF wrb = wrbuf_alloc();
+ int status;
+ ODR odr_out = odr_createmem(ODR_ENCODE);
+
+ zquery = p_query_rpn(odr_out, cl->pquery);
+ yaz_log(YLOG_LOG, "PQF: %s", cl->pquery);
+ if ((status = solr_transform_rpn2solr_wrbuf(sqlt, wrb, zquery)))
+ {
+ yaz_log(YLOG_WARN, "Failed to generate SOLR query, code=%d", status);
+ r = 0;
+ }
+ else
+ {
+ r = xstrdup(wrbuf_cstr(wrb));
+ }
+ wrbuf_destroy(wrb);
+ odr_destroy(odr_out);
+ solr_transform_close(sqlt);
+ return r;
+}
+
+static void apply_limit(struct session_database *sdb,
+ facet_limits_t facet_limits,
+ WRBUF w)
+{
+ int i = 0;
+ const char *name;
+ const char *value;
+ for (i = 0; (name = facet_limits_get(facet_limits, i, &value)); i++)
+ {
+ struct setting *s = 0;
+
+ for (s = sdb->settings[PZ_FACETMAP]; s; s = s->next)
+ {
+ const char *p = strchr(s->name + 3, ':');
+ if (p && !strcmp(p + 1, name) && s->value && s->value[0])
+ {
+ wrbuf_insert(w, 0, "@and ", 5);
+ wrbuf_puts(w, " @attr 1=");
+ yaz_encode_pqf_term(w, s->value, strlen(s->value));
+ wrbuf_puts(w, " ");
+ yaz_encode_pqf_term(w, value, strlen(value));
+ break;
+ }
+ }
+ if (!s)
+ {
+ yaz_log(YLOG_WARN, "facet %s used, but no facetmap defined",
+ name);
+ }
+ }
+}
+