int *error, char **addinfo,
ODR odr)
{
- ZOOM_connection_connect(m_connection, zurl.c_str(), 0);
+ ZOOM_connection_connect(m_connection, zurl.length() ? zurl.c_str() : 0, 0);
get_zoom_error(error, addinfo, odr);
}
piggyback = true;
use_turbomarc = true;
sortStrategy = "embed";
- urlRecipe = "${md-electronic-url}";
ccl_bibset = ccl_qual_dup(base);
}
std::list<BackendPtr>::const_iterator map_it;
if (m_backend && !m_backend->enable_explain &&
m_backend->m_frontend_database == database)
+ {
+ m_backend->connect("", error, addinfo, odr);
return m_backend;
+ }
std::string input_args;
std::string torus_db;
if (!doc)
{
*error = YAZ_BIB1_DATABASE_DOES_NOT_EXIST;
- *addinfo = odr_strdup(odr, database.c_str());
+ *addinfo = odr_strdup(odr, torus_db.c_str());
BackendPtr b;
return b;
}
if (!sptr)
{
*error = YAZ_BIB1_DATABASE_DOES_NOT_EXIST;
- *addinfo = odr_strdup(odr, database.c_str());
+ *addinfo = odr_strdup(odr, torus_db.c_str());
BackendPtr b;
return b;
}
const char *syntax_name = 0;
if (preferredRecordSyntax &&
- !oid_oidcmp(preferredRecordSyntax, yaz_oid_recsyn_xml)
- && element_set_name)
+ !oid_oidcmp(preferredRecordSyntax, yaz_oid_recsyn_xml))
{
- if (!strcmp(element_set_name, m_p->element_transform.c_str()))
+ if (element_set_name &&
+ !strcmp(element_set_name, m_p->element_transform.c_str()))
{
enable_pz2_retrieval = true;
enable_pz2_transform = true;
}
- else if (!strcmp(element_set_name, m_p->element_raw.c_str()))
+ else if (element_set_name &&
+ !strcmp(element_set_name, m_p->element_raw.c_str()))
{
enable_pz2_retrieval = true;
}
- else
+ else if (m_p->record_xsp)
{
enable_pz2_retrieval = true;
enable_pz2_transform = true;
}
else
{
+ // first stage XSLT - per target
xsltStylesheetPtr xsp = b->xsp;
xmlDoc *rec_res = xsltApplyStylesheet(xsp, rec_doc,
xsl_parms);
+ // insert generated-url
+ if (rec_res)
+ {
+ std::string res =
+ mp::xml::url_recipe_handle(rec_res,
+ b->sptr->urlRecipe);
+ if (res.length())
+ {
+ xmlNode *ptr = xmlDocGetRootElement(rec_res);
+ while (ptr && ptr->type != XML_ELEMENT_NODE)
+ ptr = ptr->next;
+ xmlNode *c =
+ xmlNewChild(ptr, 0, BAD_CAST "metadata", 0);
+ xmlNewProp(c, BAD_CAST "type", BAD_CAST
+ "generated-url");
+ xmlNode * t = xmlNewText(BAD_CAST res.c_str());
+ xmlAddChild(c, t);
+ }
+ }
+ // second stage XSLT - common
if (rec_res && m_p->record_xsp &&
enable_record_transform)
{
xsl_parms);
xmlFreeDoc(tmp_doc);
}
+ // get result out of it
if (rec_res)
{
xsltSaveResultToString(&xmlrec_buf, &rec_len,
}
}
- if (rec_buf)
- {
- xmlDoc *doc = xmlParseMemory(rec_buf, rec_len);
- std::string res =
- mp::xml::url_recipe_handle(doc, b->sptr->urlRecipe);
- if (res.length() && *cproxy_host)
- {
- size_t off = res.find_first_of("://");
- if (off != std::string::npos)
- res.insert(off + 3, cproxy_host);
- }
- if (res.length())
- {
- xmlNode *ptr = xmlDocGetRootElement(doc);
- while (ptr && ptr->type != XML_ELEMENT_NODE)
- ptr = ptr->next;
- xmlNode *c =
- xmlNewChild(ptr, 0, BAD_CAST "metadata", 0);
- xmlNewProp(c, BAD_CAST "type", BAD_CAST
- "generated-url");
- xmlNode * t = xmlNewText(BAD_CAST res.c_str());
- xmlAddChild(c, t);
-
- if (xmlrec_buf)
- xmlFree(xmlrec_buf);
-
- xmlDocDumpMemory(doc, &xmlrec_buf, &rec_len);
- rec_buf = (const char *) xmlrec_buf;
- }
- xmlFreeDoc(doc);
- }
if (!npr)
{
if (!rec_buf)
wrbuf_destroy(ccl_wrbuf);
if (!cn)
{
- char *addinfo = odr_strdup(odr, ccl_err_msg(cerror));
+ char *addinfo = odr_strdup_null(odr, ccl_err_msg(cerror));
error = YAZ_BIB1_MALFORMED_QUERY;
switch (cerror)