X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fextract.c;h=fb6e2284fa89f413ae9a72f090274f360ada32a1;hb=769b0ece6d1eb33e0f499c798cfff292c4f41053;hp=6ee0d0eaa714b98ad29de4cb959d3580ff0ce456;hpb=e809d64f640790b2695a659bd2eb0ebd4e3cf963;p=idzebra-moved-to-github.git diff --git a/index/extract.c b/index/extract.c index 6ee0d0e..fb6e228 100644 --- a/index/extract.c +++ b/index/extract.c @@ -1,4 +1,4 @@ -/* $Id: extract.c,v 1.134 2002-12-30 12:56:07 adam Exp $ +/* $Id: extract.c,v 1.137 2003-02-26 12:30:54 pop Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -916,6 +916,7 @@ int extract_rec_in_mem (ZebraHandle zh, const char *recordType, &rGroup, delete_flag, test_mode, + recordType, sysno, match_criteria, "")); @@ -931,6 +932,7 @@ int bufferExtractRecord (ZebraHandle zh, struct recordGroup *rGroup, int delete_flag, int test_mode, + const char *recordType, int *sysno, const char *match_criteria, const char *fname) @@ -940,10 +942,9 @@ int bufferExtractRecord (ZebraHandle zh, struct recExtractCtrl extractCtrl; int i, r; char *matchStr = 0; - RecType recType; + RecType recType = NULL; char subType[1024]; void *clientData; - SYSNO sysnotmp; Record rec; long recordOffset = 0; struct zebra_fetch_control fc; @@ -965,22 +966,10 @@ int bufferExtractRecord (ZebraHandle zh, /* announce database */ if (zebraExplain_curDatabase (zh->reg->zei, rGroup->databaseName)) { - if (zebraExplain_newDatabase (zh->reg->zei, rGroup->databaseName, 0)) - return 0; - } - - if (!(rGroup->recordType)) { - logf (LOG_WARN, "No such record type defined"); - return 0; + if (zebraExplain_newDatabase (zh->reg->zei, rGroup->databaseName, 0)) + return 0; } - if (!(recType = - recType_byName (zh->reg->recTypes, rGroup->recordType, subType, - &clientData))) - { - logf (LOG_WARN, "No such record type: %s", rGroup->recordType); - return 0; - } zh->reg->keys.buf_used = 0; zh->reg->keys.prevAttrUse = -1; zh->reg->keys.prevAttrSet = -1; @@ -989,6 +978,26 @@ int bufferExtractRecord (ZebraHandle zh, zh->reg->sortKeys.buf_max = 0; zh->reg->sortKeys.buf = 0; + if (*recordType) { + 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 (!recType) { + logf (LOG_WARN, "No such record type: %s", rGroup->recordType); + return 0; + } + extractCtrl.subType = subType; extractCtrl.init = extract_init; extractCtrl.tokenAdd = extract_token_add; @@ -1060,12 +1069,12 @@ int bufferExtractRecord (ZebraHandle zh, /* new record */ if (delete_flag) { - logf (LOG_LOG, "delete %s %s %ld", rGroup->recordType, + logf (LOG_LOG, "delete %s %s %ld", recordType, fname, (long) recordOffset); logf (LOG_WARN, "cannot delete record above (seems new)"); return 1; } - logf (LOG_LOG, "add %s %s %ld", rGroup->recordType, fname, + logf (LOG_LOG, "add %s %s %ld", recordType, fname, (long) recordOffset); rec = rec_new (zh->reg->records); @@ -1097,7 +1106,7 @@ int bufferExtractRecord (ZebraHandle zh, if (recordAttr->runNumber == zebraExplain_runNumberIncrement (zh->reg->zei, 0)) { - logf (LOG_LOG, "skipped %s %s %ld", rGroup->recordType, + logf (LOG_LOG, "skipped %s %s %ld", recordType, fname, (long) recordOffset); extract_flushSortKeys (zh, *sysno, -1, &zh->reg->sortKeys); rec_rm (&rec); @@ -1117,13 +1126,13 @@ int bufferExtractRecord (ZebraHandle zh, /* record going to be deleted */ if (!delkeys.buf_used) { - logf (LOG_LOG, "delete %s %s %ld", rGroup->recordType, + logf (LOG_LOG, "delete %s %s %ld", recordType, fname, (long) recordOffset); logf (LOG_WARN, "cannot delete file above, storeKeys false"); } else { - logf (LOG_LOG, "delete %s %s %ld", rGroup->recordType, + logf (LOG_LOG, "delete %s %s %ld", recordType, fname, (long) recordOffset); zh->records_deleted++; if (matchStr) @@ -1139,13 +1148,13 @@ int bufferExtractRecord (ZebraHandle zh, /* record going to be updated */ if (!delkeys.buf_used) { - logf (LOG_LOG, "update %s %s %ld", rGroup->recordType, + logf (LOG_LOG, "update %s %s %ld", recordType, fname, (long) recordOffset); logf (LOG_WARN, "cannot update file above, storeKeys false"); } else { - logf (LOG_LOG, "update %s %s %ld", rGroup->recordType, + logf (LOG_LOG, "update %s %s %ld", recordType, fname, (long) recordOffset); extract_flushSortKeys (zh, *sysno, 1, &zh->reg->sortKeys); extract_flushRecordKeys (zh, *sysno, 1, &zh->reg->keys); @@ -1156,7 +1165,7 @@ int bufferExtractRecord (ZebraHandle zh, /* update file type */ xfree (rec->info[recInfo_fileType]); rec->info[recInfo_fileType] = - rec_strdup (rGroup->recordType, &rec->size[recInfo_fileType]); + rec_strdup (recordType, &rec->size[recInfo_fileType]); /* update filename */ xfree (rec->info[recInfo_filename]); @@ -1591,7 +1600,7 @@ static void extract_add_sort_string (RecWord *p, const char *string, { ZebraHandle zh = p->extractCtrl->handle; struct sortKeys *sk = &zh->reg->sortKeys; - size_t off = 0; + int off = 0; while (off < sk->buf_used) { @@ -1754,13 +1763,13 @@ void extract_flushSortKeys (ZebraHandle zh, SYSNO sysno, int cmd, struct sortKeys *sk) { SortIdx sortIdx = zh->reg->sortIdx; - size_t off = 0; + int off = 0; sortIdx_sysno (sortIdx, sysno); while (off < sk->buf_used) { - int set, use, slen, l; + int set, use, slen; off += key_SU_decode(&set, sk->buf + off); off += key_SU_decode(&use, sk->buf + off);