projects
/
pazpar2-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
New optional argument, maxrecs, for cmd=search
[pazpar2-moved-to-github.git]
/
src
/
client.c
diff --git
a/src/client.c
b/src/client.c
index
d17e640
..
a7d069d
100644
(file)
--- a/
src/client.c
+++ b/
src/client.c
@@
-59,21
+59,22
@@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#endif
#include "pazpar2.h"
#endif
#include "pazpar2.h"
-
+#include "parameters.h"
#include "client.h"
#include "connection.h"
#include "settings.h"
#include "client.h"
#include "connection.h"
#include "settings.h"
+#include "relevance.h"
/** \brief Represents client state for a connection to one search target */
struct client {
struct session_database *database;
/** \brief Represents client state for a connection to one search target */
struct client {
struct session_database *database;
- struct conf_server *server;
struct connection *connection;
struct session *session;
char *pquery; // Current search
char *cqlquery; // used for SRU targets only
int hits;
int record_offset;
struct connection *connection;
struct session *session;
char *pquery; // Current search
char *cqlquery; // used for SRU targets only
int hits;
int record_offset;
+ int maxrecs;
int diagnostic;
enum client_state state;
struct show_raw *show_raw;
int diagnostic;
enum client_state state;
struct show_raw *show_raw;
@@
-102,7
+103,7
@@
static const char *client_states[] = {
"Client_Disconnected"
};
"Client_Disconnected"
};
-static struct client *client_freelist = 0;
+static struct client *client_freelist = 0; /* thread pr */
const char *client_get_state_str(struct client *cl)
{
const char *client_get_state_str(struct client *cl)
{
@@
-254,6
+255,13
@@
int client_show_raw_begin(struct client *cl, int position,
return 0;
}
return 0;
}
+static void client_show_raw_delete(struct show_raw *r)
+{
+ xfree(r->syntax);
+ xfree(r->esn);
+ xfree(r);
+}
+
void client_show_raw_remove(struct client *cl, void *data)
{
struct show_raw *rr = data;
void client_show_raw_remove(struct client *cl, void *data)
{
struct show_raw *rr = data;
@@
-263,7
+271,7
@@
void client_show_raw_remove(struct client *cl, void *data)
if (*rrp)
{
*rrp = rr->next;
if (*rrp)
{
*rrp = rr->next;
- xfree(rr);
+ client_show_raw_delete(rr);
}
}
}
}
@@
-272,7
+280,7
@@
void client_show_raw_dequeue(struct client *cl)
struct show_raw *rr = cl->show_raw;
cl->show_raw = rr->next;
struct show_raw *rr = cl->show_raw;
cl->show_raw = rr->next;
- xfree(rr);
+ client_show_raw_delete(rr);
}
static void client_show_raw_error(struct client *cl, const char *addinfo)
}
static void client_show_raw_error(struct client *cl, const char *addinfo)
@@
-489,6
+497,8
@@
void client_start_search(struct client *cl)
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_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);
+ char maxrecs_str[24];
assert(link);
assert(link);
@@
-509,24
+519,29
@@
void client_start_search(struct client *cl)
ZOOM_connection_option_set(link, "elementSetName", opt_elements);
if (*opt_requestsyn)
ZOOM_connection_option_set(link, "preferredRecordSyntax", opt_requestsyn);
ZOOM_connection_option_set(link, "elementSetName", opt_elements);
if (*opt_requestsyn)
ZOOM_connection_option_set(link, "preferredRecordSyntax", opt_requestsyn);
- if (*opt_maxrecs)
- ZOOM_connection_option_set(link, "count", opt_maxrecs);
- else
+
+ if (!*opt_maxrecs)
{
{
- char n[128];
- sprintf(n, "%d", global_parameters.toget);
- ZOOM_connection_option_set(link, "count", n);
+ sprintf(maxrecs_str, "%d", cl->maxrecs);
+ opt_maxrecs = maxrecs_str;
}
}
+ ZOOM_connection_option_set(link, "count", opt_maxrecs);
+
+ if (atoi(opt_maxrecs) > 20)
+ ZOOM_connection_option_set(link, "presentChunk", "20");
+ else
+ ZOOM_connection_option_set(link, "presentChunk", opt_maxrecs);
+
if (databaseName)
ZOOM_connection_option_set(link, "databaseName", databaseName);
if (databaseName)
ZOOM_connection_option_set(link, "databaseName", databaseName);
- ZOOM_connection_option_set(link, "presentChunk", "20");
-
if (cl->cqlquery)
{
ZOOM_query q = ZOOM_query_create();
yaz_log(YLOG_LOG, "Search %s CQL: %s", sdb->database->url, cl->cqlquery);
ZOOM_query_cql(q, cl->cqlquery);
if (cl->cqlquery)
{
ZOOM_query q = ZOOM_query_create();
yaz_log(YLOG_LOG, "Search %s CQL: %s", sdb->database->url, cl->cqlquery);
ZOOM_query_cql(q, cl->cqlquery);
+ if (*opt_sort)
+ ZOOM_query_sortby(q, opt_sort);
rs = ZOOM_connection_search(link, q);
ZOOM_query_destroy(q);
}
rs = ZOOM_connection_search(link, q);
ZOOM_query_destroy(q);
}
@@
-550,6
+565,7
@@
struct client *client_create(void)
}
else
r = xmalloc(sizeof(struct client));
}
else
r = xmalloc(sizeof(struct client));
+ r->maxrecs = 100;
r->pquery = 0;
r->cqlquery = 0;
r->database = 0;
r->pquery = 0;
r->cqlquery = 0;
r->database = 0;
@@
-647,9
+663,10
@@
static char *make_cqlquery(struct client *cl)
ODR odr_out = odr_createmem(ODR_ENCODE);
zquery = p_query_rpn(odr_out, cl->pquery);
ODR odr_out = odr_createmem(ODR_ENCODE);
zquery = p_query_rpn(odr_out, cl->pquery);
+ yaz_log(YLOG_LOG, "PQF: %s", cl->pquery);
if ((status = cql_transform_rpn2cql_wrbuf(cqlt, wrb, zquery)))
{
if ((status = cql_transform_rpn2cql_wrbuf(cqlt, wrb, zquery)))
{
- yaz_log(YLOG_WARN, "failed to generate CQL query, code=%d", status);
+ yaz_log(YLOG_WARN, "Failed to generate CQL query, code=%d", status);
r = 0;
}
else
r = 0;
}
else
@@
-681,8
+698,9
@@
int client_parse_query(struct client *cl, const char *query)
if (!cn)
{
client_set_state(cl, Client_Error);
if (!cn)
{
client_set_state(cl, Client_Error);
- yaz_log(YLOG_WARN, "Failed to parse query for %s",
- client_get_database(cl)->database->url);
+ yaz_log(YLOG_WARN, "Failed to parse CCL query %s for %s",
+ query,
+ client_get_database(cl)->database->url);
return -1;
}
wrbuf_rewind(se->wrbuf);
return -1;
}
wrbuf_rewind(se->wrbuf);
@@
-711,8
+729,7
@@
int client_parse_query(struct client *cl, const char *query)
extract_terms(se->nmem, cn, p);
se->relevance = relevance_create(
se->service->relevance_pct,
extract_terms(se->nmem, cn, p);
se->relevance = relevance_create(
se->service->relevance_pct,
- se->nmem, (const char **) p,
- se->expected_maxrecs);
+ se->nmem, (const char **) p);
}
ccl_rpn_delete(cn);
}
ccl_rpn_delete(cn);
@@
-772,6
+789,11
@@
const char *client_get_url(struct client *cl)
return client_get_database(cl)->database->url;
}
return client_get_database(cl)->database->url;
}
+void client_set_maxrecs(struct client *cl, int v)
+{
+ cl->maxrecs = v;
+}
+
/*
* Local variables:
* c-basic-offset: 4
/*
* Local variables:
* c-basic-offset: 4