X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fpazpar2_config.c;h=3255c088e2190ee69f0344181ad1dfb77e968085;hb=1f8677b9cb96f70cd89bfefee34c1a8b0adf0272;hp=447c396ee76e6d8685a473a3a7631339613b957d;hpb=41a35ca4946b829fd190decf27de1abe1372866e;p=pazpar2-moved-to-github.git diff --git a/src/pazpar2_config.c b/src/pazpar2_config.c index 447c396..3255c08 100644 --- a/src/pazpar2_config.c +++ b/src/pazpar2_config.c @@ -78,7 +78,7 @@ static char *xml_context(const xmlNode *ptr, char *res, size_t len) off = off - l; memcpy(res + off, attr->name, l); res[--off] = '@'; - } + } while (ptr && ptr->type == XML_ELEMENT_NODE) { size_t l = strlen((const char *) ptr->name); @@ -207,7 +207,7 @@ static struct conf_sortkey *conf_service_add_sortkey( struct conf_service *service, int field_id, const char *name, - enum conf_sortkey_type type) + enum conf_metadata_type type) { struct conf_sortkey *sk = 0; NMEM nmem = service->nmem; @@ -281,8 +281,6 @@ void service_destroy(struct conf_service *service) void service_incref(struct conf_service *service) { - yaz_log(YLOG_LOG, "service_incref. p=%p cnt=%d", service, - service->ref_count); pazpar2_incref(&service->ref_count, service->mutex); } @@ -394,6 +392,8 @@ static int parse_metadata(struct conf_service *service, xmlNode *n, type = Metadata_type_year; else if (!strcmp((const char *) xml_type, "date")) type = Metadata_type_date; + else if (!strcmp((const char *) xml_type, "float")) + type = Metadata_type_float; else { yaz_log(YLOG_FATAL, @@ -435,7 +435,7 @@ static int parse_metadata(struct conf_service *service, xmlNode *n, else { yaz_log(YLOG_FATAL, - "Unknown value for medadata/setting: %s", xml_setting); + "Unknown value for metadata/setting: %s", xml_setting); return -1; } } @@ -443,17 +443,29 @@ static int parse_metadata(struct conf_service *service, xmlNode *n, // add a sortkey if so specified if (xml_sortkey && strcmp((const char *) xml_sortkey, "no")) { - enum conf_sortkey_type sk_type; + enum conf_metadata_type sk_type = type; if (merge == Metadata_merge_no) { yaz_log(YLOG_FATAL, "Can't specify sortkey on a non-merged field"); return -1; } + if (!strcmp((const char *) xml_sortkey, "yes")) + ; if (!strcmp((const char *) xml_sortkey, "numeric")) - sk_type = Metadata_sortkey_numeric; + ; else if (!strcmp((const char *) xml_sortkey, "skiparticle")) - sk_type = Metadata_sortkey_skiparticle; + { + if (sk_type == Metadata_type_generic) + sk_type = Metadata_type_skiparticle; + else + { + yaz_log(YLOG_FATAL, + "skiparticle only supported for type=generic: %s", + xml_type); + return -1; + } + } else { yaz_log(YLOG_FATAL, @@ -986,7 +998,7 @@ struct conf_service *locate_service(struct conf_server *server, return s; } -void info_service_metadata(struct conf_service *service, WRBUF w) +static void info_service_metadata(struct conf_service *service, WRBUF w) { int i; struct conf_metadata *md; @@ -1015,73 +1027,74 @@ void info_service_metadata(struct conf_service *service, WRBUF w) } if (md->sortkey_offset > 0) { wrbuf_puts(w, " sortkey=\""); - switch (service->sortkeys[md->sortkey_offset].type) { - case Metadata_sortkey_relevance: - wrbuf_puts(w, "relevance"); - break; - case Metadata_sortkey_numeric: - wrbuf_puts(w, "numeric"); - break; - case Metadata_sortkey_skiparticle: - wrbuf_puts(w, "skiparticle"); - break; - case Metadata_sortkey_string: - wrbuf_puts(w, "string"); - break; - case Metadata_sortkey_position: - wrbuf_puts(w, "position"); - break; - } - wrbuf_puts(w, "\""); - } - - switch (md->type) { - case Metadata_type_generic: - break; - case Metadata_type_year: - wrbuf_puts(w, " type=\"year\""); - break; - case Metadata_type_date: - wrbuf_puts(w, " type=\"date\""); - break; - } - - switch (md->merge) { - case Metadata_merge_no: - break; - case Metadata_merge_unique: - wrbuf_puts(w, " merge=\"unique\""); - break; - case Metadata_merge_longest: - wrbuf_puts(w, " merge=\"longest\""); + switch (service->sortkeys[md->sortkey_offset].type) + { + case Metadata_type_relevance: + wrbuf_puts(w, "relevance"); break; - case Metadata_merge_range: - wrbuf_puts(w, " merge=\"range\""); + case Metadata_type_skiparticle: + wrbuf_puts(w, "skiparticle"); break; - case Metadata_merge_all: - wrbuf_puts(w, " merge=\"all\""); + case Metadata_type_position: + wrbuf_puts(w, "position"); break; - case Metadata_merge_first: - wrbuf_puts(w, " merge=\"first\""); + default: + wrbuf_puts(w, "yes"); break; + } + wrbuf_puts(w, "\""); } - - switch (md->mergekey) { - case Metadata_mergekey_no: - break; - case Metadata_mergekey_optional: - wrbuf_puts(w, " mergekey=\"optional\""); - break; - case Metadata_mergekey_required: - wrbuf_puts(w, " mergekey=\"required\""); - break; + switch (md->type) + { + case Metadata_type_generic: + break; + case Metadata_type_year: + wrbuf_puts(w, " type=\"year\""); + break; + case Metadata_type_date: + wrbuf_puts(w, " type=\"date\""); + break; + case Metadata_type_float: + wrbuf_puts(w, " type=\"float\""); + break; + } + switch (md->merge) + { + case Metadata_merge_no: + break; + case Metadata_merge_unique: + wrbuf_puts(w, " merge=\"unique\""); + break; + case Metadata_merge_longest: + wrbuf_puts(w, " merge=\"longest\""); + break; + case Metadata_merge_range: + wrbuf_puts(w, " merge=\"range\""); + break; + case Metadata_merge_all: + wrbuf_puts(w, " merge=\"all\""); + break; + case Metadata_merge_first: + wrbuf_puts(w, " merge=\"first\""); + break; + } + switch (md->mergekey) + { + case Metadata_mergekey_no: + break; + case Metadata_mergekey_optional: + wrbuf_puts(w, " mergekey=\"optional\""); + break; + case Metadata_mergekey_required: + wrbuf_puts(w, " mergekey=\"required\""); + break; } wrbuf_puts(w, " />\n"); } } } -void info_service_databases(struct conf_service *service, WRBUF w) +static void info_service_databases(struct conf_service *service, WRBUF w) { struct database *db; struct setting *s; @@ -1093,16 +1106,18 @@ void info_service_databases(struct conf_service *service, WRBUF w) for(db = service->databases; db; db = db->next) { wrbuf_puts(w, " id) { - wrbuf_puts(w, " id=\""); - wrbuf_printf(w, "%s", db->id); - wrbuf_puts(w, "\""); + if (db->id) + { + wrbuf_puts(w, " id=\""); + wrbuf_printf(w, "%s", db->id); + wrbuf_puts(w, "\""); } wrbuf_puts(w, ">\n"); for (i = 0; i < db->num_settings; i++) { s = db->settings[i]; - while (s != NULL) { + while (s != NULL) + { wrbuf_puts(w, " name); @@ -1116,7 +1131,6 @@ void info_service_databases(struct conf_service *service, WRBUF w) } wrbuf_puts(w, " \n"); } - wrbuf_puts(w, " \n"); } } @@ -1286,7 +1300,6 @@ void server_destroy(struct conf_server *server) s = s_next; } pp2_charset_fact_destroy(server->charsets); - yaz_log(YLOG_LOG, "server_destroy server=%p", server); http_server_destroy(server->http_server); }