Bug fixes. Field prefix used in queries.
[idzebra-moved-to-github.git] / index / kcompare.c
1 /*
2  * Copyright (C) 1994-1995, Index Data I/S 
3  * All rights reserved.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: kcompare.c,v $
7  * Revision 1.9  1995-09-28 12:10:32  adam
8  * Bug fixes. Field prefix used in queries.
9  *
10  * Revision 1.8  1995/09/28  09:19:42  adam
11  * xfree/xmalloc used everywhere.
12  * Extract/retrieve method seems to work for text records.
13  *
14  * Revision 1.7  1995/09/27  12:22:28  adam
15  * More work on extract in record control.
16  * Field name is not in isam keys but in prefix in dictionary words.
17  *
18  * Revision 1.6  1995/09/14  07:48:23  adam
19  * Record control management.
20  *
21  * Revision 1.5  1995/09/11  13:09:34  adam
22  * More work on relevance feedback.
23  *
24  * Revision 1.4  1995/09/08  14:52:27  adam
25  * Minor changes. Dictionary is lower case now.
26  *
27  * Revision 1.3  1995/09/07  13:58:36  adam
28  * New parameter: result-set file descriptor (RSFD) to support multiple
29  * positions within the same result-set.
30  * Boolean operators: and, or, not implemented.
31  * Result-set references.
32  *
33  * Revision 1.2  1995/09/06  16:11:17  adam
34  * Option: only one word key per file.
35  *
36  * Revision 1.1  1995/09/04  09:10:36  adam
37  * More work on index add/del/update.
38  * Merge sort implemented.
39  * Initial work on z39 server.
40  *
41  */
42
43 #include <stdlib.h>
44 #include <string.h>
45 #include <stdio.h>
46 #include <ctype.h>
47 #include <assert.h>
48
49 #include "index.h"
50
51 void key_logdump (int logmask, const void *p)
52 {
53     struct it_key key;
54
55     memcpy (&key, p, sizeof(key));
56     logf (logmask, "%7d s=%-4d", key.sysno, key.seqno);
57 }
58
59 int key_compare (const void *p1, const void *p2)
60 {
61     const struct it_key *i1 = p1, *i2 = p2;
62     if (i1->sysno != i2->sysno)
63     {
64         if (i1->sysno > i2->sysno)
65             return 2;
66         else
67             return -2;
68     }
69 #if IT_KEY_HAVE_SEQNO
70     if (i1->seqno != i2->seqno)
71     {
72         if (i1->seqno > i2->seqno)
73             return 1;
74         else
75             return -1;
76     }
77 #else
78     if (i1->freq != i2->freq)
79     {
80         if (i1->freq > i2->freq)
81             return 1;
82         else
83             return -1;
84     }
85 #endif
86     return 0;
87 }
88
89 int index_char_cvt (int c)
90 {
91     return tolower (c);
92 }
93
94 int index_word_prefix (char *string, int attrSet, int attrUse)
95 {
96     sprintf (string, "%c%04d", attrSet + '0', attrUse);
97     return 5;
98 }