-/* $Id: extract.c,v 1.245 2006-12-11 17:08:03 adam Exp $
- Copyright (C) 1995-2006
+/* $Id: extract.c,v 1.250 2007-03-01 10:35:46 adam Exp $
+ Copyright (C) 1995-2007
Index Data ApS
This file is part of the Zebra server.
static void extract_schema_add (struct recExtractCtrl *p, Odr_oid *oid);
static void extract_token_add (RecWord *p);
+static void check_log_limit(ZebraHandle zh)
+{
+ if (zh->records_processed + zh->records_skipped == zh->m_file_verbose_limit)
+ {
+ yaz_log(YLOG_LOG, "More than %d file log entries. Omitting rest",
+ zh->m_file_verbose_limit);
+ }
+}
+
static void logRecord (ZebraHandle zh)
{
+ check_log_limit(zh);
++zh->records_processed;
if (!(zh->records_processed % 1000))
{
}
if (!zh->m_record_type)
{
- if (zh->records_processed < zh->m_file_verbose_limit)
+ check_log_limit(zh);
+ if (zh->records_processed + zh->records_skipped
+ < zh->m_file_verbose_limit)
yaz_log (YLOG_LOG, "? %s", fname);
+ zh->records_skipped++;
return 0;
}
/* determine match criteria */
Record rec;
off_t start_offset = 0, end_offset = 0;
const char *pr_fname = fname; /* filename to print .. */
- int show_progress = zh->records_processed < zh->m_file_verbose_limit ? 1:0;
+ int show_progress = zh->records_processed + zh->records_skipped
+ < zh->m_file_verbose_limit ? 1:0;
zebra_init_log_level();
extract_set_store_data_prepare(&extractCtrl);
r = (*recType->extract)(recTypeClientData, &extractCtrl);
-
- if (r == RECCTRL_EXTRACT_EOF)
- return ZEBRA_FAIL;
- else if (r == RECCTRL_EXTRACT_ERROR_GENERIC)
+
+ switch (r)
{
+ case RECCTRL_EXTRACT_EOF:
+ return ZEBRA_FAIL;
+ case RECCTRL_EXTRACT_ERROR_GENERIC:
/* error occured during extraction ... */
yaz_log (YLOG_WARN, "extract error: generic");
return ZEBRA_FAIL;
- }
- else if (r == RECCTRL_EXTRACT_ERROR_NO_SUCH_FILTER)
- {
+ case RECCTRL_EXTRACT_ERROR_NO_SUCH_FILTER:
/* error occured during extraction ... */
yaz_log (YLOG_WARN, "extract error: no such filter");
return ZEBRA_FAIL;
+ case RECCTRL_EXTRACT_SKIP:
+ if (show_progress)
+ yaz_log (YLOG_LOG, "skip %s %s " ZINT_FORMAT,
+ recordType, pr_fname, (zint) start_offset);
+ *more = 1;
+
+ end_offset = stream->endf(stream, 0);
+ if (end_offset)
+ stream->seekf(stream, end_offset);
+
+ return ZEBRA_OK;
+ case RECCTRL_EXTRACT_OK:
+ break;
+ default:
+ yaz_log (YLOG_WARN, "extract error: unknown error: %d", r);
+ return ZEBRA_FAIL;
}
-
+ end_offset = stream->endf(stream, 0);
+ if (end_offset)
+ stream->seekf(stream, end_offset);
+ else
+ end_offset = stream->tellf(stream);
+
all_matches_add(&extractCtrl);
if (extractCtrl.match_criteria[0])
match_criteria = extractCtrl.match_criteria;
-
-
- end_offset = stream->endf(stream, 0);
-
- if (!end_offset)
- end_offset = stream->tellf(stream);
- else
- stream->seekf(stream, end_offset);
-
}
-
*more = 1;
if (!sysno)
{
zebra_rec_keys_write(zh->reg->sortKeys, str, length, &key);
}
+static void extract_add_staticrank_string(RecWord *p,
+ const char *str, int length)
+{
+ char valz[40];
+ struct recExtractCtrl *ctrl = p->extractCtrl;
+
+ if (length > sizeof(valz)-1)
+ length = sizeof(valz)-1;
+
+ memcpy(valz, str, length);
+ valz[length] = '\0';
+ ctrl->staticrank = atozint(valz);
+}
+
static void extract_add_string(RecWord *p, const char *string, int length)
{
ZebraHandle zh = p->extractCtrl->handle;
if (!p->index_name)
return;
- if (zebra_maps_is_sort(zh->reg->zebra_maps, p->index_type))
- extract_add_sort_string(p, string, length);
- else
+ if (zebra_maps_is_index(zh->reg->zebra_maps, p->index_type))
{
extract_add_index_string(p, zinfo_index_category_index,
string, length);
&word, zinfo_index_category_alwaysmatches, "", 0);
}
}
+ else if (zebra_maps_is_sort(zh->reg->zebra_maps, p->index_type))
+ {
+ extract_add_sort_string(p, string, length);
+ }
+ else if (zebra_maps_is_staticrank(zh->reg->zebra_maps, p->index_type))
+ {
+ extract_add_staticrank_string(p, string, length);
+ }
}
static void extract_add_incomplete_field(RecWord *p)
void extract_flush_sort_keys(ZebraHandle zh, zint sysno,
int cmd, zebra_rec_keys_t reckeys)
{
+#if 0
+ yaz_log(YLOG_LOG, "extract_flush_sort_keys cmd=%d sysno=" ZINT_FORMAT,
+ cmd, sysno);
+ extract_rec_keys_log(zh, cmd, reckeys, YLOG_LOG);
+#endif
+
if (zebra_rec_keys_rewind(reckeys))
{
- SortIdx sortIdx = zh->reg->sortIdx;
+ zebra_sort_index_t si = zh->reg->sort_index;
size_t slen;
const char *str;
struct it_key key_in;
- sortIdx_sysno (sortIdx, sysno);
+ zebra_sort_sysno(si, sysno);
while (zebra_rec_keys_read(reckeys, &str, &slen, &key_in))
{
int ord = CAST_ZINT_TO_INT(key_in.mem[0]);
- sortIdx_type(sortIdx, ord);
+ zebra_sort_type(si, ord);
if (cmd == 1)
- sortIdx_add(sortIdx, str, slen);
+ zebra_sort_add(si, str, slen);
else
- sortIdx_add(sortIdx, "", 1);
+ zebra_sort_delete(si);
}
}
}