Changeset 7b606608302021d361c250f0cb83e6c92a50d294

Show
Ignore:
Timestamp:
04/28/08 13:06:54 (8 months ago)
Author:
David Balmain <dbalmain@…>
Parents:
2f5dc9c8dce95e8e8ac5d32256e9c9ff16052fc8
Children:
88af924cc987bc50098df966cc16b84e4213a7fe
git-committer:
David Balmain <dbalmain@gmail.com> / 2008-04-28T13:06:54Z+1000
Message:

Fixed a bug in Searcher#get_weight

* also improved test coverage for PhraseQuery

Location:
c
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • c/include/internal.h

    r8f4fd0 r7b6066  
    908908#define term_hash                               frt_term_hash 
    909909#define term_new                                frt_term_new 
    910 #define term_set_new                            frt_term_set_new 
    911910#define tf_new_i                                frt_tf_new_i 
    912911#define thread_exit                             frt_thread_exit 
  • c/include/similarity.h

    r950230 r7b6066  
    1111 * 
    1212 ****************************************************************************/ 
    13  
    14 #define frt_term_set_new() \ 
    15     frt_hs_new((hash_ft)&frt_term_hash, (eq_ft)&frt_term_eq, (free_ft)&frt_term_destroy) 
    1613 
    1714typedef struct FrtTerm 
  • c/src/q_phrase.c

    r2f5dc9 r7b6066  
    565565            tps[i] = mtdpe_new(ir, field_num, terms, t_cnt); 
    566566        } 
    567         if (tps[i] == NULL) { 
    568             /* free everything we just created and return NULL */ 
    569             int j; 
    570             for (j = 0; j < i; j++) { 
    571                 tps[i]->close(tps[i]); 
    572             } 
    573             free(tps); 
    574             return NULL; 
    575         } 
     567        /* neither mtdpe_new nor ir->term_positions should return NULL */ 
     568        assert(NULL != tps[i]); 
    576569    } 
    577570 
  • c/src/search.c

    r0c11a5 r7b6066  
    13981398static Similarity *cdfsea_get_similarity(Searcher *self) 
    13991399{ 
    1400     (void)self; 
    1401     RAISE(UNSUPPORTED_ERROR, UNSUPPORTED_ERROR_MSG); 
    1402     return NULL; 
     1400    return self->similarity; 
    14031401} 
    14041402 
     
    14161414    CDFSEA(self)->max_doc   = max_doc; 
    14171415 
     1416    self->similarity        = sim_create_default(); 
    14181417    self->doc_freq          = &cdfsea_doc_freq; 
    14191418    self->get_doc           = &cdfsea_get_doc; 
     
    15151514static Weight *msea_create_weight(Searcher *self, Query *query) 
    15161515{ 
    1517     Jx 
    15181516    int i, *doc_freqs; 
    15191517    Searcher *cdfsea; 
    15201518    Weight *w; 
    1521     Hash *df_map = h_new((hash_ft)&term_hash, (eq_ft)&term_eq, 
    1522                              (free_ft)NULL, free); 
     1519    Hash *df_map = h_new((hash_ft)&term_hash, 
     1520                         (eq_ft)&term_eq, 
     1521                         (free_ft)term_destroy, 
     1522                         free); 
    15231523    Query *rewritten_query = self->rewrite(self, query); 
    1524     HashSet *terms = term_set_new(); 
     1524    /* terms get copied directly to df_map so no need to free here */ 
     1525    HashSet *terms = frt_hs_new((hash_ft)&frt_term_hash, 
     1526                                (eq_ft)&frt_term_eq, 
     1527                                (free_ft)NULL); 
    15251528    HashSetEntry *hse; 
    15261529 
  • c/test/test_search.c

    r8f4fd0 r7b6066  
    517517    Query *q; 
    518518    Query *phq = phq_new(field); 
     519    Weight *w; 
     520    char *t, e[100]; 
    519521    check_to_s(tc, phq, field, "\"\""); 
    520522    check_to_s(tc, phq, NULL, "field:\"\""); 
    521523 
     524     
    522525    phq_add_term(phq, "quick", 1); 
    523526    phq_add_term(phq, "brown", 1); 
     
    529532    phq_set_slop(phq, 4); 
    530533    check_hits(tc, searcher, phq, "1, 16, 17", 17); 
     534 
     535    /* test PhraseWeight.to_s */ 
     536    w = searcher->create_weight(searcher, phq); 
     537    sprintf(e, "PhraseWeight(%f)", w->value); 
     538    t = w->to_s(w); Asnequal(e, t, 17); free(t); 
     539    phq->boost = 10.5f; 
     540    sprintf(e, "PhraseWeight(%f)", w->value); 
     541    t = w->to_s(w); Asnequal(e, t, 17); free(t); 
     542    w->destroy(w); 
     543 
    531544    q_deref(phq); 
    532545