mirror of
https://github.com/MariaDB/server.git
synced 2026-05-17 20:37:12 +02:00
MDEV-13626 Merge InnoDB test cases from MySQL 5.7
This imports and adapts a number of MySQL 5.7 test cases that are applicable to MariaDB. Some tests for old bug fixes are not that relevant because the code has been refactored since then (especially starting with MariaDB Server 10.6), and the tests would not reproduce the original bug if the fix was reverted. In the test innodb_fts.opt, there are many duplicate MATCH ranks, which would make the results nondeterministic. The test was stabilized by changing some LIMIT clauses or by adding sorted_result in those cases where the purpose of a test was to show that no sorting took place in the server. In the test innodb_fts.phrase, MySQL 5.7 would generate FTS_DOC_ID that are 1 larger than in MariaDB. In innodb_fts.index_table the difference is 2. This is because in MariaDB, fts_get_next_doc_id() post-increments cache->next_doc_id, while MySQL 5.7 pre-increments it. Reviewed by: Thirunarayanan Balathandayuthapani
This commit is contained in:
parent
2447172afb
commit
228b7e4db5
101 changed files with 15120 additions and 127 deletions
27
mysql-test/suite/innodb_fts/r/foreign_key_check.result
Normal file
27
mysql-test/suite/innodb_fts/r/foreign_key_check.result
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
CREATE TABLE t1 (
|
||||
id INT NOT NULL,
|
||||
title TEXT,
|
||||
PRIMARY KEY (id),
|
||||
FULLTEXT KEY (title),
|
||||
FOREIGN KEY (id) REFERENCES t2 (id)
|
||||
) ENGINE=InnoDB;
|
||||
ERROR HY000: Can't create table `test`.`t1` (errno: 150 "Foreign key constraint is incorrectly formed")
|
||||
CREATE TABLE t1 (
|
||||
id INT NOT NULL,
|
||||
title TEXT,
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB;
|
||||
ALTER TABLE t1 ADD FULLTEXT KEY (title), ADD FOREIGN KEY (id) REFERENCES t2 (id);
|
||||
ERROR HY000: Can't create table `test`.`t1` (errno: 150 "Foreign key constraint is incorrectly formed")
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
ALTER TABLE t1 ADD FULLTEXT KEY (title), ADD FOREIGN KEY (id) REFERENCES t2 (id);
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (
|
||||
id INT NOT NULL,
|
||||
title TEXT,
|
||||
PRIMARY KEY (id),
|
||||
FULLTEXT KEY (title),
|
||||
FOREIGN KEY (id) REFERENCES t2 (id)
|
||||
) ENGINE=InnoDB;
|
||||
DROP TABLE t1;
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
34
mysql-test/suite/innodb_fts/r/foreign_key_update.result
Normal file
34
mysql-test/suite/innodb_fts/r/foreign_key_update.result
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
CREATE TABLE t1 (
|
||||
a varchar(40),
|
||||
KEY a(a)
|
||||
) ENGINE=InnoDB;
|
||||
CREATE TABLE t1_fk (
|
||||
a varchar(40),
|
||||
KEY a(a),
|
||||
FULLTEXT KEY (a),
|
||||
CONSTRAINT fk FOREIGN KEY (a) REFERENCES t1 (a) ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES('mysql');
|
||||
INSERT INTO t1_fk VALUES('mysql');
|
||||
INSERT INTO t1_fk VALUES('mysql');
|
||||
SELECT * FROM t1_fk;
|
||||
a
|
||||
mysql
|
||||
mysql
|
||||
SELECT * FROM t1_fk WHERE MATCH(a) AGAINST('mysql');
|
||||
a
|
||||
mysql
|
||||
mysql
|
||||
UPDATE t1 SET a = 'database' WHERE a = 'mysql';
|
||||
SELECT * FROM t1_fk;
|
||||
a
|
||||
database
|
||||
database
|
||||
SELECT * FROM t1_fk WHERE MATCH(a) AGAINST('mysql');
|
||||
a
|
||||
SELECT * FROM t1_fk WHERE MATCH(a) AGAINST('database');
|
||||
a
|
||||
database
|
||||
database
|
||||
DROP TABLE t1_fk;
|
||||
DROP TABLE t1;
|
||||
265
mysql-test/suite/innodb_fts/r/index_table.result
Normal file
265
mysql-test/suite/innodb_fts/r/index_table.result
Normal file
|
|
@ -0,0 +1,265 @@
|
|||
SET @optimize=@@GLOBAL.INNODB_OPTIMIZE_FULLTEXT_ONLY;
|
||||
SET GLOBAL INNODB_OPTIMIZE_FULLTEXT_ONLY=1;
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
content TEXT
|
||||
) ENGINE= InnoDB;
|
||||
CREATE FULLTEXT INDEX idx ON articles (title, content);
|
||||
INSERT INTO articles (title, content) VALUES
|
||||
('MySQL Tutorial','DBMS stands for MySQL DataBase ...'),
|
||||
('How To Use MySQL Well','After you went through a ...'),
|
||||
('Optimizing MySQL','In this tutorial we will show ...'),
|
||||
('1001 MySQL Tricks','How to use full-text search engine'),
|
||||
('Go MySQL Tricks','How to use full text search engine');
|
||||
SET @aux=@@GLOBAL.innodb_ft_aux_table;
|
||||
SET GLOBAL innodb_ft_aux_table='test/articles';
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE;
|
||||
WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION
|
||||
1001 4 4 1 4 0
|
||||
after 2 2 1 2 22
|
||||
database 1 1 1 1 37
|
||||
dbms 1 1 1 1 15
|
||||
engine 4 5 2 4 46
|
||||
engine 4 5 2 5 44
|
||||
full 4 5 2 4 29
|
||||
full 4 5 2 5 27
|
||||
mysql 1 5 5 1 0
|
||||
mysql 1 5 5 1 31
|
||||
mysql 1 5 5 2 11
|
||||
mysql 1 5 5 3 11
|
||||
mysql 1 5 5 4 5
|
||||
mysql 1 5 5 5 3
|
||||
optimizing 3 3 1 3 0
|
||||
search 4 5 2 4 39
|
||||
search 4 5 2 5 37
|
||||
show 3 3 1 3 42
|
||||
stands 1 1 1 1 20
|
||||
text 4 5 2 4 34
|
||||
text 4 5 2 5 32
|
||||
through 2 2 1 2 37
|
||||
tricks 4 5 2 4 11
|
||||
tricks 4 5 2 5 9
|
||||
tutorial 1 3 2 1 6
|
||||
tutorial 1 3 2 3 25
|
||||
use 2 5 3 2 7
|
||||
use 2 5 3 4 25
|
||||
use 2 5 3 5 23
|
||||
well 2 2 1 2 17
|
||||
went 2 2 1 2 32
|
||||
you 2 2 1 2 28
|
||||
OPTIMIZE TABLE articles;
|
||||
Table Op Msg_type Msg_text
|
||||
test.articles optimize status OK
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE;
|
||||
WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION
|
||||
1001 4 4 1 4 0
|
||||
after 2 2 1 2 22
|
||||
database 1 1 1 1 37
|
||||
dbms 1 1 1 1 15
|
||||
engine 4 5 2 4 46
|
||||
engine 4 5 2 5 44
|
||||
full 4 5 2 4 29
|
||||
full 4 5 2 5 27
|
||||
mysql 1 5 5 1 0
|
||||
mysql 1 5 5 1 31
|
||||
mysql 1 5 5 2 11
|
||||
mysql 1 5 5 3 11
|
||||
mysql 1 5 5 4 5
|
||||
mysql 1 5 5 5 3
|
||||
optimizing 3 3 1 3 0
|
||||
search 4 5 2 4 39
|
||||
search 4 5 2 5 37
|
||||
show 3 3 1 3 42
|
||||
stands 1 1 1 1 20
|
||||
text 4 5 2 4 34
|
||||
text 4 5 2 5 32
|
||||
through 2 2 1 2 37
|
||||
tricks 4 5 2 4 11
|
||||
tricks 4 5 2 5 9
|
||||
tutorial 1 3 2 1 6
|
||||
tutorial 1 3 2 3 25
|
||||
use 2 5 3 2 7
|
||||
use 2 5 3 4 25
|
||||
use 2 5 3 5 23
|
||||
well 2 2 1 2 17
|
||||
went 2 2 1 2 32
|
||||
you 2 2 1 2 28
|
||||
SET @save_dbug=@@debug_dbug;
|
||||
SET debug_dbug='+d,fts_instrument_result_cache_limit';
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE;
|
||||
WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION
|
||||
1001 4 4 1 4 0
|
||||
after 2 2 1 2 22
|
||||
database 1 1 1 1 37
|
||||
dbms 1 1 1 1 15
|
||||
engine 4 5 2 4 46
|
||||
engine 4 5 2 5 44
|
||||
full 4 5 2 4 29
|
||||
full 4 5 2 5 27
|
||||
mysql 1 5 5 1 0
|
||||
mysql 1 5 5 1 31
|
||||
mysql 1 5 5 2 11
|
||||
mysql 1 5 5 3 11
|
||||
mysql 1 5 5 4 5
|
||||
mysql 1 5 5 5 3
|
||||
optimizing 3 3 1 3 0
|
||||
search 4 5 2 4 39
|
||||
search 4 5 2 5 37
|
||||
show 3 3 1 3 42
|
||||
stands 1 1 1 1 20
|
||||
text 4 5 2 4 34
|
||||
text 4 5 2 5 32
|
||||
through 2 2 1 2 37
|
||||
tricks 4 5 2 4 11
|
||||
tricks 4 5 2 5 9
|
||||
tutorial 1 3 2 1 6
|
||||
tutorial 1 3 2 3 25
|
||||
use 2 5 3 2 7
|
||||
use 2 5 3 4 25
|
||||
use 2 5 3 5 23
|
||||
well 2 2 1 2 17
|
||||
went 2 2 1 2 32
|
||||
you 2 2 1 2 28
|
||||
SET debug_dbug=@save_dbug;
|
||||
DROP TABLE articles;
|
||||
SET GLOBAL innodb_ft_result_cache_limit=default;
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
content TEXT
|
||||
) ENGINE= InnoDB;
|
||||
CREATE FULLTEXT INDEX idx_t ON articles (title);
|
||||
CREATE FULLTEXT INDEX idx_c ON articles (content);
|
||||
INSERT INTO articles (title, content) VALUES
|
||||
('MySQL Tutorial','DBMS stands for MySQL DataBase ...'),
|
||||
('How To Use MySQL Well','After you went through a ...'),
|
||||
('Optimizing MySQL','In this tutorial we will show ...'),
|
||||
('1001 MySQL Tricks','How to use full-text search engine'),
|
||||
('Go MySQL Tricks','How to use full text search engine');
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE;
|
||||
WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION
|
||||
SET GLOBAL innodb_ft_aux_table='test/articles';
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE;
|
||||
WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION
|
||||
1001 4 4 1 4 0
|
||||
mysql 1 5 5 1 0
|
||||
mysql 1 5 5 2 11
|
||||
mysql 1 5 5 3 11
|
||||
mysql 1 5 5 4 5
|
||||
mysql 1 5 5 5 3
|
||||
optimizing 3 3 1 3 0
|
||||
tricks 4 5 2 4 11
|
||||
tricks 4 5 2 5 9
|
||||
tutorial 1 1 1 1 6
|
||||
use 2 2 1 2 7
|
||||
well 2 2 1 2 17
|
||||
after 2 2 1 2 0
|
||||
database 1 1 1 1 22
|
||||
dbms 1 1 1 1 0
|
||||
engine 4 5 2 4 28
|
||||
engine 4 5 2 5 28
|
||||
full 4 5 2 4 11
|
||||
full 4 5 2 5 11
|
||||
mysql 1 1 1 1 16
|
||||
search 4 5 2 4 21
|
||||
search 4 5 2 5 21
|
||||
show 3 3 1 3 25
|
||||
stands 1 1 1 1 5
|
||||
text 4 5 2 4 16
|
||||
text 4 5 2 5 16
|
||||
through 2 2 1 2 15
|
||||
tutorial 3 3 1 3 8
|
||||
use 4 5 2 4 7
|
||||
use 4 5 2 5 7
|
||||
went 2 2 1 2 10
|
||||
you 2 2 1 2 6
|
||||
OPTIMIZE TABLE articles;
|
||||
Table Op Msg_type Msg_text
|
||||
test.articles optimize status OK
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE;
|
||||
WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION
|
||||
1001 4 4 1 4 0
|
||||
mysql 1 5 5 1 0
|
||||
mysql 1 5 5 2 11
|
||||
mysql 1 5 5 3 11
|
||||
mysql 1 5 5 4 5
|
||||
mysql 1 5 5 5 3
|
||||
optimizing 3 3 1 3 0
|
||||
tricks 4 5 2 4 11
|
||||
tricks 4 5 2 5 9
|
||||
tutorial 1 1 1 1 6
|
||||
use 2 2 1 2 7
|
||||
well 2 2 1 2 17
|
||||
after 2 2 1 2 0
|
||||
database 1 1 1 1 22
|
||||
dbms 1 1 1 1 0
|
||||
engine 4 5 2 4 28
|
||||
engine 4 5 2 5 28
|
||||
full 4 5 2 4 11
|
||||
full 4 5 2 5 11
|
||||
mysql 1 1 1 1 16
|
||||
search 4 5 2 4 21
|
||||
search 4 5 2 5 21
|
||||
show 3 3 1 3 25
|
||||
stands 1 1 1 1 5
|
||||
text 4 5 2 4 16
|
||||
text 4 5 2 5 16
|
||||
through 2 2 1 2 15
|
||||
tutorial 3 3 1 3 8
|
||||
use 4 5 2 4 7
|
||||
use 4 5 2 5 7
|
||||
went 2 2 1 2 10
|
||||
you 2 2 1 2 6
|
||||
DROP TABLE articles;
|
||||
SET NAMES utf8;
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
|
||||
CREATE FULLTEXT INDEX idx ON articles (title);
|
||||
INSERT INTO articles (title) VALUES
|
||||
('相亲相爱'),('怜香惜爱'),('充满可爱'),('爱恨交织');
|
||||
SET GLOBAL innodb_ft_aux_table="test/articles";
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE;
|
||||
WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION
|
||||
充满可爱 3 3 1 3 0
|
||||
怜香惜爱 2 2 1 2 0
|
||||
爱恨交织 4 4 1 4 0
|
||||
相亲相爱 1 1 1 1 0
|
||||
OPTIMIZE TABLE articles;
|
||||
Table Op Msg_type Msg_text
|
||||
test.articles optimize status OK
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE;
|
||||
WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION
|
||||
充满可爱 3 3 1 3 0
|
||||
怜香惜爱 2 2 1 2 0
|
||||
爱恨交织 4 4 1 4 0
|
||||
相亲相爱 1 1 1 1 0
|
||||
DROP TABLE articles;
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET gb2312 COLLATE gb2312_chinese_ci;
|
||||
CREATE FULLTEXT INDEX idx ON articles (title);
|
||||
INSERT INTO articles (title) VALUES
|
||||
('相亲相爱'),('怜香惜爱'),('充满可爱'),('爱恨交织');
|
||||
SET GLOBAL innodb_ft_aux_table="test/articles";
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE;
|
||||
WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION
|
||||
爱恨交织 4 4 1 4 0
|
||||
充满可爱 3 3 1 3 0
|
||||
怜香惜爱 2 2 1 2 0
|
||||
相亲相爱 1 1 1 1 0
|
||||
OPTIMIZE TABLE articles;
|
||||
Table Op Msg_type Msg_text
|
||||
test.articles optimize status OK
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE;
|
||||
WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION
|
||||
怜香惜爱 2 2 1 2 0
|
||||
充满可爱 3 3 1 3 0
|
||||
相亲相爱 1 1 1 1 0
|
||||
爱恨交织 4 4 1 4 0
|
||||
DROP TABLE articles;
|
||||
SET GLOBAL innodb_ft_aux_table=@aux;
|
||||
SET GLOBAL INNODB_OPTIMIZE_FULLTEXT_ONLY=@optimize;
|
||||
|
|
@ -134,6 +134,7 @@ count(*)
|
|||
2
|
||||
DROP TABLE t1;
|
||||
set global innodb_file_per_table=1;
|
||||
set names utf8;
|
||||
CREATE TABLE t1 (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
a TEXT,
|
||||
|
|
@ -160,7 +161,7 @@ SELECT count(*) FROM t1
|
|||
WHERE MATCH (a,b,c)
|
||||
AGAINST ('"very blob"@4' IN BOOLEAN MODE);
|
||||
count(*)
|
||||
4
|
||||
5
|
||||
SELECT count(*) FROM t1
|
||||
WHERE MATCH (a,b,c)
|
||||
AGAINST ('"interesting blob"@9' IN BOOLEAN MODE);
|
||||
|
|
@ -175,7 +176,7 @@ SELECT COUNT(*) FROM t1
|
|||
WHERE MATCH (a,b,c)
|
||||
AGAINST ('"very blob"@4 - "interesting blob"@9' IN BOOLEAN MODE);
|
||||
COUNT(*)
|
||||
3
|
||||
4
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
|
|
|
|||
157
mysql-test/suite/innodb_fts/r/limit_union.result
Normal file
157
mysql-test/suite/innodb_fts/r/limit_union.result
Normal file
|
|
@ -0,0 +1,157 @@
|
|||
# Bug #22709692 FTS QUERY EXCEEDS RESULT CACHE LIMIT
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT (title,body),
|
||||
FULLTEXT (body))ENGINE=InnoDB;
|
||||
INSERT INTO articles (title,body) VALUES
|
||||
('MySQL Tutorial','DBMS stands for DataBase ...'),
|
||||
('How To Use MySQL Well','After you went through a ...'),
|
||||
('Optimizing MySQL','In this tutorial we will show ...'),
|
||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
||||
('MySQL Security','When configured properly, MySQL ...');
|
||||
SET @default_cache_size = @@GLOBAL.query_cache_size;
|
||||
SET GLOBAL query_cache_size=0;
|
||||
# Query involves Ranking
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL' IN NATURAL LANGUAGE MODE) LIMIT 1;
|
||||
id title body
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
# Without optimization
|
||||
SET @save_dbug = @@debug_dbug;
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL' IN NATURAL LANGUAGE MODE) LIMIT 1;
|
||||
id title body
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
SET debug_dbug = @save_dbug;
|
||||
# Query involves No Ranking and fts_union operations
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL' IN BOOLEAN MODE) limit 1;
|
||||
id title body
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
# Without optimization
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL' IN BOOLEAN MODE) limit 1;
|
||||
id title body
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
SET debug_dbug = @save_dbug;
|
||||
# Query involves No ranking and fts_union, fts_ignore
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL -YourSQL' IN BOOLEAN MODE) limit 1;
|
||||
id title body
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
# Without optimization
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL -YourSQL' IN BOOLEAN MODE) limit 1;
|
||||
id title body
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
SET debug_dbug = @save_dbug;
|
||||
# Query with fts_intersect
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL +YourSQL' IN BOOLEAN MODE) limit 1;
|
||||
id title body
|
||||
5 MySQL vs. YourSQL In the following database comparison ...
|
||||
# Without optimization
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL +YourSQL' IN BOOLEAN MODE) limit 1;
|
||||
id title body
|
||||
5 MySQL vs. YourSQL In the following database comparison ...
|
||||
SET debug_dbug = @save_dbug;
|
||||
INSERT INTO articles (title,body) VALUES
|
||||
('MySQL Tutorial','request doc@oraclehelp.com ...'),
|
||||
('MySQL Tutorial','request support@oraclehelp.com ...'),
|
||||
('Trial version','query performace @1255 minute on 2.1Hz
|
||||
Memory 2GB...'),
|
||||
('when To Use MySQL Well','for free faq mail@xyz.com ...');
|
||||
# Query with @distance
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('"MySQL request"@3' IN BOOLEAN MODE) limit 1;
|
||||
id title body
|
||||
7 MySQL Tutorial request doc@oraclehelp.com ...
|
||||
# Without optimization
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('"MySQL request"@3' IN BOOLEAN MODE) limit 1;
|
||||
id title body
|
||||
7 MySQL Tutorial request doc@oraclehelp.com ...
|
||||
SET debug_dbug = @save_dbug;
|
||||
# Query with subexpression
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('+MySQL +(-support +doc)' IN BOOLEAN MODE) limit 1;
|
||||
id title body
|
||||
7 MySQL Tutorial request doc@oraclehelp.com ...
|
||||
# Without optimization
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('+MySQL +(-support +doc)' IN BOOLEAN MODE) limit 1;
|
||||
id title body
|
||||
7 MySQL Tutorial request doc@oraclehelp.com ...
|
||||
SET debug_dbug = @save_dbug;
|
||||
# limit num1 OFFSET num2
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL' in boolean mode) limit 4 offset 2;
|
||||
id title body
|
||||
2 How To Use MySQL Well After you went through a ...
|
||||
3 Optimizing MySQL In this tutorial we will show ...
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||
5 MySQL vs. YourSQL In the following database comparison ...
|
||||
# Without optimization
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL' in boolean mode) limit 4 offset 2;
|
||||
id title body
|
||||
2 How To Use MySQL Well After you went through a ...
|
||||
3 Optimizing MySQL In this tutorial we will show ...
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||
5 MySQL vs. YourSQL In the following database comparison ...
|
||||
SET debug_dbug = @save_dbug;
|
||||
# wild card search
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('ru*' IN BOOLEAN MODE) limit 1;
|
||||
id title body
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||
# Without optimization
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('ru*' IN BOOLEAN MODE) limit 1;
|
||||
id title body
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||
SET debug_dbug = @save_dbug;
|
||||
# phrase search
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('"request support"' IN BOOLEAN MODE) limit 1;
|
||||
id title body
|
||||
8 MySQL Tutorial request support@oraclehelp.com ...
|
||||
# Without optimization
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('"request support"' IN BOOLEAN MODE) limit 1;
|
||||
id title body
|
||||
8 MySQL Tutorial request support@oraclehelp.com ...
|
||||
SET debug_dbug = @save_dbug;
|
||||
DROP TABLE articles;
|
||||
SET GLOBAL query_cache_size = @default_cache_size;
|
||||
1878
mysql-test/suite/innodb_fts/r/misc.result
Normal file
1878
mysql-test/suite/innodb_fts/r/misc.result
Normal file
File diff suppressed because it is too large
Load diff
922
mysql-test/suite/innodb_fts/r/misc_1.result
Normal file
922
mysql-test/suite/innodb_fts/r/misc_1.result
Normal file
|
|
@ -0,0 +1,922 @@
|
|||
set names utf8;
|
||||
call mtr.add_suppression("\\[Warning\\] InnoDB: A new Doc ID must be supplied while updating FTS indexed columns.");
|
||||
call mtr.add_suppression("\\[Warning\\] InnoDB: FTS Doc ID must be larger than [0-9]+ for table `test`.`t1`");
|
||||
CREATE TABLE t1 (
|
||||
id1 INT ,
|
||||
a1 VARCHAR(200) ,
|
||||
b1 TEXT ,
|
||||
FULLTEXT KEY (a1,b1), PRIMARY KEY (a1, id1)
|
||||
) CHARACTER SET = utf8 , ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (
|
||||
id2 INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
a2 VARCHAR(200),
|
||||
b2 TEXT ,
|
||||
FOREIGN KEY (a2) REFERENCES t1(a1) ON UPDATE CASCADE,
|
||||
FULLTEXT KEY (b2,a2)
|
||||
) CHARACTER SET = utf8 ,ENGINE = InnoDB;
|
||||
INSERT INTO t1 (id1,a1,b1) VALUES
|
||||
(1,'MySQL Tutorial','DBMS stands for DataBase VÐƷWİ...') ,
|
||||
(2,'How To Use MySQL Well','After you went through a ...'),
|
||||
(3,'Optimizing MySQL','In this tutorial we will show ...');
|
||||
INSERT INTO t1 (id1,a1,b1) VALUES
|
||||
(4,'1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||
(5,'MySQL vs. YourSQL','In the following database comparison ...'),
|
||||
(6,'MySQL Security','When configured properly, MySQL ...');
|
||||
INSERT INTO t2 (a2,b2) VALUES
|
||||
('MySQL Tutorial','DBMS stands for DataBase VÐƷWİ...') ,
|
||||
('How To Use MySQL Well','After you went through a ...'),
|
||||
('Optimizing MySQL','In this tutorial we will show ...');
|
||||
INSERT INTO t2 (a2,b2) VALUES
|
||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
||||
('MySQL Security','When configured properly, MySQL ...');
|
||||
INSERT INTO t2 (a2,b2) VALUES
|
||||
('MySQL Tricks','1. Never run mysqld as root. 2. ...');
|
||||
ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`a2`) REFERENCES `t1` (`a1`) ON UPDATE CASCADE)
|
||||
DELETE FROM t1;
|
||||
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`a2`) REFERENCES `t1` (`a1`) ON UPDATE CASCADE)
|
||||
ANALYZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze Warning Engine-independent statistics are not collected for column 'b1'
|
||||
test.t1 analyze status OK
|
||||
ANALYZE TABLE t2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t2 analyze status Engine-independent statistics collected
|
||||
test.t2 analyze Warning Engine-independent statistics are not collected for column 'b2'
|
||||
test.t2 analyze status OK
|
||||
SELECT id1 FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial') ORDER BY id1;
|
||||
id1
|
||||
1
|
||||
3
|
||||
SELECT id2 FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial') ORDER BY id2;
|
||||
id2
|
||||
1
|
||||
3
|
||||
SELECT id1 FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ORDER BY id1;
|
||||
id1
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
SELECT id2 FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ORDER BY id2;
|
||||
id2
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
SELECT id1 FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial' WITH QUERY EXPANSION) ORDER BY id1;
|
||||
id1
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
SELECT id2 FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial' WITH QUERY EXPANSION) ORDER BY id2;
|
||||
id2
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
SELECT id1 FROM t1 WHERE MATCH (a1,b1) AGAINST ('"dbms database"@4' IN BOOLEAN MODE) ;
|
||||
id1
|
||||
1
|
||||
SELECT id2 FROM t2 WHERE MATCH (a2,b2) AGAINST ('"dbms database"@4' IN BOOLEAN MODE) ;
|
||||
id2
|
||||
1
|
||||
set global innodb_optimize_fulltext_only=1;
|
||||
optimize table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize status OK
|
||||
set global innodb_optimize_fulltext_only=0;
|
||||
UPDATE t1 SET a1 = "changing column - on update cascade" , b1 = "to check foreign constraint" WHERE
|
||||
MATCH (a1,b1) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
SELECT id1 FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
id1
|
||||
SELECT id2 FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
id2
|
||||
3
|
||||
6
|
||||
SELECT id1 FROM t1 WHERE MATCH (a1,b1) AGAINST ('+update +cascade' IN BOOLEAN MODE) ORDER BY id1;
|
||||
id1
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
SELECT id2 FROM t2 WHERE MATCH (a2,b2) AGAINST ('+update +cascade' IN BOOLEAN MODE) ORDER BY id2;
|
||||
id2
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
SELECT id2 FROM t2 WHERE a2 LIKE '%UPDATE CASCADE%' ORDER BY id2;
|
||||
id2
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
DROP TABLE t2 , t1;
|
||||
create table t1 (s1 int, s2 varchar(200), primary key (s1,s2)) ENGINE = InnoDB;
|
||||
create table t2 (s1 int, s2 varchar(200),
|
||||
fulltext key(s2),
|
||||
foreign key (s1,s2) references t1 (s1,s2) on update cascade) ENGINE = InnoDB;
|
||||
insert into t1 values (1,'Sunshine'),(2,'Lollipops');
|
||||
insert into t2 values (1,'Sunshine'),(2,'Lollipops');
|
||||
update t1 set s2 = 'Rainbows' where s2 <> 'Sunshine';
|
||||
commit;
|
||||
select * from t2 where match(s2) against ('Lollipops');
|
||||
s1 s2
|
||||
DROP TABLE t2 , t1;
|
||||
create table t1 (s1 int, s2 varchar(200), primary key (s1,s2)) ENGINE = InnoDB;
|
||||
create table t2 (s1 int, s2 varchar(200),
|
||||
fulltext key(s2),
|
||||
foreign key (s1,s2) references t1 (s1,s2) on delete cascade) ENGINE = InnoDB;
|
||||
insert into t1 values (1,'Sunshine'),(2,'Lollipops');
|
||||
insert into t2 values (1,'Sunshine'),(2,'Lollipops');
|
||||
delete from t1 where s2 <> 'Sunshine';
|
||||
select * from t2 where match(s2) against ('Lollipops');
|
||||
s1 s2
|
||||
DROP TABLE t2 , t1;
|
||||
create table t1 (s1 int, s2 varchar(200), primary key (s1,s2)) ENGINE = InnoDB;
|
||||
create table t2 (s1 int, s2 varchar(200),
|
||||
fulltext key(s2),
|
||||
foreign key (s1,s2) references t1 (s1,s2) on delete set null) ENGINE = InnoDB;
|
||||
insert into t1 values (1,'Sunshine'),(2,'Lollipops');
|
||||
insert into t2 values (1,'Sunshine'),(2,'Lollipops');
|
||||
delete from t1 where s2 <> 'Sunshine';
|
||||
select * from t2 where match(s2) against ('Lollipops');
|
||||
s1 s2
|
||||
DROP TABLE t2 , t1;
|
||||
create table t1 (s1 int, s2 varchar(200), primary key (s1,s2)) ENGINE = InnoDB;
|
||||
create table t2 (s1 int, s2 varchar(200),
|
||||
fulltext key(s2),
|
||||
foreign key (s1,s2) references t1 (s1,s2) on update set null) ENGINE = InnoDB;
|
||||
insert into t1 values (1,'Sunshine'),(2,'Lollipops');
|
||||
insert into t2 values (1,'Sunshine'),(2,'Lollipops');
|
||||
update t1 set s2 = 'Rainbows' where s2 <> 'Sunshine';
|
||||
commit;
|
||||
select * from t2 where match(s2) against ('Lollipops');
|
||||
s1 s2
|
||||
DROP TABLE t2 , t1;
|
||||
create table t1 (s1 bigint unsigned not null, s2 varchar(200),
|
||||
primary key (s1,s2)) ENGINE = InnoDB;
|
||||
create table t2 (FTS_DOC_ID BIGINT UNSIGNED NOT NULL, s2 varchar(200),
|
||||
foreign key (FTS_DOC_ID) references t1 (s1)
|
||||
on update cascade) ENGINE = InnoDB;
|
||||
create fulltext index idx on t2(s2);
|
||||
show create table t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`FTS_DOC_ID` bigint(20) unsigned NOT NULL,
|
||||
`s2` varchar(200) DEFAULT NULL,
|
||||
KEY `FTS_DOC_ID` (`FTS_DOC_ID`),
|
||||
FULLTEXT KEY `idx` (`s2`),
|
||||
CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`FTS_DOC_ID`) REFERENCES `t1` (`s1`) ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
insert into t1 values (1,'Sunshine'),(2,'Lollipops');
|
||||
insert into t2 values (1,'Sunshine'),(2,'Lollipops');
|
||||
update t1 set s1 = 3 where s1=1;
|
||||
select * from t2 where match(s2) against ('sunshine');
|
||||
FTS_DOC_ID s2
|
||||
3 Sunshine
|
||||
update t1 set s1 = 1 where s1=3;
|
||||
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`FTS_DOC_ID`) REFERENCES `t1` (`s1`) ON UPDATE CASCADE)
|
||||
DROP TABLE t2 , t1;
|
||||
CREATE TABLE t1 (
|
||||
id1 INT ,
|
||||
a1 VARCHAR(200) PRIMARY KEY,
|
||||
b1 TEXT character set utf8 ,
|
||||
FULLTEXT KEY (a1,b1)
|
||||
) CHARACTER SET = utf8 ,ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (
|
||||
id2 INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
a2 VARCHAR(200),
|
||||
b2 TEXT character set utf8 ,
|
||||
FOREIGN KEY (a2) REFERENCES t1(a1) ON DELETE CASCADE,
|
||||
FULLTEXT KEY (b2,a2)
|
||||
) CHARACTER SET = utf8 ,ENGINE = InnoDB;
|
||||
INSERT INTO t1 (id1,a1,b1) VALUES
|
||||
(1,'MySQL Tutorial','DBMS stands for DataBase VÐƷWİ...') ,
|
||||
(2,'How To Use MySQL Well','After you went through a ...'),
|
||||
(3,'Optimizing MySQL','In this tutorial we will show ...'),
|
||||
(4,'1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||
(5,'MySQL vs. YourSQL','In the following database comparison ...'),
|
||||
(6,'MySQL Security','When configured properly, MySQL ...');
|
||||
INSERT INTO t2 (a2,b2) VALUES
|
||||
('MySQL Tutorial','DBMS stands for DataBase VÐƷWİ...') ,
|
||||
('How To Use MySQL Well','After you went through a ...'),
|
||||
('Optimizing MySQL','In this tutorial we will show ...'),
|
||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
||||
('MySQL Security','When configured properly, MySQL ...');
|
||||
DELETE FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
id1 a1 b1
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
id2 a2 b2
|
||||
SELECT * FROM t1 WHERE a1 LIKE '%tutorial%';
|
||||
id1 a1 b1
|
||||
SELECT * FROM t2 WHERE a2 LIKE '%tutorial%';
|
||||
id2 a2 b2
|
||||
DROP TABLE t2 , t1;
|
||||
call mtr.add_suppression("\\[ERROR\\] InnoDB: FTS Doc ID must be larger than 3 for table `test`.`t2`");
|
||||
CREATE TABLE t1 (
|
||||
id1 INT ,
|
||||
a1 VARCHAR(200) ,
|
||||
b1 TEXT ,
|
||||
FULLTEXT KEY (a1,b1), PRIMARY KEY(a1, id1)
|
||||
) CHARACTER SET = utf8 , ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (
|
||||
id2 INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
a2 VARCHAR(200),
|
||||
b2 TEXT ,
|
||||
FOREIGN KEY (a2) REFERENCES t1(a1) ON UPDATE CASCADE,
|
||||
FULLTEXT KEY (b2,a2)
|
||||
) CHARACTER SET = utf8 ,ENGINE = InnoDB;
|
||||
INSERT INTO t1 (id1,a1,b1) VALUES
|
||||
(1,'MySQL Tutorial','DBMS stands for DataBase VÐƷWİ...') ,
|
||||
(2,'How To Use MySQL Well','After you went through a ...'),
|
||||
(3,'Optimizing MySQL','In this tutorial we will show ...');
|
||||
INSERT INTO t2 (a2,b2) VALUES
|
||||
('MySQL Tutorial','DBMS stands for DataBase VÐƷWİ...') ,
|
||||
('How To Use MySQL Well','After you went through a ...'),
|
||||
('Optimizing MySQL','In this tutorial we will show ...');
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (id1,a1,b1) VALUES
|
||||
(4,'1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||
(5,'MySQL vs. YourSQL','In the following database comparison ...'),
|
||||
(6,'MySQL Security','When configured properly, MySQL ...');
|
||||
INSERT INTO t2 (a2,b2) VALUES
|
||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
||||
('MySQL Security','When configured properly, MySQL ...');
|
||||
INSERT INTO t2 (a2,b2) VALUES
|
||||
('MySQL Tricks','1. Never run mysqld as root. 2. ...');
|
||||
ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`a2`) REFERENCES `t1` (`a1`) ON UPDATE CASCADE)
|
||||
DELETE FROM t1;
|
||||
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`a2`) REFERENCES `t1` (`a1`) ON UPDATE CASCADE)
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial') ORDER BY id1;
|
||||
id1 a1 b1
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
3 Optimizing MySQL In this tutorial we will show ...
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial') ORDER BY id2;
|
||||
id2 a2 b2
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
3 Optimizing MySQL In this tutorial we will show ...
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ORDER BY id1;
|
||||
id1 a1 b1
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
2 How To Use MySQL Well After you went through a ...
|
||||
3 Optimizing MySQL In this tutorial we will show ...
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ORDER BY id2;
|
||||
id2 a2 b2
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
2 How To Use MySQL Well After you went through a ...
|
||||
3 Optimizing MySQL In this tutorial we will show ...
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial' WITH QUERY EXPANSION) ORDER BY id1;
|
||||
id1 a1 b1
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
2 How To Use MySQL Well After you went through a ...
|
||||
3 Optimizing MySQL In this tutorial we will show ...
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial' WITH QUERY EXPANSION) ORDER BY id2;
|
||||
id2 a2 b2
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
2 How To Use MySQL Well After you went through a ...
|
||||
3 Optimizing MySQL In this tutorial we will show ...
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('"dbms database"@4' IN BOOLEAN MODE) ;
|
||||
id1 a1 b1
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('"dbms database"@4' IN BOOLEAN MODE) ;
|
||||
id2 a2 b2
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('root') ;
|
||||
id1 a1 b1
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('root') ;
|
||||
id2 a2 b2
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('mysqld (+root)' IN BOOLEAN MODE) ;
|
||||
id1 a1 b1
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('mysqld (-root)' IN BOOLEAN MODE) ;
|
||||
id2 a2 b2
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('root' WITH QUERY EXPANSION) ;
|
||||
id1 a1 b1
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('root' WITH QUERY EXPANSION) ;
|
||||
id2 a2 b2
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('"database comparison"@02' IN BOOLEAN MODE) ;
|
||||
id1 a1 b1
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('"database comparison"@02' IN BOOLEAN MODE) ;
|
||||
id2 a2 b2
|
||||
SELECT * FROM t1 ORDER BY id1;
|
||||
id1 a1 b1
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
2 How To Use MySQL Well After you went through a ...
|
||||
3 Optimizing MySQL In this tutorial we will show ...
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||
5 MySQL vs. YourSQL In the following database comparison ...
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
SELECT * FROM t2 ORDER BY id2;
|
||||
id2 a2 b2
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
2 How To Use MySQL Well After you went through a ...
|
||||
3 Optimizing MySQL In this tutorial we will show ...
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||
5 MySQL vs. YourSQL In the following database comparison ...
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
COMMIT;
|
||||
START TRANSACTION;
|
||||
UPDATE t1 SET a1 = "changing column - on UPDATE cascade" , b1 = "to check foreign constraint" WHERE
|
||||
MATCH (a1,b1) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
COMMIT;
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
id1 a1 b1
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
id2 a2 b2
|
||||
3 changing column - on UPDATE cascade In this tutorial we will show ...
|
||||
6 changing column - on UPDATE cascade When configured properly, MySQL ...
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('+UPDATE +cascade' IN BOOLEAN MODE) ORDER BY id1;
|
||||
id1 a1 b1
|
||||
1 changing column - on UPDATE cascade to check foreign constraint
|
||||
2 changing column - on UPDATE cascade to check foreign constraint
|
||||
3 changing column - on UPDATE cascade to check foreign constraint
|
||||
4 changing column - on UPDATE cascade to check foreign constraint
|
||||
5 changing column - on UPDATE cascade to check foreign constraint
|
||||
6 changing column - on UPDATE cascade to check foreign constraint
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('+UPDATE +cascade' IN BOOLEAN MODE) ORDER BY id2;
|
||||
id2 a2 b2
|
||||
1 changing column - on UPDATE cascade DBMS stands for DataBase VÐƷWİ...
|
||||
2 changing column - on UPDATE cascade After you went through a ...
|
||||
3 changing column - on UPDATE cascade In this tutorial we will show ...
|
||||
4 changing column - on UPDATE cascade 1. Never run mysqld as root. 2. ...
|
||||
5 changing column - on UPDATE cascade In the following database comparison ...
|
||||
6 changing column - on UPDATE cascade When configured properly, MySQL ...
|
||||
SELECT * FROM t2 WHERE a2 LIKE '%UPDATE CASCADE%' ORDER BY id2;
|
||||
id2 a2 b2
|
||||
1 changing column - on UPDATE cascade DBMS stands for DataBase VÐƷWİ...
|
||||
2 changing column - on UPDATE cascade After you went through a ...
|
||||
3 changing column - on UPDATE cascade In this tutorial we will show ...
|
||||
4 changing column - on UPDATE cascade 1. Never run mysqld as root. 2. ...
|
||||
5 changing column - on UPDATE cascade In the following database comparison ...
|
||||
6 changing column - on UPDATE cascade When configured properly, MySQL ...
|
||||
DROP TABLE t2 , t1;
|
||||
CREATE TABLE t1 (s1 INT, s2 VARCHAR(200), PRIMARY KEY (s1,s2)) ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (s1 INT, s2 VARCHAR(200),
|
||||
FULLTEXT KEY(s2),
|
||||
FOREIGN KEY (s1,s2) REFERENCES t1 (s1,s2) on UPDATE cascade) ENGINE = InnoDB;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
INSERT INTO t2 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
UPDATE t1 set s2 = 'Rainbows' WHERE s2 <> 'Sunshine';
|
||||
COMMIT;
|
||||
SELECT * FROM t2 WHERE MATCH(s2) AGAINST ('Lollipops');
|
||||
s1 s2
|
||||
DROP TABLE t2 , t1;
|
||||
CREATE TABLE t1 (s1 INT, s2 VARCHAR(200), PRIMARY KEY (s1,s2)) ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (s1 INT, s2 VARCHAR(200),
|
||||
FULLTEXT KEY(s2),
|
||||
FOREIGN KEY (s1,s2) REFERENCES t1 (s1,s2) on DELETE cascade) ENGINE = InnoDB;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
INSERT INTO t2 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
DELETE FROM t1 WHERE s2 <> 'Sunshine';
|
||||
COMMIT;
|
||||
SELECT * FROM t2 WHERE MATCH(s2) AGAINST ('Lollipops');
|
||||
s1 s2
|
||||
DROP TABLE t2 , t1;
|
||||
CREATE TABLE t1 (s1 INT, s2 VARCHAR(200), PRIMARY KEY (s1,s2)) ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (s1 INT, s2 VARCHAR(200),
|
||||
FULLTEXT KEY(s2),
|
||||
FOREIGN KEY (s1,s2) REFERENCES t1 (s1,s2) on DELETE SET NULL) ENGINE = InnoDB;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
INSERT INTO t2 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
DELETE FROM t1 WHERE s2 <> 'Sunshine';
|
||||
COMMIT;
|
||||
SELECT * FROM t2 WHERE MATCH(s2) AGAINST ('Lollipops');
|
||||
s1 s2
|
||||
DROP TABLE t2 , t1;
|
||||
CREATE TABLE t1 (s1 INT, s2 VARCHAR(200), PRIMARY KEY (s1,s2)) ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (s1 INT, s2 VARCHAR(200),
|
||||
FULLTEXT KEY(s2),
|
||||
FOREIGN KEY (s1,s2) REFERENCES t1 (s1,s2) on UPDATE SET NULL) ENGINE = InnoDB;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
INSERT INTO t2 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
UPDATE t1 set s2 = 'Rainbows' WHERE s2 <> 'Sunshine';
|
||||
COMMIT;
|
||||
SELECT * FROM t2 WHERE MATCH(s2) AGAINST ('Lollipops');
|
||||
s1 s2
|
||||
DROP TABLE t2 , t1;
|
||||
CREATE TABLE t1 (s1 INT, s2 VARCHAR(200), PRIMARY KEY (s1,s2)) ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (s1 INT, s2 VARCHAR(200),
|
||||
FULLTEXT KEY(s2),
|
||||
FOREIGN KEY (s1,s2) REFERENCES t1 (s1,s2) on UPDATE cascade) ENGINE = InnoDB;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
INSERT INTO t2 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
UPDATE t1 set s2 = 'Rainbows' WHERE s2 <> 'Sunshine';
|
||||
ROLLBACK;
|
||||
SELECT * FROM t2 WHERE MATCH(s2) AGAINST ('Lollipops');
|
||||
s1 s2
|
||||
DROP TABLE t2 , t1;
|
||||
CREATE TABLE t1 (s1 INT, s2 VARCHAR(200), PRIMARY KEY (s1,s2)) ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (s1 INT, s2 VARCHAR(200),
|
||||
FULLTEXT KEY(s2),
|
||||
FOREIGN KEY (s1,s2) REFERENCES t1 (s1,s2) on DELETE cascade) ENGINE = InnoDB;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
INSERT INTO t2 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
DELETE FROM t1 WHERE s2 <> 'Sunshine';
|
||||
ROLLBACK;
|
||||
SELECT * FROM t2 WHERE MATCH(s2) AGAINST ('Lollipops');
|
||||
s1 s2
|
||||
DROP TABLE t2 , t1;
|
||||
CREATE TABLE t1 (s1 INT, s2 VARCHAR(200), PRIMARY KEY (s1,s2)) ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (s1 INT, s2 VARCHAR(200),
|
||||
FULLTEXT KEY(s2),
|
||||
FOREIGN KEY (s1,s2) REFERENCES t1 (s1,s2) on DELETE SET NULL) ENGINE = InnoDB;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
INSERT INTO t2 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
DELETE FROM t1 WHERE s2 <> 'Sunshine';
|
||||
ROLLBACK;
|
||||
SELECT * FROM t2 WHERE MATCH(s2) AGAINST ('Lollipops');
|
||||
s1 s2
|
||||
DROP TABLE t2 , t1;
|
||||
CREATE TABLE t1 (s1 INT, s2 VARCHAR(200), PRIMARY KEY (s1,s2)) ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (s1 INT, s2 VARCHAR(200),
|
||||
FULLTEXT KEY(s2),
|
||||
FOREIGN KEY (s1,s2) REFERENCES t1 (s1,s2) on UPDATE SET NULL) ENGINE = InnoDB;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
INSERT INTO t2 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
UPDATE t1 set s2 = 'Rainbows' WHERE s2 <> 'Sunshine';
|
||||
ROLLBACK;
|
||||
SELECT * FROM t2 WHERE MATCH(s2) AGAINST ('Lollipops');
|
||||
s1 s2
|
||||
DROP TABLE t2 , t1;
|
||||
set global innodb_file_per_table=1;
|
||||
CREATE TABLE t1 (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
a VARCHAR(200),
|
||||
b TEXT
|
||||
) CHARACTER SET = utf8, ROW_FORMAT=COMPRESSED, ENGINE = InnoDB;
|
||||
INSERT INTO t1 (a,b) VALUES
|
||||
('MySQL Tutorial','DBMS stands for DataBase VÐƷWİ...') ,
|
||||
('How To Use MySQL Well','After you went through a ...'),
|
||||
('Optimizing MySQL','In this tutorial we will show ...');
|
||||
ALTER TABLE t1 ADD FULLTEXT INDEX idx (a,b);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`a` varchar(200) DEFAULT NULL,
|
||||
`b` text DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
FULLTEXT KEY `idx` (`a`,`b`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=COMPRESSED
|
||||
SELECT count(*) FROM information_schema.innodb_sys_tables WHERE name LIKE "%FTS_%" AND space !=0;
|
||||
count(*)
|
||||
11
|
||||
INSERT INTO t1 (a,b) VALUES
|
||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
||||
('MySQL Security','When configured properly, MySQL ...');
|
||||
ANALYZE TABLE t1;
|
||||
SELECT * FROM t1 WHERE MATCH (a,b)
|
||||
AGAINST ('Tutorial' IN NATURAL LANGUAGE MODE) ORDER BY id;
|
||||
id a b
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
3 Optimizing MySQL In this tutorial we will show ...
|
||||
select * from t1 where MATCH(a,b) AGAINST("+tutorial +VÐƷWİ" IN BOOLEAN MODE);
|
||||
id a b
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
select * from t1 where MATCH(a,b) AGAINST("+-VÐƷWİ" IN BOOLEAN MODE);
|
||||
ERROR 42000: syntax error, unexpected '-'
|
||||
select * from t1 where MATCH(a,b) AGAINST("+Mysql +(tricks never)" IN BOOLEAN MODE);
|
||||
id a b
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||
select * from t1 where MATCH(a,b) AGAINST("+mysql -(tricks never)" IN BOOLEAN MODE) ORDER BY id;
|
||||
id a b
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
2 How To Use MySQL Well After you went through a ...
|
||||
3 Optimizing MySQL In this tutorial we will show ...
|
||||
5 MySQL vs. YourSQL In the following database comparison ...
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
select *, MATCH(a,b) AGAINST("mysql stands" IN BOOLEAN MODE) as x from t1 ORDER BY id;
|
||||
id a b x
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ... 0.6055193543434143
|
||||
2 How To Use MySQL Well After you went through a ... 0.000000001885928302414186
|
||||
3 Optimizing MySQL In this tutorial we will show ... 0.000000001885928302414186
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ... 0.000000001885928302414186
|
||||
5 MySQL vs. YourSQL In the following database comparison ... 0.000000001885928302414186
|
||||
6 MySQL Security When configured properly, MySQL ... 0.000000003771856604828372
|
||||
select * from t1 where MATCH a,b AGAINST ("+database* +VÐƷW*" IN BOOLEAN MODE);
|
||||
id a b
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
select * from t1 where MATCH a,b AGAINST ('"security mysql"' IN BOOLEAN MODE);
|
||||
id a b
|
||||
select * from t1 where MATCH(a,b) AGAINST ("VÐƷWİ" WITH QUERY EXPANSION) ORDER BY id;
|
||||
id a b
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
2 How To Use MySQL Well After you went through a ...
|
||||
3 Optimizing MySQL In this tutorial we will show ...
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||
5 MySQL vs. YourSQL In the following database comparison ...
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
ALTER TABLE t1 DROP INDEX idx;
|
||||
CREATE FULLTEXT INDEX idx on t1 (a,b);
|
||||
SELECT * FROM t1 WHERE MATCH (a,b)
|
||||
AGAINST ('Tutorial' IN NATURAL LANGUAGE MODE) ORDER BY id;
|
||||
id a b
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
3 Optimizing MySQL In this tutorial we will show ...
|
||||
select * from t1 where MATCH(a,b) AGAINST("+tutorial +VÐƷWİ" IN BOOLEAN MODE);
|
||||
id a b
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
select * from t1 where MATCH(a,b) AGAINST("+dbms" IN BOOLEAN MODE);
|
||||
id a b
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
select * from t1 where MATCH(a,b) AGAINST("+Mysql +(tricks never)" IN BOOLEAN MODE);
|
||||
id a b
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||
select * from t1 where MATCH(a,b) AGAINST("+mysql -(tricks never)" IN BOOLEAN MODE) ORDER BY id;
|
||||
id a b
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
2 How To Use MySQL Well After you went through a ...
|
||||
3 Optimizing MySQL In this tutorial we will show ...
|
||||
5 MySQL vs. YourSQL In the following database comparison ...
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
select *, MATCH(a,b) AGAINST("mysql VÐƷWİ" IN BOOLEAN MODE) as x from t1 ORDER BY id;
|
||||
id a b x
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ... 0.6055193543434143
|
||||
2 How To Use MySQL Well After you went through a ... 0.000000001885928302414186
|
||||
3 Optimizing MySQL In this tutorial we will show ... 0.000000001885928302414186
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ... 0.000000001885928302414186
|
||||
5 MySQL vs. YourSQL In the following database comparison ... 0.000000001885928302414186
|
||||
6 MySQL Security When configured properly, MySQL ... 0.000000003771856604828372
|
||||
select * from t1 where MATCH a,b AGAINST ('"security mysql"' IN BOOLEAN MODE);
|
||||
id a b
|
||||
select * from t1 where MATCH(a,b) AGAINST ("VÐƷWİ" WITH QUERY EXPANSION) ORDER BY id;
|
||||
id a b
|
||||
1 MySQL Tutorial DBMS stands for DataBase VÐƷWİ...
|
||||
2 How To Use MySQL Well After you went through a ...
|
||||
3 Optimizing MySQL In this tutorial we will show ...
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||
5 MySQL vs. YourSQL In the following database comparison ...
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
INSERT INTO t1 (a,b) VALUES ('test query expansion','for database ...');
|
||||
INSERT INTO t1 (a,b) VALUES
|
||||
('test proximity search, test, proximity and phrase',
|
||||
'search, with proximity innodb');
|
||||
INSERT INTO t1 (a,b) VALUES
|
||||
('test proximity fts search, test, proximity and phrase',
|
||||
'search, with proximity innodb');
|
||||
INSERT INTO t1 (a,b) VALUES
|
||||
('test more proximity fts search, test, more proximity and phrase',
|
||||
'search, with proximity innodb');
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"proximity search"@2' IN BOOLEAN MODE);
|
||||
id a b
|
||||
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"proximity search"@1' IN BOOLEAN MODE);
|
||||
id a b
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"proximity search"@3' IN BOOLEAN MODE) ORDER BY id;
|
||||
id a b
|
||||
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||
9 test proximity fts search, test, proximity and phrase search, with proximity innodb
|
||||
10 test more proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"test proximity"@5' IN BOOLEAN MODE) ORDER BY id;
|
||||
id a b
|
||||
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||
9 test proximity fts search, test, proximity and phrase search, with proximity innodb
|
||||
10 test more proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"more test proximity"@2' IN BOOLEAN MODE);
|
||||
id a b
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"more test proximity"@3' IN BOOLEAN MODE);
|
||||
id a b
|
||||
10 test more proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"more fts proximity"@03' IN BOOLEAN MODE);
|
||||
id a b
|
||||
10 test more proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||
UPDATE t1 SET a = UPPER(a) , b = UPPER(b) ;
|
||||
UPDATE t1 SET a = UPPER(a) , b = LOWER(b) ;
|
||||
select * from t1 where MATCH(a,b) AGAINST("+tutorial +dbms" IN BOOLEAN MODE);
|
||||
id a b
|
||||
1 MYSQL TUTORIAL dbms stands for database vðʒwi...
|
||||
select * from t1 where MATCH(a,b) AGAINST("+VÐƷWİ" IN BOOLEAN MODE);
|
||||
id a b
|
||||
1 MYSQL TUTORIAL dbms stands for database vðʒwi...
|
||||
SELECT * FROM t1 WHERE MATCH (a,b)
|
||||
AGAINST ('Tutorial' IN NATURAL LANGUAGE MODE) ORDER BY id;
|
||||
id a b
|
||||
1 MYSQL TUTORIAL dbms stands for database vðʒwi...
|
||||
3 OPTIMIZING MYSQL in this tutorial we will show ...
|
||||
DELETE FROM t1 WHERE MATCH (a,b) AGAINST ('Tutorial' IN NATURAL LANGUAGE MODE);
|
||||
DELETE FROM t1 WHERE MATCH (a,b) AGAINST ('"proximity search"@14' IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH (a,b)
|
||||
AGAINST ('Tutorial' IN NATURAL LANGUAGE MODE);
|
||||
id a b
|
||||
SELECT * FROM t1 ORDER BY id;
|
||||
id a b
|
||||
2 HOW TO USE MYSQL WELL after you went through a ...
|
||||
4 1001 MYSQL TRICKS 1. never run mysqld as root. 2. ...
|
||||
5 MYSQL VS. YOURSQL in the following database comparison ...
|
||||
6 MYSQL SECURITY when configured properly, mysql ...
|
||||
7 TEST QUERY EXPANSION for database ...
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
CREATE TABLE t1 (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
a VARCHAR(200),
|
||||
b TEXT
|
||||
) CHARACTER SET = utf8, ENGINE=InnoDB;
|
||||
INSERT INTO t1 (a,b) VALUES
|
||||
('Я могу есть стекло', 'оно мне не вредит'),
|
||||
('Мога да ям стъкло', 'то не ми вреди'),
|
||||
('Μπορῶ νὰ φάω σπασμένα' ,'γυαλιὰ χωρὶς νὰ πάθω τίποτα'),
|
||||
('Příliš žluťoučký kůň', 'úpěl ďábelské kódy'),
|
||||
('Sævör grét', 'áðan því úlpan var ónýt'),
|
||||
('うゐのおくやま','けふこえて'),
|
||||
('いろはにほへど ちりぬる','あさきゆめみじ ゑひもせず');
|
||||
INSERT INTO t1 (a,b) VALUES
|
||||
('MySQL Tutorial','request docteam@oraclehelp.com ...') ,
|
||||
('Trial version','query performace @1255 minute on 2.1Hz Memory 2GB...') ,
|
||||
('when To Use MySQL Well','for free faq mail@xyz.com ...');
|
||||
CREATE FULLTEXT INDEX idx on t1 (a,b);
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST ("вредит χωρὶς") ORDER BY id;
|
||||
id a b
|
||||
1 Я могу есть стекло оно мне не вредит
|
||||
3 Μπορῶ νὰ φάω σπασμένα γυαλιὰ χωρὶς νὰ πάθω τίποτα
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST ("оно" WITH QUERY EXPANSION);
|
||||
id a b
|
||||
1 Я могу есть стекло оно мне не вредит
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST("вред*" IN BOOLEAN MODE) ORDER BY id;
|
||||
id a b
|
||||
1 Я могу есть стекло оно мне не вредит
|
||||
2 Мога да ям стъкло то не ми вреди
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST("+γυαλιὰ +tutorial" IN BOOLEAN MODE);
|
||||
id a b
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST("+tutorial +(Мога τίποτα)" IN BOOLEAN MODE);
|
||||
id a b
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST ("あさきゆめみじ ゑひもせず");
|
||||
id a b
|
||||
7 いろはにほへど ちりぬる あさきゆめみじ ゑひもせず
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST ("ちりぬる" WITH QUERY EXPANSION);
|
||||
id a b
|
||||
7 いろはにほへど ちりぬる あさきゆめみじ ゑひもせず
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST ("+あさきゆめみじ +ゑひもせず" IN BOOLEAN MODE);
|
||||
id a b
|
||||
7 いろはにほへど ちりぬる あさきゆめみじ ゑひもせず
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST("うゐのおく*" IN BOOLEAN MODE);
|
||||
id a b
|
||||
6 うゐのおくやま けふこえて
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST("+Sævör +úlpan" IN BOOLEAN MODE);
|
||||
id a b
|
||||
5 Sævör grét áðan því úlpan var ónýt
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"γυαλιὰ χωρὶς"@2' IN BOOLEAN MODE);
|
||||
id a b
|
||||
3 Μπορῶ νὰ φάω σπασμένα γυαλιὰ χωρὶς νὰ πάθω τίποτα
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"query performace"@02' IN BOOLEAN MODE);
|
||||
id a b
|
||||
9 Trial version query performace @1255 minute on 2.1Hz Memory 2GB...
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"πάθω τίποτα"@2' IN BOOLEAN MODE);
|
||||
id a b
|
||||
3 Μπορῶ νὰ φάω σπασμένα γυαλιὰ χωρὶς νὰ πάθω τίποτα
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"あさきゆめみじ ゑひもせず"@1' IN BOOLEAN MODE);
|
||||
id a b
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"あさきゆめみじ ゑひもせず"@2' IN BOOLEAN MODE);
|
||||
id a b
|
||||
7 いろはにほへど ちりぬる あさきゆめみじ ゑひもせず
|
||||
ALTER TABLE t1 DROP INDEX idx;
|
||||
CREATE FULLTEXT INDEX idx on t1 (a,b);
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST ("あさきゆめみじ ゑひもせず");
|
||||
id a b
|
||||
7 いろはにほへど ちりぬる あさきゆめみじ ゑひもせず
|
||||
UPDATE t1 SET a = "Pchnąć w tę łódź jeża" , b = "lub osiem skrzyń fig" WHERE MATCH(a,b) AGAINST ("あさきゆめみじ ゑひもせず");
|
||||
UPDATE t1 SET a = "В чащах юга жил-был цитрус? Да", b = "но фальшивый экземпляр! ёъ" WHERE MATCH(a,b) AGAINST ("вред*" IN BOOLEAN MODE);
|
||||
DELETE FROM t1 WHERE MATCH(a,b) AGAINST("+Sævör +úlpan" IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST ("あさきゆめみじ ゑひもせず");
|
||||
id a b
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST ("łódź osiem");
|
||||
id a b
|
||||
7 Pchnąć w tę łódź jeża lub osiem skrzyń fig
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST("вред*" IN BOOLEAN MODE);
|
||||
id a b
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST("фальшив*" IN BOOLEAN MODE) ORDER BY id;
|
||||
id a b
|
||||
1 В чащах юга жил-был цитрус? Да но фальшивый экземпляр! ёъ
|
||||
2 В чащах юга жил-был цитрус? Да но фальшивый экземпляр! ёъ
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST("+Sævör +úlpan" IN BOOLEAN MODE);
|
||||
id a b
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"łódź jeża"@2' IN BOOLEAN MODE);
|
||||
id a b
|
||||
7 Pchnąć w tę łódź jeża lub osiem skrzyń fig
|
||||
SELECT * FROM t1 ORDER BY id;
|
||||
id a b
|
||||
1 В чащах юга жил-был цитрус? Да но фальшивый экземпляр! ёъ
|
||||
2 В чащах юга жил-был цитрус? Да но фальшивый экземпляр! ёъ
|
||||
3 Μπορῶ νὰ φάω σπασμένα γυαλιὰ χωρὶς νὰ πάθω τίποτα
|
||||
4 Příliš žluťoučký kůň úpěl ďábelské kódy
|
||||
6 うゐのおくやま けふこえて
|
||||
7 Pchnąć w tę łódź jeża lub osiem skrzyń fig
|
||||
8 MySQL Tutorial request docteam@oraclehelp.com ...
|
||||
9 Trial version query performace @1255 minute on 2.1Hz Memory 2GB...
|
||||
10 when To Use MySQL Well for free faq mail@xyz.com ...
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(ID INT PRIMARY KEY,
|
||||
no_fts_field VARCHAR(10),
|
||||
fts_field VARCHAR(10),
|
||||
FULLTEXT INDEX f(fts_field)) ENGINE=INNODB;
|
||||
INSERT INTO t1 VALUES (1, 'AAA', 'BBB');
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("BBB");
|
||||
ID no_fts_field fts_field
|
||||
1 AAA BBB
|
||||
UPDATE t1 SET fts_field='anychange' where id = 1;
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("anychange");
|
||||
ID no_fts_field fts_field
|
||||
1 AAA anychange
|
||||
UPDATE t1 SET no_fts_field='anychange' where id = 1;
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("anychange");
|
||||
ID no_fts_field fts_field
|
||||
1 anychange anychange
|
||||
UPDATE t1 SET no_fts_field='anychange', fts_field='other' where id = 1;
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("other");
|
||||
ID no_fts_field fts_field
|
||||
1 anychange other
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("BBB");
|
||||
ID no_fts_field fts_field
|
||||
DROP INDEX f on t1;
|
||||
UPDATE t1 SET fts_field='anychange' where id = 1;
|
||||
UPDATE t1 SET no_fts_field='anychange' where id = 1;
|
||||
UPDATE t1 SET no_fts_field='anychange', fts_field='other' where id = 1;
|
||||
CREATE FULLTEXT INDEX f ON t1(FTS_FIELD);
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("other");
|
||||
ID no_fts_field fts_field
|
||||
1 anychange other
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(`FTS_DOC_ID` serial,
|
||||
no_fts_field VARCHAR(10),
|
||||
fts_field VARCHAR(10),
|
||||
FULLTEXT INDEX f(fts_field)) ENGINE=INNODB;
|
||||
INSERT INTO t1 VALUES (1, 'AAA', 'BBB');
|
||||
UPDATE t1 SET fts_field='anychange' where FTS_DOC_ID = 1;
|
||||
ERROR HY000: Invalid InnoDB FTS Doc ID
|
||||
UPDATE t1 SET fts_field='anychange', FTS_DOC_ID = 2 where FTS_DOC_ID = 1;
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("anychange");
|
||||
FTS_DOC_ID no_fts_field fts_field
|
||||
2 AAA anychange
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("BBB");
|
||||
FTS_DOC_ID no_fts_field fts_field
|
||||
UPDATE t1 SET no_fts_field='anychange' where FTS_DOC_ID = 2;
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("anychange");
|
||||
FTS_DOC_ID no_fts_field fts_field
|
||||
2 anychange anychange
|
||||
UPDATE t1 SET no_fts_field='anychange', fts_field='other' where FTS_DOC_ID = 2;
|
||||
ERROR HY000: Invalid InnoDB FTS Doc ID
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("other");
|
||||
FTS_DOC_ID no_fts_field fts_field
|
||||
UPDATE t1 SET FTS_DOC_ID = 1 where FTS_DOC_ID = 2;
|
||||
ERROR HY000: Invalid InnoDB FTS Doc ID
|
||||
DROP INDEX f ON t1;
|
||||
UPDATE t1 SET fts_field='newchange' where FTS_DOC_ID = 2;
|
||||
UPDATE t1 SET no_fts_field='anychange' where FTS_DOC_ID = 2;
|
||||
SELECT * FROM t1;
|
||||
FTS_DOC_ID no_fts_field fts_field
|
||||
2 anychange newchange
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(ID INT PRIMARY KEY,
|
||||
no_fts_field VARCHAR(10),
|
||||
fts_field VARCHAR(10),
|
||||
FULLTEXT INDEX f(fts_field), index k(fts_field)) ENGINE=INNODB;
|
||||
CREATE TABLE t2(ID INT PRIMARY KEY,
|
||||
no_fts_field VARCHAR(10),
|
||||
fts_field VARCHAR(10),
|
||||
FULLTEXT INDEX f(fts_field),
|
||||
INDEX k2(fts_field),
|
||||
FOREIGN KEY(fts_field) REFERENCES
|
||||
t1(fts_field) ON UPDATE CASCADE) ENGINE=INNODB;
|
||||
INSERT INTO t1 VALUES (1, 'AAA', 'BBB');
|
||||
INSERT INTO t2 VALUES (1, 'AAA', 'BBB');
|
||||
update t1 set fts_field='newchange' where id =1;
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("BBB");
|
||||
ID no_fts_field fts_field
|
||||
SELECT * FROM t2 WHERE MATCH(fts_field) against("BBB");
|
||||
ID no_fts_field fts_field
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("newchange");
|
||||
ID no_fts_field fts_field
|
||||
1 AAA newchange
|
||||
SELECT * FROM t2 WHERE MATCH(fts_field) against("newchange");
|
||||
ID no_fts_field fts_field
|
||||
1 AAA newchange
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(id INT PRIMARY KEY,
|
||||
fts_field VARCHAR(10),
|
||||
FULLTEXT INDEX f(fts_field)) ENGINE=INNODB;
|
||||
CREATE TABLE t2(id INT PRIMARY KEY,
|
||||
fts_field VARCHAR(10),
|
||||
FULLTEXT INDEX f(fts_field)) ENGINE=INNODB;
|
||||
INSERT INTO t1 values (1,'100'),(2,'200'),(3,'300'),(4,'400'),(5,'500'),(6,'600'), (7,'700'),(8,'800'),(9,'900'),(10,'1000'),(11,'1100'),(12,'1200');
|
||||
INSERT INTO t2 values (1,'100'),(2,'200'),(3,'300'),(4,'400'),(5,'500'),(6,'600'), (7,'700'),(8,'800');
|
||||
UPDATE t1, t2 set t1.fts_field = CONCAT(t1.fts_field, 'foo');
|
||||
UPDATE t1, t2 set t1.fts_field = CONCAT(t1.fts_field, 'foo') WHERE t1.fts_field = "100foo";
|
||||
UPDATE t1, t2 set t1.fts_field = CONCAT(t1.fts_field, 'xoo'), t2.fts_field = CONCAT(t1.fts_field, 'xoo') where t1.fts_field=CONCAT(t2.fts_field, 'foo');
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("100foofoo");
|
||||
id fts_field
|
||||
1 100foofoo
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("100foo");
|
||||
id fts_field
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("100");
|
||||
id fts_field
|
||||
SELECT * FROM t2 WHERE MATCH(fts_field) against("400fooxoo");
|
||||
id fts_field
|
||||
4 400fooxoo
|
||||
SELECT * FROM t2 WHERE MATCH(fts_field) against("100");
|
||||
id fts_field
|
||||
1 100
|
||||
SELECT * FROM t2 WHERE MATCH(fts_field) against("200");
|
||||
id fts_field
|
||||
SELECT * FROM t2 WHERE MATCH(fts_field) against("400");
|
||||
id fts_field
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
|
||||
BUG#13701973/64274: MYSQL THREAD WAS SUSPENDED WHEN EXECUTE UPDATE QUERY
|
||||
|
||||
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
|
||||
CREATE TABLE t1 (
|
||||
t1_id INT(10) UNSIGNED NOT NULL,
|
||||
t2_id INT(10) UNSIGNED DEFAULT NULL,
|
||||
PRIMARY KEY (t1_id),
|
||||
FOREIGN KEY (t2_id) REFERENCES t2 (t2_id)
|
||||
ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (
|
||||
t1_id INT(10) UNSIGNED NOT NULL,
|
||||
t2_id INT(10) UNSIGNED NOT NULL,
|
||||
t3_id INT(10) UNSIGNED NOT NULL,
|
||||
t4_id INT(10) UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (t2_id),
|
||||
FOREIGN KEY (t1_id) REFERENCES t1 (t1_id),
|
||||
FOREIGN KEY (t3_id) REFERENCES t3 (t3_id)
|
||||
ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (t4_id) REFERENCES t4 (t4_id)
|
||||
) ENGINE=InnoDB;
|
||||
CREATE TABLE t3 (
|
||||
t3_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
payload char(3),
|
||||
PRIMARY KEY (t3_id)
|
||||
) ENGINE=InnoDB;
|
||||
INSERT INTO t3 VALUES (1, '100');
|
||||
CREATE TABLE t4 (
|
||||
t2_id INT(10) UNSIGNED DEFAULT NULL,
|
||||
t4_id INT(10) UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (t4_id),
|
||||
FOREIGN KEY (t2_id) REFERENCES t2 (t2_id)
|
||||
ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
SET FOREIGN_KEY_CHECKS=1;
|
||||
UPDATE t3 SET payload='101' WHERE t3_id=1;
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
DROP TABLE t4;
|
||||
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
|
||||
1650
mysql-test/suite/innodb_fts/r/opt.result
Normal file
1650
mysql-test/suite/innodb_fts/r/opt.result
Normal file
File diff suppressed because it is too large
Load diff
84
mysql-test/suite/innodb_fts/r/phrase.result
Normal file
84
mysql-test/suite/innodb_fts/r/phrase.result
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
INSERT INTO articles (title,body) VALUES
|
||||
(NULL, 'mysql good database'),
|
||||
(NULL, ' mysql good database'),
|
||||
('', 'mysql good database'),
|
||||
('', ' mysql good database'),
|
||||
(' ', 'mysql good database'),
|
||||
('mysql', 'good database'),
|
||||
('mysql ', 'good database'),
|
||||
('mysql', ' good database'),
|
||||
('mysql good database', ''),
|
||||
('mysql good database', NULL);
|
||||
SET GLOBAL innodb_ft_aux_table="test/articles";
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE;
|
||||
WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION
|
||||
database 1 10 10 1 11
|
||||
database 1 10 10 2 12
|
||||
database 1 10 10 3 11
|
||||
database 1 10 10 4 12
|
||||
database 1 10 10 5 13
|
||||
database 1 10 10 6 11
|
||||
database 1 10 10 7 12
|
||||
database 1 10 10 8 12
|
||||
database 1 10 10 9 11
|
||||
database 1 10 10 10 11
|
||||
good 1 10 10 1 6
|
||||
good 1 10 10 2 7
|
||||
good 1 10 10 3 6
|
||||
good 1 10 10 4 7
|
||||
good 1 10 10 5 8
|
||||
good 1 10 10 6 6
|
||||
good 1 10 10 7 7
|
||||
good 1 10 10 8 7
|
||||
good 1 10 10 9 6
|
||||
good 1 10 10 10 6
|
||||
mysql 1 10 10 1 0
|
||||
mysql 1 10 10 2 1
|
||||
mysql 1 10 10 3 0
|
||||
mysql 1 10 10 4 1
|
||||
mysql 1 10 10 5 2
|
||||
mysql 1 10 10 6 0
|
||||
mysql 1 10 10 7 0
|
||||
mysql 1 10 10 8 0
|
||||
mysql 1 10 10 9 0
|
||||
mysql 1 10 10 10 0
|
||||
SET GLOBAL innodb_ft_aux_table=default;
|
||||
SELECT * FROM articles;
|
||||
id title body
|
||||
1 NULL mysql good database
|
||||
2 NULL mysql good database
|
||||
3 mysql good database
|
||||
4 mysql good database
|
||||
5 mysql good database
|
||||
6 mysql good database
|
||||
7 mysql good database
|
||||
8 mysql good database
|
||||
9 mysql good database
|
||||
10 mysql good database NULL
|
||||
SELECT * FROM articles WHERE MATCH(title, body)
|
||||
AGAINST('"mysql good database"' IN BOOLEAN MODE);
|
||||
id title body
|
||||
1 NULL mysql good database
|
||||
2 NULL mysql good database
|
||||
3 mysql good database
|
||||
4 mysql good database
|
||||
5 mysql good database
|
||||
9 mysql good database
|
||||
10 mysql good database NULL
|
||||
SELECT * FROM articles WHERE MATCH(title, body)
|
||||
AGAINST('("mysql good database")' IN BOOLEAN MODE);
|
||||
id title body
|
||||
1 NULL mysql good database
|
||||
2 NULL mysql good database
|
||||
3 mysql good database
|
||||
4 mysql good database
|
||||
5 mysql good database
|
||||
9 mysql good database
|
||||
10 mysql good database NULL
|
||||
DROP TABLE articles;
|
||||
31
mysql-test/suite/innodb_fts/r/result_cache_limit.result
Normal file
31
mysql-test/suite/innodb_fts/r/result_cache_limit.result
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
CREATE TABLE t1 (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
a VARCHAR(200),
|
||||
b TEXT
|
||||
) ENGINE= InnoDB;
|
||||
CREATE FULLTEXT INDEX idx on t1 (a,b);
|
||||
INSERT INTO t1 (a,b) VALUES
|
||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||
('when To Use MySQL Well','After that you went through a ...'),
|
||||
('where will Optimizing MySQL','what In this tutorial we will show ...'),
|
||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||
('when To Use MySQL Well','After that you went through a ...'),
|
||||
('where will Optimizing MySQL','what In this tutorial we will show ...'),
|
||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||
('when To Use MySQL Well','After that you went through a ...'),
|
||||
('where will Optimizing MySQL','what In this tutorial we will show ...');
|
||||
SET @save_limit=@@GLOBAL.innodb_ft_result_cache_limit;
|
||||
SET @save_dbug=@@debug_dbug;
|
||||
SET debug_dbug="+d,fts_instrument_result_cache_limit";
|
||||
SELECT COUNT(*) FROM t1 WHERE MATCH (a,b) AGAINST ('mysql' IN BOOLEAN MODE);
|
||||
COUNT(*)
|
||||
9
|
||||
SELECT COUNT(*) FROM t1 WHERE MATCH (a,b) AGAINST ('mysql' WITH QUERY EXPANSION);
|
||||
ERROR HY000: Table handler out of memory
|
||||
SELECT COUNT(*) FROM t1 WHERE MATCH (a,b) AGAINST ('"mysql database"' IN BOOLEAN MODE);
|
||||
ERROR HY000: Table handler out of memory
|
||||
SELECT COUNT(*) FROM t1 WHERE MATCH (a,b) AGAINST ('"mysql database" @ 5' IN BOOLEAN MODE);
|
||||
ERROR HY000: Table handler out of memory
|
||||
SET debug_dbug=@save_dbug;
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL innodb_ft_result_cache_limit=@save_limit;
|
||||
318
mysql-test/suite/innodb_fts/r/savepoint.result
Normal file
318
mysql-test/suite/innodb_fts/r/savepoint.result
Normal file
|
|
@ -0,0 +1,318 @@
|
|||
CREATE TABLE articles (
|
||||
id INT UNSIGNED NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
FULLTEXT (title)
|
||||
) ENGINE= InnoDB;
|
||||
TRUNCATE TABLE articles;
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
BEGIN;
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
ROLLBACK TO SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
COMMIT;
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
id title
|
||||
1 mysql
|
||||
2 mysql
|
||||
4 mysql
|
||||
5 mysql
|
||||
TRUNCATE TABLE articles;
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
BEGIN;
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
ROLLBACK TO SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
ROLLBACK TO SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
COMMIT;
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
id title
|
||||
1 mysql
|
||||
2 mysql
|
||||
4 mysql
|
||||
6 mysql
|
||||
7 mysql
|
||||
TRUNCATE TABLE articles;
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
BEGIN;
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
ROLLBACK TO SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
COMMIT;
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
id title
|
||||
1 mysql
|
||||
2 mysql
|
||||
5 mysql
|
||||
6 mysql
|
||||
TRUNCATE TABLE articles;
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
BEGIN;
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
ROLLBACK TO SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
ROLLBACK TO SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
COMMIT;
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
id title
|
||||
1 mysql
|
||||
2 mysql
|
||||
6 mysql
|
||||
7 mysql
|
||||
TRUNCATE TABLE articles;
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
BEGIN;
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
RELEASE SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
COMMIT;
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
id title
|
||||
1 mysql
|
||||
2 mysql
|
||||
3 mysql
|
||||
4 mysql
|
||||
5 mysql
|
||||
TRUNCATE TABLE articles;
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
BEGIN;
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
RELEASE SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
RELEASE SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
COMMIT;
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
id title
|
||||
1 mysql
|
||||
2 mysql
|
||||
3 mysql
|
||||
4 mysql
|
||||
5 mysql
|
||||
6 mysql
|
||||
7 mysql
|
||||
TRUNCATE TABLE articles;
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
BEGIN;
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
RELEASE SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
COMMIT;
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
id title
|
||||
1 mysql
|
||||
2 mysql
|
||||
3 mysql
|
||||
4 mysql
|
||||
5 mysql
|
||||
6 mysql
|
||||
TRUNCATE TABLE articles;
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
BEGIN;
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
RELEASE SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
RELEASE SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
COMMIT;
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
id title
|
||||
1 mysql
|
||||
2 mysql
|
||||
3 mysql
|
||||
4 mysql
|
||||
5 mysql
|
||||
6 mysql
|
||||
7 mysql
|
||||
TRUNCATE TABLE articles;
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
BEGIN;
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
ROLLBACK TO SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
RELEASE SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
COMMIT;
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
id title
|
||||
1 mysql
|
||||
2 mysql
|
||||
4 mysql
|
||||
5 mysql
|
||||
6 mysql
|
||||
7 mysql
|
||||
TRUNCATE TABLE articles;
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
BEGIN;
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
RELEASE SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
ROLLBACK TO SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
COMMIT;
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
id title
|
||||
1 mysql
|
||||
2 mysql
|
||||
3 mysql
|
||||
4 mysql
|
||||
6 mysql
|
||||
7 mysql
|
||||
TRUNCATE TABLE articles;
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
BEGIN;
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
RELEASE SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
ROLLBACK TO SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
COMMIT;
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
id title
|
||||
1 mysql
|
||||
2 mysql
|
||||
6 mysql
|
||||
7 mysql
|
||||
TRUNCATE TABLE articles;
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
BEGIN;
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
ROLLBACK TO SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
RELEASE SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
COMMIT;
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
id title
|
||||
1 mysql
|
||||
2 mysql
|
||||
3 mysql
|
||||
5 mysql
|
||||
6 mysql
|
||||
7 mysql
|
||||
TRUNCATE TABLE articles;
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
BEGIN;
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
ROLLBACK;
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
id title
|
||||
1 mysql
|
||||
3 mysql
|
||||
TRUNCATE TABLE articles;
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
BEGIN;
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
ROLLBACK;
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
id title
|
||||
1 mysql
|
||||
4 mysql
|
||||
TRUNCATE TABLE articles;
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
BEGIN;
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
RELEASE SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
ROLLBACK;
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
id title
|
||||
1 mysql
|
||||
5 mysql
|
||||
TRUNCATE TABLE articles;
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
BEGIN;
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
ROLLBACK TO SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
ROLLBACK;
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
id title
|
||||
1 mysql
|
||||
5 mysql
|
||||
TRUNCATE TABLE articles;
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
BEGIN;
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
ROLLBACK TO SAVEPOINT sp2;
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
RELEASE SAVEPOINT sp1;
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
ROLLBACK;
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
id title
|
||||
1 mysql
|
||||
7 mysql
|
||||
DROP TABLE articles;
|
||||
105
mysql-test/suite/innodb_fts/r/subexpr.result
Normal file
105
mysql-test/suite/innodb_fts/r/subexpr.result
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
#
|
||||
# Bug #20028323 INNODB FULLTEXT BOOLEAN SEARCH INCORRECTLY HANDLES
|
||||
# PARENTHESES
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
f1 INT NOT NULL AUTO_INCREMENT,
|
||||
f2 TEXT NOT NULL,
|
||||
PRIMARY KEY (f1),
|
||||
FULLTEXT (f2)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
INSERT INTO t1 (f2) VALUES
|
||||
('Pumpkin soup with cheese bread'),
|
||||
('Yellow chicken curry'),
|
||||
('Fresh green vegetables with garlic');
|
||||
SELECT * FROM t1 WHERE MATCH(f2) AGAINST('+pumpkin' IN BOOLEAN MODE);
|
||||
f1 f2
|
||||
1 Pumpkin soup with cheese bread
|
||||
SELECT * FROM t1 WHERE MATCH(f2) AGAINST('+cheese' IN BOOLEAN MODE);
|
||||
f1 f2
|
||||
1 Pumpkin soup with cheese bread
|
||||
SELECT * FROM t1 WHERE MATCH(f2) AGAINST('+(pumpkin cheese)' IN BOOLEAN MODE);
|
||||
f1 f2
|
||||
1 Pumpkin soup with cheese bread
|
||||
SELECT * FROM t1 WHERE MATCH(f2)
|
||||
AGAINST('+pumpkin +(souffle)' IN BOOLEAN MODE);
|
||||
f1 f2
|
||||
SELECT * FROM t1 WHERE MATCH(f2)
|
||||
AGAINST('+pumpkin +(souffle tart)' IN BOOLEAN MODE);
|
||||
f1 f2
|
||||
SELECT * FROM t1 WHERE MATCH(f2)
|
||||
AGAINST('+pumpkin +(>souffle <tart)' IN BOOLEAN MODE);
|
||||
f1 f2
|
||||
SELECT * FROM t1 WHERE MATCH(f2)
|
||||
AGAINST('+pumpkin +(souffle tart)' IN BOOLEAN MODE);
|
||||
f1 f2
|
||||
INSERT INTO t1 (f2) VALUES
|
||||
('This row contains only souffle'),
|
||||
('This row contains only tart'),
|
||||
('This row contains only pumpkin'),
|
||||
('This row contains only cheese'),
|
||||
('This row contains pumpkin and souffle'),
|
||||
('This row contains pumpkin and tart'),
|
||||
('This row contains pumpkin and cheese'),
|
||||
('This row contains both souffle and tart'),
|
||||
('This row contains both souffle and cheese'),
|
||||
('This row contains both tart and cheese'),
|
||||
('This row contains all three souffle, pumpkin and tart'),
|
||||
('This row contains all four cheese, souffle, pumpkin and tart');
|
||||
SELECT * FROM t1 WHERE MATCH(f2) AGAINST('+pumpkin' IN BOOLEAN MODE);
|
||||
f1 f2
|
||||
1 Pumpkin soup with cheese bread
|
||||
6 This row contains only pumpkin
|
||||
8 This row contains pumpkin and souffle
|
||||
9 This row contains pumpkin and tart
|
||||
10 This row contains pumpkin and cheese
|
||||
14 This row contains all three souffle, pumpkin and tart
|
||||
15 This row contains all four cheese, souffle, pumpkin and tart
|
||||
SELECT * FROM t1 WHERE MATCH(f2) AGAINST('+cheese' IN BOOLEAN MODE);
|
||||
f1 f2
|
||||
1 Pumpkin soup with cheese bread
|
||||
7 This row contains only cheese
|
||||
10 This row contains pumpkin and cheese
|
||||
12 This row contains both souffle and cheese
|
||||
13 This row contains both tart and cheese
|
||||
15 This row contains all four cheese, souffle, pumpkin and tart
|
||||
SELECT * FROM t1 WHERE MATCH(f2) AGAINST('+(pumpkin cheese)' IN BOOLEAN MODE);
|
||||
f1 f2
|
||||
1 Pumpkin soup with cheese bread
|
||||
10 This row contains pumpkin and cheese
|
||||
15 This row contains all four cheese, souffle, pumpkin and tart
|
||||
7 This row contains only cheese
|
||||
12 This row contains both souffle and cheese
|
||||
13 This row contains both tart and cheese
|
||||
6 This row contains only pumpkin
|
||||
8 This row contains pumpkin and souffle
|
||||
9 This row contains pumpkin and tart
|
||||
14 This row contains all three souffle, pumpkin and tart
|
||||
SELECT * FROM t1 WHERE MATCH(f2)
|
||||
AGAINST('+pumpkin +(souffle)' IN BOOLEAN MODE);
|
||||
f1 f2
|
||||
8 This row contains pumpkin and souffle
|
||||
14 This row contains all three souffle, pumpkin and tart
|
||||
15 This row contains all four cheese, souffle, pumpkin and tart
|
||||
SELECT * FROM t1 WHERE MATCH(f2)
|
||||
AGAINST('+pumpkin +(souffle tart)' IN BOOLEAN MODE);
|
||||
f1 f2
|
||||
14 This row contains all three souffle, pumpkin and tart
|
||||
15 This row contains all four cheese, souffle, pumpkin and tart
|
||||
8 This row contains pumpkin and souffle
|
||||
9 This row contains pumpkin and tart
|
||||
SELECT * FROM t1 WHERE MATCH(f2)
|
||||
AGAINST('+pumpkin +(>souffle <tart)' IN BOOLEAN MODE);
|
||||
f1 f2
|
||||
8 This row contains pumpkin and souffle
|
||||
14 This row contains all three souffle, pumpkin and tart
|
||||
15 This row contains all four cheese, souffle, pumpkin and tart
|
||||
9 This row contains pumpkin and tart
|
||||
SELECT * FROM t1 WHERE MATCH(f2)
|
||||
AGAINST('+pumpkin +(souffle tart)' IN BOOLEAN MODE);
|
||||
f1 f2
|
||||
14 This row contains all three souffle, pumpkin and tart
|
||||
15 This row contains all four cheese, souffle, pumpkin and tart
|
||||
8 This row contains pumpkin and souffle
|
||||
9 This row contains pumpkin and tart
|
||||
DROP TABLE t1;
|
||||
41
mysql-test/suite/innodb_fts/t/foreign_key_check.test
Normal file
41
mysql-test/suite/innodb_fts/t/foreign_key_check.test
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
#
|
||||
# BUG#22094601 CREATE TABLE WITH FULLTEXT AND CONSTRAINT FAILS WHEN FOREIGN_KEY_CHECKS IS 0
|
||||
#
|
||||
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE t1 (
|
||||
id INT NOT NULL,
|
||||
title TEXT,
|
||||
PRIMARY KEY (id),
|
||||
FULLTEXT KEY (title),
|
||||
FOREIGN KEY (id) REFERENCES t2 (id)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE t1 (
|
||||
id INT NOT NULL,
|
||||
title TEXT,
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 ADD FULLTEXT KEY (title), ADD FOREIGN KEY (id) REFERENCES t2 (id);
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
ALTER TABLE t1 ADD FULLTEXT KEY (title), ADD FOREIGN KEY (id) REFERENCES t2 (id);
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 (
|
||||
id INT NOT NULL,
|
||||
title TEXT,
|
||||
PRIMARY KEY (id),
|
||||
FULLTEXT KEY (title),
|
||||
FOREIGN KEY (id) REFERENCES t2 (id)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
34
mysql-test/suite/innodb_fts/t/foreign_key_update.test
Normal file
34
mysql-test/suite/innodb_fts/t/foreign_key_update.test
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
#
|
||||
# BUG#21111301 INNODB FTS: ERROR DUPLICATE ENTRY IN FTS_DOC_ID_INDEX ON UPDATE CASCADE
|
||||
#
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
CREATE TABLE t1 (
|
||||
a varchar(40),
|
||||
KEY a(a)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE t1_fk (
|
||||
a varchar(40),
|
||||
KEY a(a),
|
||||
FULLTEXT KEY (a),
|
||||
CONSTRAINT fk FOREIGN KEY (a) REFERENCES t1 (a) ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO t1 VALUES('mysql');
|
||||
|
||||
INSERT INTO t1_fk VALUES('mysql');
|
||||
INSERT INTO t1_fk VALUES('mysql');
|
||||
|
||||
SELECT * FROM t1_fk;
|
||||
SELECT * FROM t1_fk WHERE MATCH(a) AGAINST('mysql');
|
||||
|
||||
UPDATE t1 SET a = 'database' WHERE a = 'mysql';
|
||||
|
||||
SELECT * FROM t1_fk;
|
||||
SELECT * FROM t1_fk WHERE MATCH(a) AGAINST('mysql');
|
||||
SELECT * FROM t1_fk WHERE MATCH(a) AGAINST('database');
|
||||
|
||||
DROP TABLE t1_fk;
|
||||
DROP TABLE t1;
|
||||
2
mysql-test/suite/innodb_fts/t/index_table.opt
Normal file
2
mysql-test/suite/innodb_fts/t/index_table.opt
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
--innodb-ft-index-cache
|
||||
--innodb-ft-index-table
|
||||
121
mysql-test/suite/innodb_fts/t/index_table.test
Normal file
121
mysql-test/suite/innodb_fts/t/index_table.test
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
# This is the basic function tests for INNODB_FT_INDEX_TABLE
|
||||
# and INNODB_FT_INDEX_TABLE in INFORMATION_SCHEMA.
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/have_debug.inc
|
||||
|
||||
SET @optimize=@@GLOBAL.INNODB_OPTIMIZE_FULLTEXT_ONLY;
|
||||
SET GLOBAL INNODB_OPTIMIZE_FULLTEXT_ONLY=1;
|
||||
|
||||
# Test Case 1: Test Result Cache Limit
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
content TEXT
|
||||
) ENGINE= InnoDB;
|
||||
|
||||
CREATE FULLTEXT INDEX idx ON articles (title, content);
|
||||
|
||||
INSERT INTO articles (title, content) VALUES
|
||||
('MySQL Tutorial','DBMS stands for MySQL DataBase ...'),
|
||||
('How To Use MySQL Well','After you went through a ...'),
|
||||
('Optimizing MySQL','In this tutorial we will show ...'),
|
||||
('1001 MySQL Tricks','How to use full-text search engine'),
|
||||
('Go MySQL Tricks','How to use full text search engine');
|
||||
|
||||
SET @aux=@@GLOBAL.innodb_ft_aux_table;
|
||||
SET GLOBAL innodb_ft_aux_table='test/articles';
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE;
|
||||
|
||||
OPTIMIZE TABLE articles;
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE;
|
||||
|
||||
SET @save_dbug=@@debug_dbug;
|
||||
SET debug_dbug='+d,fts_instrument_result_cache_limit';
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE;
|
||||
|
||||
SET debug_dbug=@save_dbug;
|
||||
|
||||
DROP TABLE articles;
|
||||
|
||||
SET GLOBAL innodb_ft_result_cache_limit=default;
|
||||
|
||||
# Test Case 2: Test Multiple Indexes
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
content TEXT
|
||||
) ENGINE= InnoDB;
|
||||
|
||||
CREATE FULLTEXT INDEX idx_t ON articles (title);
|
||||
|
||||
CREATE FULLTEXT INDEX idx_c ON articles (content);
|
||||
|
||||
INSERT INTO articles (title, content) VALUES
|
||||
('MySQL Tutorial','DBMS stands for MySQL DataBase ...'),
|
||||
('How To Use MySQL Well','After you went through a ...'),
|
||||
('Optimizing MySQL','In this tutorial we will show ...'),
|
||||
('1001 MySQL Tricks','How to use full-text search engine'),
|
||||
('Go MySQL Tricks','How to use full text search engine');
|
||||
|
||||
# test.articles had been dropped, so this result will be empty
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE;
|
||||
SET GLOBAL innodb_ft_aux_table='test/articles';
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE;
|
||||
|
||||
OPTIMIZE TABLE articles;
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE;
|
||||
|
||||
DROP TABLE articles;
|
||||
|
||||
SET NAMES utf8;
|
||||
|
||||
# Test Case 3: Test UFT8 Charset
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
|
||||
|
||||
CREATE FULLTEXT INDEX idx ON articles (title);
|
||||
|
||||
INSERT INTO articles (title) VALUES
|
||||
('相亲相爱'),('怜香惜爱'),('充满可爱'),('爱恨交织');
|
||||
|
||||
SET GLOBAL innodb_ft_aux_table="test/articles";
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE;
|
||||
|
||||
OPTIMIZE TABLE articles;
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE;
|
||||
|
||||
DROP TABLE articles;
|
||||
|
||||
# Test Case 4: Test GB2312 Charset
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET gb2312 COLLATE gb2312_chinese_ci;
|
||||
|
||||
CREATE FULLTEXT INDEX idx ON articles (title);
|
||||
|
||||
INSERT INTO articles (title) VALUES
|
||||
('相亲相爱'),('怜香惜爱'),('充满可爱'),('爱恨交织');
|
||||
|
||||
SET GLOBAL innodb_ft_aux_table="test/articles";
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE;
|
||||
|
||||
OPTIMIZE TABLE articles;
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE;
|
||||
|
||||
DROP TABLE articles;
|
||||
|
||||
# Restore global variables
|
||||
SET GLOBAL innodb_ft_aux_table=@aux;
|
||||
SET GLOBAL INNODB_OPTIMIZE_FULLTEXT_ONLY=@optimize;
|
||||
|
|
@ -163,6 +163,8 @@ DROP TABLE t1;
|
|||
|
||||
set global innodb_file_per_table=1;
|
||||
|
||||
set names utf8;
|
||||
--character_set utf8
|
||||
# Test fts with externally stored long column
|
||||
CREATE TABLE t1 (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
|
|
|
|||
143
mysql-test/suite/innodb_fts/t/limit_union.test
Normal file
143
mysql-test/suite/innodb_fts/t/limit_union.test
Normal file
|
|
@ -0,0 +1,143 @@
|
|||
--source include/have_debug.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--echo # Bug #22709692 FTS QUERY EXCEEDS RESULT CACHE LIMIT
|
||||
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT (title,body),
|
||||
FULLTEXT (body))ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO articles (title,body) VALUES
|
||||
('MySQL Tutorial','DBMS stands for DataBase ...'),
|
||||
('How To Use MySQL Well','After you went through a ...'),
|
||||
('Optimizing MySQL','In this tutorial we will show ...'),
|
||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
||||
('MySQL Security','When configured properly, MySQL ...');
|
||||
|
||||
SET @default_cache_size = @@GLOBAL.query_cache_size;
|
||||
SET GLOBAL query_cache_size=0;
|
||||
|
||||
--echo # Query involves Ranking
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL' IN NATURAL LANGUAGE MODE) LIMIT 1;
|
||||
|
||||
--echo # Without optimization
|
||||
SET @save_dbug = @@debug_dbug;
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL' IN NATURAL LANGUAGE MODE) LIMIT 1;
|
||||
SET debug_dbug = @save_dbug;
|
||||
|
||||
--echo # Query involves No Ranking and fts_union operations
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL' IN BOOLEAN MODE) limit 1;
|
||||
|
||||
--echo # Without optimization
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL' IN BOOLEAN MODE) limit 1;
|
||||
|
||||
SET debug_dbug = @save_dbug;
|
||||
|
||||
--echo # Query involves No ranking and fts_union, fts_ignore
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL -YourSQL' IN BOOLEAN MODE) limit 1;
|
||||
|
||||
--echo # Without optimization
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL -YourSQL' IN BOOLEAN MODE) limit 1;
|
||||
SET debug_dbug = @save_dbug;
|
||||
|
||||
--echo # Query with fts_intersect
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL +YourSQL' IN BOOLEAN MODE) limit 1;
|
||||
|
||||
--echo # Without optimization
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL +YourSQL' IN BOOLEAN MODE) limit 1;
|
||||
SET debug_dbug = @save_dbug;
|
||||
|
||||
# insert record with @ character which is used in proximity search
|
||||
INSERT INTO articles (title,body) VALUES
|
||||
('MySQL Tutorial','request doc@oraclehelp.com ...'),
|
||||
('MySQL Tutorial','request support@oraclehelp.com ...'),
|
||||
('Trial version','query performace @1255 minute on 2.1Hz
|
||||
Memory 2GB...'),
|
||||
('when To Use MySQL Well','for free faq mail@xyz.com ...');
|
||||
|
||||
--echo # Query with @distance
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('"MySQL request"@3' IN BOOLEAN MODE) limit 1;
|
||||
|
||||
--echo # Without optimization
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('"MySQL request"@3' IN BOOLEAN MODE) limit 1;
|
||||
SET debug_dbug = @save_dbug;
|
||||
|
||||
--echo # Query with subexpression
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('+MySQL +(-support +doc)' IN BOOLEAN MODE) limit 1;
|
||||
|
||||
--echo # Without optimization
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('+MySQL +(-support +doc)' IN BOOLEAN MODE) limit 1;
|
||||
SET debug_dbug = @save_dbug;
|
||||
|
||||
--echo # limit num1 OFFSET num2
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL' in boolean mode) limit 4 offset 2;
|
||||
|
||||
--echo # Without optimization
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('MySQL' in boolean mode) limit 4 offset 2;
|
||||
SET debug_dbug = @save_dbug;
|
||||
|
||||
--echo # wild card search
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('ru*' IN BOOLEAN MODE) limit 1;
|
||||
|
||||
--echo # Without optimization
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('ru*' IN BOOLEAN MODE) limit 1;
|
||||
SET debug_dbug = @save_dbug;
|
||||
|
||||
--echo # phrase search
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('"request support"' IN BOOLEAN MODE) limit 1;
|
||||
|
||||
--echo # Without optimization
|
||||
SET debug_dbug = '+d,fts_union_limit_off';
|
||||
SELECT * FROM articles
|
||||
WHERE MATCH (title,body)
|
||||
AGAINST ('"request support"' IN BOOLEAN MODE) limit 1;
|
||||
SET debug_dbug = @save_dbug;
|
||||
|
||||
DROP TABLE articles;
|
||||
SET GLOBAL query_cache_size = @default_cache_size;
|
||||
1511
mysql-test/suite/innodb_fts/t/misc.test
Normal file
1511
mysql-test/suite/innodb_fts/t/misc.test
Normal file
File diff suppressed because it is too large
Load diff
894
mysql-test/suite/innodb_fts/t/misc_1.test
Normal file
894
mysql-test/suite/innodb_fts/t/misc_1.test
Normal file
|
|
@ -0,0 +1,894 @@
|
|||
--source include/have_innodb.inc
|
||||
--source include/innodb_page_size_small.inc
|
||||
--source include/no_valgrind_without_big.inc
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# FTS with FK and update cascade
|
||||
#-------------------------------------------------------------------------------
|
||||
set names utf8;
|
||||
|
||||
call mtr.add_suppression("\\[Warning\\] InnoDB: A new Doc ID must be supplied while updating FTS indexed columns.");
|
||||
call mtr.add_suppression("\\[Warning\\] InnoDB: FTS Doc ID must be larger than [0-9]+ for table `test`.`t1`");
|
||||
|
||||
# Create FTS table
|
||||
CREATE TABLE t1 (
|
||||
id1 INT ,
|
||||
a1 VARCHAR(200) ,
|
||||
b1 TEXT ,
|
||||
FULLTEXT KEY (a1,b1), PRIMARY KEY (a1, id1)
|
||||
) CHARACTER SET = utf8 , ENGINE = InnoDB;
|
||||
|
||||
CREATE TABLE t2 (
|
||||
id2 INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
a2 VARCHAR(200),
|
||||
b2 TEXT ,
|
||||
FOREIGN KEY (a2) REFERENCES t1(a1) ON UPDATE CASCADE,
|
||||
FULLTEXT KEY (b2,a2)
|
||||
) CHARACTER SET = utf8 ,ENGINE = InnoDB;
|
||||
|
||||
# Insert rows
|
||||
INSERT INTO t1 (id1,a1,b1) VALUES
|
||||
(1,'MySQL Tutorial','DBMS stands for DataBase VÐƷWİ...') ,
|
||||
(2,'How To Use MySQL Well','After you went through a ...'),
|
||||
(3,'Optimizing MySQL','In this tutorial we will show ...');
|
||||
|
||||
# Insert rows
|
||||
INSERT INTO t1 (id1,a1,b1) VALUES
|
||||
(4,'1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||
(5,'MySQL vs. YourSQL','In the following database comparison ...'),
|
||||
(6,'MySQL Security','When configured properly, MySQL ...');
|
||||
|
||||
# Insert rows in t2 fk table
|
||||
INSERT INTO t2 (a2,b2) VALUES
|
||||
('MySQL Tutorial','DBMS stands for DataBase VÐƷWİ...') ,
|
||||
('How To Use MySQL Well','After you went through a ...'),
|
||||
('Optimizing MySQL','In this tutorial we will show ...');
|
||||
|
||||
# Insert rows t2 fk table
|
||||
INSERT INTO t2 (a2,b2) VALUES
|
||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
||||
('MySQL Security','When configured properly, MySQL ...');
|
||||
|
||||
# error on violating fk constraint
|
||||
--error 1452
|
||||
INSERT INTO t2 (a2,b2) VALUES
|
||||
('MySQL Tricks','1. Never run mysqld as root. 2. ...');
|
||||
|
||||
# error on delete from parent table
|
||||
--error 1451
|
||||
DELETE FROM t1;
|
||||
|
||||
ANALYZE TABLE t1;
|
||||
ANALYZE TABLE t2;
|
||||
|
||||
SELECT id1 FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial') ORDER BY id1;
|
||||
SELECT id2 FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial') ORDER BY id2;
|
||||
|
||||
SELECT id1 FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ORDER BY id1;
|
||||
SELECT id2 FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ORDER BY id2;
|
||||
|
||||
SELECT id1 FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial' WITH QUERY EXPANSION) ORDER BY id1;
|
||||
SELECT id2 FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial' WITH QUERY EXPANSION) ORDER BY id2;
|
||||
|
||||
|
||||
SELECT id1 FROM t1 WHERE MATCH (a1,b1) AGAINST ('"dbms database"@4' IN BOOLEAN MODE) ;
|
||||
SELECT id2 FROM t2 WHERE MATCH (a2,b2) AGAINST ('"dbms database"@4' IN BOOLEAN MODE) ;
|
||||
|
||||
set global innodb_optimize_fulltext_only=1;
|
||||
optimize table t1;
|
||||
set global innodb_optimize_fulltext_only=0;
|
||||
# Updating parent table hence child table should get updated due to 'update cascade' clause
|
||||
UPDATE t1 SET a1 = "changing column - on update cascade" , b1 = "to check foreign constraint" WHERE
|
||||
MATCH (a1,b1) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
|
||||
# no records expected
|
||||
SELECT id1 FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
# InnoDB:Error child table shows records which is incorrect - UPADTE on Fix
|
||||
SELECT id2 FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
|
||||
# it shows updated record
|
||||
SELECT id1 FROM t1 WHERE MATCH (a1,b1) AGAINST ('+update +cascade' IN BOOLEAN MODE) ORDER BY id1;
|
||||
# InnoDB:Error child table does not show the expected record
|
||||
SELECT id2 FROM t2 WHERE MATCH (a2,b2) AGAINST ('+update +cascade' IN BOOLEAN MODE) ORDER BY id2;
|
||||
SELECT id2 FROM t2 WHERE a2 LIKE '%UPDATE CASCADE%' ORDER BY id2;
|
||||
|
||||
DROP TABLE t2 , t1;
|
||||
|
||||
# on update cascade
|
||||
create table t1 (s1 int, s2 varchar(200), primary key (s1,s2)) ENGINE = InnoDB;
|
||||
create table t2 (s1 int, s2 varchar(200),
|
||||
fulltext key(s2),
|
||||
foreign key (s1,s2) references t1 (s1,s2) on update cascade) ENGINE = InnoDB;
|
||||
insert into t1 values (1,'Sunshine'),(2,'Lollipops');
|
||||
insert into t2 values (1,'Sunshine'),(2,'Lollipops');
|
||||
update t1 set s2 = 'Rainbows' where s2 <> 'Sunshine';
|
||||
commit;
|
||||
select * from t2 where match(s2) against ('Lollipops');
|
||||
DROP TABLE t2 , t1;
|
||||
|
||||
# on delete cascade
|
||||
create table t1 (s1 int, s2 varchar(200), primary key (s1,s2)) ENGINE = InnoDB;
|
||||
create table t2 (s1 int, s2 varchar(200),
|
||||
fulltext key(s2),
|
||||
foreign key (s1,s2) references t1 (s1,s2) on delete cascade) ENGINE = InnoDB;
|
||||
insert into t1 values (1,'Sunshine'),(2,'Lollipops');
|
||||
insert into t2 values (1,'Sunshine'),(2,'Lollipops');
|
||||
delete from t1 where s2 <> 'Sunshine';
|
||||
select * from t2 where match(s2) against ('Lollipops');
|
||||
DROP TABLE t2 , t1;
|
||||
|
||||
# on delete set NULL
|
||||
create table t1 (s1 int, s2 varchar(200), primary key (s1,s2)) ENGINE = InnoDB;
|
||||
create table t2 (s1 int, s2 varchar(200),
|
||||
fulltext key(s2),
|
||||
foreign key (s1,s2) references t1 (s1,s2) on delete set null) ENGINE = InnoDB;
|
||||
insert into t1 values (1,'Sunshine'),(2,'Lollipops');
|
||||
insert into t2 values (1,'Sunshine'),(2,'Lollipops');
|
||||
delete from t1 where s2 <> 'Sunshine';
|
||||
select * from t2 where match(s2) against ('Lollipops');
|
||||
DROP TABLE t2 , t1;
|
||||
|
||||
|
||||
# on update set NULL
|
||||
create table t1 (s1 int, s2 varchar(200), primary key (s1,s2)) ENGINE = InnoDB;
|
||||
create table t2 (s1 int, s2 varchar(200),
|
||||
fulltext key(s2),
|
||||
foreign key (s1,s2) references t1 (s1,s2) on update set null) ENGINE = InnoDB;
|
||||
insert into t1 values (1,'Sunshine'),(2,'Lollipops');
|
||||
insert into t2 values (1,'Sunshine'),(2,'Lollipops');
|
||||
update t1 set s2 = 'Rainbows' where s2 <> 'Sunshine';
|
||||
commit;
|
||||
select * from t2 where match(s2) against ('Lollipops');
|
||||
DROP TABLE t2 , t1;
|
||||
|
||||
# When Doc ID is involved
|
||||
create table t1 (s1 bigint unsigned not null, s2 varchar(200),
|
||||
primary key (s1,s2)) ENGINE = InnoDB;
|
||||
create table t2 (FTS_DOC_ID BIGINT UNSIGNED NOT NULL, s2 varchar(200),
|
||||
foreign key (FTS_DOC_ID) references t1 (s1)
|
||||
on update cascade) ENGINE = InnoDB;
|
||||
|
||||
create fulltext index idx on t2(s2);
|
||||
|
||||
show create table t2;
|
||||
|
||||
insert into t1 values (1,'Sunshine'),(2,'Lollipops');
|
||||
insert into t2 values (1,'Sunshine'),(2,'Lollipops');
|
||||
|
||||
update t1 set s1 = 3 where s1=1;
|
||||
|
||||
select * from t2 where match(s2) against ('sunshine');
|
||||
|
||||
# FTS Doc ID cannot be reused
|
||||
--error 1451
|
||||
update t1 set s1 = 1 where s1=3;
|
||||
|
||||
DROP TABLE t2 , t1;
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# FTS with FK and delete casecade
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# Create FTS table
|
||||
CREATE TABLE t1 (
|
||||
id1 INT ,
|
||||
a1 VARCHAR(200) PRIMARY KEY,
|
||||
b1 TEXT character set utf8 ,
|
||||
FULLTEXT KEY (a1,b1)
|
||||
) CHARACTER SET = utf8 ,ENGINE = InnoDB;
|
||||
|
||||
CREATE TABLE t2 (
|
||||
id2 INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
a2 VARCHAR(200),
|
||||
b2 TEXT character set utf8 ,
|
||||
FOREIGN KEY (a2) REFERENCES t1(a1) ON DELETE CASCADE,
|
||||
FULLTEXT KEY (b2,a2)
|
||||
) CHARACTER SET = utf8 ,ENGINE = InnoDB;
|
||||
|
||||
# Insert rows
|
||||
INSERT INTO t1 (id1,a1,b1) VALUES
|
||||
(1,'MySQL Tutorial','DBMS stands for DataBase VÐƷWİ...') ,
|
||||
(2,'How To Use MySQL Well','After you went through a ...'),
|
||||
(3,'Optimizing MySQL','In this tutorial we will show ...'),
|
||||
(4,'1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||
(5,'MySQL vs. YourSQL','In the following database comparison ...'),
|
||||
(6,'MySQL Security','When configured properly, MySQL ...');
|
||||
|
||||
# Insert rows in t2
|
||||
INSERT INTO t2 (a2,b2) VALUES
|
||||
('MySQL Tutorial','DBMS stands for DataBase VÐƷWİ...') ,
|
||||
('How To Use MySQL Well','After you went through a ...'),
|
||||
('Optimizing MySQL','In this tutorial we will show ...'),
|
||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
||||
('MySQL Security','When configured properly, MySQL ...');
|
||||
|
||||
# delete records from parent
|
||||
DELETE FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
|
||||
# no records expected
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
|
||||
SELECT * FROM t1 WHERE a1 LIKE '%tutorial%';
|
||||
SELECT * FROM t2 WHERE a2 LIKE '%tutorial%';
|
||||
|
||||
DROP TABLE t2 , t1;
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# FTS with FK+transactions and UPDATE casecade with transaction
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
call mtr.add_suppression("\\[ERROR\\] InnoDB: FTS Doc ID must be larger than 3 for table `test`.`t2`");
|
||||
|
||||
# Create FTS table
|
||||
CREATE TABLE t1 (
|
||||
id1 INT ,
|
||||
a1 VARCHAR(200) ,
|
||||
b1 TEXT ,
|
||||
FULLTEXT KEY (a1,b1), PRIMARY KEY(a1, id1)
|
||||
) CHARACTER SET = utf8 , ENGINE = InnoDB;
|
||||
|
||||
CREATE TABLE t2 (
|
||||
id2 INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
a2 VARCHAR(200),
|
||||
b2 TEXT ,
|
||||
FOREIGN KEY (a2) REFERENCES t1(a1) ON UPDATE CASCADE,
|
||||
FULLTEXT KEY (b2,a2)
|
||||
) CHARACTER SET = utf8 ,ENGINE = InnoDB;
|
||||
|
||||
# Insert rows
|
||||
INSERT INTO t1 (id1,a1,b1) VALUES
|
||||
(1,'MySQL Tutorial','DBMS stands for DataBase VÐƷWİ...') ,
|
||||
(2,'How To Use MySQL Well','After you went through a ...'),
|
||||
(3,'Optimizing MySQL','In this tutorial we will show ...');
|
||||
|
||||
# Insert rows in t2 fk table
|
||||
INSERT INTO t2 (a2,b2) VALUES
|
||||
('MySQL Tutorial','DBMS stands for DataBase VÐƷWİ...') ,
|
||||
('How To Use MySQL Well','After you went through a ...'),
|
||||
('Optimizing MySQL','In this tutorial we will show ...');
|
||||
|
||||
START TRANSACTION;
|
||||
# Insert rows
|
||||
INSERT INTO t1 (id1,a1,b1) VALUES
|
||||
(4,'1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||
(5,'MySQL vs. YourSQL','In the following database comparison ...'),
|
||||
(6,'MySQL Security','When configured properly, MySQL ...');
|
||||
|
||||
# Insert rows t2 fk table
|
||||
INSERT INTO t2 (a2,b2) VALUES
|
||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
||||
('MySQL Security','When configured properly, MySQL ...');
|
||||
|
||||
# error on violating fk constraint
|
||||
--error 1452
|
||||
INSERT INTO t2 (a2,b2) VALUES
|
||||
('MySQL Tricks','1. Never run mysqld as root. 2. ...');
|
||||
|
||||
# error on DELETE FROM parent table
|
||||
--error 1451
|
||||
DELETE FROM t1;
|
||||
|
||||
# records expected
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial') ORDER BY id1;
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial') ORDER BY id2;
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ORDER BY id1;
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ORDER BY id2;
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial' WITH QUERY EXPANSION) ORDER BY id1;
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial' WITH QUERY EXPANSION) ORDER BY id2;
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('"dbms database"@4' IN BOOLEAN MODE) ;
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('"dbms database"@4' IN BOOLEAN MODE) ;
|
||||
|
||||
# no records as data not COMMITted.
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('root') ;
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('root') ;
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('mysqld (+root)' IN BOOLEAN MODE) ;
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('mysqld (-root)' IN BOOLEAN MODE) ;
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('root' WITH QUERY EXPANSION) ;
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('root' WITH QUERY EXPANSION) ;
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('"database comparison"@02' IN BOOLEAN MODE) ;
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('"database comparison"@02' IN BOOLEAN MODE) ;
|
||||
|
||||
SELECT * FROM t1 ORDER BY id1;
|
||||
SELECT * FROM t2 ORDER BY id2;
|
||||
|
||||
COMMIT;
|
||||
|
||||
START TRANSACTION;
|
||||
# Updating parent table hence child table should get updated due to 'UPDATE cascade' clause
|
||||
UPDATE t1 SET a1 = "changing column - on UPDATE cascade" , b1 = "to check foreign constraint" WHERE
|
||||
MATCH (a1,b1) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
COMMIT;
|
||||
|
||||
# no records expected
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('tutorial (+mysql -VÐƷWİ)' IN BOOLEAN MODE) ;
|
||||
|
||||
# it shows updated record
|
||||
SELECT * FROM t1 WHERE MATCH (a1,b1) AGAINST ('+UPDATE +cascade' IN BOOLEAN MODE) ORDER BY id1;
|
||||
SELECT * FROM t2 WHERE MATCH (a2,b2) AGAINST ('+UPDATE +cascade' IN BOOLEAN MODE) ORDER BY id2;
|
||||
SELECT * FROM t2 WHERE a2 LIKE '%UPDATE CASCADE%' ORDER BY id2;
|
||||
|
||||
DROP TABLE t2 , t1;
|
||||
|
||||
|
||||
# FTS with FK+transactions - UPDATE cascade
|
||||
CREATE TABLE t1 (s1 INT, s2 VARCHAR(200), PRIMARY KEY (s1,s2)) ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (s1 INT, s2 VARCHAR(200),
|
||||
FULLTEXT KEY(s2),
|
||||
FOREIGN KEY (s1,s2) REFERENCES t1 (s1,s2) on UPDATE cascade) ENGINE = InnoDB;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
INSERT INTO t2 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
UPDATE t1 set s2 = 'Rainbows' WHERE s2 <> 'Sunshine';
|
||||
COMMIT;
|
||||
SELECT * FROM t2 WHERE MATCH(s2) AGAINST ('Lollipops');
|
||||
DROP TABLE t2 , t1;
|
||||
|
||||
# FTS with FK+transactions - on DELETE cascade
|
||||
CREATE TABLE t1 (s1 INT, s2 VARCHAR(200), PRIMARY KEY (s1,s2)) ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (s1 INT, s2 VARCHAR(200),
|
||||
FULLTEXT KEY(s2),
|
||||
FOREIGN KEY (s1,s2) REFERENCES t1 (s1,s2) on DELETE cascade) ENGINE = InnoDB;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
INSERT INTO t2 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
DELETE FROM t1 WHERE s2 <> 'Sunshine';
|
||||
COMMIT;
|
||||
SELECT * FROM t2 WHERE MATCH(s2) AGAINST ('Lollipops');
|
||||
DROP TABLE t2 , t1;
|
||||
|
||||
# FTS with FK+transactions - DELETE SET NULL
|
||||
CREATE TABLE t1 (s1 INT, s2 VARCHAR(200), PRIMARY KEY (s1,s2)) ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (s1 INT, s2 VARCHAR(200),
|
||||
FULLTEXT KEY(s2),
|
||||
FOREIGN KEY (s1,s2) REFERENCES t1 (s1,s2) on DELETE SET NULL) ENGINE = InnoDB;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
INSERT INTO t2 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
DELETE FROM t1 WHERE s2 <> 'Sunshine';
|
||||
COMMIT;
|
||||
SELECT * FROM t2 WHERE MATCH(s2) AGAINST ('Lollipops');
|
||||
DROP TABLE t2 , t1;
|
||||
|
||||
|
||||
# FTS with FK+transactions - UPDATE SET NULL
|
||||
CREATE TABLE t1 (s1 INT, s2 VARCHAR(200), PRIMARY KEY (s1,s2)) ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (s1 INT, s2 VARCHAR(200),
|
||||
FULLTEXT KEY(s2),
|
||||
FOREIGN KEY (s1,s2) REFERENCES t1 (s1,s2) on UPDATE SET NULL) ENGINE = InnoDB;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
INSERT INTO t2 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
UPDATE t1 set s2 = 'Rainbows' WHERE s2 <> 'Sunshine';
|
||||
COMMIT;
|
||||
SELECT * FROM t2 WHERE MATCH(s2) AGAINST ('Lollipops');
|
||||
DROP TABLE t2 , t1;
|
||||
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
# FTS with FK+transactions - UPDATE cascade
|
||||
CREATE TABLE t1 (s1 INT, s2 VARCHAR(200), PRIMARY KEY (s1,s2)) ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (s1 INT, s2 VARCHAR(200),
|
||||
FULLTEXT KEY(s2),
|
||||
FOREIGN KEY (s1,s2) REFERENCES t1 (s1,s2) on UPDATE cascade) ENGINE = InnoDB;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
INSERT INTO t2 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
UPDATE t1 set s2 = 'Rainbows' WHERE s2 <> 'Sunshine';
|
||||
ROLLBACK;
|
||||
SELECT * FROM t2 WHERE MATCH(s2) AGAINST ('Lollipops');
|
||||
DROP TABLE t2 , t1;
|
||||
|
||||
# FTS with FK+transactions - DELETE cascade
|
||||
CREATE TABLE t1 (s1 INT, s2 VARCHAR(200), PRIMARY KEY (s1,s2)) ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (s1 INT, s2 VARCHAR(200),
|
||||
FULLTEXT KEY(s2),
|
||||
FOREIGN KEY (s1,s2) REFERENCES t1 (s1,s2) on DELETE cascade) ENGINE = InnoDB;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
INSERT INTO t2 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
DELETE FROM t1 WHERE s2 <> 'Sunshine';
|
||||
ROLLBACK;
|
||||
SELECT * FROM t2 WHERE MATCH(s2) AGAINST ('Lollipops');
|
||||
DROP TABLE t2 , t1;
|
||||
|
||||
# FTS with FK+transactions - DELETE SET NULL
|
||||
CREATE TABLE t1 (s1 INT, s2 VARCHAR(200), PRIMARY KEY (s1,s2)) ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (s1 INT, s2 VARCHAR(200),
|
||||
FULLTEXT KEY(s2),
|
||||
FOREIGN KEY (s1,s2) REFERENCES t1 (s1,s2) on DELETE SET NULL) ENGINE = InnoDB;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
INSERT INTO t2 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
DELETE FROM t1 WHERE s2 <> 'Sunshine';
|
||||
ROLLBACK;
|
||||
SELECT * FROM t2 WHERE MATCH(s2) AGAINST ('Lollipops');
|
||||
DROP TABLE t2 , t1;
|
||||
|
||||
|
||||
# FTS with FK+transactions - UPDATE SET NULL
|
||||
CREATE TABLE t1 (s1 INT, s2 VARCHAR(200), PRIMARY KEY (s1,s2)) ENGINE = InnoDB;
|
||||
CREATE TABLE t2 (s1 INT, s2 VARCHAR(200),
|
||||
FULLTEXT KEY(s2),
|
||||
FOREIGN KEY (s1,s2) REFERENCES t1 (s1,s2) on UPDATE SET NULL) ENGINE = InnoDB;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
INSERT INTO t2 VALUES (1,'Sunshine'),(2,'Lollipops');
|
||||
UPDATE t1 set s2 = 'Rainbows' WHERE s2 <> 'Sunshine';
|
||||
ROLLBACK;
|
||||
SELECT * FROM t2 WHERE MATCH(s2) AGAINST ('Lollipops');
|
||||
DROP TABLE t2 , t1;
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# FTS index with compressed row format
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# Save innodb variables
|
||||
let $innodb_file_per_table_orig=`select @@innodb_file_per_table`;
|
||||
|
||||
set global innodb_file_per_table=1;
|
||||
|
||||
# Create FTS table
|
||||
CREATE TABLE t1 (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
a VARCHAR(200),
|
||||
b TEXT
|
||||
) CHARACTER SET = utf8, ROW_FORMAT=COMPRESSED, ENGINE = InnoDB;
|
||||
|
||||
# Insert rows
|
||||
INSERT INTO t1 (a,b) VALUES
|
||||
('MySQL Tutorial','DBMS stands for DataBase VÐƷWİ...') ,
|
||||
('How To Use MySQL Well','After you went through a ...'),
|
||||
('Optimizing MySQL','In this tutorial we will show ...');
|
||||
|
||||
# Create the FTS index Using Alter Table
|
||||
ALTER TABLE t1 ADD FULLTEXT INDEX idx (a,b);
|
||||
EVAL SHOW CREATE TABLE t1;
|
||||
|
||||
# Check whether individual space id created for AUX tables
|
||||
SELECT count(*) FROM information_schema.innodb_sys_tables WHERE name LIKE "%FTS_%" AND space !=0;
|
||||
|
||||
# Insert rows
|
||||
INSERT INTO t1 (a,b) VALUES
|
||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
||||
('MySQL Security','When configured properly, MySQL ...');
|
||||
|
||||
-- disable_result_log
|
||||
ANALYZE TABLE t1;
|
||||
-- enable_result_log
|
||||
|
||||
# Select word "tutorial" in the table
|
||||
SELECT * FROM t1 WHERE MATCH (a,b)
|
||||
AGAINST ('Tutorial' IN NATURAL LANGUAGE MODE) ORDER BY id;
|
||||
|
||||
# boolean mode
|
||||
select * from t1 where MATCH(a,b) AGAINST("+tutorial +VÐƷWİ" IN BOOLEAN MODE);
|
||||
--error ER_PARSE_ERROR
|
||||
select * from t1 where MATCH(a,b) AGAINST("+-VÐƷWİ" IN BOOLEAN MODE);
|
||||
select * from t1 where MATCH(a,b) AGAINST("+Mysql +(tricks never)" IN BOOLEAN MODE);
|
||||
select * from t1 where MATCH(a,b) AGAINST("+mysql -(tricks never)" IN BOOLEAN MODE) ORDER BY id;
|
||||
select *, MATCH(a,b) AGAINST("mysql stands" IN BOOLEAN MODE) as x from t1 ORDER BY id;
|
||||
select * from t1 where MATCH a,b AGAINST ("+database* +VÐƷW*" IN BOOLEAN MODE);
|
||||
select * from t1 where MATCH a,b AGAINST ('"security mysql"' IN BOOLEAN MODE);
|
||||
|
||||
# query expansion
|
||||
select * from t1 where MATCH(a,b) AGAINST ("VÐƷWİ" WITH QUERY EXPANSION) ORDER BY id;
|
||||
|
||||
# Drop index
|
||||
ALTER TABLE t1 DROP INDEX idx;
|
||||
|
||||
# Create the FTS index again
|
||||
CREATE FULLTEXT INDEX idx on t1 (a,b);
|
||||
|
||||
-- disable_query_log
|
||||
-- disable_result_log
|
||||
ANALYZE TABLE t1;
|
||||
-- enable_result_log
|
||||
-- enable_query_log
|
||||
|
||||
# Select word "tutorial" in the table
|
||||
SELECT * FROM t1 WHERE MATCH (a,b)
|
||||
AGAINST ('Tutorial' IN NATURAL LANGUAGE MODE) ORDER BY id;
|
||||
|
||||
# boolean mode
|
||||
select * from t1 where MATCH(a,b) AGAINST("+tutorial +VÐƷWİ" IN BOOLEAN MODE);
|
||||
select * from t1 where MATCH(a,b) AGAINST("+dbms" IN BOOLEAN MODE);
|
||||
select * from t1 where MATCH(a,b) AGAINST("+Mysql +(tricks never)" IN BOOLEAN MODE);
|
||||
select * from t1 where MATCH(a,b) AGAINST("+mysql -(tricks never)" IN BOOLEAN MODE) ORDER BY id;
|
||||
select *, MATCH(a,b) AGAINST("mysql VÐƷWİ" IN BOOLEAN MODE) as x from t1 ORDER BY id;
|
||||
# Innodb:Assert eval0eval.c line 148
|
||||
#select * from t1 where MATCH a,b AGAINST ("+database* +VÐƷWİ*" IN BOOLEAN MODE);
|
||||
select * from t1 where MATCH a,b AGAINST ('"security mysql"' IN BOOLEAN MODE);
|
||||
|
||||
# query expansion
|
||||
select * from t1 where MATCH(a,b) AGAINST ("VÐƷWİ" WITH QUERY EXPANSION) ORDER BY id;
|
||||
|
||||
|
||||
# insert for proximity search
|
||||
INSERT INTO t1 (a,b) VALUES ('test query expansion','for database ...');
|
||||
# Insert into table with similar word of different distances
|
||||
INSERT INTO t1 (a,b) VALUES
|
||||
('test proximity search, test, proximity and phrase',
|
||||
'search, with proximity innodb');
|
||||
|
||||
INSERT INTO t1 (a,b) VALUES
|
||||
('test proximity fts search, test, proximity and phrase',
|
||||
'search, with proximity innodb');
|
||||
|
||||
INSERT INTO t1 (a,b) VALUES
|
||||
('test more proximity fts search, test, more proximity and phrase',
|
||||
'search, with proximity innodb');
|
||||
|
||||
# This should only return the first document
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"proximity search"@2' IN BOOLEAN MODE);
|
||||
|
||||
# This would return no document
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"proximity search"@1' IN BOOLEAN MODE);
|
||||
|
||||
# This give you all three documents
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"proximity search"@3' IN BOOLEAN MODE) ORDER BY id;
|
||||
|
||||
# Similar boundary testing for the words
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"test proximity"@5' IN BOOLEAN MODE) ORDER BY id;
|
||||
|
||||
# Test with more word The last document will return, please notice there
|
||||
# is no ordering requirement for proximity search.
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"more test proximity"@2' IN BOOLEAN MODE);
|
||||
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"more test proximity"@3' IN BOOLEAN MODE);
|
||||
|
||||
# The phrase search will not require exact word ordering
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"more fts proximity"@03' IN BOOLEAN MODE);
|
||||
|
||||
|
||||
UPDATE t1 SET a = UPPER(a) , b = UPPER(b) ;
|
||||
UPDATE t1 SET a = UPPER(a) , b = LOWER(b) ;
|
||||
|
||||
select * from t1 where MATCH(a,b) AGAINST("+tutorial +dbms" IN BOOLEAN MODE);
|
||||
select * from t1 where MATCH(a,b) AGAINST("+VÐƷWİ" IN BOOLEAN MODE);
|
||||
|
||||
SELECT * FROM t1 WHERE MATCH (a,b)
|
||||
AGAINST ('Tutorial' IN NATURAL LANGUAGE MODE) ORDER BY id;
|
||||
|
||||
DELETE FROM t1 WHERE MATCH (a,b) AGAINST ('Tutorial' IN NATURAL LANGUAGE MODE);
|
||||
DELETE FROM t1 WHERE MATCH (a,b) AGAINST ('"proximity search"@14' IN BOOLEAN MODE);
|
||||
|
||||
|
||||
SELECT * FROM t1 WHERE MATCH (a,b)
|
||||
AGAINST ('Tutorial' IN NATURAL LANGUAGE MODE);
|
||||
|
||||
SELECT * FROM t1 ORDER BY id;
|
||||
|
||||
DROP TABLE t1;
|
||||
eval SET GLOBAL innodb_file_per_table=$innodb_file_per_table_orig;
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# FTS index with utf8 character testcase
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# Create FTS table
|
||||
EVAL CREATE TABLE t1 (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
a VARCHAR(200),
|
||||
b TEXT
|
||||
) CHARACTER SET = utf8, ENGINE=InnoDB;
|
||||
|
||||
|
||||
# Insert rows from different languages
|
||||
INSERT INTO t1 (a,b) VALUES
|
||||
('Я могу есть стекло', 'оно мне не вредит'),
|
||||
('Мога да ям стъкло', 'то не ми вреди'),
|
||||
('Μπορῶ νὰ φάω σπασμένα' ,'γυαλιὰ χωρὶς νὰ πάθω τίποτα'),
|
||||
('Příliš žluťoučký kůň', 'úpěl ďábelské kódy'),
|
||||
('Sævör grét', 'áðan því úlpan var ónýt'),
|
||||
('うゐのおくやま','けふこえて'),
|
||||
('いろはにほへど ちりぬる','あさきゆめみじ ゑひもせず');
|
||||
|
||||
# insert english text
|
||||
INSERT INTO t1 (a,b) VALUES
|
||||
('MySQL Tutorial','request docteam@oraclehelp.com ...') ,
|
||||
('Trial version','query performace @1255 minute on 2.1Hz Memory 2GB...') ,
|
||||
('when To Use MySQL Well','for free faq mail@xyz.com ...');
|
||||
|
||||
# Create the FTS index again
|
||||
CREATE FULLTEXT INDEX idx on t1 (a,b);
|
||||
|
||||
# FTS Queries
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST ("вредит χωρὶς") ORDER BY id;
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST ("оно" WITH QUERY EXPANSION);
|
||||
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST("вред*" IN BOOLEAN MODE) ORDER BY id;
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST("+γυαλιὰ +tutorial" IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST("+tutorial +(Мога τίποτα)" IN BOOLEAN MODE);
|
||||
|
||||
# Innodb:error - no result returned (update result of query once fixed) (innodb limit , does not understand character boundry for japanses like charcter set)
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST ("あさきゆめみじ ゑひもせず");
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST ("ちりぬる" WITH QUERY EXPANSION);
|
||||
|
||||
# Innodb:error - no result returned (update result of query once fixed) (innodb limit , does not understand character boundry for japanses like charcter set)
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST ("+あさきゆめみじ +ゑひもせず" IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST("うゐのおく*" IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST("+Sævör +úlpan" IN BOOLEAN MODE);
|
||||
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"γυαλιὰ χωρὶς"@2' IN BOOLEAN MODE);
|
||||
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"query performace"@02' IN BOOLEAN MODE);
|
||||
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"πάθω τίποτα"@2' IN BOOLEAN MODE);
|
||||
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"あさきゆめみじ ゑひもせず"@1' IN BOOLEAN MODE);
|
||||
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"あさきゆめみじ ゑひもせず"@2' IN BOOLEAN MODE);
|
||||
|
||||
ALTER TABLE t1 DROP INDEX idx;
|
||||
# Create the FTS index again
|
||||
CREATE FULLTEXT INDEX idx on t1 (a,b);
|
||||
|
||||
# Innodb:error - no result returned (update result of query once fixed) (innodb limit , does not understand character boundry for japanses like charcter set)
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST ("あさきゆめみじ ゑひもせず");
|
||||
# Update fails because where condition do not succeed which is incorrect (update result of query once fixed)
|
||||
UPDATE t1 SET a = "Pchnąć w tę łódź jeża" , b = "lub osiem skrzyń fig" WHERE MATCH(a,b) AGAINST ("あさきゆめみじ ゑひもせず");
|
||||
UPDATE t1 SET a = "В чащах юга жил-был цитрус? Да", b = "но фальшивый экземпляр! ёъ" WHERE MATCH(a,b) AGAINST ("вред*" IN BOOLEAN MODE);
|
||||
DELETE FROM t1 WHERE MATCH(a,b) AGAINST("+Sævör +úlpan" IN BOOLEAN MODE);
|
||||
|
||||
# Innodb error - no result returned
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST ("あさきゆめみじ ゑひもせず");
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST ("łódź osiem");
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST("вред*" IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST("фальшив*" IN BOOLEAN MODE) ORDER BY id;
|
||||
SELECT * FROM t1 WHERE MATCH(a,b) AGAINST("+Sævör +úlpan" IN BOOLEAN MODE);
|
||||
|
||||
SELECT * FROM t1
|
||||
WHERE MATCH (a,b)
|
||||
AGAINST ('"łódź jeża"@2' IN BOOLEAN MODE);
|
||||
|
||||
SELECT * FROM t1 ORDER BY id;
|
||||
DROP TABLE t1;
|
||||
|
||||
# This is to test the update operation on FTS indexed and non-indexed
|
||||
# column
|
||||
CREATE TABLE t1(ID INT PRIMARY KEY,
|
||||
no_fts_field VARCHAR(10),
|
||||
fts_field VARCHAR(10),
|
||||
FULLTEXT INDEX f(fts_field)) ENGINE=INNODB;
|
||||
|
||||
INSERT INTO t1 VALUES (1, 'AAA', 'BBB');
|
||||
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("BBB");
|
||||
|
||||
# Update FULLTEXT indexed column, Doc ID will be updated
|
||||
UPDATE t1 SET fts_field='anychange' where id = 1;
|
||||
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("anychange");
|
||||
|
||||
# Update non-FULLTEXT indexed column, Doc ID stay to be the same
|
||||
UPDATE t1 SET no_fts_field='anychange' where id = 1;
|
||||
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("anychange");
|
||||
|
||||
# Update both FULLTEXT indexed and non-indexed column, Doc ID will be updated
|
||||
UPDATE t1 SET no_fts_field='anychange', fts_field='other' where id = 1;
|
||||
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("other");
|
||||
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("BBB");
|
||||
|
||||
# FTS index dropped, the DOC_ID column is kept, however, the ID will not
|
||||
# change
|
||||
DROP INDEX f on t1;
|
||||
|
||||
UPDATE t1 SET fts_field='anychange' where id = 1;
|
||||
|
||||
UPDATE t1 SET no_fts_field='anychange' where id = 1;
|
||||
|
||||
UPDATE t1 SET no_fts_field='anychange', fts_field='other' where id = 1;
|
||||
|
||||
CREATE FULLTEXT INDEX f ON t1(FTS_FIELD);
|
||||
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("other");
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# Test on user supplied 'FTS_DOC_ID'
|
||||
CREATE TABLE t1(`FTS_DOC_ID` serial,
|
||||
no_fts_field VARCHAR(10),
|
||||
fts_field VARCHAR(10),
|
||||
FULLTEXT INDEX f(fts_field)) ENGINE=INNODB;
|
||||
|
||||
INSERT INTO t1 VALUES (1, 'AAA', 'BBB');
|
||||
|
||||
# Doc ID must be updated as well (HA_FTS_INVALID_DOCID).
|
||||
--error 182
|
||||
UPDATE t1 SET fts_field='anychange' where FTS_DOC_ID = 1;
|
||||
|
||||
UPDATE t1 SET fts_field='anychange', FTS_DOC_ID = 2 where FTS_DOC_ID = 1;
|
||||
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("anychange");
|
||||
|
||||
# "BBB" should be marked as deleted.
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("BBB");
|
||||
|
||||
UPDATE t1 SET no_fts_field='anychange' where FTS_DOC_ID = 2;
|
||||
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("anychange");
|
||||
|
||||
# "HA_FTS_INVALID_DOCID"
|
||||
--error 182
|
||||
UPDATE t1 SET no_fts_field='anychange', fts_field='other' where FTS_DOC_ID = 2;
|
||||
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("other");
|
||||
|
||||
# Doc ID must be monotonically increase (HA_FTS_INVALID_DOCID)
|
||||
--error 182
|
||||
UPDATE t1 SET FTS_DOC_ID = 1 where FTS_DOC_ID = 2;
|
||||
|
||||
DROP INDEX f ON t1;
|
||||
|
||||
# After FULLTEXT index dropped, we can update the fields freely
|
||||
UPDATE t1 SET fts_field='newchange' where FTS_DOC_ID = 2;
|
||||
|
||||
UPDATE t1 SET no_fts_field='anychange' where FTS_DOC_ID = 2;
|
||||
|
||||
SELECT * FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1(ID INT PRIMARY KEY,
|
||||
no_fts_field VARCHAR(10),
|
||||
fts_field VARCHAR(10),
|
||||
FULLTEXT INDEX f(fts_field), index k(fts_field)) ENGINE=INNODB;
|
||||
|
||||
CREATE TABLE t2(ID INT PRIMARY KEY,
|
||||
no_fts_field VARCHAR(10),
|
||||
fts_field VARCHAR(10),
|
||||
FULLTEXT INDEX f(fts_field),
|
||||
INDEX k2(fts_field),
|
||||
FOREIGN KEY(fts_field) REFERENCES
|
||||
t1(fts_field) ON UPDATE CASCADE) ENGINE=INNODB;
|
||||
|
||||
INSERT INTO t1 VALUES (1, 'AAA', 'BBB');
|
||||
|
||||
INSERT INTO t2 VALUES (1, 'AAA', 'BBB');
|
||||
|
||||
update t1 set fts_field='newchange' where id =1;
|
||||
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("BBB");
|
||||
SELECT * FROM t2 WHERE MATCH(fts_field) against("BBB");
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("newchange");
|
||||
SELECT * FROM t2 WHERE MATCH(fts_field) against("newchange");
|
||||
|
||||
DROP TABLE t2;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# Testcases adopted from innodb_multi_update.test
|
||||
|
||||
CREATE TABLE t1(id INT PRIMARY KEY,
|
||||
fts_field VARCHAR(10),
|
||||
FULLTEXT INDEX f(fts_field)) ENGINE=INNODB;
|
||||
|
||||
|
||||
CREATE TABLE t2(id INT PRIMARY KEY,
|
||||
fts_field VARCHAR(10),
|
||||
FULLTEXT INDEX f(fts_field)) ENGINE=INNODB;
|
||||
|
||||
INSERT INTO t1 values (1,'100'),(2,'200'),(3,'300'),(4,'400'),(5,'500'),(6,'600'), (7,'700'),(8,'800'),(9,'900'),(10,'1000'),(11,'1100'),(12,'1200');
|
||||
INSERT INTO t2 values (1,'100'),(2,'200'),(3,'300'),(4,'400'),(5,'500'),(6,'600'), (7,'700'),(8,'800');
|
||||
|
||||
UPDATE t1, t2 set t1.fts_field = CONCAT(t1.fts_field, 'foo');
|
||||
|
||||
UPDATE t1, t2 set t1.fts_field = CONCAT(t1.fts_field, 'foo') WHERE t1.fts_field = "100foo";
|
||||
|
||||
# Update two tables in the same statement
|
||||
UPDATE t1, t2 set t1.fts_field = CONCAT(t1.fts_field, 'xoo'), t2.fts_field = CONCAT(t1.fts_field, 'xoo') where t1.fts_field=CONCAT(t2.fts_field, 'foo');
|
||||
|
||||
# Following selects shows whether the correct Doc ID are updated
|
||||
|
||||
# This row should present in table t1
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("100foofoo");
|
||||
|
||||
# Following rows should be dropped
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("100foo");
|
||||
SELECT * FROM t1 WHERE MATCH(fts_field) against("100");
|
||||
|
||||
# This row should present in table t2
|
||||
SELECT * FROM t2 WHERE MATCH(fts_field) against("400fooxoo");
|
||||
SELECT * FROM t2 WHERE MATCH(fts_field) against("100");
|
||||
|
||||
# Follow rows should be marked as dropped
|
||||
SELECT * FROM t2 WHERE MATCH(fts_field) against("200");
|
||||
SELECT * FROM t2 WHERE MATCH(fts_field) against("400");
|
||||
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
DROP TABLE t2;
|
||||
|
||||
|
||||
--echo
|
||||
--echo BUG#13701973/64274: MYSQL THREAD WAS SUSPENDED WHEN EXECUTE UPDATE QUERY
|
||||
--echo
|
||||
# FTS setup did not track which tables it had already looked at to see whether
|
||||
# they need initialization. Hilarity ensued when hitting circular dependencies.
|
||||
|
||||
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
|
||||
|
||||
CREATE TABLE t1 (
|
||||
t1_id INT(10) UNSIGNED NOT NULL,
|
||||
t2_id INT(10) UNSIGNED DEFAULT NULL,
|
||||
PRIMARY KEY (t1_id),
|
||||
FOREIGN KEY (t2_id) REFERENCES t2 (t2_id)
|
||||
ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE t2 (
|
||||
t1_id INT(10) UNSIGNED NOT NULL,
|
||||
t2_id INT(10) UNSIGNED NOT NULL,
|
||||
t3_id INT(10) UNSIGNED NOT NULL,
|
||||
t4_id INT(10) UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (t2_id),
|
||||
FOREIGN KEY (t1_id) REFERENCES t1 (t1_id),
|
||||
FOREIGN KEY (t3_id) REFERENCES t3 (t3_id)
|
||||
ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (t4_id) REFERENCES t4 (t4_id)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE t3 (
|
||||
t3_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
payload char(3),
|
||||
PRIMARY KEY (t3_id)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO t3 VALUES (1, '100');
|
||||
|
||||
CREATE TABLE t4 (
|
||||
t2_id INT(10) UNSIGNED DEFAULT NULL,
|
||||
t4_id INT(10) UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (t4_id),
|
||||
FOREIGN KEY (t2_id) REFERENCES t2 (t2_id)
|
||||
ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS=1;
|
||||
|
||||
UPDATE t3 SET payload='101' WHERE t3_id=1;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
DROP TABLE t4;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
|
||||
1
mysql-test/suite/innodb_fts/t/opt.opt
Normal file
1
mysql-test/suite/innodb_fts/t/opt.opt
Normal file
|
|
@ -0,0 +1 @@
|
|||
--query_cache_type=0
|
||||
1086
mysql-test/suite/innodb_fts/t/opt.test
Normal file
1086
mysql-test/suite/innodb_fts/t/opt.test
Normal file
File diff suppressed because it is too large
Load diff
2
mysql-test/suite/innodb_fts/t/phrase.opt
Normal file
2
mysql-test/suite/innodb_fts/t/phrase.opt
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
--innodb-ft-index-cache
|
||||
--innodb-ft-index-table
|
||||
39
mysql-test/suite/innodb_fts/t/phrase.test
Normal file
39
mysql-test/suite/innodb_fts/t/phrase.test
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
-- source include/have_innodb.inc
|
||||
|
||||
#
|
||||
# BUG#20465273 - FULLTEXT SEARCH BEHAVIOUR WITH MYISAM VS. INNODB (WRONG RESULT WITH INNODB)
|
||||
#
|
||||
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO articles (title,body) VALUES
|
||||
(NULL, 'mysql good database'),
|
||||
(NULL, ' mysql good database'),
|
||||
('', 'mysql good database'),
|
||||
('', ' mysql good database'),
|
||||
(' ', 'mysql good database'),
|
||||
('mysql', 'good database'),
|
||||
('mysql ', 'good database'),
|
||||
('mysql', ' good database'),
|
||||
('mysql good database', ''),
|
||||
('mysql good database', NULL);
|
||||
|
||||
|
||||
SET GLOBAL innodb_ft_aux_table="test/articles";
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE;
|
||||
SET GLOBAL innodb_ft_aux_table=default;
|
||||
|
||||
SELECT * FROM articles;
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title, body)
|
||||
AGAINST('"mysql good database"' IN BOOLEAN MODE);
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title, body)
|
||||
AGAINST('("mysql good database")' IN BOOLEAN MODE);
|
||||
|
||||
DROP TABLE articles;
|
||||
52
mysql-test/suite/innodb_fts/t/result_cache_limit.test
Normal file
52
mysql-test/suite/innodb_fts/t/result_cache_limit.test
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
# This is a basic test for innodb fts result cache limit.
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
# Must have debug code to use SET SESSION debug
|
||||
--source include/have_debug.inc
|
||||
|
||||
# Create FTS table
|
||||
CREATE TABLE t1 (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
a VARCHAR(200),
|
||||
b TEXT
|
||||
) ENGINE= InnoDB;
|
||||
|
||||
# Create the FTS index again
|
||||
CREATE FULLTEXT INDEX idx on t1 (a,b);
|
||||
|
||||
# Insert rows
|
||||
INSERT INTO t1 (a,b) VALUES
|
||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||
('when To Use MySQL Well','After that you went through a ...'),
|
||||
('where will Optimizing MySQL','what In this tutorial we will show ...'),
|
||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||
('when To Use MySQL Well','After that you went through a ...'),
|
||||
('where will Optimizing MySQL','what In this tutorial we will show ...'),
|
||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||
('when To Use MySQL Well','After that you went through a ...'),
|
||||
('where will Optimizing MySQL','what In this tutorial we will show ...');
|
||||
|
||||
SET @save_limit=@@GLOBAL.innodb_ft_result_cache_limit;
|
||||
SET @save_dbug=@@debug_dbug;
|
||||
SET debug_dbug="+d,fts_instrument_result_cache_limit";
|
||||
|
||||
# Simple term search
|
||||
SELECT COUNT(*) FROM t1 WHERE MATCH (a,b) AGAINST ('mysql' IN BOOLEAN MODE);
|
||||
|
||||
# Query expansion
|
||||
--error 128
|
||||
SELECT COUNT(*) FROM t1 WHERE MATCH (a,b) AGAINST ('mysql' WITH QUERY EXPANSION);
|
||||
|
||||
# Simple phrase search
|
||||
--error 128
|
||||
SELECT COUNT(*) FROM t1 WHERE MATCH (a,b) AGAINST ('"mysql database"' IN BOOLEAN MODE);
|
||||
|
||||
# Simple proximity search
|
||||
--error 128
|
||||
SELECT COUNT(*) FROM t1 WHERE MATCH (a,b) AGAINST ('"mysql database" @ 5' IN BOOLEAN MODE);
|
||||
|
||||
SET debug_dbug=@save_dbug;
|
||||
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL innodb_ft_result_cache_limit=@save_limit;
|
||||
475
mysql-test/suite/innodb_fts/t/savepoint.test
Normal file
475
mysql-test/suite/innodb_fts/t/savepoint.test
Normal file
|
|
@ -0,0 +1,475 @@
|
|||
# This is the basic function tests for innodb FTS savepoint
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
FULLTEXT (title)
|
||||
) ENGINE= InnoDB;
|
||||
|
||||
# Test Part 1: ROLLBACK TO SAVEPOINT
|
||||
# Test rollback to savepoint 1(S1,RB1)
|
||||
TRUNCATE TABLE articles;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
|
||||
SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
|
||||
ROLLBACK TO SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
|
||||
COMMIT;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
|
||||
# Test rollback to savepoint 2(S1,RB1,S2,RB2)
|
||||
TRUNCATE TABLE articles;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
|
||||
SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
|
||||
ROLLBACK TO SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
|
||||
SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
|
||||
ROLLBACK TO SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
|
||||
COMMIT;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
|
||||
# Test rollback to savepoint 3(S1,S2,RB1)
|
||||
TRUNCATE TABLE articles;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
|
||||
SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
|
||||
SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
|
||||
ROLLBACK TO SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
|
||||
COMMIT;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
|
||||
# Test rollback to savepoint 4(S1,S2,RB2,RB1)
|
||||
TRUNCATE TABLE articles;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
|
||||
SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
|
||||
SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
|
||||
ROLLBACK TO SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
|
||||
ROLLBACK TO SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
|
||||
COMMIT;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
|
||||
# Test Part 2: RELEASE SAVEPOINT
|
||||
# Test release savepoint 1(S1,RL1)
|
||||
TRUNCATE TABLE articles;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
|
||||
SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
|
||||
RELEASE SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
|
||||
COMMIT;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
|
||||
# Test release savepoint 2(S1,RL1,S2,RL2)
|
||||
TRUNCATE TABLE articles;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
|
||||
SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
|
||||
RELEASE SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
|
||||
SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
|
||||
RELEASE SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
|
||||
COMMIT;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
|
||||
# Test release savepoint 3(S1,S2,RL1)
|
||||
TRUNCATE TABLE articles;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
|
||||
SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
|
||||
SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
|
||||
RELEASE SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
|
||||
COMMIT;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
|
||||
# Test release savepoint 4(S1,S2,RL2,RL1)
|
||||
TRUNCATE TABLE articles;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
|
||||
SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
|
||||
SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
|
||||
RELEASE SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
|
||||
RELEASE SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
|
||||
COMMIT;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
|
||||
# Test Part 3: RELEASE & ROLLBACK TO SAVEPOINT
|
||||
# Test release & rollback to savepoint 1(S1,RB1,S2,RL2)
|
||||
TRUNCATE TABLE articles;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
|
||||
SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
|
||||
ROLLBACK TO SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
|
||||
SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
|
||||
RELEASE SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
|
||||
COMMIT;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
|
||||
# Test release & rollback to savepoint 2(S1,RL1,S2,RB2)
|
||||
TRUNCATE TABLE articles;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
|
||||
SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
|
||||
RELEASE SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
|
||||
SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
|
||||
ROLLBACK TO SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
|
||||
COMMIT;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
|
||||
# Test release & rollback to savepoint 3(S1,S2,RL2,RB1)
|
||||
TRUNCATE TABLE articles;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
|
||||
SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
|
||||
SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
|
||||
RELEASE SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
|
||||
ROLLBACK TO SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
|
||||
COMMIT;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
|
||||
# Test release & rollback to savepoint 4(S1,S2,RB2,RL1)
|
||||
TRUNCATE TABLE articles;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
|
||||
SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
|
||||
SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
|
||||
ROLLBACK TO SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
|
||||
RELEASE SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
|
||||
COMMIT;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
|
||||
# Test Part 4: ROLLBACK & SAVEPOINT
|
||||
# Test rollback 1
|
||||
TRUNCATE TABLE articles;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
|
||||
ROLLBACK;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
|
||||
# Test rollback 2(S1)
|
||||
TRUNCATE TABLE articles;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
|
||||
SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
|
||||
ROLLBACK;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
|
||||
# Test rollback 3(S1,RL1)
|
||||
TRUNCATE TABLE articles;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
|
||||
SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
|
||||
RELEASE SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
|
||||
ROLLBACK;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
|
||||
# Test rollback 4(S1,RB1)
|
||||
TRUNCATE TABLE articles;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
|
||||
SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
|
||||
ROLLBACK TO SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
|
||||
ROLLBACK;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
|
||||
# Test rollback 5(S1,S2,RB2,RL1)
|
||||
TRUNCATE TABLE articles;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(1, 'mysql');
|
||||
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(2, 'mysql');
|
||||
|
||||
SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(3, 'mysql');
|
||||
|
||||
SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(4, 'mysql');
|
||||
|
||||
ROLLBACK TO SAVEPOINT sp2;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(5, 'mysql');
|
||||
|
||||
RELEASE SAVEPOINT sp1;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(6, 'mysql');
|
||||
|
||||
ROLLBACK;
|
||||
|
||||
INSERT INTO articles(id, title) VALUES(7, 'mysql');
|
||||
|
||||
SELECT * FROM articles WHERE MATCH(title) AGAINST('mysql');
|
||||
|
||||
DROP TABLE articles;
|
||||
58
mysql-test/suite/innodb_fts/t/subexpr.test
Normal file
58
mysql-test/suite/innodb_fts/t/subexpr.test
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
--source include/have_innodb.inc
|
||||
|
||||
--echo #
|
||||
--echo # Bug #20028323 INNODB FULLTEXT BOOLEAN SEARCH INCORRECTLY HANDLES
|
||||
--echo # PARENTHESES
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (
|
||||
f1 INT NOT NULL AUTO_INCREMENT,
|
||||
f2 TEXT NOT NULL,
|
||||
PRIMARY KEY (f1),
|
||||
FULLTEXT (f2)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
INSERT INTO t1 (f2) VALUES
|
||||
('Pumpkin soup with cheese bread'),
|
||||
('Yellow chicken curry'),
|
||||
('Fresh green vegetables with garlic');
|
||||
|
||||
SELECT * FROM t1 WHERE MATCH(f2) AGAINST('+pumpkin' IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH(f2) AGAINST('+cheese' IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH(f2) AGAINST('+(pumpkin cheese)' IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH(f2)
|
||||
AGAINST('+pumpkin +(souffle)' IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH(f2)
|
||||
AGAINST('+pumpkin +(souffle tart)' IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH(f2)
|
||||
AGAINST('+pumpkin +(>souffle <tart)' IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH(f2)
|
||||
AGAINST('+pumpkin +(souffle tart)' IN BOOLEAN MODE);
|
||||
|
||||
INSERT INTO t1 (f2) VALUES
|
||||
('This row contains only souffle'),
|
||||
('This row contains only tart'),
|
||||
('This row contains only pumpkin'),
|
||||
('This row contains only cheese'),
|
||||
('This row contains pumpkin and souffle'),
|
||||
('This row contains pumpkin and tart'),
|
||||
('This row contains pumpkin and cheese'),
|
||||
('This row contains both souffle and tart'),
|
||||
('This row contains both souffle and cheese'),
|
||||
('This row contains both tart and cheese'),
|
||||
('This row contains all three souffle, pumpkin and tart'),
|
||||
('This row contains all four cheese, souffle, pumpkin and tart');
|
||||
|
||||
SELECT * FROM t1 WHERE MATCH(f2) AGAINST('+pumpkin' IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH(f2) AGAINST('+cheese' IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH(f2) AGAINST('+(pumpkin cheese)' IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH(f2)
|
||||
AGAINST('+pumpkin +(souffle)' IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH(f2)
|
||||
AGAINST('+pumpkin +(souffle tart)' IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH(f2)
|
||||
AGAINST('+pumpkin +(>souffle <tart)' IN BOOLEAN MODE);
|
||||
SELECT * FROM t1 WHERE MATCH(f2)
|
||||
AGAINST('+pumpkin +(souffle tart)' IN BOOLEAN MODE);
|
||||
|
||||
DROP TABLE t1;
|
||||
Loading…
Add table
Add a link
Reference in a new issue