Below is the list of changes that have just been committed into a local
5.1 repository of serg. When serg 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@stripped, 2008-04-09 07:33:19+02:00, serg@stripped +9 -0
restore ft2 functionality, fix bugs.
client/mysqltest.c@stripped, 2008-04-09 07:33:16+02:00, serg@stripped +2 -2
fixed wrong #define
mysql-test/mysql-test-run.pl@stripped, 2008-04-09 07:33:16+02:00, serg@stripped +5 -0
myisam_ftdump support
mysql-test/r/fulltext2.result@stripped, 2008-04-09 07:33:16+02:00, serg@stripped +374 -22
verify that 2-level btree was created
mysql-test/t/fulltext2.test@stripped, 2008-04-09 07:33:16+02:00, serg@stripped +11 -6
verify that 2-level btree was created
storage/myisam/ft_parser.c@stripped, 2008-04-09 07:33:16+02:00, serg@stripped +1 -1
uchar* -> const uchar *
storage/myisam/ft_update.c@stripped, 2008-04-09 07:33:16+02:00, serg@stripped +38 -20
uchar* -> const uchar *
remove useless casts (uchar* -> uchar*)
small optimization - write more to the first page of ft2 (but need to
sort first)
bugfix: _mi_ck_write_btree modifies key[] and few bytes after it,
write array elements backwards to prevent corruption
storage/myisam/ftdefs.h@stripped, 2008-04-09 07:33:16+02:00, serg@stripped +1 -1
uchar* -> const uchar *
storage/myisam/mi_delete.c@stripped, 2008-04-09 07:33:16+02:00, serg@stripped +2 -6
report the correct error - when a key not found it's
HA_ERR_KEY_NOT_FOUND, not HA_ERR_CRASHED. When a key not found means
HA_ERR_CRASHED, the error will be changed to HA_ERR_CRASHED by the
caller (mi_delete).
storage/myisam/mi_write.c@stripped, 2008-04-09 07:33:16+02:00, serg@stripped +0 -4
remove obsolete code, that disabled ft2 optimization.
diff -Nrup a/client/mysqltest.c b/client/mysqltest.c
--- a/client/mysqltest.c 2008-03-30 13:12:23 +02:00
+++ b/client/mysqltest.c 2008-04-09 07:33:16 +02:00
@@ -7845,8 +7845,8 @@ void free_replace_regex()
buf= (char*)my_realloc(buf,need_buf_len,MYF(MY_WME+MY_FAE)); \
res_p= buf + off; \
buf_len= need_buf_len; \
- } \
- \
+ }
+
/*
Performs a regex substitution
diff -Nrup a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl
--- a/mysql-test/mysql-test-run.pl 2008-03-25 16:27:21 +01:00
+++ b/mysql-test/mysql-test-run.pl 2008-04-09 07:33:16 +02:00
@@ -2182,6 +2182,11 @@ sub environment_setup () {
"$path_client_bindir/myisampack",
"$glob_basedir/storage/myisam/myisampack",
"$glob_basedir/myisam/myisampack"));
+ $ENV{'MYISAM_FTDUMP'}= mtr_native_path(mtr_exe_exists(
+ vs_config_dirs('storage/myisam', 'myisam_ftdump'),
+ vs_config_dirs('myisam', 'myisam_ftdump'),
+ "$path_client_bindir/myisam_ftdump",
+ "$glob_basedir/storage/myisam/myisam_ftdump"));
# ----------------------------------------------------
# We are nice and report a bit about our settings
diff -Nrup a/mysql-test/r/fulltext2.result b/mysql-test/r/fulltext2.result
--- a/mysql-test/r/fulltext2.result 2007-07-06 20:39:51 +02:00
+++ b/mysql-test/r/fulltext2.result 2008-04-09 07:33:16 +02:00
@@ -16,50 +16,150 @@ test.t1 optimize status OK
check table t1;
Table Op Msg_type Msg_text
test.t1 check status OK
+ => 196 aaaxxx
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ => 99 aaazzz
select count(*) from t1 where match a against ('aaaxxx');
count(*)
-260
+196
select count(*) from t1 where match a against ('aaayyy');
count(*)
-250
+98
select count(*) from t1 where match a against ('aaazzz');
count(*)
-255
+99
select count(*) from t1 where match a against ('aaaxxx' in boolean mode);
count(*)
-260
+196
select count(*) from t1 where match a against ('aaayyy' in boolean mode);
count(*)
-250
+98
select count(*) from t1 where match a against ('aaazzz' in boolean mode);
count(*)
-255
+99
select count(*) from t1 where match a against ('aaaxxx aaayyy aaazzz');
count(*)
-765
+393
select count(*) from t1 where match a against ('aaaxxx aaayyy aaazzz' in boolean mode);
count(*)
-765
+393
select count(*) from t1 where match a against ('aaax*' in boolean mode);
count(*)
-260
+196
select count(*) from t1 where match a against ('aaay*' in boolean mode);
count(*)
-250
+98
select count(*) from t1 where match a against ('aaa*' in boolean mode);
count(*)
-765
+393
insert t1 (a) values ('aaaxxx'),('aaayyy');
insert t1 (a) values ('aaazzz'),('aaazzz'),('aaazzz'),('aaazzz'),('aaazzz');
select count(*) from t1 where match a against ('aaaxxx');
count(*)
-261
+197
select count(*) from t1 where match a against ('aaayyy');
count(*)
-251
+99
select count(*) from t1 where match a against ('aaazzz');
count(*)
-260
+104
insert t1 (a) values ('aaaxxx 000000');
select count(*) from t1 where match a against ('000000');
count(*)
@@ -70,23 +170,23 @@ count(*)
0
select count(*) from t1 where match a against ('aaaxxx');
count(*)
-261
+197
delete from t1 where match a against ('aaazzz');
select count(*) from t1 where match a against ('aaaxxx' in boolean mode);
count(*)
-261
+197
select count(*) from t1 where match a against ('aaayyy' in boolean mode);
count(*)
-251
+99
select count(*) from t1 where match a against ('aaazzz' in boolean mode);
count(*)
0
select count(*) from t1 where a = 'aaaxxx';
count(*)
-261
+197
select count(*) from t1 where a = 'aaayyy';
count(*)
-251
+99
select count(*) from t1 where a = 'aaazzz';
count(*)
0
@@ -97,7 +197,7 @@ count(*)
update t1 set a='aaazzz' where match a against ('000000');
select count(*) from t1 where match a against ('aaaxxx' in boolean mode);
count(*)
-261
+197
select count(*) from t1 where match a against ('aaazzz' in boolean mode);
count(*)
1
@@ -105,19 +205,271 @@ update t1 set a='aaazzz' where a = 'aaax
update t1 set a='aaaxxx' where a = 'aaayyy';
select count(*) from t1 where match a against ('aaaxxx' in boolean mode);
count(*)
-251
+99
select count(*) from t1 where match a against ('aaayyy' in boolean mode);
count(*)
0
select count(*) from t1 where match a against ('aaazzz' in boolean mode);
count(*)
-262
+198
drop table t1;
CREATE TABLE t1 (
i int(10) unsigned not null auto_increment primary key,
a varchar(255) not null,
FULLTEXT KEY (a)
) ENGINE=MyISAM;
+ => 260 aaaxxx
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ aaayyy
+ => 255 aaazzz
select count(*) from t1 where match a against ('aaaxxx');
count(*)
260
diff -Nrup a/mysql-test/t/fulltext2.test b/mysql-test/t/fulltext2.test
--- a/mysql-test/t/fulltext2.test 2007-07-06 20:37:22 +02:00
+++ b/mysql-test/t/fulltext2.test 2008-04-09 07:33:16 +02:00
@@ -16,17 +16,17 @@ CREATE TABLE t1 (
FULLTEXT KEY (a)
) ENGINE=MyISAM;
-# two-level entry, second-level tree with depth 2
+# two-level entry
--disable_query_log
-let $1=260;
+let $1=196;
while ($1)
{
eval insert t1 (a) values ('aaaxxx');
dec $1;
}
-# two-level entry, second-level tree has only one page
-let $1=255;
+# two-level entry
+let $1=99;
while ($1)
{
eval insert t1 (a) values ('aaazzz');
@@ -34,7 +34,7 @@ while ($1)
}
# one-level entry (entries)
-let $1=250;
+let $1=98;
while ($1)
{
eval insert t1 (a) values ('aaayyy');
@@ -48,6 +48,9 @@ check table t1;
optimize table t1; # BUG#5327 - mi_sort_index() of 2-level tree
check table t1;
+--replace_regex / +[0-9a-f]{4} / / / [0-9]+\.[0-9]+ / /
+--exec $MYISAM_FTDUMP -d $MYSQLTEST_VARDIR/master-data/test/t1 1
+
select count(*) from t1 where match a against ('aaaxxx');
select count(*) from t1 where match a against ('aaayyy');
select count(*) from t1 where match a against ('aaazzz');
@@ -110,7 +113,6 @@ CREATE TABLE t1 (
# 2-level tree created by mi_write
#
-# two-level entry, second-level tree with depth 2
--disable_query_log
let $1=260;
while ($1)
@@ -131,6 +133,9 @@ while ($1)
dec $1;
}
--enable_query_log
+
+--replace_regex / +[0-9a-f]{4} / / / [0-9]+\.[0-9]+ / /
+--exec $MYISAM_FTDUMP -d $MYSQLTEST_VARDIR/master-data/test/t1 1
select count(*) from t1 where match a against ('aaaxxx');
select count(*) from t1 where match a against ('aaayyy');
diff -Nrup a/storage/myisam/ft_parser.c b/storage/myisam/ft_parser.c
--- a/storage/myisam/ft_parser.c 2007-11-14 15:32:00 +01:00
+++ b/storage/myisam/ft_parser.c 2008-04-09 07:33:16 +02:00
@@ -302,7 +302,7 @@ static int ft_parse_internal(MYSQL_FTPAR
}
-int ft_parse(TREE *wtree, uchar *doc, int doclen,
+int ft_parse(TREE *wtree, const uchar *doc, int doclen,
struct st_mysql_ftparser *parser,
MYSQL_FTPARSER_PARAM *param, MEM_ROOT *mem_root)
{
diff -Nrup a/storage/myisam/ft_update.c b/storage/myisam/ft_update.c
--- a/storage/myisam/ft_update.c 2007-10-11 17:07:36 +02:00
+++ b/storage/myisam/ft_update.c 2008-04-09 07:33:16 +02:00
@@ -75,7 +75,7 @@ uint _mi_ft_segiterator(register FT_SEG_
if (ftsi->seg->flag & HA_VAR_LENGTH_PART)
{
uint pack_length= (ftsi->seg->bit_start);
- ftsi->len= (pack_length == 1 ? (uint) *(uchar*) ftsi->pos :
+ ftsi->len= (pack_length == 1 ? (uint) *ftsi->pos :
uint2korr(ftsi->pos));
ftsi->pos+= pack_length; /* Skip VARCHAR length */
DBUG_RETURN(1);
@@ -108,7 +108,7 @@ uint _mi_ft_parse(TREE *parsed, MI_INFO
while (_mi_ft_segiterator(&ftsi))
{
if (ftsi.pos)
- if (ft_parse(parsed, (uchar *)ftsi.pos, ftsi.len, parser, param, mem_root))
+ if (ft_parse(parsed, ftsi.pos, ftsi.len, parser, param, mem_root))
DBUG_RETURN(1);
}
DBUG_RETURN(0);
@@ -139,7 +139,7 @@ static int _mi_ft_store(MI_INFO *info, u
for (; wlist->pos; wlist++)
{
key_length=_ft_make_key(info,keynr,keybuf,wlist,filepos);
- if (_mi_ck_write(info,keynr,(uchar*) keybuf,key_length))
+ if (_mi_ck_write(info,keynr,keybuf,key_length))
DBUG_RETURN(1);
}
DBUG_RETURN(0);
@@ -154,7 +154,7 @@ static int _mi_ft_erase(MI_INFO *info, u
for (; wlist->pos; wlist++)
{
key_length=_ft_make_key(info,keynr,keybuf,wlist,filepos);
- if (_mi_ck_delete(info,keynr,(uchar*) keybuf,key_length))
+ if (_mi_ck_delete(info,keynr,keybuf,key_length))
err=1;
}
DBUG_RETURN(err);
@@ -180,8 +180,8 @@ int _mi_ft_cmp(MI_INFO *info, uint keynr
{
if ((ftsi1.pos != ftsi2.pos) &&
(!ftsi1.pos || !ftsi2.pos ||
- ha_compare_text(cs, (uchar*) ftsi1.pos,ftsi1.len,
- (uchar*) ftsi2.pos,ftsi2.len,0,0)))
+ ha_compare_text(cs, (uchar*)ftsi1.pos, ftsi1.len,
+ (uchar*)ftsi2.pos, ftsi2.len, 0, 0)))
DBUG_RETURN(THOSE_TWO_DAMN_KEYS_ARE_REALLY_DIFFERENT);
}
DBUG_RETURN(GEE_THEY_ARE_ABSOLUTELY_IDENTICAL);
@@ -209,20 +209,20 @@ int _mi_ft_update(MI_INFO *info, uint ke
error=0;
while(old_word->pos && new_word->pos)
{
- cmp= ha_compare_text(cs, (uchar*) old_word->pos,old_word->len,
- (uchar*) new_word->pos,new_word->len,0,0);
+ cmp= ha_compare_text(cs, old_word->pos,old_word->len,
+ new_word->pos,new_word->len,0,0);
cmp2= cmp ? 0 : (fabs(old_word->weight - new_word->weight) > 1.e-5);
if (cmp < 0 || cmp2)
{
key_length=_ft_make_key(info,keynr,keybuf,old_word,pos);
- if ((error=_mi_ck_delete(info,keynr,(uchar*) keybuf,key_length)))
+ if ((error=_mi_ck_delete(info,keynr, keybuf,key_length)))
goto err;
}
if (cmp > 0 || cmp2)
{
key_length=_ft_make_key(info,keynr,keybuf,new_word,pos);
- if ((error=_mi_ck_write(info,keynr,(uchar*) keybuf,key_length)))
+ if ((error=_mi_ck_write(info,keynr, keybuf,key_length)))
goto err;
}
if (cmp<=0) old_word++;
@@ -293,7 +293,7 @@ uint _ft_make_key(MI_INFO *info, uint ke
int2store(buf+HA_FT_WLEN,wptr->len);
memcpy(buf+HA_FT_WLEN+2,wptr->pos,wptr->len);
- DBUG_RETURN(_mi_make_key(info,keynr,(uchar*) keybuf,buf,filepos));
+ DBUG_RETURN(_mi_make_key(info,keynr, keybuf,buf,filepos));
}
@@ -301,21 +301,22 @@ uint _ft_make_key(MI_INFO *info, uint ke
convert key value to ft2
*/
+static int cmp_ft2_part(const void *keyinfo, const void *a, const void *b)
+{
+ return memcmp(((uchar*)a)+HA_FT_WLEN,
+ ((uchar*)b)+HA_FT_WLEN,
+ ((MI_KEYDEF *)keyinfo)->seg[1].length);
+}
+
uint _mi_ft_convert_to_ft2(MI_INFO *info, uint keynr, uchar *key)
{
my_off_t root;
DYNAMIC_ARRAY *da=info->ft1_to_ft2;
MI_KEYDEF *keyinfo=&info->s->ft2_keyinfo;
- uchar *key_ptr= (uchar*) dynamic_array_ptr(da, 0), *end;
+ uchar *key_ptr= dynamic_array_ptr(da, 0), *end;
uint length, key_length;
DBUG_ENTER("_mi_ft_convert_to_ft2");
- /* we'll generate one pageful at once, and insert the rest one-by-one */
- /* calculating the length of this page ...*/
- length=(keyinfo->block_length-2) / keyinfo->keylength;
- set_if_smaller(length, da->elements);
- length=length * keyinfo->keylength;
-
get_key_full_length_rdonly(key_length, key);
while (_mi_ck_delete(info, keynr, key, key_length) == 0)
{
@@ -325,6 +326,13 @@ uint _mi_ft_convert_to_ft2(MI_INFO *info
*/
}
+ /* we'll generate one pageful at once, and insert the rest one-by-one */
+ /* calculating the length of this page ...*/
+ length=(keyinfo->block_length-2) / keyinfo->keylength;
+ set_if_smaller(length, da->elements);
+ my_qsort2(da->buffer, length, keyinfo->keylength, cmp_ft2_part, keyinfo);
+ length=length * keyinfo->keylength;
+
/* creating pageful of keys */
mi_putint(info->buff,length+2,0);
memcpy(info->buff+2, key_ptr, length);
@@ -333,11 +341,21 @@ uint _mi_ft_convert_to_ft2(MI_INFO *info
_mi_write_keypage(info,keyinfo,root,DFLT_INIT_HITS,info->buff))
DBUG_RETURN(-1);
+ /*
+ _mi_ck_real_write_btree() may overwrite it's key_ptr argument,
+ and key_reflength bytes after it. That's why we write array
+ elements backwards and reserve a space after the last element.
+ */
+ allocate_dynamic(da, da->elements+1);
+
/* inserting the rest of key values */
- end= (uchar*) dynamic_array_ptr(da, da->elements);
- for (key_ptr+=length; key_ptr < end; key_ptr+=keyinfo->keylength)
+ key_ptr= dynamic_array_ptr(da, da->elements-1);
+ end= dynamic_array_ptr(da, 0) + length;
+ for (; key_ptr >= end; key_ptr-= keyinfo->keylength)
+ {
if(_mi_ck_real_write_btree(info, keyinfo, key_ptr, 0, &root, SEARCH_SAME))
DBUG_RETURN(-1);
+ }
/* now, writing the word key entry */
ft_intXstore(key+key_length, - (int) da->elements);
diff -Nrup a/storage/myisam/ftdefs.h b/storage/myisam/ftdefs.h
--- a/storage/myisam/ftdefs.h 2007-05-10 11:59:32 +02:00
+++ b/storage/myisam/ftdefs.h 2008-04-09 07:33:16 +02:00
@@ -121,7 +121,7 @@ void _mi_ft_segiterator_dummy_init(const
uint _mi_ft_segiterator(FT_SEG_ITERATOR *);
void ft_parse_init(TREE *, CHARSET_INFO *);
-int ft_parse(TREE *, uchar *, int, struct st_mysql_ftparser *parser,
+int ft_parse(TREE *, const uchar *, int, struct st_mysql_ftparser *parser,
MYSQL_FTPARSER_PARAM *, MEM_ROOT *);
FT_WORD * ft_linearize(TREE *, MEM_ROOT *);
FT_WORD * _mi_ft_parserecord(MI_INFO *, uint, const uchar *, MEM_ROOT *);
diff -Nrup a/storage/myisam/mi_delete.c b/storage/myisam/mi_delete.c
--- a/storage/myisam/mi_delete.c 2008-03-29 09:00:49 +01:00
+++ b/storage/myisam/mi_delete.c 2008-04-09 07:33:16 +02:00
@@ -154,10 +154,7 @@ static int _mi_ck_real_delete(register M
DBUG_ENTER("_mi_ck_real_delete");
if ((old_root=*root) == HA_OFFSET_ERROR)
- {
- mi_print_error(info->s, HA_ERR_CRASHED);
- DBUG_RETURN(my_errno=HA_ERR_CRASHED);
- }
+ DBUG_RETURN(my_errno=HA_ERR_KEY_NOT_FOUND);
if (!(root_buff= (uchar*) my_alloca((uint) keyinfo->block_length+
MI_MAX_KEY_BUFF*2)))
{
@@ -322,8 +319,7 @@ static int d_search(register MI_INFO *in
if (!nod_flag)
{
DBUG_PRINT("error",("Didn't find key"));
- mi_print_error(info->s, HA_ERR_CRASHED);
- my_errno=HA_ERR_CRASHED; /* This should newer happend */
+ my_errno=HA_ERR_KEY_NOT_FOUND;
goto err;
}
save_flag=0;
diff -Nrup a/storage/myisam/mi_write.c b/storage/myisam/mi_write.c
--- a/storage/myisam/mi_write.c 2008-03-31 09:40:37 +02:00
+++ b/storage/myisam/mi_write.c 2008-04-09 07:33:16 +02:00
@@ -537,11 +537,7 @@ int _mi_insert(register MI_INFO *info, r
uint alen, blen, ft2len=info->s->ft2_keyinfo.keylength;
/* the very first key on the page is always unpacked */
DBUG_ASSERT((*b & 128) == 0);
-#if HA_FT_MAXLEN >= 127
blen= mi_uint2korr(b); b+=2;
-#else
- blen= *b++;
-#endif
get_key_length(alen,a);
DBUG_ASSERT(info->ft1_to_ft2==0);
if (alen == blen &&
| Thread |
|---|
| • bk commit into 5.1 tree (serg:1.2562) | Sergei Golubchik | 9 Apr |