X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Flogic.c;h=167c2ae35c0c0511d639818483a0c27115969ea7;hb=1f2abe92475f41651bc121b9d47e57dbd3d6e90a;hp=c268a016a1eb7ca2430498d6522354dfb4e53aea;hpb=8a78bbf3382e2061c68c866a37904e8e14770cf8;p=pazpar2-moved-to-github.git diff --git a/src/logic.c b/src/logic.c index c268a01..167c2ae 100644 --- a/src/logic.c +++ b/src/logic.c @@ -318,44 +318,6 @@ const char *session_setting_oneval(struct session_database *db, int offset) 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 @@ -430,11 +392,6 @@ static int prepare_session_database(struct session *se, "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) @@ -629,7 +586,6 @@ static void session_init_databases_fun(void *context, struct database *db) int i; new->database = db; - new->yaz_marc = 0; new->map = 0; new->settings @@ -652,8 +608,6 @@ static void session_database_destroy(struct session_database *sdb) 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 @@ -718,13 +672,6 @@ void session_apply_setting(struct session *se, char *dbname, char *setting, // (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) { @@ -760,6 +707,7 @@ struct session *new_session(NMEM nmem) 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; @@ -1139,7 +1087,6 @@ struct record *ingest_record(struct client *cl, const char *rec, wheretoput = &record->metadata[md_field_id]; while (*wheretoput) wheretoput = &(*wheretoput)->next; - rec_md->next = 0; *wheretoput = rec_md; // merged metadata @@ -1149,6 +1096,12 @@ struct record *ingest_record(struct client *cl, const char *rec, // 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; @@ -1262,9 +1215,13 @@ struct record *ingest_record(struct client *cl, const char *rec, 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);