X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fextract.c;h=1a5eada71e7a723ba2dca972c556be337da99b03;hb=6660da7da58c0cba7336a97394577a432058b9e4;hp=a980bcf26b0fede3d9ba9f7da960bb4100fd773c;hpb=bb4eac07c552975c048b3c3d373b549681376e80;p=idzebra-moved-to-github.git diff --git a/index/extract.c b/index/extract.c index a980bcf..1a5eada 100644 --- a/index/extract.c +++ b/index/extract.c @@ -1,4 +1,4 @@ -/* $Id: extract.c,v 1.218 2006-05-30 13:44:44 adam Exp $ +/* $Id: extract.c,v 1.222 2006-06-22 09:48:08 adam Exp $ Copyright (C) 1995-2006 Index Data ApS @@ -36,34 +36,33 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include #include -#ifdef WIN32 -#define PRINTF_OFF_T "%I64d" -#else -/* !WIN32 */ -#if SIZEOF_OFF_T == SIZEOF_LONG_LONG -#define PRINTF_OFF_T "%lld" -#else -#define PRINTF_OFF_T "%ld" -#endif - -#endif - #define ENCODE_BUFLEN 768 struct encode_info { -#if 0 - int sysno; /* previously written values for delta-compress */ - int seqno; - int cmd; - int prevsys; /* buffer for skipping insert/delete pairs */ - int prevseq; - int prevcmd; - int keylen; /* tells if we have an unwritten key in buf, and how long*/ -#endif void *encode_handle; void *decode_handle; char buf[ENCODE_BUFLEN]; }; +static int log_level = 0; +static int log_level_initialized = 1; + +static void zebra_init_log_level() +{ + if (!log_level_initialized) + { + log_level = yaz_log_module_level("extract"); + log_level_initialized = 1; + } +} + +static void extract_flushRecordKeys (ZebraHandle zh, SYSNO sysno, + int cmd, zebra_rec_keys_t reckeys, + zint staticrank); +static void extract_flushSortKeys (ZebraHandle zh, SYSNO sysno, + int cmd, zebra_rec_keys_t skp); +static void extract_schema_add (struct recExtractCtrl *p, Odr_oid *oid); +static void extract_token_add (RecWord *p); + static void encode_key_init (struct encode_info *i); static void encode_key_write (char *k, struct encode_info *i, FILE *outf); static void encode_key_flush (struct encode_info *i, FILE *outf); @@ -100,10 +99,10 @@ static void logRecord (ZebraHandle zh) ++zh->records_processed; if (!(zh->records_processed % 1000)) { - yaz_log (YLOG_LOG, "Records: "ZINT_FORMAT" i/u/d " - ZINT_FORMAT"/"ZINT_FORMAT"/"ZINT_FORMAT, - zh->records_processed, zh->records_inserted, zh->records_updated, - zh->records_deleted); + yaz_log(YLOG_LOG, "Records: "ZINT_FORMAT" i/u/d " + ZINT_FORMAT"/"ZINT_FORMAT"/"ZINT_FORMAT, + zh->records_processed, zh->records_inserted, + zh->records_updated, zh->records_deleted); } } @@ -145,7 +144,7 @@ static void searchRecordKey(ZebraHandle zh, if (zebra_rec_keys_rewind(reckeys)) { - int startSeq = -1; + zint startSeq = -1; const char *str; size_t slen; struct it_key key; @@ -158,7 +157,7 @@ static void searchRecordKey(ZebraHandle zh, if (key.mem[0] == ch) { - int woff; + zint woff; if (startSeq == -1) startSeq = seqno; @@ -460,11 +459,11 @@ static ZEBRA_RES file_extract_record(ZebraHandle zh, init_extractCtrl(zh, &extractCtrl); if (!zh->m_flag_rw) - printf ("File: %s " PRINTF_OFF_T "\n", fname, recordOffset); + printf ("File: %s " ZINT_FORMAT "\n", fname, (zint)recordOffset); if (zh->m_flag_rw) { char msg[512]; - sprintf (msg, "%s:" PRINTF_OFF_T , fname, recordOffset); + sprintf (msg, "%s:" ZINT_FORMAT , fname, (zint)recordOffset); yaz_log_init_prefix2 (msg); } @@ -479,8 +478,9 @@ static ZEBRA_RES file_extract_record(ZebraHandle zh, if (zh->m_flag_rw && zh->records_processed < zh->m_file_verbose_limit) { - yaz_log (YLOG_WARN, "fail %s %s " PRINTF_OFF_T, zh->m_record_type, - fname, recordOffset); + yaz_log (YLOG_WARN, "fail %s %s " ZINT_FORMAT, + zh->m_record_type, + fname, (zint) recordOffset); } return ZEBRA_FAIL; } @@ -491,8 +491,8 @@ static ZEBRA_RES file_extract_record(ZebraHandle zh, zh->records_processed < zh->m_file_verbose_limit) { yaz_log (YLOG_WARN, "no filter for %s %s " - PRINTF_OFF_T, zh->m_record_type, - fname, recordOffset); + ZINT_FORMAT, zh->m_record_type, + fname, (zint) recordOffset); } return ZEBRA_FAIL; } @@ -548,8 +548,8 @@ static ZEBRA_RES file_extract_record(ZebraHandle zh, return ZEBRA_OK; if (zh->records_processed < zh->m_file_verbose_limit) - yaz_log (YLOG_WARN, "empty %s %s " PRINTF_OFF_T, zh->m_record_type, - fname, recordOffset); + yaz_log(YLOG_WARN, "empty %s %s " ZINT_FORMAT, zh->m_record_type, + fname, (zint)recordOffset); return ZEBRA_OK; } @@ -558,9 +558,9 @@ static ZEBRA_RES file_extract_record(ZebraHandle zh, /* new record */ if (deleteFlag) { - yaz_log (YLOG_LOG, "delete %s %s " PRINTF_OFF_T, zh->m_record_type, - fname, recordOffset); - yaz_log (YLOG_WARN, "cannot delete record above (seems new)"); + yaz_log(YLOG_LOG, "delete %s %s " ZINT_FORMAT, zh->m_record_type, + fname, (zint)recordOffset); + yaz_log(YLOG_WARN, "cannot delete record above (seems new)"); return ZEBRA_OK; } @@ -570,10 +570,10 @@ static ZEBRA_RES file_extract_record(ZebraHandle zh, if (zh->records_processed < zh->m_file_verbose_limit) { - yaz_log(YLOG_LOG, "add %s %s " PRINTF_OFF_T + yaz_log(YLOG_LOG, "add %s %s " ZINT_FORMAT " " ZINT_FORMAT " %s" , zh->m_record_type, - fname, recordOffset, *sysno, match_str_to_print); + fname, (zint) recordOffset, *sysno, match_str_to_print); } recordAttr = rec_init_attr (zh->reg->zei, rec); recordAttr->staticrank = extractCtrl.staticrank; @@ -620,19 +620,19 @@ static ZEBRA_RES file_extract_record(ZebraHandle zh, /* record going to be deleted */ if (zebra_rec_keys_empty(delkeys)) { - yaz_log (YLOG_LOG, "delete %s %s " PRINTF_OFF_T - " " ZINT_FORMAT, - zh->m_record_type, fname, recordOffset, *sysno); - yaz_log (YLOG_WARN, "cannot delete file above, storeKeys false (1)"); + yaz_log(YLOG_LOG, "delete %s %s " ZINT_FORMAT + " " ZINT_FORMAT, + zh->m_record_type, fname, (zint)recordOffset, *sysno); + yaz_log(YLOG_WARN, "cannot delete file above, storeKeys false (1)"); } else { if (zh->records_processed < zh->m_file_verbose_limit) { - yaz_log(YLOG_LOG, "delete %s %s " PRINTF_OFF_T + yaz_log(YLOG_LOG, "delete %s %s " ZINT_FORMAT " " ZINT_FORMAT " %s" , - zh->m_record_type, - fname, recordOffset, *sysno, match_str_to_print); + zh->m_record_type, fname, (zint) recordOffset, + *sysno, match_str_to_print); } zh->records_deleted++; if (matchStr) @@ -651,10 +651,10 @@ static ZEBRA_RES file_extract_record(ZebraHandle zh, /* flush new keys for sort&search etc */ if (zh->records_processed < zh->m_file_verbose_limit) { - yaz_log(YLOG_LOG, "update %s %s " PRINTF_OFF_T + yaz_log(YLOG_LOG, "update %s %s " ZINT_FORMAT " " ZINT_FORMAT " %s" , - zh->m_record_type, - fname, recordOffset, *sysno, match_str_to_print); + zh->m_record_type, fname, (zint) recordOffset, + *sysno, match_str_to_print); } recordAttr->staticrank = extractCtrl.staticrank; extract_flushSortKeys (zh, *sysno, 1, zh->reg->sortKeys); @@ -724,8 +724,8 @@ static ZEBRA_RES file_extract_record(ZebraHandle zh, xmalloc (recordAttr->recordSize); if (lseek (fi->fd, recordOffset, SEEK_SET) < 0) { - yaz_log (YLOG_ERRNO|YLOG_FATAL, "seek to " PRINTF_OFF_T " in %s", - recordOffset, fname); + yaz_log(YLOG_ERRNO|YLOG_FATAL, "seek to " ZINT_FORMAT " in %s", + (zint)recordOffset, fname); exit (1); } if (read (fi->fd, rec->info[recInfo_storeData], recordAttr->recordSize) @@ -768,12 +768,14 @@ ZEBRA_RES zebra_extract_file(ZebraHandle zh, SYSNO *sysno, const char *fname, RecType recType; void *recTypeClientData; + zebra_init_log_level(); + if (!zh->m_group || !*zh->m_group) *gprefix = '\0'; else sprintf (gprefix, "%s.", zh->m_group); - yaz_log (YLOG_DEBUG, "fileExtract %s", fname); + yaz_log(log_level, "zebra_extract_file %s", fname); /* determine file extension */ *ext = '\0'; @@ -876,16 +878,16 @@ ZEBRA_RES zebra_extract_file(ZebraHandle zh, SYSNO *sysno, const char *fname, If not, and a record is provided, then sysno is got from there */ -ZEBRA_RES buffer_extract_record(ZebraHandle zh, - const char *buf, size_t buf_size, - int delete_flag, - int test_mode, - const char *recordType, - SYSNO *sysno, - const char *match_criteria, - const char *fname, - int force_update, - int allow_update) +ZEBRA_RES zebra_buffer_extract_record(ZebraHandle zh, + const char *buf, size_t buf_size, + int delete_flag, + int test_mode, + const char *recordType, + SYSNO *sysno, + const char *match_criteria, + const char *fname, + int force_update, + int allow_update) { SYSNO sysno0 = 0; RecordAttr *recordAttr; @@ -900,6 +902,8 @@ ZEBRA_RES buffer_extract_record(ZebraHandle zh, const char *pr_fname = fname; /* filename to print .. */ int show_progress = zh->records_processed < zh->m_file_verbose_limit ? 1:0; + zebra_init_log_level(); + if (!pr_fname) pr_fname = ""; /* make it printable if file is omitted */ @@ -930,7 +934,7 @@ ZEBRA_RES buffer_extract_record(ZebraHandle zh, if (recordType && *recordType) { - yaz_log (YLOG_DEBUG, "Record type explicitly specified: %s", recordType); + yaz_log(log_level, "Record type explicitly specified: %s", recordType); recType = recType_byName (zh->reg->recTypes, zh->res, recordType, &clientData); } @@ -941,7 +945,8 @@ ZEBRA_RES buffer_extract_record(ZebraHandle zh, yaz_log (YLOG_WARN, "No such record type defined"); return ZEBRA_FAIL; } - yaz_log (YLOG_DEBUG, "Get record type from rgroup: %s",zh->m_record_type); + yaz_log(log_level, "Get record type from rgroup: %s", + zh->m_record_type); recType = recType_byName (zh->reg->recTypes, zh->res, zh->m_record_type, &clientData); recordType = zh->m_record_type; @@ -1092,16 +1097,16 @@ ZEBRA_RES buffer_extract_record(ZebraHandle zh, /* record going to be deleted */ if (zebra_rec_keys_empty(delkeys)) { - yaz_log (YLOG_LOG, "delete %s %s %ld", recordType, - pr_fname, (long) recordOffset); - yaz_log (YLOG_WARN, "cannot delete file above, " - "storeKeys false (3)"); + yaz_log(YLOG_LOG, "delete %s %s %ld", recordType, + pr_fname, (long) recordOffset); + yaz_log(YLOG_WARN, "cannot delete file above, " + "storeKeys false (3)"); } else { if (show_progress) - yaz_log (YLOG_LOG, "delete %s %s %ld", recordType, - pr_fname, (long) recordOffset); + yaz_log(YLOG_LOG, "delete %s %s %ld", recordType, + pr_fname, (long) recordOffset); zh->records_deleted++; if (matchStr) { @@ -1117,8 +1122,8 @@ ZEBRA_RES buffer_extract_record(ZebraHandle zh, else { if (show_progress) - yaz_log (YLOG_LOG, "update %s %s %ld", recordType, - pr_fname, (long) recordOffset); + yaz_log(YLOG_LOG, "update %s %s %ld", recordType, + pr_fname, (long) recordOffset); recordAttr->staticrank = extractCtrl.staticrank; extract_flushSortKeys (zh, *sysno, 1, zh->reg->sortKeys); extract_flushRecordKeys (zh, *sysno, 1, zh->reg->keys, @@ -1211,7 +1216,7 @@ ZEBRA_RES buffer_extract_record(ZebraHandle zh, return ZEBRA_OK; } -int explain_extract (void *handle, Record rec, data1_node *n) +ZEBRA_RES zebra_extract_explain(void *handle, Record rec, data1_node *n) { ZebraHandle zh = (ZebraHandle) handle; struct recExtractCtrl extractCtrl; @@ -1277,8 +1282,7 @@ int explain_extract (void *handle, Record rec, data1_node *n) zebra_rec_keys_get_buf(zh->reg->sortKeys, &rec->info[recInfo_sortKeys], &rec->size[recInfo_sortKeys]); - - return 0; + return ZEBRA_OK; } void extract_rec_keys_adjust(ZebraHandle zh, int is_insert, @@ -1300,7 +1304,7 @@ void extract_rec_keys_adjust(ZebraHandle zh, int is_insert, struct it_key key_in; while(zebra_rec_keys_read(reckeys, &str, &slen, &key_in)) { - int ord = key_in.mem[0]; + int ord = CAST_ZINT_TO_INT(key_in.mem[0]); for (p = ord_list; p ; p = p->next) if (p->ord == ord) @@ -1384,7 +1388,7 @@ void extract_flushRecordKeys (ZebraHandle zh, SYSNO sysno, (char*)zh->reg->key_buf + zh->reg->key_buf_used; /* encode the ordinal value (field/use/attribute) .. */ - ch = (int) key_in.mem[0]; + ch = CAST_ZINT_TO_INT(key_in.mem[0]); zh->reg->key_buf_used += key_SU_encode(ch, (char*)zh->reg->key_buf + zh->reg->key_buf_used); @@ -1441,19 +1445,14 @@ void extract_flushWriteKeys (ZebraHandle zh, int final) #endif if (!zh->reg->key_buf || ptr_i <= 0) { - yaz_log (YLOG_DEBUG, " nothing to flush section=%d buf=%p i=%d", + yaz_log(log_level, " nothing to flush section=%d buf=%p i=%d", zh->reg->key_file_no, zh->reg->key_buf, ptr_i); - yaz_log (YLOG_DEBUG, " buf=%p ", - zh->reg->key_buf); - yaz_log (YLOG_DEBUG, " ptr=%d ",zh->reg->ptr_i); - yaz_log (YLOG_DEBUG, " reg=%p ",zh->reg); - return; } (zh->reg->key_file_no)++; yaz_log (YLOG_LOG, "sorting section %d", (zh->reg->key_file_no)); - yaz_log (YLOG_DEBUG, " sort_buff at %p n=%d", + yaz_log(log_level, " sort_buff at %p n=%d", zh->reg->key_buf + zh->reg->ptr_top - ptr_i,ptr_i); #if !SORT_EXTRA qsort (zh->reg->key_buf + zh->reg->ptr_top - ptr_i, ptr_i, @@ -1573,11 +1572,13 @@ ZEBRA_RES zebra_snippets_rec_keys(ZebraHandle zh, { char dst_buf[IT_MAX_WORD]; char *dst_term = dst_buf; - int ord, seqno; + int ord; + zint seqno; int index_type; + assert(key.len <= 4 && key.len > 2); - seqno = (int) key.mem[key.len-1]; - ord = key.mem[0]; + seqno = key.mem[key.len-1]; + ord = CAST_ZINT_TO_INT(key.mem[0]); zebraExplain_lookup_ord(zh->reg->zei, ord, &index_type, 0/* db */, 0 /* string_index */); @@ -1603,25 +1604,25 @@ void print_rec_keys(ZebraHandle zh, zebra_rec_keys_t reckeys) while (zebra_rec_keys_read(reckeys, &str, &slen, &key)) { char dst_buf[IT_MAX_WORD]; - int seqno; + zint seqno; int index_type; + int ord = CAST_ZINT_TO_INT(key.mem[0]); const char *db = 0; assert(key.len <= 4 && key.len > 2); - zebraExplain_lookup_ord(zh->reg->zei, - key.mem[0], &index_type, &db, 0); + zebraExplain_lookup_ord(zh->reg->zei, ord, &index_type, &db, 0); - seqno = (int) key.mem[key.len-1]; + seqno = key.mem[key.len-1]; zebra_term_untrans(zh, index_type, dst_buf, str); - yaz_log(YLOG_LOG, "ord=" ZINT_FORMAT " seqno=%d term=%s", - key.mem[0], seqno, dst_buf); + yaz_log(YLOG_LOG, "ord=%d seqno=" ZINT_FORMAT + " term=%s", ord, seqno, dst_buf); } } } -void extract_add_index_string(RecWord *p, const char *str, int length) +static void extract_add_index_string(RecWord *p, const char *str, int length) { struct it_key key; @@ -1701,13 +1702,23 @@ static void extract_add_sort_string(RecWord *p, const char *str, int length) zebra_rec_keys_write(zh->reg->sortKeys, str, length, &key); } -void extract_add_string (RecWord *p, const char *string, int length) +static void extract_add_string (RecWord *p, const char *string, int length) { assert (length > 0); if (zebra_maps_is_sort (p->zebra_maps, p->index_type)) extract_add_sort_string (p, string, length); else - extract_add_index_string (p, string, length); + { + extract_add_index_string(p, string, length); + if (zebra_maps_is_alwaysmatches(p->zebra_maps, p->index_type)) + { + RecWord word; + memcpy(&word, p, sizeof(word)); + + word.seqno = 1; + extract_add_index_string (&word, "", 0); + } + } } static void extract_add_incomplete_field (RecWord *p) @@ -1716,8 +1727,6 @@ static void extract_add_incomplete_field (RecWord *p) int remain = p->term_len; const char **map = 0; - yaz_log(YLOG_DEBUG, "Incomplete field, w='%.*s'", p->term_len, p->term_buf); - if (remain > 0) map = zebra_maps_input(p->zebra_maps, p->index_type, &b, remain, 0); @@ -1765,9 +1774,6 @@ static void extract_add_complete_field (RecWord *p) const char **map = 0; int i = 0, remain = p->term_len; - yaz_log(YLOG_DEBUG, "Complete field, w='%.*s'", - p->term_len, p->term_buf); - if (remain > 0) map = zebra_maps_input (p->zebra_maps, p->index_type, &b, remain, 1); @@ -1802,7 +1808,6 @@ static void extract_add_complete_field (RecWord *p) { if (i >= IT_MAX_WORD) break; - yaz_log(YLOG_DEBUG, "Adding string to index '%d'", **map); while (i < IT_MAX_WORD && *cp) buf[i++] = *(cp++); } @@ -1821,15 +1826,14 @@ static void extract_add_complete_field (RecWord *p) extract_add_string (p, buf, i); } -void extract_token_add (RecWord *p) +static void extract_token_add(RecWord *p) { WRBUF wrbuf; -#if 0 - yaz_log (YLOG_LOG, "token_add " - "reg_type=%c attrSet=%d attrUse=%d seqno=%d s=%.*s", - p->reg_type, p->attrSet, p->attrUse, p->seqno, p->length, - p->string); -#endif + if (log_level) + yaz_log(log_level, "extract_token_add " + "type=%c index=%s seqno=" ZINT_FORMAT " s=%.*s", + p->index_type, p->index_name, + p->seqno, p->term_len, p->term_buf); if ((wrbuf = zebra_replace(p->zebra_maps, p->index_type, 0, p->term_buf, p->term_len))) { @@ -1867,7 +1871,7 @@ static void extract_set_store_data_prepare(struct recExtractCtrl *p) p->setStoreData = extract_set_store_data_cb; } -void extract_schema_add (struct recExtractCtrl *p, Odr_oid *oid) +static void extract_schema_add (struct recExtractCtrl *p, Odr_oid *oid) { ZebraHandle zh = (ZebraHandle) p->handle; zebraExplain_addSchema (zh->reg->zei, oid); @@ -1887,7 +1891,7 @@ void extract_flushSortKeys (ZebraHandle zh, SYSNO sysno, while (zebra_rec_keys_read(reckeys, &str, &slen, &key_in)) { - int ord = (int) key_in.mem[0]; + int ord = CAST_ZINT_TO_INT(key_in.mem[0]); sortIdx_type(sortIdx, ord); if (cmd == 1) @@ -1898,13 +1902,13 @@ void extract_flushSortKeys (ZebraHandle zh, SYSNO sysno, } } -void encode_key_init (struct encode_info *i) +static void encode_key_init(struct encode_info *i) { i->encode_handle = iscz1_start(); i->decode_handle = iscz1_start(); } -void encode_key_write (char *k, struct encode_info *i, FILE *outf) +static void encode_key_write (char *k, struct encode_info *i, FILE *outf) { struct it_key key; char *bp = i->buf, *bp0; @@ -1948,7 +1952,7 @@ void encode_key_write (char *k, struct encode_info *i, FILE *outf) #endif } -void encode_key_flush (struct encode_info *i, FILE *outf) +static void encode_key_flush (struct encode_info *i, FILE *outf) { iscz1_stop(i->encode_handle); iscz1_stop(i->decode_handle);