X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Frecgrs.c;h=3137760ddd9648d4bb898d03df9d78b18bf9bd29;hb=4e67b823f05b521f193af096a40c0f64758c5fc1;hp=46805ab947f2a66b92a04e11caa4f52aef86ba10;hpb=b04a1cdb1a0345252a78caa8f7731089df314ad0;p=idzebra-moved-to-github.git diff --git a/index/recgrs.c b/index/recgrs.c index 46805ab..3137760 100644 --- a/index/recgrs.c +++ b/index/recgrs.c @@ -1,5 +1,5 @@ -/* $Id: recgrs.c,v 1.12 2006-12-22 13:57:27 adam Exp $ - Copyright (C) 1995-2006 +/* $Id: recgrs.c,v 1.16 2007-03-07 21:08:36 adam Exp $ + Copyright (C) 1995-2007 Index Data ApS This file is part of the Zebra server. @@ -27,6 +27,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #include +#include #include #include @@ -525,25 +526,6 @@ static void mk_tag_path_full(char *tag_path_full, size_t max, data1_node *n) } -static void index_staticrank(struct recExtractCtrl *p, - RecWord *wrd, - data1_absyn *absyn) -{ - const char *staticrank_index = data1_absyn_get_staticrank(absyn); - - if (staticrank_index && !strcmp(wrd->index_name, staticrank_index)) - { - char valz[20]; - size_t len = wrd->term_len; - - if (len > sizeof(valz)-1) - len = sizeof(valz)-1; - memcpy(valz, wrd->term_buf, len); - valz[len] = '\0'; - p->staticrank = atozint(valz); - } -} - static void index_xpath(struct source_parser *sp, data1_node *n, struct recExtractCtrl *p, int level, RecWord *wrd, @@ -555,7 +537,6 @@ static void index_xpath(struct source_parser *sp, data1_node *n, char tag_path_full[1024]; int termlist_only = 1; data1_termlist *tl; - int xpdone = 0; if (!n->root->u.root.absyn || @@ -570,7 +551,6 @@ static void index_xpath(struct source_parser *sp, data1_node *n, case DATA1N_data: wrd->term_buf = n->u.data.data; wrd->term_len = n->u.data.len; - xpdone = 0; mk_tag_path_full(tag_path_full, sizeof(tag_path_full), n); @@ -607,7 +587,6 @@ static void index_xpath(struct source_parser *sp, data1_node *n, else { (*p->tokenAdd)(&wrd_tl); - index_staticrank(p, &wrd_tl, n->root->u.root.absyn); } if (wrd_tl.seqno > max_seqno) max_seqno = wrd_tl.seqno; @@ -618,7 +597,7 @@ static void index_xpath(struct source_parser *sp, data1_node *n, } /* xpath indexing is done, if there was no termlist given, or no ! in the termlist, and default indexing is enabled... */ - if (!p->flagShowRecords && !xpdone && !termlist_only) + if (!p->flagShowRecords && !termlist_only) { wrd->index_name = xpath_index; wrd->index_type = 'w'; @@ -626,8 +605,6 @@ static void index_xpath(struct source_parser *sp, data1_node *n, } break; case DATA1N_tag: - if (termlist_only) - return; mk_tag_path_full(tag_path_full, sizeof(tag_path_full), n); wrd->index_type = '0'; @@ -647,7 +624,8 @@ static void index_xpath(struct source_parser *sp, data1_node *n, { data1_xattr *xp; - (*p->tokenAdd)(wrd); /* index element pag (AKA tag path) */ + if (!termlist_only) + (*p->tokenAdd)(wrd); /* index element pag (AKA tag path) */ if (xpath_is_start == 1) /* only for the starting tag... */ { @@ -662,35 +640,38 @@ static void index_xpath(struct source_parser *sp, data1_node *n, /* this could be cached as well */ sprintf (attr_tag_path_full, "@%s/%s", xp->name, tag_path_full); - + tll[i] = xpath_termlist_by_tagpath(attr_tag_path_full,n); - /* attribute (no value) */ - wrd->index_type = '0'; - wrd->index_name = ZEBRA_XPATH_ATTR_NAME; - wrd->term_buf = xp->name; - wrd->term_len = strlen(xp->name); - - wrd->seqno--; - (*p->tokenAdd)(wrd); - - if (xp->value - && - strlen(xp->name) + strlen(xp->value) < sizeof(comb)-2) + if (!termlist_only) { - /* attribute value exact */ - strcpy (comb, xp->name); - strcat (comb, "="); - strcat (comb, xp->value); - - wrd->index_name = ZEBRA_XPATH_ATTR_NAME; + /* attribute (no value) */ wrd->index_type = '0'; - wrd->term_buf = comb; - wrd->term_len = strlen(comb); - wrd->seqno--; + wrd->index_name = ZEBRA_XPATH_ATTR_NAME; + wrd->term_buf = xp->name; + wrd->term_len = strlen(xp->name); + wrd->seqno--; (*p->tokenAdd)(wrd); - } + + if (xp->value + && + strlen(xp->name) + strlen(xp->value) < sizeof(comb)-2) + { + /* attribute value exact */ + strcpy (comb, xp->name); + strcat (comb, "="); + strcat (comb, xp->value); + + wrd->index_name = ZEBRA_XPATH_ATTR_NAME; + wrd->index_type = '0'; + wrd->term_buf = comb; + wrd->term_len = strlen(comb); + wrd->seqno--; + + (*p->tokenAdd)(wrd); + } + } i++; } @@ -702,7 +683,6 @@ static void index_xpath(struct source_parser *sp, data1_node *n, sprintf (attr_tag_path_full, "@%s/%s", xp->name, tag_path_full); - if ((tl = tll[i])) { /* If there is a termlist given (=xelm directive) */ @@ -724,8 +704,6 @@ static void index_xpath(struct source_parser *sp, data1_node *n, wrd->term_buf = xp->value; wrd->term_len = strlen(xp->value); (*p->tokenAdd)(wrd); - index_staticrank(p, wrd, - n->root->u.root.absyn); } } } @@ -733,7 +711,7 @@ static void index_xpath(struct source_parser *sp, data1_node *n, /* if there was no termlist for the given path, or the termlist didn't have a ! element, index the attribute as "w" */ - if ((!xpdone) && (!termlist_only)) + if (!xpdone && !termlist_only) { index_xpath_attr (attr_tag_path_full, xp->name, xp->value, "w", p, wrd); @@ -793,7 +771,6 @@ static void index_termlist (struct source_parser *sp, data1_node *par, { wrd->index_type = *tlist->structure; wrd->index_name = tlist->index_name; - index_staticrank(p, wrd, n->root->u.root.absyn); (*p->tokenAdd)(wrd); } } @@ -1137,7 +1114,7 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p, node = (*grs_read)(&gri); if (!node) { - p->diagnostic = 14; + p->diagnostic = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS; nmem_destroy (mem); return 0; } @@ -1213,7 +1190,7 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p, onode = node; if (!(node = data1_map_record(p->dh, onode, map, mem))) { - p->diagnostic = 14; + p->diagnostic = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS; nmem_destroy (mem); return 0; } @@ -1242,7 +1219,7 @@ int zebra_grs_retrieve(void *clientData, struct recRetrieveCtrl *p, onode = node; if (!(node = data1_map_record(p->dh, onode, map, mem))) { - p->diagnostic = 14; + p->diagnostic = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS; nmem_destroy (mem); return 0; }