Commit 01c341f6 authored by unknown's avatar unknown

bug 283: FULLTEXT index on a TEXT filed converted to a CHAR field doesn't work anymore

parent 2a61adce
...@@ -215,3 +215,14 @@ test.t1 repair status OK ...@@ -215,3 +215,14 @@ test.t1 repair status OK
select * from t1 where match (a) against ('aaaa'); select * from t1 where match (a) against ('aaaa');
a a
drop table t1; drop table t1;
drop table if exists t1;
create table t1 ( ref_mag text not null, fulltext (ref_mag));
insert into t1 values ('test');
select ref_mag from t1 where match ref_mag against ('+test' in boolean mode);
ref_mag
test
alter table t1 change ref_mag ref_mag char (255) not null;
select ref_mag from t1 where match ref_mag against ('+test' in boolean mode);
ref_mag
test
drop table t1;
...@@ -173,3 +173,16 @@ repair table t1; ...@@ -173,3 +173,16 @@ repair table t1;
select * from t1 where match (a) against ('aaaa'); select * from t1 where match (a) against ('aaaa');
drop table t1; drop table t1;
#
# bug 283 by jocelyn fournier <joc@presence-pc.com>
# FULLTEXT index on a TEXT filed converted to a CHAR field doesn't work anymore
#
drop table if exists t1;
create table t1 ( ref_mag text not null, fulltext (ref_mag));
insert into t1 values ('test');
select ref_mag from t1 where match ref_mag against ('+test' in boolean mode);
alter table t1 change ref_mag ref_mag char (255) not null;
select ref_mag from t1 where match ref_mag against ('+test' in boolean mode);
drop table t1;
...@@ -569,6 +569,14 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -569,6 +569,14 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
column->field_name); column->field_name);
DBUG_RETURN(-1); DBUG_RETURN(-1);
} }
/* for fulltext keys keyseg length is 1 for blobs (it's ignored in
ft code anyway, and 0 (set to column width later) for char's.
it has to be correct col width for char's, as char data are not
prefixed with length (unlike blobs, where ft code takes data length
from a data prefix, ignoring column->length).
*/
if (key->type == Key::FULLTEXT)
column->length=test(f_is_blob(sql_field->pack_flag));
if (f_is_blob(sql_field->pack_flag)) if (f_is_blob(sql_field->pack_flag))
{ {
if (!(file->table_flags() & HA_BLOB_KEY)) if (!(file->table_flags() & HA_BLOB_KEY))
...@@ -578,10 +586,6 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -578,10 +586,6 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
DBUG_RETURN(-1); DBUG_RETURN(-1);
} }
if (!column->length) if (!column->length)
{
if (key->type == Key::FULLTEXT)
column->length=1; /* ft-code ignores it anyway :-) */
else
{ {
my_printf_error(ER_BLOB_KEY_WITHOUT_LENGTH, my_printf_error(ER_BLOB_KEY_WITHOUT_LENGTH,
ER(ER_BLOB_KEY_WITHOUT_LENGTH),MYF(0), ER(ER_BLOB_KEY_WITHOUT_LENGTH),MYF(0),
...@@ -589,7 +593,6 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -589,7 +593,6 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
DBUG_RETURN(-1); DBUG_RETURN(-1);
} }
} }
}
if (!(sql_field->flags & NOT_NULL_FLAG)) if (!(sql_field->flags & NOT_NULL_FLAG))
{ {
if (key->type == Key::PRIMARY) if (key->type == Key::PRIMARY)
......
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