Below is the list of changes that have just been committed into a local
5.0 repository of svoj. When svoj does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet
1.1776 05/03/07 00:17:57 svoj@stripped +2 -0
BUG#8351 post-review improvements.
myisam/ft_parser.c
1.45 05/03/07 00:17:53 svoj@stripped +10 -10
style improvements.
myisam/ft_boolean_search.c
1.90 05/03/07 00:17:53 svoj@stripped +28 -21
quot, qend not needed anymore, removed.
phrase initialization moved to ft_init_boolean_search.
comments added.
_ftb_strstr renamed to _ftb_check_phrase.
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: svoj
# Host: svoj.pils.ru
# Root: /home/svoj/devel/mysql/ft-mysql-5.0
--- 1.44/myisam/ft_parser.c 2005-03-04 16:10:37 +04:00
+++ 1.45/myisam/ft_parser.c 2005-03-07 00:17:53 +04:00
@@ -93,13 +93,14 @@
return 0;
}
-/* returns:
- * 0 - eof
- * 1 - word found
- * 2 - left bracket
- * 3 - right bracket
- * 4 - stopword found
- */
+/*
+ RETURN VALUE
+ 0 - eof
+ 1 - word found
+ 2 - left bracket
+ 3 - right bracket
+ 4 - stopword found
+*/
byte ft_get_word(CHARSET_INFO *cs, byte **start, byte *end,
FT_WORD *word, FTB_PARAM *param)
{
@@ -162,7 +163,7 @@
*start=doc;
return 1;
}
- else if (length)
+ else if (length) /* make sure length > 0 (if start contains spaces only) */
{
*start= doc;
return 4;
@@ -207,8 +208,7 @@
*start= doc;
DBUG_RETURN(1);
}
- }
- while (doc < end);
+ } while (doc < end);
DBUG_RETURN(0);
}
--- 1.89/myisam/ft_boolean_search.c 2005-03-04 16:10:37 +04:00
+++ 1.90/myisam/ft_boolean_search.c 2005-03-07 00:17:53 +04:00
@@ -68,7 +68,6 @@
my_off_t docid[2];
float weight;
float cur_weight;
- byte *quot, *qend;
LIST *phrase; /* phrase words */
uint yesses; /* number of "yes" words matched */
uint nos; /* number of "no" words matched */
@@ -133,7 +132,7 @@
}
static void _ftb_parse_query(FTB *ftb, byte **start, byte *end,
- FTB_EXPR *up, uint depth)
+ FTB_EXPR *up, uint depth, byte *up_quot)
{
byte res;
FTB_PARAM param;
@@ -148,8 +147,7 @@
return;
param.prev=' ';
- param.quot=up->quot;
- up->phrase= NULL;
+ param.quot= up_quot;
while ((res=ft_get_word(ftb->charset,start,end,&w,¶m)))
{
int r=param.plusminus;
@@ -176,8 +174,8 @@
if (param.yesno > 0) up->ythresh++;
queue_insert(& ftb->queue, (byte *)ftbw);
ftb->with_scan|=(param.trunc & FTB_FLAG_TRUNC);
- case 4:
- if (! up->quot) break;
+ case 4: /* not indexed word (stopword or too short/long) */
+ if (! up_quot) break;
phrase_word= (FT_WORD *)alloc_root(&ftb->mem_root, sizeof(FT_WORD));
phrase_list= (LIST *)alloc_root(&ftb->mem_root, sizeof(LIST));
phrase_word->pos= w.pos;
@@ -194,17 +192,14 @@
ftbe->up=up;
ftbe->ythresh=ftbe->yweaks=0;
ftbe->docid[0]=ftbe->docid[1]=HA_OFFSET_ERROR;
- if ((ftbe->quot=param.quot)) ftb->with_scan|=2;
+ ftbe->phrase= NULL;
+ if (param.quot) ftb->with_scan|=2;
if (param.yesno > 0) up->ythresh++;
- _ftb_parse_query(ftb, start, end, ftbe, depth+1);
+ _ftb_parse_query(ftb, start, end, ftbe, depth+1, param.quot);
param.quot=0;
break;
case 3: /* right bracket */
- if (up->quot)
- {
- up->qend= param.quot;
- up->phrase= list_reverse(up->phrase);
- }
+ if (up_quot) up->phrase= list_reverse(up->phrase);
return;
}
}
@@ -426,12 +421,12 @@
ftbe->weight=1;
ftbe->flags=FTB_FLAG_YES;
ftbe->nos=1;
- ftbe->quot=0;
ftbe->up=0;
ftbe->ythresh=ftbe->yweaks=0;
ftbe->docid[0]=ftbe->docid[1]=HA_OFFSET_ERROR;
+ ftbe->phrase= NULL;
ftb->root=ftbe;
- _ftb_parse_query(ftb, &query, query+query_len, ftbe, 0);
+ _ftb_parse_query(ftb, &query, query+query_len, ftbe, 0, NULL);
ftb->list=(FTB_WORD **)alloc_root(&ftb->mem_root,
sizeof(FTB_WORD *)*ftb->queue.elements);
memcpy(ftb->list, ftb->queue.root+1, sizeof(FTB_WORD *)*ftb->queue.elements);
@@ -447,15 +442,27 @@
}
-/* returns 1 if str0 ~= /\bstr1\b/ */
-static int _ftb_strstr(const byte *s0, const byte *e0,
+/*
+ Checks if given buffer matches phrase list.
+
+ SYNOPSIS
+ _ftb_check_phrase()
+ s0 start of buffer
+ e0 end of buffer
+ phrase broken into list phrase
+ cs charset info
+
+ RETURN VALUE
+ 1 is returned if phrase found, 0 else.
+*/
+
+static int _ftb_check_phrase(const byte *s0, const byte *e0,
LIST *phrase, CHARSET_INFO *cs)
{
FT_WORD h_word;
const byte *h_start= s0;
DBUG_ENTER("_ftb_strstr");
-
- if (! phrase) DBUG_RETURN(0);
+ DBUG_ASSERT(phrase);
while (ft_simple_get_word(cs, (byte **)&h_start, e0, &h_word, FALSE))
{
@@ -504,7 +511,7 @@
{
yn=ftbe->flags;
weight=ftbe->cur_weight*ftbe->weight;
- if (mode && ftbe->quot)
+ if (mode && ftbe->phrase)
{
int not_found=1;
@@ -513,7 +520,7 @@
{
if (!ftsi.pos)
continue;
- not_found = ! _ftb_strstr(ftsi.pos, ftsi.pos+ftsi.len,
+ not_found = ! _ftb_check_phrase(ftsi.pos, ftsi.pos+ftsi.len,
ftbe->phrase, ftb->charset);
}
if (not_found) break;
| Thread |
|---|
| • bk commit into 5.0 tree (svoj:1.1776) BUG#8351 | svoj | 6 Mar |