+ if (b->sptr->sru.length() && element_set_name)
+ b->set_option("schema", element_set_name);
+}
+
+Z_Records *yf::Zoom::Frontend::get_explain_records(
+ Package &package,
+ Odr_int start,
+ Odr_int number_to_present,
+ int *error,
+ char **addinfo,
+ Odr_int *number_of_records_returned,
+ ODR odr,
+ BackendPtr b,
+ Odr_oid *preferredRecordSyntax,
+ const char *element_set_name)
+{
+ Odr_int i;
+ Z_Records *records = 0;
+
+ if (!b->explain_doc)
+ {
+ return records;
+ }
+ if (number_to_present > 10000)
+ number_to_present = 10000;
+
+ xmlNode *ptr = xmlDocGetRootElement(b->explain_doc);
+
+ Z_NamePlusRecordList *npl = (Z_NamePlusRecordList *)
+ odr_malloc(odr, sizeof(*npl));
+ npl->records = (Z_NamePlusRecord **)
+ odr_malloc(odr, number_to_present * sizeof(*npl->records));
+
+ for (i = 0; i < number_to_present; i++)
+ {
+ int num = 0;
+ xmlNode *res = xml_node_search(ptr, &num, start + i + 1);
+ if (!res)
+ break;
+ xmlBufferPtr xml_buf = xmlBufferCreate();
+ xmlNode *tmp_node = xmlCopyNode(res->children, 1);
+ xmlNodeDump(xml_buf, tmp_node->doc, tmp_node, 0, 0);
+
+ Z_NamePlusRecord *npr =
+ (Z_NamePlusRecord *) odr_malloc(odr, sizeof(*npr));
+ npr->databaseName = odr_strdup(odr, b->m_frontend_database.c_str());
+ npr->which = Z_NamePlusRecord_databaseRecord;
+ npr->u.databaseRecord =
+ z_ext_record_xml(odr,
+ (const char *) xml_buf->content, xml_buf->use);
+ npl->records[i] = npr;
+ xmlFreeNode(tmp_node);
+ xmlBufferFree(xml_buf);
+ }
+ records = (Z_Records*) odr_malloc(odr, sizeof(*records));
+ records->which = Z_Records_DBOSD;
+ records->u.databaseOrSurDiagnostics = npl;
+
+ npl->num_records = i;
+ *number_of_records_returned = i;
+ return records;
+}
+
+
+Z_Records *yf::Zoom::Frontend::get_records(Package &package,
+ Odr_int start,
+ Odr_int number_to_present,
+ int *error,
+ char **addinfo,
+ Odr_int *number_of_records_returned,
+ ODR odr,
+ BackendPtr b,
+ Odr_oid *preferredRecordSyntax,
+ const char *element_set_name)
+{
+ *number_of_records_returned = 0;
+ Z_Records *records = 0;
+ bool enable_pz2_retrieval = false; // whether target profile is used
+ bool enable_pz2_transform = false; // whether XSLT is used as well
+ bool assume_marc8_charset = false;
+ bool enable_record_transform = false;
+
+ prepare_elements(b, preferredRecordSyntax,
+ element_set_name,
+ enable_pz2_retrieval,
+ enable_pz2_transform,
+ enable_record_transform,
+ assume_marc8_charset);
+
+ package.log("zoom", YLOG_LOG, "pz2_retrieval: %s . pz2_transform: %s",
+ enable_pz2_retrieval ? "yes" : "no",
+ enable_pz2_transform ? "yes" : "no");
+
+ if (start < 0 || number_to_present <=0)
+ return records;
+
+ if (number_to_present > 10000)
+ number_to_present = 10000;