#if HAVE_UNISTD_H
#include <unistd.h>
#endif
-#if HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#if HAVE_NETDB_H
-#include <netdb.h>
-#endif
#include <signal.h>
#include <ctype.h>
#include <assert.h>
#include <yaz/timing.h>
#endif
-#if HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
#include "pazpar2.h"
#include "eventl.h"
return db->settings[offset]->value;
}
-
-
-// Initialize YAZ Map structures for MARC-based targets
-static int prepare_yazmarc(struct session_database *sdb)
-{
- const char *s;
-
- if (!sdb->settings)
- {
- yaz_log(YLOG_WARN, "No settings for %s", sdb->database->url);
- return -1;
- }
- if ((s = session_setting_oneval(sdb, PZ_NATIVESYNTAX))
- && !strncmp(s, "iso2709", 7))
- {
- char *encoding = "marc-8s", *e;
- yaz_iconv_t cm;
-
- // See if a native encoding is specified
- if ((e = strchr(s, ';')))
- encoding = e + 1;
-
- sdb->yaz_marc = yaz_marc_create();
- yaz_marc_subfield_str(sdb->yaz_marc, "\t");
-
- cm = yaz_iconv_open("utf-8", encoding);
- if (!cm)
- {
- yaz_log(YLOG_FATAL,
- "Unable to map from %s to UTF-8 for target %s",
- encoding, sdb->database->url);
- return -1;
- }
- yaz_marc_iconv(sdb->yaz_marc, cm);
- }
- return 0;
-}
-
// Prepare XSLT stylesheets for record normalization
// Structures are allocated on the session_wide nmem to avoid having
// to recompute this for every search. This would lead
"No settings associated with %s", sdb->database->url);
return -1;
}
- if (sdb->settings[PZ_NATIVESYNTAX] && !sdb->yaz_marc)
- {
- if (prepare_yazmarc(sdb) < 0)
- return -1;
- }
if (sdb->settings[PZ_XSLT] && !sdb->map)
{
if (prepare_map(se, sdb) < 0)
se->reclist = 0;
se->num_termlists = 0;
criteria = parse_filter(se->nmem, filter);
- se->requestid++;
live_channels = select_targets(se, criteria);
if (live_channels)
{
int i;
new->database = db;
- new->yaz_marc = 0;
new->map = 0;
new->settings
for (m = sdb->map; m; m = m->next)
xsltFreeStylesheet(m->stylesheet);
- if (sdb->yaz_marc)
- yaz_marc_destroy(sdb->yaz_marc);
}
// Initialize session_database list -- this represents this session's view
// (happens when a search starts and client connections are prepared)
switch (offset)
{
- case PZ_NATIVESYNTAX:
- if (sdb->yaz_marc)
- {
- yaz_marc_destroy(sdb->yaz_marc);
- sdb->yaz_marc = 0;
- }
- break;
case PZ_XSLT:
if (sdb->map)
{
session->relevance = 0;
session->total_hits = 0;
session->total_records = 0;
+ session->number_of_warnings_unknown_elements = 0;
session->num_termlists = 0;
session->reclist = 0;
- session->requestid = -1;
session->clients = 0;
session->expected_maxrecs = 0;
session->session_nmem = nmem;
wheretoput = &record->metadata[md_field_id];
while (*wheretoput)
wheretoput = &(*wheretoput)->next;
- rec_md->next = 0;
*wheretoput = rec_md;
// merged metadata
// and polulate with data:
// assign cluster or record based on merge action
+ if (ser_md->merge == Metadata_merge_no)
+ {
+ while (*wheretoput)
+ wheretoput = &(*wheretoput)->next;
+ *wheretoput = rec_md;
+ }
if (ser_md->merge == Metadata_merge_unique)
{
struct record_metadata *mnode;
xmlFree(value);
type = value = 0;
}
- else
- yaz_log(YLOG_WARN,
- "Unexpected element %s in internal record", n->name);
+ else
+ {
+ if (se->number_of_warnings_unknown_elements == 0)
+ yaz_log(YLOG_WARN,
+ "Unexpected element in internal record: %s", n->name);
+ se->number_of_warnings_unknown_elements++;
+ }
}
if (type)
xmlFree(type);