X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fkcompare.c;h=b5b3b631bc8fbd824b20e7a2a703cc2fbacb2217;hb=774c155f12ee6473f38ece849a401dd8426178d3;hp=fc633e156ec80c68431aa5be22e73dbd642473f6;hpb=ce20a8a823a2df86ace4862008684c71a4f06cd2;p=idzebra-moved-to-github.git diff --git a/index/kcompare.c b/index/kcompare.c index fc633e1..b5b3b63 100644 --- a/index/kcompare.c +++ b/index/kcompare.c @@ -4,7 +4,33 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: kcompare.c,v $ - * Revision 1.6 1995-09-14 07:48:23 adam + * Revision 1.14 1995-10-30 15:08:08 adam + * Bug fixes. + * + * Revision 1.13 1995/10/27 14:00:11 adam + * Implemented detection of database availability. + * + * Revision 1.12 1995/10/17 18:02:08 adam + * New feature: databases. Implemented as prefix to words in dictionary. + * + * Revision 1.11 1995/10/06 16:33:37 adam + * Use attribute mappings. + * + * Revision 1.10 1995/09/29 14:01:41 adam + * Bug fixes. + * + * Revision 1.9 1995/09/28 12:10:32 adam + * Bug fixes. Field prefix used in queries. + * + * Revision 1.8 1995/09/28 09:19:42 adam + * xfree/xmalloc used everywhere. + * Extract/retrieve method seems to work for text records. + * + * Revision 1.7 1995/09/27 12:22:28 adam + * More work on extract in record control. + * Field name is not in isam keys but in prefix in dictionary words. + * + * Revision 1.6 1995/09/14 07:48:23 adam * Record control management. * * Revision 1.5 1995/09/11 13:09:34 adam @@ -42,8 +68,7 @@ void key_logdump (int logmask, const void *p) struct it_key key; memcpy (&key, p, sizeof(key)); - logf (logmask, "%7d s=%-4d f=%d,%d", key.sysno, key.seqno, - key.attrSet, key.attrUse); + logf (logmask, "%7d s=%-4d", key.sysno, key.seqno); } int key_compare (const void *p1, const void *p2) @@ -75,24 +100,38 @@ int key_compare (const void *p1, const void *p2) return -1; } #endif - if (i1.attrSet != i2.attrSet) - { - if (i1.attrSet > i2.attrSet) - return 1; - else - return -1; - } - if (i1.attrUse != i2.attrUse) - { - if (i1.attrUse > i2.attrUse) - return 1; - else - return -1; - } return 0; } +int key_qsort_compare (const void *p1, const void *p2) +{ + int r; + size_t l; + char *cp1 = *(char **) p1; + char *cp2 = *(char **) p2; + + if ((r = strcmp (cp1, cp2))) + return r; + l = strlen(cp1)+1; + if ((r = key_compare (cp1+l+1, cp2+l+1))) + return r; + return cp1[l] - cp2[l]; +} + int index_char_cvt (int c) { return tolower (c); } + +int index_word_prefix (char *string, int attset_ordinal, + int local_attribute, + char *databaseName) +{ + int i; + sprintf (string, "%s@%c%04d", databaseName, + attset_ordinal + '0', local_attribute); + for (i = 0; string[i]; i++) + string[i] = index_char_cvt (string[i]); + return i; +} +