X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=client%2Fclient.c;h=9a00c6384d475b23f9675d0eaf48dc303b5fa110;hp=cd849a46ba77238365b85a83741961c953c76ee4;hb=15cbfd594a64e997955bbecd1aeb95bc854a1217;hpb=b10a7695e0cd0a6f8a8db03388b10c5090522d0d diff --git a/client/client.c b/client/client.c index cd849a4..9a00c63 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,41 @@ 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(" %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:"); - 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; - }; - } - } + int index; + printf("Facets(%d): \n", fl->num); + for (index = 0; index < fl->num ; index++) { + display_facet(fl->elements[index]); } return 0; } @@ -2841,45 +2858,13 @@ static int cmd_find(const char *arg) return 2; } -static Z_FacetField* parse_facet(ODR odr, char *facet, int length) -{ - YAZ_PQF_Parser pqf_parser = yaz_pqf_create(); - char buffer[length+1]; - Odr_oid *attributeSetId; - Z_FacetField *facet_field; - Z_AttributeList *attribute_list; - memcpy(buffer, facet, length); - buffer[length] = '\0'; - attribute_list = yaz_pqf_scan_attribute_list(pqf_parser, odr, &attributeSetId, buffer); - - if (!attribute_list) { - printf("Invalid facet definition: %s", facet); - return 0; - } - facet_field = odr_malloc(odr, sizeof(*facet_field)); - facet_field->attributes = attribute_list; - facet_field->num_terms = 0; - facet_field->terms = 0; - return facet_field; -} - -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] == ',') - count++; - } - return count; -} - 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); @@ -2890,34 +2875,14 @@ static int cmd_facets(const char *arg) } else { - int index = 0; - Z_FacetField **elements; - int num_elements ; - char *facet = arg; - // parse facets list + /* TODO Wrong odr. Loosing memory */ 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, ','); - if (pos == 0) - pos = facet + strlen(facet); - elements[index] = parse_facet(odr, facet, (pos - facet)); - if (elements[index]) { - index++; - } - else - num_elements--; - facet = pos + 1; - } + facet_list = yaz_pqf_parse_facet_list(odr, arg); - if (!num_elements || !facet_list) { + if (!facet_list) { printf("Invalid facet list: %s", arg); return 0; } - facet_list->elements = elements; - facet_list->num = index; return 1; } return 2; @@ -3400,7 +3365,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 +3407,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);