X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fextract.c;h=0dc5773ccfe110b6178bb60941d31b862a578d48;hb=fc9684841bbfad0b625e7365b99bae7b7df737df;hp=bf94e3f1386f52dccc7a4f3ab7bf9647b7023266;hpb=f0e68a4ee36180d52d69369d0bb09a33392bb643;p=idzebra-moved-to-github.git diff --git a/index/extract.c b/index/extract.c index bf94e3f..0dc5773 100644 --- a/index/extract.c +++ b/index/extract.c @@ -1,4 +1,4 @@ -/* $Id: extract.c,v 1.138 2003-02-27 22:55:40 adam Exp $ +/* $Id: extract.c,v 1.140 2003-03-04 23:30:20 adam Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -961,39 +961,45 @@ int bufferExtractRecord (ZebraHandle zh, extractCtrl.endf = zebra_record_int_end; extractCtrl.fh = &fc; - /* announce database */ - if (zebraExplain_curDatabase (zh->reg->zei, rGroup->databaseName)) - { - if (zebraExplain_newDatabase (zh->reg->zei, rGroup->databaseName, 0)) - return 0; - } - zh->reg->keys.buf_used = 0; zh->reg->keys.prevAttrUse = -1; zh->reg->keys.prevAttrSet = -1; zh->reg->keys.prevSeqNo = 0; zh->reg->sortKeys.buf_used = 0; + /* announce database */ + + if (!(rGroup->databaseName)) { + logf (LOG_WARN, "Invalid record group, no database name given"); + return 0; + } + + if (zebraExplain_curDatabase (zh->reg->zei, rGroup->databaseName)) + { + if (zebraExplain_newDatabase (zh->reg->zei, rGroup->databaseName, 0)) + return 0; + } + if (*recordType) { - logf (LOG_DEBUG, "Record type explicitly specified: %s", recordType); - recType = recType_byName (zh->reg->recTypes, recordType, subType, - &clientData); + logf (LOG_DEBUG, "Record type explicitly specified: %s", recordType); + recType = recType_byName (zh->reg->recTypes, recordType, subType, + &clientData); } else { - if (!(rGroup->recordType)) { - logf (LOG_WARN, "No such record type defined"); - return 0; - } - logf (LOG_DEBUG, "Get record type from rgroup: %s",rGroup->recordType); - recType = recType_byName (zh->reg->recTypes, rGroup->recordType, subType, - &clientData); - recordType = rGroup->recordType; + if (!(rGroup->recordType)) { + logf (LOG_WARN, "No such record type defined"); + return 0; + } + logf (LOG_DEBUG, "Get record type from rgroup: %s",rGroup->recordType); + recType = recType_byName (zh->reg->recTypes, rGroup->recordType, subType, + &clientData); + recordType = rGroup->recordType; } - + if (!recType) { - logf (LOG_WARN, "No such record type: %s", rGroup->recordType); - return 0; + logf (LOG_WARN, "No such record type: %s", rGroup->recordType); + return 0; } - + extractCtrl.subType = subType; extractCtrl.init = extract_init; extractCtrl.tokenAdd = extract_token_add; @@ -1039,25 +1045,24 @@ int bufferExtractRecord (ZebraHandle zh, /* match criteria */ matchStr = NULL; - if (! *sysno) { - char *rinfo; - if (strlen(match_criteria) > 0) { - matchStr = (char *)match_criteria; - } else { - if (rGroup->recordId && *rGroup->recordId) { - matchStr = fileMatchStr (zh, &zh->reg->keys, rGroup, fname, - rGroup->recordId); - } - } - if (matchStr) { - rinfo = dict_lookup (zh->reg->matchDict, matchStr); - if (rinfo) - memcpy (sysno, rinfo+1, sizeof(*sysno)); - } else { - logf (LOG_WARN, "Bad match criteria (recordID)"); - return 0; - } - + if (! *sysno && match_criteria) { + char *rinfo; + if (*match_criteria) { + matchStr = (char *)match_criteria; + } else { + if (rGroup->recordId && *rGroup->recordId) { + matchStr = fileMatchStr (zh, &zh->reg->keys, rGroup, fname, + rGroup->recordId); + } + } + if (matchStr) { + rinfo = dict_lookup (zh->reg->matchDict, matchStr); + if (rinfo) + memcpy (sysno, rinfo+1, sizeof(*sysno)); + } else { + logf (LOG_WARN, "Bad match criteria (recordID)"); + return 0; + } } if (! *sysno)