X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=index%2Falvis.c;h=60beacabeb277594afff06224dff766fcf38c32c;hb=e1352999e1be86b0ce5c2698bb62f9fc7d598a4f;hp=da5817bad8e69b31e6ad99fbb61ec563cd9c0800;hpb=dd094f96179451fb9445cc33d288a0ba540dc42c;p=idzebra-moved-to-github.git diff --git a/index/alvis.c b/index/alvis.c index da5817b..60beaca 100644 --- a/index/alvis.c +++ b/index/alvis.c @@ -1,5 +1,5 @@ -/* $Id: alvis.c,v 1.7 2006-12-05 09:26:04 adam Exp $ - Copyright (C) 1995-2006 +/* $Id: alvis.c,v 1.11 2007-01-15 15:10:16 adam Exp $ + Copyright (C) 1995-2007 Index Data ApS This file is part of the Zebra server. @@ -434,8 +434,7 @@ static void index_record(struct filter_info *tinfo,struct recExtractCtrl *ctrl, sscanf(id_str, "%255s", ctrl->match_criteria); if (rank_str) - ctrl->staticrank = atoi(rank_str); - + ctrl->staticrank = atozint(rank_str); ptr = ptr->children; } @@ -518,9 +517,7 @@ static int extract_split(struct filter_info *tinfo, struct recExtractCtrl *p) { int type = xmlTextReaderNodeType(tinfo->reader); int depth = xmlTextReaderDepth(tinfo->reader); - if (tinfo->split_level == 0 || - (tinfo->split_level > 0 && - type == XML_READER_TYPE_ELEMENT && tinfo->split_level == depth)) + if (type == XML_READER_TYPE_ELEMENT && tinfo->split_level == depth) { xmlNodePtr ptr = xmlTextReaderExpand(tinfo->reader); if (ptr) @@ -546,13 +543,33 @@ static int extract_split(struct filter_info *tinfo, struct recExtractCtrl *p) return RECCTRL_EXTRACT_EOF; } +static int extract_full(struct filter_info *tinfo, struct recExtractCtrl *p) +{ + if (p->first_record) /* only one record per stream */ + { + xmlDocPtr doc = xmlReadIO(ioread_ex, ioclose_ex, p /* I/O handler */, + 0 /* URL */, + 0 /* encoding */, + XML_PARSE_XINCLUDE); + if (!doc) + { + return RECCTRL_EXTRACT_ERROR_GENERIC; + } + return extract_doc(tinfo, p, doc); + } + else + return RECCTRL_EXTRACT_EOF; +} + static int filter_extract(void *clientData, struct recExtractCtrl *p) { struct filter_info *tinfo = clientData; odr_reset(tinfo->odr); - - return extract_split(tinfo, p); + if (tinfo->split_level == 0) + return extract_full(tinfo, p); + else + return extract_split(tinfo, p); } static int ioread_ret(void *context, char *buffer, int len)