+ ZOOM_query_prefix(q, start);
+
+ s = ZOOM_connection_scan1(c, q);
+ ZOOM_query_destroy(q);
+ return s;
+
+}
+
+ZOOM_API(ZOOM_scanset)
+ ZOOM_connection_scan1(ZOOM_connection c, ZOOM_query q)
+{
+ char *start;
+ char *freeme = 0;
+ ZOOM_scanset scan = 0;
+
+ /*
+ * We need to check the query-type, so we can recognise CQL and
+ * CCL and compile them into a form that we can use here. The
+ * ZOOM_query structure has no explicit `type' member, but
+ * inspection of the ZOOM_query_prefix() and ZOOM_query_cql()
+ * functions shows how the structure is set up in each case.
+ */
+ if (!q->z_query)
+ return 0;
+ else if (q->z_query->which == Z_Query_type_1)
+ {
+ yaz_log(log_api, "%p ZOOM_connection_scan1 q=%p PQF '%s'",
+ c, q, q->query_string);
+ start = q->query_string;
+ }
+ else if (q->z_query->which == Z_Query_type_104)
+ {
+ yaz_log(log_api, "%p ZOOM_connection_scan1 q=%p CQL '%s'",
+ c, q, q->query_string);
+ start = freeme = cql2pqf(c, q->query_string);
+ if (start == 0)
+ return 0;
+ }
+ else
+ {
+ yaz_log(YLOG_FATAL, "%p ZOOM_connection_scan1 q=%p unknown type '%s'",
+ c, q, q->query_string);
+ abort();
+ }
+
+ scan = (ZOOM_scanset) xmalloc(sizeof(*scan));