summaryrefslogtreecommitdiff
path: root/mysql-test/suite/innodb_fts/t/fulltext_left_join.test
blob: 0a1e174876929beb3b572c27d5c7b2d8301bf7a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#
# Test for bug from Jean-Cédric COSTA <jean-cedric.costa@ensmp.fr>
#
--source include/have_innodb.inc
--source include/maybe_versioning.inc

--disable_warnings
drop table if exists t1, t2;
--enable_warnings

CREATE TABLE t1 (
       id           VARCHAR(255) NOT NULL PRIMARY KEY,
       sujet        VARCHAR(255),
       motsclefs    TEXT,
       texte        MEDIUMTEXT,
       FULLTEXT(sujet, motsclefs, texte)
) ENGINE = InnoDB;

INSERT INTO t1 VALUES('123','toto','essai','test');
INSERT INTO t1 VALUES('456','droit','penal','lawyer');
INSERT INTO t1 VALUES('789','aaaaa','bbbbb','cccccc');

CREATE TABLE t2 (
       id         VARCHAR(255) NOT NULL,
       author     VARCHAR(255) NOT NULL
) ENGINE = InnoDB;

INSERT INTO t2 VALUES('123', 'moi');
INSERT INTO t2 VALUES('123', 'lui');
INSERT INTO t2 VALUES('456', 'lui');

-- disable_result_log
ANALYZE TABLE t1;
ANALYZE TABLE t2;
-- enable_result_log

select round(match(t1.texte,t1.sujet,t1.motsclefs) against('droit'),5)
       from t1 left join t2 on t2.id=t1.id;
select match(t1.texte,t1.sujet,t1.motsclefs) against('droit' IN BOOLEAN MODE)
       from t1 left join t2 on t2.id=t1.id;

drop table t1, t2;

#
# BUG#484, reported by Stephen Brandon <stephen@brandonitconsulting.co.uk>
#

create table t1 (venue_id int(11) default null, venue_text varchar(255) default null, dt datetime default null) ENGINE = InnoDB;
 
insert into t1 (venue_id, venue_text, dt) values (1, 'a1', '2003-05-23 19:30:00'),(null, 'a2', '2003-05-23 19:30:00');
eval create table t2 (name varchar(255) not null default '', entity_id int(11) not null auto_increment, primary key  (entity_id), fulltext key name (name)) engine= innodb;
insert into t2 (name, entity_id) values ('aberdeen town hall', 1), ('glasgow royal concert hall', 2), ('queen\'s hall, edinburgh', 3);
-- disable_result_log
ANALYZE TABLE t1;
ANALYZE TABLE t2;
-- enable_result_log
select * from t1 left join t2 on venue_id = entity_id where match(name) against('aberdeen' in boolean mode) and dt = '2003-05-23 19:30:00';
select * from t1 left join t2 on venue_id = entity_id where match(name) against('aberdeen') and dt = '2003-05-23 19:30:00';
select * from t1 left join t2 on (venue_id = entity_id and match(name) against('aberdeen' in boolean mode)) where dt = '2003-05-23 19:30:00';
select * from t1 left join t2 on (venue_id = entity_id and match(name) against('aberdeen')) where dt = '2003-05-23 19:30:00';
drop table t1,t2;

#
# BUG#14708
# Inconsistent treatment of NULLs in LEFT JOINed FULLTEXT matching without index
#

create table t1 (id int not null primary key, d char(200) not null, e char(200), fulltext (d, e)) ENGINE = InnoDB;
insert into t1 values (1, 'aword', null), (2, 'aword', 'bword'), (3, 'bword', null), (4, 'bword', 'aword'), (5, 'aword and bword', null);
-- disable_result_log
ANALYZE TABLE t1;
-- enable_result_log
select * from t1 where match(d, e) against ('+aword +bword' in boolean mode);

# INNODB_FTS: Investigate Full Text search on joined result
create table t2 (m_id int not null, f char(200), key (m_id), fulltext (f)) engine = InnoDB;
insert into t2 values (1, 'bword'), (3, 'aword'), (5, '');
-- disable_result_log
ANALYZE TABLE t2;
-- enable_result_log
--error ER_WRONG_ARGUMENTS
select * from t1 left join t2 on m_id = id where match(d, e, f) against ('+aword +bword' in boolean mode);
drop table t1,t2;

#
# BUG#25637: LEFT JOIN with BOOLEAN FULLTEXT loses left table matches
#            (this is actually the same bug as bug #14708)
#

CREATE TABLE t1 (
  id int(10) NOT NULL auto_increment,
  link int(10) default NULL,
  name mediumtext default NULL,
  PRIMARY KEY (id),
  FULLTEXT (name)
) ENGINE = InnoDB;
INSERT INTO t1 VALUES (1, 1, 'string');
INSERT INTO t1 VALUES (2, 0, 'string');
CREATE TABLE t2 (
    id int(10) NOT NULL auto_increment,
    name mediumtext default NULL,
    PRIMARY KEY (id),
    FULLTEXT (name)
) ENGINE = InnoDB;
INSERT INTO t2 VALUES (1, 'string');

-- disable_result_log
ANALYZE TABLE t1;
ANALYZE TABLE t2;
-- enable_result_log

--error ER_WRONG_ARGUMENTS
SELECT t1.*, MATCH(t1.name) AGAINST('string') AS relevance 
  FROM t1 LEFT JOIN t2 ON t1.link = t2.id
    WHERE MATCH(t1.name, t2.name) AGAINST('string' IN BOOLEAN MODE);

DROP TABLE t1,t2;

# End of 4.1 tests

#
# BUG#25729 - boolean full text search is confused by NULLs produced by LEFT
#             JOIN
#
CREATE TABLE t1 (a INT) ENGINE = InnoDB;
CREATE TABLE t2 (b INT, c TEXT, KEY(b), FULLTEXT(c)) ENGINE = InnoDB;
INSERT INTO t1 VALUES(1);
INSERT INTO t2(b,c) VALUES(2,'castle'),(3,'castle');
-- disable_result_log
ANALYZE TABLE t1;
ANALYZE TABLE t2;
-- enable_result_log
SELECT * FROM t1 LEFT JOIN t2 ON a=b WHERE MATCH(c) AGAINST('+castle' IN BOOLEAN MODE);
DROP TABLE t1, t2;