*** kd_search.c 1999/02/06 11:01:15 1.4 --- kd_search.c 1999/02/07 13:01:44 *************** int word_key_intersect(void *e, void *c) *** 795,800 **** --- 795,806 ---- llist db_wdes, merged_wdes; int i; unsigned char *wde; + static int sort_twelvebytes(); + + /* already 1 element selected */ + if ( llist_count(&(s->wdes)) == 1 ) { + return (1); + } memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); *************** int word_key_intersect(void *e, void *c) *** 806,811 **** --- 812,820 ---- key.size = (size_t) we->len; ret = (*(worddb->get))(worddb, NULL, &key, &data, 0); + + /* sort for merging */ + qsort(data.data, (size_t) (data.size/12), 12, sort_twelvebytes); if (ret && ret != DB_NOTFOUND) { s->err->fatal = 1; *** kd_generic.c 1999/02/10 08:11:09 1.3 --- kd_generic.c 1999/02/10 08:11:35 *************** int kd_add_userid_to_wordlist(llist *wl, *** 61,67 **** fail(); tmp->ptr = start; tmp->len = end-start; ! if (!(ret = llist_add_sorted(wl, tmp, words_elem_order))) { free(tmp); fail(); } --- 61,67 ---- fail(); tmp->ptr = start; tmp->len = end-start; ! if (!(ret = llist_add(wl, tmp))) { free(tmp); fail(); }