+int zebra_cql2pqf (cql_transform_t ct,
+ const char *query, char *res, int len) {
+
+ int status;
+ const char *addinfo = "";
+ CQL_parser cp = cql_parser_create();
+
+ if (status = cql_parser_string(cp, query)) {
+ cql_parser_destroy(cp);
+ return (status);
+ }
+
+ if (cql_transform_buf(ct, cql_parser_result(cp), res, len)) {
+ status = cql_transform_error(ct, &addinfo);
+ logf (LOG_WARN,"Transform error %d %s\n", status, addinfo ? addinfo : "");
+ cql_parser_destroy(cp);
+ return (status);
+ }
+
+ cql_parser_destroy(cp);
+ return (0);
+}
+
+void zebra_scan_PQF (ZebraHandle zh,
+ ScanObj *so,
+ ODR stream,
+ const char *pqf_query)
+{
+ Z_AttributesPlusTerm *zapt;
+ Odr_oid *attrsetid;
+ const char* oidname;
+ oid_value attributeset;
+ ZebraScanEntry *entries;
+ int i, class;
+
+ logf(LOG_DEBUG,
+ "scan req: pos:%d, num:%d, partial:%d",
+ so->position, so->num_entries, so->is_partial);
+
+ zapt = p_query_scan (stream, PROTO_Z3950, &attrsetid, pqf_query);
+
+ oidname = yaz_z3950oid_to_str (attrsetid, &class);
+ logf (LOG_DEBUG, "Attributreset: %s", oidname);
+ attributeset = oid_getvalbyname(oidname);
+
+ if (!zapt) {
+ logf (LOG_WARN, "bad query %s\n", pqf_query);
+ odr_reset (stream);
+ return;
+ }
+
+ so->entries = (ScanEntry *)
+ odr_malloc (stream, sizeof(so->entries) * (so->num_entries));
+
+
+ zebra_scan (zh, stream, zapt, attributeset,
+ &so->position, &so->num_entries,
+ (ZebraScanEntry **) &so->entries, &so->is_partial);
+
+ logf(LOG_DEBUG,
+ "scan res: pos:%d, num:%d, partial:%d",
+ so->position, so->num_entries, so->is_partial);
+}
+
+ScanEntry *getScanEntry(ScanObj *so, int pos) {
+ return (&so->entries[pos-1]);
+}
+