static void apply_limit(struct session_database *sdb,
facet_limits_t facet_limits,
- WRBUF w)
+ WRBUF w_pqf, WRBUF w_ccl)
{
int i = 0;
const char *name;
{
struct setting *s = 0;
- for (s = sdb->settings[PZ_FACETMAP]; s; s = s->next)
+ for (s = sdb->settings[PZ_LIMITMAP]; s; s = s->next)
{
const char *p = strchr(s->name + 3, ':');
- if (p && !strcmp(p + 1, name) && s->value && s->value[0])
+ if (p && !strcmp(p + 1, name) && s->value)
{
- 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));
+ if (!strncmp(s->value, "rpn:", 4))
+ {
+ const char *pqf = s->value + 4;
+ wrbuf_puts(w_pqf, "@and ");
+ wrbuf_puts(w_pqf, pqf);
+ wrbuf_puts(w_pqf, " ");
+ yaz_encode_pqf_term(w_pqf, value, strlen(value));
+ }
+ else if (!strncmp(s->value, "ccl:", 4))
+ {
+ const char *ccl = s->value + 4;
+ wrbuf_puts(w_ccl, " and ");
+ wrbuf_puts(w_ccl, ccl);
+ wrbuf_puts(w_ccl, "=\"");
+ wrbuf_puts(w_ccl, value);
+ wrbuf_puts(w_ccl, "\"");
+ }
break;
}
}
if (!s)
{
- yaz_log(YLOG_WARN, "facet %s used, but no facetmap defined",
+ yaz_log(YLOG_WARN, "limit %s used, but no limitmap defined",
name);
}
}
const char *pqf_prefix = session_setting_oneval(sdb, PZ_PQF_PREFIX);
const char *pqf_strftime = session_setting_oneval(sdb, PZ_PQF_STRFTIME);
const char *query_syntax = session_setting_oneval(sdb, PZ_QUERY_SYNTAX);
- const char *record_filter = session_setting_oneval(sdb, PZ_RECORDFILTER);
+ WRBUF w_ccl, w_pqf;
if (!ccl_map)
return -1;
- yaz_log(YLOG_DEBUG, "query: %s", query);
- cn = ccl_find_str(ccl_map, query, &cerror, &cpos);
+ w_ccl = wrbuf_alloc();
+ wrbuf_puts(w_ccl, query);
+
+ w_pqf = wrbuf_alloc();
+ if (*pqf_prefix)
+ {
+ wrbuf_puts(w_pqf, pqf_prefix);
+ wrbuf_puts(w_pqf, " ");
+ }
+
+ apply_limit(sdb, facet_limits, w_pqf, w_ccl);
+
+ yaz_log(YLOG_LOG, "CCL query: %s", wrbuf_cstr(w_ccl));
+ cn = ccl_find_str(ccl_map, wrbuf_cstr(w_ccl), &cerror, &cpos);
ccl_qual_rm(&ccl_map);
if (!cn)
{
client_set_state(cl, Client_Error);
session_log(se, YLOG_WARN, "Failed to parse CCL query '%s' for %s",
- query,
- client_get_database(cl)->database->url);
+ wrbuf_cstr(w_ccl),
+ client_get_database(cl)->database->url);
+ wrbuf_destroy(w_ccl);
+ wrbuf_destroy(w_pqf);
return -1;
}
- wrbuf_rewind(se->wrbuf);
- if (*pqf_prefix)
- {
- wrbuf_puts(se->wrbuf, pqf_prefix);
- wrbuf_puts(se->wrbuf, " ");
- }
-
- apply_limit(sdb, facet_limits, se->wrbuf);
+ wrbuf_destroy(w_ccl);
if (!pqf_strftime || !*pqf_strftime)
- ccl_pquery(se->wrbuf, cn);
+ ccl_pquery(w_pqf, cn);
else
{
time_t cur_time = time(0);
for (; *cp; cp++)
{
if (cp[0] == '%')
- ccl_pquery(se->wrbuf, cn);
+ ccl_pquery(w_pqf, cn);
else
- wrbuf_putc(se->wrbuf, cp[0]);
+ wrbuf_putc(w_pqf, cp[0]);
}
}
xfree(cl->pquery);
- cl->pquery = xstrdup(wrbuf_cstr(se->wrbuf));
+ cl->pquery = xstrdup(wrbuf_cstr(w_pqf));
+ wrbuf_destroy(w_pqf);
- yaz_log(YLOG_DEBUG, "PQF query: %s", cl->pquery);
+ yaz_log(YLOG_LOG, "PQF query: %s", cl->pquery);
xfree(cl->cqlquery);
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<show>
+<status>OK</status>
+<activeclients>0</activeclients>
+<merged>1</merged>
+<total>1</total>
+<start>0</start>
+<num>1</num>
+<hit>
+
+<md-title>The religious teachers of Greece</md-title>
+<md-date>1972</md-date>
+<md-author>Adam, James</md-author>
+<md-description>Reprint of the 1909 ed., which was issued as the 1904-1906 Gifford lectures</md-description><location id="z3950.indexdata.com/marc" name="Index Data MARC test server">
+<md-title>The religious teachers of Greece</md-title>
+<md-date>1972</md-date>
+<md-author>Adam, James</md-author>
+<md-description tag="500">Reprint of the 1909 ed., which was issued as the 1904-1906 Gifford lectures</md-description>
+<md-description tag="504">Includes bibliographical references</md-description>
+<md-test-usersetting>XXXXXXXXXX</md-test-usersetting>
+<md-test-usersetting-2>test-usersetting-2 data:
+ YYYYYYYYY</md-test-usersetting-2></location>
+<relevance>320000</relevance>
+<recid>title the religious teachers of greece author adam james medium book</recid>
+</hit>
+</show>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<show>
+<status>OK</status>
+<activeclients>0</activeclients>
+<merged>1</merged>
+<total>1</total>
+<start>0</start>
+<num>1</num>
+<hit>
+
+<md-title>The religious teachers of Greece</md-title>
+<md-date>1972</md-date>
+<md-author>Adam, James</md-author>
+<md-description>Reprint of the 1909 ed., which was issued as the 1904-1906 Gifford lectures</md-description><location id="z3950.indexdata.com/marc" name="Index Data MARC test server">
+<md-title>The religious teachers of Greece</md-title>
+<md-date>1972</md-date>
+<md-author>Adam, James</md-author>
+<md-description tag="500">Reprint of the 1909 ed., which was issued as the 1904-1906 Gifford lectures</md-description>
+<md-description tag="504">Includes bibliographical references</md-description>
+<md-test-usersetting>XXXXXXXXXX</md-test-usersetting>
+<md-test-usersetting-2>test-usersetting-2 data:
+ YYYYYYYYY</md-test-usersetting-2></location>
+<relevance>120000</relevance>
+<recid>title the religious teachers of greece author adam james medium book</recid>
+</hit>
+</show>