/*
- * Copyright (C) 1994-1995, Index Data I/S
+ * Copyright (C) 1994-1996, Index Data I/S
* All rights reserved.
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: extract.c,v $
- * Revision 1.54 1996-05-01 13:46:35 adam
+ * Revision 1.59 1996-05-14 15:47:07 adam
+ * Cleanup of various buffer size entities.
+ *
+ * Revision 1.58 1996/05/14 06:16:38 adam
+ * Compact use/set bytes used in search service.
+ *
+ * Revision 1.57 1996/05/13 14:23:04 adam
+ * Work on compaction of set/use bytes in dictionary.
+ *
+ * Revision 1.56 1996/05/09 09:54:42 adam
+ * Server supports maps from one logical attributes to a list of physical
+ * attributes.
+ * The extraction process doesn't make space consuming 'any' keys.
+ *
+ * Revision 1.55 1996/05/09 07:28:55 quinn
+ * Work towards phrases and multiple registers
+ *
+ * Revision 1.54 1996/05/01 13:46:35 adam
* First work on multiple records in one file.
* New option, -offset, to the "unread" command in the filter module.
*
#include <recctrl.h>
#include "index.h"
-#include "recindex.h"
+#include "zinfo.h"
static Dict matchDict;
static int records_deleted = 0;
static int records_processed = 0;
+static ZebTargetInfo *zti = NULL;
+
static void logRecord (int showFlag)
{
if (!showFlag)
}
assert (!records);
records = rec_open (1);
+#if 1
+ zti = zebTargetInfo_open (records, 1);
+#endif
}
struct encode_info {
int sysno;
int seqno;
- char buf[512];
+ char buf[768];
};
void encode_key_init (struct encode_info *i)
{
key_flush ();
xfree (key_buf);
+#if 1
+ zebTargetInfo_close (zti, 1);
+#endif
rec_close (&records);
dict_close (matchDict);
else
reckeys.prevAttrUse = attrUse;
+ *dst++ = lead;
+
+ if (!(lead & 1))
+ {
+ memcpy (dst, &attrSet, sizeof(attrSet));
+ dst += sizeof(attrSet);
+ }
+ if (!(lead & 2))
+ {
+ memcpy (dst, &attrUse, sizeof(attrUse));
+ dst += sizeof(attrUse);
+ }
switch (p->which)
{
- case Word_String:
- *dst++ = lead;
-
- if (!(lead & 1))
- {
- memcpy (dst, &attrSet, sizeof(attrSet));
- dst += sizeof(attrSet);
- }
- if (!(lead & 2))
- {
- memcpy (dst, &attrUse, sizeof(attrUse));
- dst += sizeof(attrUse);
- }
- for (i = 0; p->u.string[i]; i++)
- *dst++ = p->u.string[i];
- *dst++ = '\0';
-
- memcpy (dst, &p->seqno, sizeof(p->seqno));
- dst += sizeof(p->seqno);
-
- break;
- default:
- return;
+ case Word_String:
+ *dst++ = 'w';
+ break;
+ case Word_Phrase:
+ *dst++ = 'p';
+ break;
+ case Word_Numeric:
+ *dst++ = 'n';
}
+ for (i = 0; p->u.string[i]; i++)
+ *dst++ = p->u.string[i];
+ *dst++ = '\0';
+
+ memcpy (dst, &p->seqno, sizeof(p->seqno));
+ dst += sizeof(p->seqno);
reckeys.buf_used = dst - reckeys.buf;
}
char attrSet = -1;
short attrUse = -1;
int off = 0;
+
+#if 1
+ if (zebTargetInfo_curDatabase (zti, databaseName))
+ {
+ if (zebTargetInfo_newDatabase (zti, databaseName))
+ abort ();
+ }
+#endif
while (off < reckeys->buf_used)
{
const char *src = reckeys->buf + off;
key_flush ();
++ptr_i;
key_buf[ptr_top-ptr_i] = (char*)key_buf + key_buf_used;
+#if 1
+ lead = zebTargetInfo_lookupSU (zti, attrSet, attrUse);
+ if (lead < 0)
+ lead = zebTargetInfo_addSU (zti, attrSet, attrUse);
+ assert (lead > 0);
+ ((char*) key_buf) [key_buf_used++] = lead;
+#else
key_buf_used += index_word_prefix ((char*)key_buf + key_buf_used,
attrSet, attrUse, databaseName);
+#endif
while (*src)
((char*)key_buf) [key_buf_used++] = index_char_cvt (*src++);
src++;
return ws;
}
-static void addRecordKeyAny (const RecWord *p)
-{
- if (p->attrSet != 1 || p->attrUse != 1016)
- {
- RecWord w;
-
- memcpy (&w, p, sizeof(w));
- w.attrSet = 1;
- w.attrUse = 1016;
- addRecordKey (&w);
- }
- if (p->attrSet != -1)
- addRecordKey (p);
-}
-
struct file_read_info {
off_t file_max;
off_t file_offset;
extractCtrl.fh = fi;
extractCtrl.subType = subType;
extractCtrl.init = wordInit;
- extractCtrl.add = addRecordKeyAny;
+ extractCtrl.add = addRecordKey;
reckeys.buf_used = 0;
reckeys.prevAttrUse = -1;
}
logInfo.op = "add";
if (rGroup->fileVerboseFlag)
- logf (LOG_LOG, "add %s %s %ld", rGroup->recordType,
+ logf (LOG_LOG, "add %s %s+%ld", rGroup->recordType,
fname, (long) recordOffset);
rec = rec_new (records);
*sysno = rec->sysno;