if (!rdoc)
{
session_log(se, YLOG_FATAL, "Non-wellformed XML received from %s",
- db->url);
+ db->id);
return 0;
}
if (global_parameters.dump_records)
{
- session_log(se, YLOG_LOG, "Un-normalized record from %s", db->url);
+ session_log(se, YLOG_LOG, "Un-normalized record from %s", db->id);
log_xml_doc(rdoc);
}
if (normalize_record_transform(sdb->map, &rdoc, (const char **)parms))
{
session_log(se, YLOG_WARN, "Normalize failed from %s",
- sdb->database->url);
+ sdb->database->id);
}
else
{
if (global_parameters.dump_records)
{
session_log(se, YLOG_LOG, "Normalized record from %s",
- sdb->database->url);
+ sdb->database->id);
log_xml_doc(rdoc);
}
}
if (!sdb->settings)
{
- session_log(se, YLOG_WARN, "No settings on %s", sdb->database->url);
+ session_log(se, YLOG_WARN, "No settings on %s", sdb->database->id);
return -1;
}
if ((s = session_setting_oneval(sdb, PZ_XSLT)))
if (!sdb->settings)
{
session_log(se, YLOG_WARN,
- "No settings associated with %s", sdb->database->url);
+ "No settings associated with %s", sdb->database->id);
return -1;
}
if (sdb->settings[PZ_XSLT] && !sdb->map)
static void select_targets_callback(struct session *se,
struct session_database *db)
{
- struct client *cl = client_create();
+ struct client *cl = client_create(db->database->id);
struct client_list *l;
+
client_set_database(cl, db);
client_set_session(cl, se);
return res == 0;
}
+void search_sort(struct session *se, const char *field, int increasing)
+{
+ struct client_list *l;
+ struct timeval tval;
+
+ session_enter(se);
+ for (l = se->clients; l; l = l->next)
+ {
+ struct client *cl = l->client;
+ struct session_database *sdb = client_get_database(cl);
+ struct setting *s;
+ const char *strategy_plus_sort = 0;
+
+ for (s = sdb->settings[PZ_SORTMAP]; s; s = s->next)
+ {
+ char *p = strchr(s->name + 3, ':');
+ if (!p)
+ {
+ yaz_log(YLOG_WARN, "Malformed sortmap name: %s", s->name);
+ continue;
+ }
+ p++;
+ if (!strcmp(p, field))
+ {
+ strategy_plus_sort = s->value;
+ break;
+ }
+ }
+
+ if (strategy_plus_sort)
+ {
+ if (client_prep_connection(cl, se->service->z3950_operation_timeout,
+ se->service->z3950_session_timeout,
+ se->service->server->iochan_man,
+ &tval))
+ {
+ char **array;
+ int num;
+ nmem_strsplit(se->nmem, ":", strategy_plus_sort, &array, &num);
+
+ if (num == 2)
+ {
+ const char *sort_spec = array[1];
+ while (*sort_spec == ' ')
+ sort_spec++;
+ client_start_search(cl, array[0], sort_spec);
+ }
+ }
+ }
+ }
+ session_leave(se);
+}
+
enum pazpar2_error_code search(struct session *se,
const char *query,
const char *startrecs, const char *maxrecs,
se->service->z3950_session_timeout,
se->service->server->iochan_man,
&tval))
- client_start_search(cl);
+ client_start_search(cl, 0, 0);
}
}
facet_limits_destroy(facet_limits);
{
struct database *db = new_database(id, se->session_nmem);
- resolve_database(se->service, db);
-
session_init_databases_fun((void*) se, db);
// New sdb is head of se->databases list
struct session_database *sdb;
for (sdb = se->databases; sdb; sdb = sdb->next)
- if (!strcmp(sdb->database->url, id))
+ if (!strcmp(sdb->database->id, id))
return sdb;
return load_session_database(se, id);
}
const char *name = session_setting_oneval(client_get_database(cl),
PZ_NAME);
- res[*count].id = client_get_database(cl)->database->url;
+ res[*count].id = client_get_id(cl);
res[*count].name = *name ? name : "Unknown";
res[*count].hits = client_get_hits(cl);
res[*count].records = client_get_num_records(cl);
if (wrbuf_len(norm_wr) == 0)
{
wrbuf_printf(norm_wr, "%s-%d",
- client_get_database(cl)->database->url, record_no);
+ client_get_id(cl), record_no);
}
if (wrbuf_len(norm_wr) > 0)
mergekey_norm = nmem_strdup(nmem, wrbuf_cstr(norm_wr));
if (!check_record_filter(root, sdb))
{
session_log(se, YLOG_LOG, "Filtered out record no %d from %s",
- record_no, sdb->database->url);
+ record_no, sdb->database->id);
xmlFreeDoc(xdoc);
return -2;
}
return -1;
if (global_parameters.dump_records)
session_log(se, YLOG_LOG, "Cluster id %s from %s (#%d)", cluster->recid,
- sdb->database->url, record_no);
+ sdb->database->id, record_no);
relevance_newrec(se->relevance, cluster);
// now parsing XML record and adding data to cluster or record metadata