Split check_limit_local to two functions
[pazpar2-moved-to-github.git] / src / session.c
index 62f47eb..f3e71fe 100644 (file)
@@ -256,8 +256,7 @@ static xmlDoc *record_to_xml(struct session *se,
 
     if (!rdoc)
     {
-        session_log(se, YLOG_FATAL, "Non-wellformed XML received from %s",
-                    db->id);
+        session_log(se, YLOG_WARN, "Non-wellformed XML");
         return 0;
     }
 
@@ -350,8 +349,7 @@ static xmlDoc *normalize_record(struct session *se,
 
         if (normalize_record_transform(sdb->map, &rdoc, (const char **)parms))
         {
-            session_log(se, YLOG_WARN, "Normalize failed from %s",
-                        sdb->database->id);
+            session_log(se, YLOG_WARN, "Normalize failed");
         }
         else
         {
@@ -694,8 +692,10 @@ static void session_sort_unlocked(struct session *se, struct reclist_sortparms *
         sr->type = type;
         sr->next = se->sorted_results;
         se->sorted_results = sr;
+        session_log(se, YLOG_DEBUG, "No research/ingesting done");
+        return ;
     }
-    // yaz_log(YLOG_DEBUG, "Restarting search or re-ingesting for clients due to change in sort order");
+    session_log(se, YLOG_DEBUG, "Re- search/ingesting for clients due to change in sort order");
 
     for (l = se->clients_active; l; l = l->next)
     {
@@ -706,7 +706,7 @@ static void session_sort_unlocked(struct session *se, struct reclist_sortparms *
             client_start_search(cl);
         }
         else {
-            yaz_log(YLOG_DEBUG, "Client %s: Not re-start/ingest in show. Wrong client state: %d",
+            yaz_log(YLOG_DEBUG, "Client %s: No re-start/ingest in show. Wrong client state: %d",
                         client_get_id(cl), client_get_state(cl));
         }
 
@@ -1014,7 +1014,8 @@ static struct hitsbytarget *hitsbytarget_nb(struct session *se,
         res[*count].records = client_get_num_records(cl);
         res[*count].filtered = client_get_num_records_filtered(cl);
         res[*count].diagnostic =
-            client_get_diagnostic(cl, &res[*count].addinfo);
+            client_get_diagnostic(cl, &res[*count].message,
+                                  &res[*count].addinfo);
         res[*count].state = client_get_state_str(cl);
         res[*count].connected  = client_get_connection(cl) ? 1 : 0;
         session_settings_dump(se, client_get_database(cl), w);
@@ -1618,6 +1619,46 @@ int ingest_record(struct client *cl, const char *rec,
     return ret;
 }
 
+static int match_metadata_local(struct record *record,
+                                struct conf_service *service,
+                                int md_field_id,
+                                char **values, int num_v)
+{
+    int i;
+    struct conf_metadata *ser_md = &service->metadata[md_field_id];
+    struct record_metadata *rec_md = record->metadata[md_field_id];
+    for (i = 0; i < num_v; )
+    {
+        if (rec_md)
+        {
+            if (ser_md->type == Metadata_type_year
+                || ser_md->type == Metadata_type_date)
+            {
+                int y = atoi(values[i]);
+                if (y >= rec_md->data.number.min
+                    && y <= rec_md->data.number.max)
+                    break;
+            }
+            else
+            {
+                yaz_log(YLOG_DEBUG, "cmp: '%s' '%s'", rec_md->data.text.disp, values[i]);
+                if (!strcmp(rec_md->data.text.disp, values[i]))
+                {
+                    // Value equals, should not be filtered.
+                    break;
+                }
+            }
+            rec_md = rec_md->next;
+        }
+        else
+        {
+            rec_md = record->metadata[md_field_id];
+            i++;
+        }
+    }
+    return i < num_v ? 1 : 0;
+}
+
 // Skip record on non-zero
 static int check_limit_local(struct client *cl,
                              struct record *record,
@@ -1631,13 +1672,12 @@ static int check_limit_local(struct client *cl,
     int l = 0;
     while (!skip_record)
     {
-        struct conf_metadata *ser_md = 0;
-        struct record_metadata *rec_md = 0;
         int md_field_id;
         char **values = 0;
-        int i, num_v = 0;
-
-        const char *name = client_get_facet_limit_local(cl, sdb, &l, nmem_tmp, &num_v, &values);
+        int num_v = 0;
+        const char *name =
+            client_get_facet_limit_local(cl, sdb, &l, nmem_tmp,
+                                         &num_v, &values);
         if (!name)
             break;
 
@@ -1647,40 +1687,8 @@ static int check_limit_local(struct client *cl,
             skip_record = 1;
             break;
         }
-        ser_md = &service->metadata[md_field_id];
-        rec_md = record->metadata[md_field_id];
-        yaz_log(YLOG_DEBUG, "check limit local %s", name);
-        for (i = 0; i < num_v; )
-        {
-            if (rec_md)
-            {
-                if (ser_md->type == Metadata_type_year
-                    || ser_md->type == Metadata_type_date)
-                {
-                    int y = atoi(values[i]);
-                    if (y >= rec_md->data.number.min
-                        && y <= rec_md->data.number.max)
-                        break;
-                }
-                else
-                {
-                    yaz_log(YLOG_DEBUG, "cmp: '%s' '%s'", rec_md->data.text.disp, values[i]);
-                    if (!strcmp(rec_md->data.text.disp, values[i]))
-                    {
-                        // Value equals, should not be filtered.
-                        break;
-                    }
-                }
-                rec_md = rec_md->next;
-            }
-            else
-            {
-                rec_md = record->metadata[md_field_id];
-                i++;
-            }
-        }
-        // At end , not match
-        if (i == num_v)
+        if (!match_metadata_local(record, service, md_field_id,
+                                  values, num_v))
         {
             skip_record = 1;
             break;