List:Internals« Previous MessageNext Message »
From:svoj Date:March 6 2005 9:18pm
Subject:bk commit into 5.0 tree (svoj:1.1776) BUG#8351
View as plain text  
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,&param)))
   {
     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#8351svoj6 Mar