X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Ftrunc.c;h=47bcdf10cf24e8cff2956c2b4ad7ee5282590b74;hb=a8b86c35a39ce9eb5279c46dd99ef7e91b83fb7b;hp=cd69643fa6f66fb0676583aa21828b132bd9e45b;hpb=896c0427df9d8eff5de6a1735dcd992e067df844;p=idzebra-moved-to-github.git diff --git a/index/trunc.c b/index/trunc.c index cd69643..47bcdf1 100644 --- a/index/trunc.c +++ b/index/trunc.c @@ -1,4 +1,4 @@ -/* $Id: trunc.c,v 1.27 2002-08-02 19:26:55 adam Exp $ +/* $Id: trunc.c,v 1.30 2004-08-06 12:28:22 adam Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -32,7 +32,6 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include #include #include -#include #include #if NEW_TRUNC #include @@ -142,6 +141,7 @@ static RSET rset_trunc_r (ZebraHandle zi, const char *term, int length, RSET result; RSFD result_rsfd; rset_temp_parms parms; + int nn = 0; parms.cmp = key_compare_it; parms.key_size = sizeof(struct it_key); @@ -194,6 +194,7 @@ static RSET rset_trunc_r (ZebraHandle zi, const char *term, int length, int n = ti->indx[ti->ptr[1]]; rset_write (result, result_rsfd, ti->heap[ti->ptr[1]]); + nn++; while (1) { @@ -239,6 +240,7 @@ static RSET rset_trunc_r (ZebraHandle zi, const char *term, int length, int n = ti->indx[ti->ptr[1]]; rset_write (result, result_rsfd, ti->heap[ti->ptr[1]]); + nn++; if (preserve_position) { /* section that preserve all keys */ @@ -294,6 +296,7 @@ static RSET rset_trunc_r (ZebraHandle zi, const char *term, int length, int n = ti->indx[ti->ptr[1]]; rset_write (result, result_rsfd, ti->heap[ti->ptr[1]]); + nn++; if (preserve_position) { heap_delete (ti); @@ -324,66 +327,12 @@ static RSET rset_trunc_r (ZebraHandle zi, const char *term, int length, heap_close (ti); xfree (ispt); } - - else if (zi->reg->isamd) - { - ISAMD_PP *ispt; - int i; - struct trunc_info *ti; - - ispt = (ISAMD_PP *) xmalloc (sizeof(*ispt) * (to-from)); - - ti = heap_init (to-from, sizeof(struct it_key), - key_compare_it); - for (i = to-from; --i >= 0; ) - { - logf(LOG_FATAL, "isam_d does not (currently) support truncs"); - abort(); - /*ispt[i] = isamd_pp_open (zi->reg->isamd, isam_p[from+i]); */ - if (isamd_pp_read (ispt[i], ti->tmpbuf)) - heap_insert (ti, ti->tmpbuf, i); - else - isamd_pp_close (ispt[i]); - } - while (ti->heapnum) - { - int n = ti->indx[ti->ptr[1]]; - - rset_write (result, result_rsfd, ti->heap[ti->ptr[1]]); -#if 0 -/* section that preserve all keys */ - heap_delete (ti); - if (isamd_pp_read (ispt[n], ti->tmpbuf)) - heap_insert (ti, ti->tmpbuf, n); - else - isamd_pp_close (ispt[n]); -#else -/* section that preserve all keys with unique sysnos */ - while (1) - { - if (!isamd_pp_read (ispt[n], ti->tmpbuf)) - { - heap_delete (ti); - isamd_pp_close (ispt[n]); - break; - } - if ((*ti->cmp)(ti->tmpbuf, ti->heap[ti->ptr[1]]) > 1) - { - heap_delete (ti); - heap_insert (ti, ti->tmpbuf, n); - break; - } - } -#endif - } - heap_close (ti); - xfree (ispt); - } else if (zi->reg->isams) { ISAMS_PP *ispt; int i; struct trunc_info *ti; + int nn = 0; ispt = (ISAMS_PP *) xmalloc (sizeof(*ispt) * (to-from)); @@ -402,6 +351,7 @@ static RSET rset_trunc_r (ZebraHandle zi, const char *term, int length, int n = ti->indx[ti->ptr[1]]; rset_write (result, result_rsfd, ti->heap[ti->ptr[1]]); + nn++; while (1) { if (!isams_pp_read (ispt[n], ti->tmpbuf)) @@ -444,6 +394,7 @@ static RSET rset_trunc_r (ZebraHandle zi, const char *term, int length, int n = ti->indx[ti->ptr[1]]; rset_write (result, result_rsfd, ti->heap[ti->ptr[1]]); + nn++; if (preserve_position) { @@ -478,6 +429,7 @@ static RSET rset_trunc_r (ZebraHandle zi, const char *term, int length, else logf (LOG_WARN, "Unknown isam set in rset_trunc_r"); + parms.rset_term->nn = nn; rset_close (result, result_rsfd); return result; } @@ -487,7 +439,11 @@ static int isams_trunc_cmp (const void *p1, const void *p2) ISAMS_P i1 = *(ISAMS_P*) p1; ISAMS_P i2 = *(ISAMS_P*) p2; - return i1 - i2; + if (i1 > i2) + return 1; + if (i1 < i2) + return -1; + return 0; } static int isam_trunc_cmp (const void *p1, const void *p2) @@ -508,21 +464,15 @@ static int isamc_trunc_cmp (const void *p1, const void *p2) ISAMC_P i2 = *(ISAMC_P*) p2; int d; - d = isc_type (i1) - isc_type (i2); + d = (int) (isc_type (i1) - isc_type (i2)); if (d) return d; - return isc_block (i1) - isc_block (i2); -} -static int isamd_trunc_cmp (const void *p1, const void *p2) -{ - ISAMD_P i1 = *(ISAMD_P*) p1; - ISAMD_P i2 = *(ISAMD_P*) p2; - int d; - - d = isamd_type (i1) - isamd_type (i2); - if (d) - return d; - return isamd_block (i1) - isamd_block (i2); + d = isc_block (i1) - isc_block (i2); + if (d > 0) + return 1; + else if (d < 0) + return -1; + return 0; } RSET rset_trunc (ZebraHandle zi, ISAMS_P *isam_p, int no, @@ -596,38 +546,6 @@ RSET rset_trunc (ZebraHandle zi, ISAMS_P *isam_p, int no, #endif qsort (isam_p, no, sizeof(*isam_p), isamc_trunc_cmp); } - else if (zi->reg->isamd) - { - if (no == 1) - { - rset_isamd_parms parms; - - logf(LOG_FATAL, "isam_d does not (currently) support truncs"); - abort(); - /* parms.pos = *isam_p; */ - parms.is = zi->reg->isamd; - parms.rset_term = rset_term_create (term, length, flags, - term_type); - return rset_create (rset_kind_isamd, &parms); - } -#if NEW_TRUNC_NOT_DONE_FOR_ISAM_D - else if (no < 10000) - { - rset_m_or_parms parms; - - parms.key_size = sizeof(struct it_key); - parms.cmp = key_compare_it; - parms.isc = 0; - parms.isamd=zi->reg->isamd; - parms.isam_positions = isam_p; - parms.no_isam_positions = no; - parms.no_save_positions = 100000; - parms.rset_term = rset_term_create (term, length, flags); - return rset_create (rset_kind_m_or, &parms); - } -#endif - qsort (isam_p, no, sizeof(*isam_p), isamd_trunc_cmp); - } else if (zi->reg->isamb) { if (no == 1) @@ -642,7 +560,7 @@ RSET rset_trunc (ZebraHandle zi, ISAMS_P *isam_p, int no, term_type); return rset_create (rset_kind_isamb, &parms); } - qsort (isam_p, no, sizeof(*isam_p), isamd_trunc_cmp); + qsort (isam_p, no, sizeof(*isam_p), isamc_trunc_cmp); } else {