X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=client%2Fclient.c;h=5b7594d1f3346bcefca7d316cebf6e76b5ac0758;hp=cd849a46ba77238365b85a83741961c953c76ee4;hb=3fa5c310994e3449aac2926385f742fe34fb5757;hpb=b10a7695e0cd0a6f8a8db03388b10c5090522d0d diff --git a/client/client.c b/client/client.c index cd849a4..5b7594d 100644 --- a/client/client.c +++ b/client/client.c @@ -62,6 +62,7 @@ #include #include #include +#include #if HAVE_READLINE_READLINE_H #include @@ -751,6 +752,9 @@ int cmd_open(const char *arg) strncpy(cur_host, arg, sizeof(cur_host)-1); cur_host[sizeof(cur_host)-1] = 0; } + /* TODO Make facet definition survive the open command without crashing */ + /* TODO Fix deallocation */ + facet_list = 0; set_base(""); r = session_connect(cur_host); @@ -1608,6 +1612,24 @@ static int send_searchRequest(const char *arg) return 2; } +static void display_term(Z_Term *term) { + switch (term->which) + { + case Z_Term_general: + printf("%.*s", term->u.general->len, term->u.general->buf); + break; + case Z_Term_characterString: + printf("%s", term->u.characterString); + break; + case Z_Term_numeric: + printf(ODR_INT_PRINTF, *term->u.numeric); + break; + case Z_Term_null: + printf("null"); + break; + } +} + /* display Query Expression as part of searchResult-1 */ static void display_queryExpression(const char *lead, Z_QueryExpression *qe) { @@ -1619,46 +1641,43 @@ static void display_queryExpression(const char *lead, Z_QueryExpression *qe) if (qe->u.term->queryTerm) { Z_Term *term = qe->u.term->queryTerm; - switch (term->which) - { - case Z_Term_general: - printf("%.*s", term->u.general->len, term->u.general->buf); - break; - case Z_Term_characterString: - printf("%s", term->u.characterString); - break; - case Z_Term_numeric: - printf(ODR_INT_PRINTF, *term->u.numeric); - break; - case Z_Term_null: - printf("null"); - break; + display_term(term); + } + } +} + +static void display_facet(Z_FacetField *facet) { + if (facet->attributes) { + Z_AttributeList *al = facet->attributes; + struct attrvalues attr_values; + attr_values.errcode = 0; + attr_values.limit = -1; + attr_values.useattr = 0; + attr_values.relation = "default"; + + facetattrs(al, &attr_values); + if (!attr_values.errcode) { + int term_index; + printf("Facet: %s (%d): \n", attr_values.useattr, /* attr_values.relation, attr_values.limit, */ facet->num_terms); + for (term_index = 0 ; term_index < facet->num_terms; term_index++) { + Z_FacetTerm *facetTerm = facet->terms[term_index]; + display_term(facetTerm->term); + printf(" (" NMEM_INT_PRINTF ")\n", *facetTerm->count); } } + } } static void* display_facets(Z_FacetList *fl) { - int index, attribute_index; - printf("UserFacets-1:"); + int index; + printf("Facets (%d): \n", fl->num); + for (index = 0; index < fl->num ; index++) { if (index) printf(","); - if (!fl->elements[index]->attributes) { - Z_AttributeList *al = fl->elements[index]->attributes; - for (attribute_index = 0; attribute_index < al->num_attributes; attribute_index++) { - switch (al->attributes[attribute_index]->which) { - case Z_AttributeValue_complex: - break; - case Z_AttributeValue_numeric: - break; - default: - break; - }; - } - } - + display_facet(fl->elements[index]); } return 0; } @@ -2841,7 +2860,7 @@ static int cmd_find(const char *arg) return 2; } -static Z_FacetField* parse_facet(ODR odr, char *facet, int length) +static Z_FacetField* parse_facet(ODR odr, const char *facet, int length) { YAZ_PQF_Parser pqf_parser = yaz_pqf_create(); char buffer[length+1]; @@ -2860,15 +2879,19 @@ static Z_FacetField* parse_facet(ODR odr, char *facet, int length) facet_field->attributes = attribute_list; facet_field->num_terms = 0; facet_field->terms = 0; + //debug_add_facet_term(odr, facet_field); + return facet_field; } +#define FACET_DElIMITER ',' + static int scan_facet_argument(const char *arg) { int index; int length = strlen(arg); int count = 1; for (index = 0; index < length; index++) { - if (arg[index] == ',') + if (arg[index] == FACET_DElIMITER) count++; } return count; @@ -2879,7 +2902,8 @@ static int cmd_facets(const char *arg) int size = 0; if (!*arg) { - printf("Which facets?\n"); + facet_list = 0; + printf("Facets cleared.\n"); return 0; } size = strlen(arg); @@ -2893,17 +2917,17 @@ static int cmd_facets(const char *arg) int index = 0; Z_FacetField **elements; int num_elements ; - char *facet = arg; + const char *facet = arg; // parse facets list ODR odr = odr_createmem(ODR_ENCODE); num_elements = scan_facet_argument(arg); facet_list = odr_malloc(odr, sizeof(*facet_list)); elements = odr_malloc(odr, num_elements * sizeof(*elements)); for (index = 0; index < num_elements;) { - char *pos = strchr(facet, ','); + const char *pos = strchr(facet, FACET_DElIMITER); if (pos == 0) pos = facet + strlen(facet); - elements[index] = parse_facet(odr, facet, (pos - facet)); + elements[index] = parse_facet(odr, (const char *) facet, (pos - facet)); if (elements[index]) { index++; } @@ -3400,7 +3424,7 @@ int send_sortrequest(const char *arg, int newset) return 2; } -void display_term(Z_TermInfo *t) +void display_term_info(Z_TermInfo *t) { if (t->displayTerm) printf("%s", t->displayTerm); @@ -3442,7 +3466,7 @@ void process_scanResponse(Z_ScanResponse *res) if (entries[i]->which == Z_Entry_termInfo) { printf("%c ", i + 1 == pos_term ? '*' : ' '); - display_term(entries[i]->u.termInfo); + display_term_info(entries[i]->u.termInfo); } else display_diagrecs(&entries[i]->u.surrogateDiagnostic, 1);