+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;
+}
+