Removed session member requestid (has no effect).
[pazpar2-moved-to-github.git] / src / logic.c
index c268a01..a882ac3 100644 (file)
@@ -34,12 +34,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #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>
@@ -63,9 +57,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #include <yaz/timing.h>
 #endif
 
-#if HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
 
 #include "pazpar2.h"
 #include "eventl.h"
@@ -318,44 +309,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 +383,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)
@@ -582,7 +530,6 @@ enum pazpar2_error_code search(struct session *se,
     se->reclist = 0;
     se->num_termlists = 0;
     criteria = parse_filter(se->nmem, filter);
-    se->requestid++;
     live_channels = select_targets(se, criteria);
     if (live_channels)
     {
@@ -629,7 +576,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 +598,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 +662,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,9 +697,9 @@ 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;
     session->clients = 0;
     session->expected_maxrecs = 0;
     session->session_nmem = nmem;
@@ -1139,7 +1076,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 +1085,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 +1204,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);