Fix for BUG#11869: In Item_func_match::fix_index() handle the case when there is no
source table present (this happens for ORDER BY after UNION)
This commit is contained in:
parent
e1273aec6d
commit
0b3db181bf
@ -86,3 +86,77 @@ a rel
|
||||
1 1
|
||||
2 2
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (
|
||||
id int(11) NOT NULL auto_increment,
|
||||
thread int(11) NOT NULL default '0',
|
||||
beitrag longtext NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
KEY thread (thread),
|
||||
FULLTEXT KEY beitrag (beitrag)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7923 ;
|
||||
CREATE TABLE t2 (
|
||||
id int(11) NOT NULL auto_increment,
|
||||
text varchar(100) NOT NULL default '',
|
||||
PRIMARY KEY (id),
|
||||
KEY text (text)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=63 ;
|
||||
CREATE TABLE t3 (
|
||||
id int(11) NOT NULL auto_increment,
|
||||
forum int(11) NOT NULL default '0',
|
||||
betreff varchar(70) NOT NULL default '',
|
||||
PRIMARY KEY (id),
|
||||
KEY forum (forum),
|
||||
FULLTEXT KEY betreff (betreff)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=996 ;
|
||||
select a.text, b.id, b.betreff
|
||||
from
|
||||
t2 a inner join t3 b on a.id = b.forum inner join
|
||||
t1 c on b.id = c.thread
|
||||
where
|
||||
match(b.betreff) against ('+abc' in boolean mode)
|
||||
group by a.text, b.id, b.betreff
|
||||
union
|
||||
select a.text, b.id, b.betreff
|
||||
from
|
||||
t2 a inner join t3 b on a.id = b.forum inner join
|
||||
t1 c on b.id = c.thread
|
||||
where
|
||||
match(c.beitrag) against ('+abc' in boolean mode)
|
||||
group by
|
||||
a.text, b.id, b.betreff
|
||||
order by
|
||||
match(b.betreff) against ('+abc' in boolean mode) desc;
|
||||
ERROR 42S02: Unknown table 'b' in order clause
|
||||
select a.text, b.id, b.betreff
|
||||
from
|
||||
t2 a inner join t3 b on a.id = b.forum inner join
|
||||
t1 c on b.id = c.thread
|
||||
where
|
||||
match(b.betreff) against ('+abc' in boolean mode)
|
||||
union
|
||||
select a.text, b.id, b.betreff
|
||||
from
|
||||
t2 a inner join t3 b on a.id = b.forum inner join
|
||||
t1 c on b.id = c.thread
|
||||
where
|
||||
match(c.beitrag) against ('+abc' in boolean mode)
|
||||
order by
|
||||
match(b.betreff) against ('+abc' in boolean mode) desc;
|
||||
ERROR 42S02: Unknown table 'b' in order clause
|
||||
select a.text, b.id, b.betreff
|
||||
from
|
||||
t2 a inner join t3 b on a.id = b.forum inner join
|
||||
t1 c on b.id = c.thread
|
||||
where
|
||||
match(b.betreff) against ('+abc' in boolean mode)
|
||||
union
|
||||
select a.text, b.id, b.betreff
|
||||
from
|
||||
t2 a inner join t3 b on a.id = b.forum inner join
|
||||
t1 c on b.id = c.thread
|
||||
where
|
||||
match(c.beitrag) against ('+abc' in boolean mode)
|
||||
order by
|
||||
match(betreff) against ('+abc' in boolean mode) desc;
|
||||
text id betreff
|
||||
drop table t1,t2,t3;
|
||||
|
@ -54,3 +54,84 @@ SELECT a, MATCH (message) AGAINST ('t* f*' IN BOOLEAN MODE) as rel FROM t1;
|
||||
SELECT a, MATCH (message) AGAINST ('t* f*' IN BOOLEAN MODE) as rel FROM t1 ORDER BY rel,a;
|
||||
drop table t1;
|
||||
|
||||
# BUG#11869
|
||||
CREATE TABLE t1 (
|
||||
id int(11) NOT NULL auto_increment,
|
||||
thread int(11) NOT NULL default '0',
|
||||
beitrag longtext NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
KEY thread (thread),
|
||||
FULLTEXT KEY beitrag (beitrag)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7923 ;
|
||||
|
||||
CREATE TABLE t2 (
|
||||
id int(11) NOT NULL auto_increment,
|
||||
text varchar(100) NOT NULL default '',
|
||||
PRIMARY KEY (id),
|
||||
KEY text (text)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=63 ;
|
||||
|
||||
CREATE TABLE t3 (
|
||||
id int(11) NOT NULL auto_increment,
|
||||
forum int(11) NOT NULL default '0',
|
||||
betreff varchar(70) NOT NULL default '',
|
||||
PRIMARY KEY (id),
|
||||
KEY forum (forum),
|
||||
FULLTEXT KEY betreff (betreff)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=996 ;
|
||||
|
||||
--error 1109
|
||||
select a.text, b.id, b.betreff
|
||||
from
|
||||
t2 a inner join t3 b on a.id = b.forum inner join
|
||||
t1 c on b.id = c.thread
|
||||
where
|
||||
match(b.betreff) against ('+abc' in boolean mode)
|
||||
group by a.text, b.id, b.betreff
|
||||
union
|
||||
select a.text, b.id, b.betreff
|
||||
from
|
||||
t2 a inner join t3 b on a.id = b.forum inner join
|
||||
t1 c on b.id = c.thread
|
||||
where
|
||||
match(c.beitrag) against ('+abc' in boolean mode)
|
||||
group by
|
||||
a.text, b.id, b.betreff
|
||||
order by
|
||||
match(b.betreff) against ('+abc' in boolean mode) desc;
|
||||
|
||||
--error 1109
|
||||
select a.text, b.id, b.betreff
|
||||
from
|
||||
t2 a inner join t3 b on a.id = b.forum inner join
|
||||
t1 c on b.id = c.thread
|
||||
where
|
||||
match(b.betreff) against ('+abc' in boolean mode)
|
||||
union
|
||||
select a.text, b.id, b.betreff
|
||||
from
|
||||
t2 a inner join t3 b on a.id = b.forum inner join
|
||||
t1 c on b.id = c.thread
|
||||
where
|
||||
match(c.beitrag) against ('+abc' in boolean mode)
|
||||
order by
|
||||
match(b.betreff) against ('+abc' in boolean mode) desc;
|
||||
|
||||
select a.text, b.id, b.betreff
|
||||
from
|
||||
t2 a inner join t3 b on a.id = b.forum inner join
|
||||
t1 c on b.id = c.thread
|
||||
where
|
||||
match(b.betreff) against ('+abc' in boolean mode)
|
||||
union
|
||||
select a.text, b.id, b.betreff
|
||||
from
|
||||
t2 a inner join t3 b on a.id = b.forum inner join
|
||||
t1 c on b.id = c.thread
|
||||
where
|
||||
match(c.beitrag) against ('+abc' in boolean mode)
|
||||
order by
|
||||
match(betreff) against ('+abc' in boolean mode) desc;
|
||||
|
||||
drop table t1,t2,t3;
|
||||
|
||||
|
@ -3197,6 +3197,9 @@ bool Item_func_match::fix_index()
|
||||
if (key == NO_SUCH_KEY)
|
||||
return 0;
|
||||
|
||||
if (!table)
|
||||
goto err;
|
||||
|
||||
for (keynr=0 ; keynr < table->keys ; keynr++)
|
||||
{
|
||||
if ((table->key_info[keynr].flags & HA_FULLTEXT) &&
|
||||
|
Loading…
x
Reference in New Issue
Block a user