X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Fsession.c;h=373dd49e590e5f26260bb9304b354f37a1adcf73;hb=9ac9ee0172c5440d7dab879756893d943e313143;hp=545f0fccd6217ad5b27f7efb0167cb8808eebc2a;hpb=22cc5cd1bd9a791d80c8b36874dcb7856ce032b2;p=pazpar2-moved-to-github.git diff --git a/src/session.c b/src/session.c index 545f0fc..373dd49 100644 --- a/src/session.c +++ b/src/session.c @@ -488,7 +488,7 @@ int session_set_watch(struct session *s, int what, ret = 0; } session_leave(s); - return 0; + return ret; } void session_alert_watch(struct session *s, int what) @@ -594,6 +594,7 @@ enum pazpar2_error_code search(struct session *se, const char *query, const char *startrecs, const char *maxrecs, const char *filter, + const char *limit, const char **addinfo) { int live_channels = 0; @@ -601,6 +602,7 @@ enum pazpar2_error_code search(struct session *se, int no_failed = 0; struct client_list *l; struct timeval tval; + facet_limits_t facet_limits; session_log(se, YLOG_DEBUG, "Search"); @@ -627,6 +629,13 @@ enum pazpar2_error_code search(struct session *se, tval.tv_sec += 5; + facet_limits = facet_limits_create(limit); + if (!facet_limits) + { + *addinfo = "limit"; + session_leave(se); + return PAZPAR2_MALFORMED_PARAMETER_VALUE; + } for (l = se->clients; l; l = l->next) { struct client *cl = l->client; @@ -637,7 +646,7 @@ enum pazpar2_error_code search(struct session *se, client_set_startrecs(cl, atoi(startrecs)); if (prepare_session_database(se, client_get_database(cl)) < 0) ; - else if (client_parse_query(cl, query) < 0) + else if (client_parse_query(cl, query, facet_limits) < 0) no_failed++; else { @@ -649,6 +658,7 @@ enum pazpar2_error_code search(struct session *se, client_start_search(cl); } } + facet_limits_destroy(facet_limits); session_leave(se); if (no_working == 0) {