summaryrefslogtreecommitdiff
path: root/myisam
diff options
context:
space:
mode:
authorunknown <serg@serg.mysql.com>2001-11-22 19:35:35 +0100
committerunknown <serg@serg.mysql.com>2001-11-22 19:35:35 +0100
commit8b5eedb7255ac34cee3e441e8dd88b875ee5dc08 (patch)
tree88c2bdef4a2fa66c208f59cf2e0300ebd491fcf9 /myisam
parent198df9007eaaf1aacbdff6c3e6b438bfd013a66c (diff)
downloadmariadb-git-8b5eedb7255ac34cee3e441e8dd88b875ee5dc08.tar.gz
ft_boolean_syntax variable
myisam/ft_nlq_search.c: comments cleanup
Diffstat (limited to 'myisam')
-rw-r--r--myisam/ft_boolean_search.c32
-rw-r--r--myisam/ft_nlq_search.c2
-rw-r--r--myisam/ft_parser.c38
-rw-r--r--myisam/ft_static.c1
-rw-r--r--myisam/ftdefs.h17
5 files changed, 45 insertions, 45 deletions
diff --git a/myisam/ft_boolean_search.c b/myisam/ft_boolean_search.c
index 355a11bc160..70ba7fc9df2 100644
--- a/myisam/ft_boolean_search.c
+++ b/myisam/ft_boolean_search.c
@@ -36,7 +36,7 @@ static double _wghts[11]={
3.375000000000000,
5.062500000000000,
7.593750000000000};
-static double *wghts=_wghts+5; // wghts[i] = 1.5**i
+static double *wghts=_wghts+5; /* wghts[i] = 1.5**i */
static double _nwghts[11]={
-0.065843621399177,
@@ -50,7 +50,7 @@ static double _nwghts[11]={
-1.687500000000000,
-2.531250000000000,
-3.796875000000000};
-static double *nwghts=_nwghts+5; // nwghts[i] = -0.5*1.5**i
+static double *nwghts=_nwghts+5; /* nwghts[i] = -0.5*1.5**i */
typedef struct st_ftb_expr FTB_EXPR;
struct st_ftb_expr {
@@ -114,20 +114,7 @@ void _ftb_parse_query(FTB *ftb, byte **start, byte *end,
byte r=param.plusminus;
float weight=(param.pmsign ? nwghts : wghts)[(r>5)?5:((r<-5)?-5:r)];
switch (res) {
- case FTB_LBR:
- ftbe=(FTB_EXPR *)alloc_root(&ftb->mem_root, sizeof(FTB_EXPR));
- ftbe->yesno=param.yesno;
- ftbe->weight=weight;
- ftbe->up=up;
- ftbe->ythresh=0;
- ftbe->docid=HA_POS_ERROR;
- if (ftbe->yesno > 0) up->ythresh++;
- _ftb_parse_query(ftb, start, end, ftbe, depth+1,
- (param.yesno<0 ? depth+1 : ndepth));
- break;
- case FTB_RBR:
- return;
- case 1:
+ case 1: /* word found */
ftbw=(FTB_WORD *)alloc_root(&ftb->mem_root,
sizeof(FTB_WORD) + (param.trunc ? MI_MAX_KEY_BUFF : w.len+extra));
ftbw->len=w.len+1;
@@ -142,6 +129,19 @@ void _ftb_parse_query(FTB *ftb, byte **start, byte *end,
if (ftbw->yesno > 0) up->ythresh++;
queue_insert(& ftb->queue, (byte *)ftbw);
break;
+ case 2: /* left bracket */
+ ftbe=(FTB_EXPR *)alloc_root(&ftb->mem_root, sizeof(FTB_EXPR));
+ ftbe->yesno=param.yesno;
+ ftbe->weight=weight;
+ ftbe->up=up;
+ ftbe->ythresh=0;
+ ftbe->docid=HA_POS_ERROR;
+ if (ftbe->yesno > 0) up->ythresh++;
+ _ftb_parse_query(ftb, start, end, ftbe, depth+1,
+ (param.yesno<0 ? depth+1 : ndepth));
+ break;
+ case 3: /* right bracket */
+ return;
}
}
return;
diff --git a/myisam/ft_nlq_search.c b/myisam/ft_nlq_search.c
index 75249a1432a..2a55ff839ca 100644
--- a/myisam/ft_nlq_search.c
+++ b/myisam/ft_nlq_search.c
@@ -253,7 +253,7 @@ float ft_nlq_find_relevance(FT_INFO *handler, my_off_t docid,
int a,b,c;
FT_DOC *docs=handler->doc;
- // Assuming docs[] is sorted by dpos...
+ /* Assuming docs[] is sorted by dpos... */
for (a=0, b=handler->ndocs, c=(a+b)/2; b-a>1; c=(a+b)/2)
{
diff --git a/myisam/ft_parser.c b/myisam/ft_parser.c
index b09ede78364..35e5959b556 100644
--- a/myisam/ft_parser.c
+++ b/myisam/ft_parser.c
@@ -33,9 +33,6 @@ typedef struct st_ft_docstat {
double max, nsum, nsum2;
#endif /* EVAL_RUN */
-// MI_INFO *info;
-// uint keynr;
-// byte *keybuf;
} FT_DOCSTAT;
static int FT_WORD_cmp(void* cmp_arg, FT_WORD *w1, FT_WORD *w2)
@@ -63,9 +60,7 @@ static int walk_and_copy(FT_WORD *word,uint32 count,FT_DOCSTAT *docstat)
/* transforms tree of words into the array, applying normalization */
-FT_WORD * ft_linearize(//MI_INFO *info, uint keynr,
- //byte *keybuf,
- TREE *wtree)
+FT_WORD * ft_linearize(TREE *wtree)
{
FT_WORD *wlist,*p;
FT_DOCSTAT docstat;
@@ -74,9 +69,6 @@ FT_WORD * ft_linearize(//MI_INFO *info, uint keynr,
if ((wlist=(FT_WORD *) my_malloc(sizeof(FT_WORD)*
(1+wtree->elements_in_tree),MYF(0))))
{
-// docstat.info=info;
-// docstat.keynr=keynr;
-// docstat.keybuf=keybuf;
docstat.list=wlist;
docstat.uniq=wtree->elements_in_tree;
#ifdef EVAL_RUN
@@ -122,12 +114,20 @@ FT_WORD * ft_linearize(//MI_INFO *info, uint keynr,
#endif
#define word_char(X) (true_word_char(X) || misc_word_char(X))
+
+/* returns:
+ * 0 - eof
+ * 1 - word found
+ * 2 - left bracket
+ * 3 - right bracket
+ */
byte ft_get_word(byte **start, byte *end, FT_WORD *word, FTB_PARAM *param)
{
byte *doc=*start;
int mwc;
- param->yesno=param->plusminus=param->pmsign=0;
+ param->yesno=(FTB_YES==' ')?1:0;
+ param->plusminus=param->pmsign=0;
while (doc<end)
{
@@ -138,18 +138,16 @@ byte ft_get_word(byte **start, byte *end, FT_WORD *word, FTB_PARAM *param)
{
/* param->prev=' '; */
*start=doc+1;
- return *doc;
+ return (*doc == FTB_RBR)+2;
}
if (param->prev == ' ')
{
- switch (*doc) {
- case FTB_YES: param->yesno=+1; continue;
- case FTB_NO: param->yesno=-1; continue;
- case FTB_INC: param->plusminus++; continue;
- case FTB_DEC: param->plusminus--; continue;
- case FTB_NEG: param->pmsign=!param->pmsign; continue;
- default: break;
- }
+ if (*doc == FTB_YES ) { param->yesno=+1; continue; } else
+ if (*doc == FTB_EGAL) { param->yesno= 0; continue; } else
+ if (*doc == FTB_NO ) { param->yesno=-1; continue; } else
+ if (*doc == FTB_INC ) { param->plusminus++; continue; } else
+ if (*doc == FTB_DEC ) { param->plusminus--; continue; } else
+ if (*doc == FTB_NEG ) { param->pmsign=!param->pmsign; continue; }
}
param->prev=*doc;
param->yesno=param->plusminus=param->pmsign=0;
@@ -162,7 +160,7 @@ byte ft_get_word(byte **start, byte *end, FT_WORD *word, FTB_PARAM *param)
else if (!misc_word_char(*doc) || mwc++)
break;
- param->prev='A'; // be sure *prev is true_word_char
+ param->prev='A'; /* be sure *prev is true_word_char */
word->len= (uint)(doc-word->pos) - mwc;
if ((param->trunc=(doc<end && *doc == FTB_TRUNC)))
doc++;
diff --git a/myisam/ft_static.c b/myisam/ft_static.c
index 2bf10c72414..08ecbdc1009 100644
--- a/myisam/ft_static.c
+++ b/myisam/ft_static.c
@@ -21,6 +21,7 @@
ulong ft_min_word_len=4;
ulong ft_max_word_len=HA_FT_MAXLEN;
ulong ft_max_word_len_for_sort=20;
+char *ft_boolean_syntax="+ -><()~*";
const MI_KEYSEG ft_keysegs[FT_SEGS]={
{
diff --git a/myisam/ftdefs.h b/myisam/ftdefs.h
index 112540a13b5..fd3660edcba 100644
--- a/myisam/ftdefs.h
+++ b/myisam/ftdefs.h
@@ -86,14 +86,15 @@ extern ulong collstat;
/*=================================================================*/
/* Boolean search operators */
-#define FTB_YES '+'
-#define FTB_NO '-'
-#define FTB_INC '>'
-#define FTB_DEC '<'
-#define FTB_LBR '('
-#define FTB_RBR ')'
-#define FTB_NEG '~'
-#define FTB_TRUNC '*'
+#define FTB_YES (ft_boolean_syntax[0])
+#define FTB_EGAL (ft_boolean_syntax[1])
+#define FTB_NO (ft_boolean_syntax[2])
+#define FTB_INC (ft_boolean_syntax[3])
+#define FTB_DEC (ft_boolean_syntax[4])
+#define FTB_LBR (ft_boolean_syntax[5])
+#define FTB_RBR (ft_boolean_syntax[6])
+#define FTB_NEG (ft_boolean_syntax[7])
+#define FTB_TRUNC (ft_boolean_syntax[8])
typedef struct st_ft_word {
byte * pos;