// setting. However, this is not a realistic use scenario.
static int prepare_map(struct session *se, struct session_database *sdb)
{
- const char *s;
-
- if (sdb->settings && sdb->settings[PZ_XSLT] && !sdb->map &&
- (s = session_setting_oneval(sdb, PZ_XSLT)))
+ if (sdb->settings && !sdb->map)
{
- char auto_stylesheet[256];
+ const char *s;
- if (!strcmp(s, "auto"))
+ if (sdb->settings[PZ_EMBED_XSLT] &&
+ (s = session_setting_oneval(sdb, PZ_EMBED_XSLT)))
+ {
+ sdb->map = normalize_cache_get(se->normalize_cache,
+ se->service, s, 1);
+ if (!sdb->map)
+ return -1;
+ }
+ else if (sdb->settings[PZ_XSLT] &&
+ (s = session_setting_oneval(sdb, PZ_XSLT)))
{
- const char *request_syntax = session_setting_oneval(
- sdb, PZ_REQUESTSYNTAX);
- if (request_syntax)
+ char auto_stylesheet[256];
+
+ if (!strcmp(s, "auto"))
{
- char *cp;
- yaz_snprintf(auto_stylesheet, sizeof(auto_stylesheet),
- "%s.xsl", request_syntax);
- for (cp = auto_stylesheet; *cp; cp++)
+ const char *request_syntax = session_setting_oneval(
+ sdb, PZ_REQUESTSYNTAX);
+ if (request_syntax)
{
- /* deliberately only consider ASCII */
- if (*cp > 32 && *cp < 127)
- *cp = tolower(*cp);
+ char *cp;
+ yaz_snprintf(auto_stylesheet, sizeof(auto_stylesheet),
+ "%s.xsl", request_syntax);
+ for (cp = auto_stylesheet; *cp; cp++)
+ {
+ /* deliberately only consider ASCII */
+ if (*cp > 32 && *cp < 127)
+ *cp = tolower(*cp);
+ }
+ s = auto_stylesheet;
+ }
+ else
+ {
+ session_log(se, YLOG_WARN,
+ "No pz:requestsyntax for auto stylesheet");
}
- s = auto_stylesheet;
- }
- else
- {
- session_log(se, YLOG_WARN,
- "No pz:requestsyntax for auto stylesheet");
}
+ sdb->map = normalize_cache_get(se->normalize_cache,
+ se->service, s, 0);
+ if (!sdb->map)
+ return -1;
}
- sdb->map = normalize_cache_get(se->normalize_cache,
- se->service, s);
- if (!sdb->map)
- return -1;
}
return 0;
}
static struct session_database *load_session_database(struct session *se,
char *id)
{
- struct database *db = new_database(id, se->session_nmem);
-
+ struct database *db = new_database_inherit_settings(id, se->session_nmem, se->service->settings);
session_init_databases_fun((void*) se, db);
// New sdb is head of se->databases list
char **values = 0;
int i, num_v = 0;
- const char *name =
- client_get_facet_limit_local(cl, sdb, &l, nmem_tmp, &num_v,
- &values);
+ const char *name = client_get_facet_limit_local(cl, sdb, &l, nmem_tmp, &num_v, &values);
if (!name)
break;
struct record_metadata *rec_md = 0;
int md_field_id = -1;
int sk_field_id = -1;
+ int rank = 0;
+ xmlChar *rank_str = 0;
type = xmlGetProp(n, (xmlChar *) "type");
value = xmlNodeListGetString(xdoc, n->children, 1);
continue;
ser_md = &service->metadata[md_field_id];
+
+ rank_str = xmlGetProp(n, (xmlChar *) "rank");
+ if (rank_str)
+ {
+ rank = atoi((const char *) rank_str);
+ xmlFree(rank_str);
+ }
+ else
+ rank = ser_md->rank;
if (ser_md->sortkey_offset >= 0)
{
// ranking of _all_ fields enabled ...
- if (ser_md->rank)
+ if (rank)
+ {
relevance_countwords(se->relevance, cluster,
- (char *) value, ser_md->rank,
- ser_md->name);
+ (char *) value, rank, ser_md->name);
+ }
// construct facets ... unless the client already has reported them
if (ser_md->termlist && !client_has_facet(cl, (char *) type))