+ struct connection *co = client_get_connection(cl);
+ ZOOM_connection link = connection_get_link(co);
+ ZOOM_resultset rs;
+ char *databaseName = sdb->database->databases[0];
+ const char *opt_piggyback = session_setting_oneval(sdb, PZ_PIGGYBACK);
+ const char *opt_queryenc = session_setting_oneval(sdb, PZ_QUERYENCODING);
+ const char *opt_elements = session_setting_oneval(sdb, PZ_ELEMENTS);
+ const char *opt_requestsyn = session_setting_oneval(sdb, PZ_REQUESTSYNTAX);
+ const char *opt_maxrecs = session_setting_oneval(sdb, PZ_MAXRECS);
+ const char *opt_sru = session_setting_oneval(sdb, PZ_SRU);
+ const char *opt_sort = session_setting_oneval(sdb, PZ_SORT);
+ const char *opt_preferred = session_setting_oneval(sdb, PZ_PREFERRED);
+ const char *extra_args = session_setting_oneval(sdb, PZ_EXTRA_ARGS);
+ char maxrecs_str[24], startrecs_str[24];
+
+ assert(link);
+
+ cl->hits = -1;
+ cl->record_offset = 0;
+ cl->diagnostic = 0;
+
+ if (extra_args && *extra_args)
+ ZOOM_connection_option_set(link, "extraArgs", extra_args);
+
+ if (opt_preferred) {
+ cl->preferred = atoi(opt_preferred);
+ if (cl->preferred)
+ yaz_log(YLOG_LOG, "Target %s has preferred status: %d", sdb->database->url, cl->preferred);
+ }
+ client_set_state(cl, Client_Working);
+
+ if (*opt_piggyback)
+ ZOOM_connection_option_set(link, "piggyback", opt_piggyback);
+ else
+ ZOOM_connection_option_set(link, "piggyback", "1");
+ if (*opt_queryenc)
+ ZOOM_connection_option_set(link, "rpnCharset", opt_queryenc);
+ if (*opt_sru && *opt_elements)
+ ZOOM_connection_option_set(link, "schema", opt_elements);
+ else if (*opt_elements)
+ ZOOM_connection_option_set(link, "elementSetName", opt_elements);
+ if (*opt_requestsyn)
+ ZOOM_connection_option_set(link, "preferredRecordSyntax", opt_requestsyn);
+
+ if (opt_maxrecs && *opt_maxrecs)
+ {
+ cl->maxrecs = atoi(opt_maxrecs);
+ }
+
+ /* convert back to string representation used in ZOOM API */
+ sprintf(maxrecs_str, "%d", cl->maxrecs);
+ ZOOM_connection_option_set(link, "count", maxrecs_str);
+
+ if (cl->maxrecs > 20)
+ ZOOM_connection_option_set(link, "presentChunk", "20");
+ else
+ ZOOM_connection_option_set(link, "presentChunk", maxrecs_str);
+
+ sprintf(startrecs_str, "%d", cl->startrecs);
+ ZOOM_connection_option_set(link, "start", startrecs_str);
+
+ if (databaseName)
+ ZOOM_connection_option_set(link, "databaseName", databaseName);
+
+ /* TODO Verify does it break something for CQL targets(non-SOLR) ? */
+ /* facets definition is in PQF */
+ client_set_facets_request(cl, link);