* \file zoom-z3950.c
* \brief Implements ZOOM Z39.50 handling
*/
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <assert.h>
#include <string.h>
#include <yaz/diagbib1.h>
#include <yaz/charneg.h>
#include <yaz/ill.h>
-#include <yaz/srw.h>
-#include <yaz/cql.h>
-#include <yaz/ccl.h>
#include <yaz/query-charset.h>
#include <yaz/copy_types.h>
#include <yaz/snprintf.h>
if (facet_list) {
Z_OtherInformation **oi;
yaz_oi_APDU(apdu, &oi);
- if (facet_list) {
- yaz_oi_set_facetlist(oi, c->odr_out, facet_list);
- }
+ yaz_oi_set_facetlist(oi, c->odr_out, facet_list);
}
+ else
+ yaz_log(YLOG_WARN, "Unable to parse facets: %s", facets);
}
assert(r);
assert(r->query);
/* prepare query for the search request */
- search_req->query = r->query->z_query;
+ search_req->query = ZOOM_query_get_Z_Query(r->query);
if (!search_req->query)
{
ZOOM_set_error(c, ZOOM_ERROR_INVALID_QUERY, 0);
return zoom_complete;
}
- if (r->query->z_query->which == Z_Query_type_1 ||
- r->query->z_query->which == Z_Query_type_101)
+ if (search_req->query->which == Z_Query_type_1 ||
+ search_req->query->which == Z_Query_type_101)
{
const char *cp = ZOOM_options_get(r->options, "rpnCharset");
if (cp)
ZOOM_scanset scan;
Z_APDU *apdu = zget_APDU(c->odr_out, Z_APDU_scanRequest);
Z_ScanRequest *req = apdu->u.scanRequest;
+ Z_Query *z_query;
yaz_log(c->log_details, "%p send_scan", c);
if (!c->tasks)
assert (c->tasks->which == ZOOM_TASK_SCAN);
scan = c->tasks->u.scan.scan;
+ z_query = ZOOM_query_get_Z_Query(scan->query);
+
/* Z39.50 scan can only carry RPN */
- if (scan->query->z_query->which == Z_Query_type_1 ||
- scan->query->z_query->which == Z_Query_type_101)
+ if (z_query->which == Z_Query_type_1 ||
+ z_query->which == Z_Query_type_101)
{
- Z_RPNQuery *rpn = scan->query->z_query->u.type_1;
+ Z_RPNQuery *rpn = z_query->u.type_1;
const char *cp = ZOOM_options_get(scan->options, "rpnCharset");
if (cp)
{
return facet_field;
}
+/* Can be share with SOLR/SRU/SRW requests */
+void handle_facet_list(ZOOM_resultset r, Z_FacetList *fl) {
+ int j;
+ r->num_facets = fl->num;
+ yaz_log(YLOG_DEBUG, "Facets found: %d", fl->num);
+ r->facets = odr_malloc(r->odr, r->num_facets * sizeof(*r->facets));
+ r->facets_names = odr_malloc(r->odr, r->num_facets * sizeof(*r->facets_names));
+ for (j = 0; j < fl->num; j++)
+ {
+ r->facets[j] = get_zoom_facet_field(r->odr, fl->elements[j]);
+ if (!r->facets[j])
+ yaz_log(YLOG_DEBUG, "Facet field missing on index %d !", j);
+ r->facets_names[j] = (char *) ZOOM_facet_field_name(r->facets[j]);
+ }
+}
+
static void handle_facet_result(ZOOM_connection c, ZOOM_resultset r,
Z_OtherInformation *o)
{
Z_External *ext = o->list[i]->information.externallyDefinedInfo;
if (ext->which == Z_External_userFacets)
{
- int j;
- Z_FacetList *fl = ext->u.facetList;
- r->num_facets = fl->num;
- yaz_log(YLOG_DEBUG, "Facets found: %d", fl->num);
- r->facets = odr_malloc(r->odr, r->num_facets * sizeof(*r->facets));
- r->facets_names = odr_malloc(r->odr, r->num_facets * sizeof(*r->facets_names));
- for (j = 0; j < fl->num; j++)
- {
- r->facets[j] = get_zoom_facet_field(r->odr, fl->elements[j]);
- if (!r->facets[j])
- yaz_log(YLOG_DEBUG, "Facet field missing on index %d !", j);
- r->facets_names[j] = (char *) ZOOM_facet_field_name(r->facets[j]);
- }
+ handle_facet_list(r, ext->u.facetList);
}
}
}