Commit a5f061c7 authored by monty@hundin.mysql.fi's avatar monty@hundin.mysql.fi

Merge

parents 87fd219d ea4516d5
Administrator@co3064164-a.
Administrator@co3064164-a.rochd1.qld.optushome.com.au
Administrator@fred.
Miguel@light.local
Sinisa@sinisa.nasamreza.org
ahlentz@co3064164-a.rochd1.qld.optusnet.com.au
arjen@co3064164-a.bitbike.com
davida@isil.mysql.com
heikki@donna.mysql.fi
jani@hynda.mysql.fi
jani@janikt.pp.saunalahti.fi
jcole@abel.spaceapes.com
jcole@main.burghcom.com
jcole@tetra.spaceapes.com
miguel@light.local
monty@bitch.mysql.fi
monty@donna.mysql.fi
monty@hundin.mysql.fi
monty@tik.mysql.fi
monty@tramp.mysql.fi
monty@work.mysql.com
mwagner@evoq.mwagner.org
paul@central.snake.net
paul@teton.kitebird.com
root@x3.internalnet
sasha@mysql.sashanet.com
serg@serg.mysql.com
tfr@sarvik.tfr.cafe.ee
tim@bitch.mysql.fi
tim@black.box
tim@hundin.mysql.fi
tim@threads.polyesthetic.msg
tim@white.box
tim@work.mysql.com
tonu@hundin.mysql.fi
tonu@volk.internalnet
tonu@x153.internalnet
tonu@x3.internalnet
jcole@sarvik.tfr.cafe.ee
This diff is collapsed.
......@@ -359,10 +359,11 @@ int ft_boolean_read_next(FT_INFO *ftb, char *record)
float ft_boolean_find_relevance(FT_INFO *ftb, byte *record, uint length)
{
TREE ptree;
FT_WORD word;
FT_WORD word;
FTB_WORD *ftbw;
FTB_EXPR *ftbe;
FT_SEG_ITERATOR ftsi;
const byte *end;
uint i;
my_off_t docid=ftb->info->lastpos;
......@@ -393,33 +394,43 @@ float ft_boolean_find_relevance(FT_INFO *ftb, byte *record, uint length)
else if (ftb->state != SCAN)
return -3.0;
bzero(&ptree, sizeof(ptree));
if ((ftb->keynr==NO_SUCH_KEY)
? ft_parse(& ptree, record, length)
: _mi_ft_parse(& ptree, ftb->info, ftb->keynr, record))
return -4.0;
if (ftb->keynr==NO_SUCH_KEY)
_mi_ft_segiterator_dummy_init(record, length, &ftsi);
else
_mi_ft_segiterator_init(ftb->info, ftb->keynr, record, &ftsi);
for (i=1; i<=ftb->queue.elements; i++)
while (_mi_ft_segiterator(&ftsi))
{
ftbw=(FTB_WORD *)(ftb->queue.root[i]);
ftbw->docid=docid;
ptree.custom_arg=(void *)(ftbw->trunc);
word.pos=ftbw->word+1;
word.len=ftbw->len-1;
if (tree_search(& ptree, & word))
{ /* found! */
_ftb_climb_the_tree(ftbw);
}
else
{ /* not found! */
if (ftbw->yesno>0 && ftbw->up->up==0)
{ /* but this word MUST BE present in every document matched,
so we can stop the search right now */
break;
if (!ftsi.pos)
continue;
end=ftsi.pos+ftsi.len;
while (ft_simple_get_word((byte **)&ftsi.pos,(byte *)end,&word))
{
uint a, b, c;
for (a=1, b=ftb->queue.elements+1, c=(a+b)/2; b-a>1; c=(a+b)/2)
{
ftbw=(FTB_WORD *)(ftb->queue.root[c]);
if (_mi_compare_text(default_charset_info, word.pos,word.len,
(uchar*) ftbw->word+1,ftbw->len-1,ftbw->trunc) >0)
b=c;
else
a=c;
}
for (; c; c--)
{
ftbw=(FTB_WORD *)(ftb->queue.root[c]);
if (_mi_compare_text(default_charset_info, word.pos,word.len,
(uchar*) ftbw->word+1,ftbw->len-1,ftbw->trunc))
break;
if (ftbw->docid == docid)
continue;
ftbw->docid=docid;
_ftb_climb_the_tree(ftbw);
}
}
}
delete_tree(& ptree);
ftbe=ftb->root;
if (ftbe->docid==docid && ftbe->cur_weight>0 &&
ftbe->yesses>=ftbe->ythresh && !ftbe->nos)
......
......@@ -55,12 +55,9 @@ void _mi_ft_segiterator_dummy_init(const byte *record, uint len,
uint _mi_ft_segiterator(register FT_SEG_ITERATOR *ftsi)
{
if(!ftsi->num)
return 0;
if (!ftsi->seg)
return 1;
if (!ftsi->num) return 0; else ftsi->num--;
if (!ftsi->seg) return 1; else ftsi->seg--;
ftsi->seg--; ftsi->num--;
if (ftsi->seg->null_bit &&
(ftsi->rec[ftsi->seg->null_pos] & ftsi->seg->null_bit))
{
......
......@@ -263,10 +263,9 @@ while test $# -gt 0; do
$ECHO "Note: you will get more meaningful output on a source distribution compiled with debugging option when running tests with --gdb option"
fi
DO_GDB=1
# We must use manager, as things doesn't work on Linux without it
# This needs to be checked properly
# USE_MANAGER=1
# USE_RUNNING_SERVER=""
USE_RUNNING_SERVER=""
;;
--client-gdb )
if [ x$BINARY_DIST = x1 ] ; then
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment