mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Merge 10.1 into 10.2
This commit is contained in:
commit
547cb280b8
16 changed files with 1789 additions and 236 deletions
73
mysql-test/suite/innodb/r/innodb_sys_var_valgrind.result
Normal file
73
mysql-test/suite/innodb/r/innodb_sys_var_valgrind.result
Normal file
|
@ -0,0 +1,73 @@
|
|||
#
|
||||
# Bug #29717909 MEMORY LIFETIME OF VARIABLES BETWEEN CHECK AND UPDATE INCORRECTLY MANAGED
|
||||
#
|
||||
select @@innodb_ft_server_stopword_table;
|
||||
@@innodb_ft_server_stopword_table
|
||||
NULL
|
||||
create table user_stopword_1(value varchar(30)) engine = innodb;
|
||||
create table user_stopword_2(value varchar(30)) engine = innodb;
|
||||
set @blah = 'test/user_stopword_1';
|
||||
SET GLOBAL innodb_ft_server_stopword_table= @blah;
|
||||
select @@innodb_ft_server_stopword_table;
|
||||
@@innodb_ft_server_stopword_table
|
||||
test/user_stopword_1
|
||||
set @blah = 'test/user_stopword_2';
|
||||
SET GLOBAL innodb_ft_server_stopword_table= @blah;
|
||||
select @@innodb_ft_server_stopword_table;
|
||||
@@innodb_ft_server_stopword_table
|
||||
test/user_stopword_2
|
||||
SET GLOBAL innodb_ft_server_stopword_table= NULL;
|
||||
select @@innodb_ft_server_stopword_table;
|
||||
@@innodb_ft_server_stopword_table
|
||||
NULL
|
||||
SET GLOBAL innodb_ft_server_stopword_table= default;
|
||||
select @@innodb_ft_server_stopword_table;
|
||||
@@innodb_ft_server_stopword_table
|
||||
NULL
|
||||
drop table user_stopword_1, user_stopword_2;
|
||||
select @@innodb_buffer_pool_filename;
|
||||
@@innodb_buffer_pool_filename
|
||||
ib_buffer_pool
|
||||
set @blah='hello';
|
||||
set global innodb_buffer_pool_filename = @blah;
|
||||
select @@innodb_buffer_pool_filename;
|
||||
@@innodb_buffer_pool_filename
|
||||
hello
|
||||
set global innodb_buffer_pool_filename="bye";
|
||||
select @@innodb_buffer_pool_filename;
|
||||
@@innodb_buffer_pool_filename
|
||||
bye
|
||||
set global innodb_buffer_pool_filename=NULL;
|
||||
ERROR 42000: Variable 'innodb_buffer_pool_filename' can't be set to the value of 'NULL'
|
||||
select @@innodb_buffer_pool_filename;
|
||||
@@innodb_buffer_pool_filename
|
||||
bye
|
||||
set global innodb_buffer_pool_filename=default;
|
||||
select @@innodb_buffer_pool_filename;
|
||||
@@innodb_buffer_pool_filename
|
||||
ib_buffer_pool
|
||||
CREATE TABLE t1 ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
opening_line TEXT(500), author VARCHAR(200), title VARCHAR(200), FULLTEXT idx
|
||||
(opening_line)) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
opening_line TEXT(500), author VARCHAR(200), title VARCHAR(200), FULLTEXT idx
|
||||
(opening_line)) ENGINE=InnoDB;
|
||||
select @@innodb_ft_aux_table;
|
||||
@@innodb_ft_aux_table
|
||||
NULL
|
||||
set @blah = 'test/t1';
|
||||
SET GLOBAL innodb_ft_aux_table = @blah;
|
||||
select @@innodb_ft_aux_table;
|
||||
@@innodb_ft_aux_table
|
||||
test/t1
|
||||
set @blah = 'test/t2';
|
||||
SET GLOBAL innodb_ft_aux_table = @blah;
|
||||
SET GLOBAL innodb_ft_aux_table = NULL;
|
||||
select @@innodb_ft_aux_table;
|
||||
@@innodb_ft_aux_table
|
||||
NULL
|
||||
SET GLOBAL innodb_ft_aux_table =default;
|
||||
select @@innodb_ft_aux_table;
|
||||
@@innodb_ft_aux_table
|
||||
NULL
|
||||
drop table t1,t2;
|
70
mysql-test/suite/innodb/t/innodb_sys_var_valgrind.test
Normal file
70
mysql-test/suite/innodb/t/innodb_sys_var_valgrind.test
Normal file
|
@ -0,0 +1,70 @@
|
|||
--source include/have_innodb.inc
|
||||
|
||||
--echo #
|
||||
--echo # Bug #29717909 MEMORY LIFETIME OF VARIABLES BETWEEN CHECK AND UPDATE INCORRECTLY MANAGED
|
||||
--echo #
|
||||
|
||||
#Test innodb_ft_server_stopword_table (global variable)
|
||||
select @@innodb_ft_server_stopword_table;
|
||||
create table user_stopword_1(value varchar(30)) engine = innodb;
|
||||
create table user_stopword_2(value varchar(30)) engine = innodb;
|
||||
|
||||
set @blah = 'test/user_stopword_1';
|
||||
SET GLOBAL innodb_ft_server_stopword_table= @blah;
|
||||
select @@innodb_ft_server_stopword_table;
|
||||
|
||||
set @blah = 'test/user_stopword_2';
|
||||
SET GLOBAL innodb_ft_server_stopword_table= @blah;
|
||||
select @@innodb_ft_server_stopword_table;
|
||||
|
||||
SET GLOBAL innodb_ft_server_stopword_table= NULL;
|
||||
select @@innodb_ft_server_stopword_table;
|
||||
|
||||
SET GLOBAL innodb_ft_server_stopword_table= default;
|
||||
select @@innodb_ft_server_stopword_table;
|
||||
|
||||
drop table user_stopword_1, user_stopword_2;
|
||||
|
||||
#Test innodb_buffer_pool_filename (global variable)
|
||||
|
||||
select @@innodb_buffer_pool_filename;
|
||||
|
||||
set @blah='hello';
|
||||
set global innodb_buffer_pool_filename = @blah;
|
||||
select @@innodb_buffer_pool_filename;
|
||||
|
||||
set global innodb_buffer_pool_filename="bye";
|
||||
select @@innodb_buffer_pool_filename;
|
||||
|
||||
--error ER_WRONG_VALUE_FOR_VAR
|
||||
set global innodb_buffer_pool_filename=NULL;
|
||||
select @@innodb_buffer_pool_filename;
|
||||
|
||||
set global innodb_buffer_pool_filename=default;
|
||||
select @@innodb_buffer_pool_filename;
|
||||
|
||||
#Test innodb_ft_aux_table (global variable)
|
||||
CREATE TABLE t1 ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
opening_line TEXT(500), author VARCHAR(200), title VARCHAR(200), FULLTEXT idx
|
||||
(opening_line)) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE t2 ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
opening_line TEXT(500), author VARCHAR(200), title VARCHAR(200), FULLTEXT idx
|
||||
(opening_line)) ENGINE=InnoDB;
|
||||
|
||||
select @@innodb_ft_aux_table;
|
||||
|
||||
set @blah = 'test/t1';
|
||||
SET GLOBAL innodb_ft_aux_table = @blah;
|
||||
select @@innodb_ft_aux_table;
|
||||
|
||||
set @blah = 'test/t2';
|
||||
SET GLOBAL innodb_ft_aux_table = @blah;
|
||||
|
||||
SET GLOBAL innodb_ft_aux_table = NULL;
|
||||
select @@innodb_ft_aux_table;
|
||||
|
||||
SET GLOBAL innodb_ft_aux_table =default;
|
||||
select @@innodb_ft_aux_table;
|
||||
|
||||
drop table t1,t2;
|
744
mysql-test/suite/innodb_fts/r/stopword.result
Normal file
744
mysql-test/suite/innodb_fts/r/stopword.result
Normal file
|
@ -0,0 +1,744 @@
|
|||
call mtr.add_suppression("\\[ERROR\\] InnoDB: user stopword table not_defined does not exist.");
|
||||
call mtr.add_suppression("\\[ERROR\\] InnoDB: user stopword table test/user_stopword_session does not exist.");
|
||||
select * from information_schema.innodb_ft_default_stopword;
|
||||
value
|
||||
a
|
||||
about
|
||||
an
|
||||
are
|
||||
as
|
||||
at
|
||||
be
|
||||
by
|
||||
com
|
||||
de
|
||||
en
|
||||
for
|
||||
from
|
||||
how
|
||||
i
|
||||
in
|
||||
is
|
||||
it
|
||||
la
|
||||
of
|
||||
on
|
||||
or
|
||||
that
|
||||
the
|
||||
this
|
||||
to
|
||||
was
|
||||
what
|
||||
when
|
||||
where
|
||||
who
|
||||
will
|
||||
with
|
||||
und
|
||||
the
|
||||
www
|
||||
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
|
||||
('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 ...');
|
||||
SELECT * FROM articles WHERE MATCH (title,body)
|
||||
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
||||
id title body
|
||||
SET @innodb_ft_server_stopword_table_orig=@@innodb_ft_server_stopword_table;
|
||||
SET @innodb_ft_enable_stopword_orig=@@innodb_ft_enable_stopword;
|
||||
SET @innodb_ft_user_stopword_table_orig=@@innodb_ft_user_stopword_table;
|
||||
set global innodb_ft_server_stopword_table = "not_defined";
|
||||
ERROR 42000: Variable 'innodb_ft_server_stopword_table' can't be set to the value of 'not_defined'
|
||||
set global innodb_ft_server_stopword_table = NULL;
|
||||
create table user_stopword(value varchar(30)) engine = innodb;
|
||||
set global innodb_ft_server_stopword_table = "test/user_stopword";
|
||||
drop index title on articles;
|
||||
create fulltext index idx on articles(title, body);
|
||||
SELECT * FROM articles WHERE MATCH (title,body)
|
||||
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
||||
id title body
|
||||
5 MySQL vs. YourSQL In the following database comparison ...
|
||||
CREATE TABLE articles_2 (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
INSERT INTO articles_2 (title, body)
|
||||
VALUES ('test for stopwords','this is it...');
|
||||
SELECT * FROM articles_2 WHERE MATCH (title,body)
|
||||
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
||||
id title body
|
||||
1 test for stopwords this is it...
|
||||
insert into user_stopword values("this");
|
||||
CREATE TABLE articles_3 (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
INSERT INTO articles_3 (title, body)
|
||||
VALUES ('test for stopwords','this is it...');
|
||||
SELECT * FROM articles_3 WHERE MATCH (title,body)
|
||||
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
||||
id title body
|
||||
create table user_stopword_session(value varchar(30)) engine = innodb;
|
||||
insert into user_stopword_session values("session");
|
||||
set session innodb_ft_user_stopword_table="test/user_stopword_session";
|
||||
CREATE TABLE articles_4 (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
INSERT INTO articles_4 (title, body)
|
||||
VALUES ('test for session stopwords','this should also be excluded...');
|
||||
SELECT * FROM articles_4 WHERE MATCH (title,body)
|
||||
AGAINST ('session' IN NATURAL LANGUAGE MODE);
|
||||
id title body
|
||||
SELECT * FROM articles_4 WHERE MATCH (title,body)
|
||||
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
||||
id title body
|
||||
1 test for session stopwords this should also be excluded...
|
||||
connect con1,localhost,root,,;
|
||||
CREATE TABLE articles_5 (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
INSERT INTO articles_5 (title, body)
|
||||
VALUES ('test for session stopwords','this should also be excluded...');
|
||||
SELECT * FROM articles_5 WHERE MATCH (title,body)
|
||||
AGAINST ('session' IN NATURAL LANGUAGE MODE);
|
||||
id title body
|
||||
1 test for session stopwords this should also be excluded...
|
||||
connection default;
|
||||
drop table articles;
|
||||
drop table articles_2;
|
||||
drop table articles_3;
|
||||
drop table articles_4;
|
||||
drop table articles_5;
|
||||
drop table user_stopword;
|
||||
drop table user_stopword_session;
|
||||
SET GLOBAL innodb_ft_enable_stopword=@innodb_ft_enable_stopword_orig;
|
||||
SET GLOBAL innodb_ft_server_stopword_table=default;
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT `idx` (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
SHOW CREATE TABLE articles;
|
||||
Table Create Table
|
||||
articles CREATE TABLE `articles` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(200) DEFAULT NULL,
|
||||
`body` text DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
FULLTEXT KEY `idx` (`title`,`body`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
INSERT INTO articles (title,body) VALUES
|
||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||
('when To Use MySQL Well','After that you went through a ...'),
|
||||
('where will Optimizing MySQL','In what 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 ...');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
||||
id title body
|
||||
INSERT INTO articles(title,body) values ('the record will' , 'not index the , will words');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
||||
id title body
|
||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
||||
WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
||||
WHERE id = 7;
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
id title body
|
||||
DELETE FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE id = 7;
|
||||
id title body
|
||||
7 update the record to see will is indexed or not
|
||||
DELETE FROM articles WHERE id = 7;
|
||||
SET global innodb_ft_server_stopword_table = NULL;
|
||||
SET SESSION innodb_ft_enable_stopword = 0;
|
||||
select @@innodb_ft_enable_stopword;
|
||||
@@innodb_ft_enable_stopword
|
||||
0
|
||||
SET global innodb_ft_user_stopword_table = NULL;
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
||||
id title body
|
||||
INSERT INTO articles(title,body) values ('the record will' , 'not index the , will words');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
||||
id title body
|
||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
||||
WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
||||
WHERE id = 8;
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
id title body
|
||||
SELECT * FROM articles WHERE id = 8;
|
||||
id title body
|
||||
8 update the record to see will is indexed or not
|
||||
DELETE FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE id = 8;
|
||||
id title body
|
||||
8 update the record to see will is indexed or not
|
||||
DELETE FROM articles WHERE id = 8;
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
SHOW CREATE TABLE articles;
|
||||
Table Create Table
|
||||
articles CREATE TABLE `articles` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(200) DEFAULT NULL,
|
||||
`body` text DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
ANALYZE TABLE articles;
|
||||
Table Op Msg_type Msg_text
|
||||
test.articles analyze status OK
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
||||
id title body
|
||||
2 when To Use MySQL Well After that you went through a ...
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
1 MySQL from Tutorial DBMS stands for DataBase ...
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
2 when To Use MySQL Well After that you went through a ...
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||
5 MySQL vs. YourSQL In the following database comparison ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
||||
id title body
|
||||
2 when To Use MySQL Well After that you went through a ...
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
||||
id title body
|
||||
1 MySQL from Tutorial DBMS stands for DataBase ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
INSERT INTO articles(title,body) values ('the record will' , 'not index the , will words');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
9 the record will not index the , will words
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
||||
id title body
|
||||
9 the record will not index the , will words
|
||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
||||
WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
SELECT COUNT(*),max(id) FROM articles;
|
||||
COUNT(*) max(id)
|
||||
7 9
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
9 update the record to see will is indexed or not
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
9 update the record to see will is indexed or not
|
||||
DELETE FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE id = 9;
|
||||
id title body
|
||||
DROP TABLE articles;
|
||||
SET SESSION innodb_ft_enable_stopword=@innodb_ft_enable_stopword_orig;
|
||||
SET GLOBAL innodb_ft_server_stopword_table=@innodb_ft_server_stopword_table_orig;
|
||||
SET GLOBAL innodb_ft_user_stopword_table=@innodb_ft_user_stopword_table_orig;
|
||||
SET SESSION innodb_ft_user_stopword_table=default;
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT `idx` (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
INSERT INTO articles (title,body) VALUES
|
||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||
('when To Use MySQL Well','After that you went through a ...'),
|
||||
('where will Optimizing MySQL','In what 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 ...');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
id title body
|
||||
create table user_stopword(value varchar(30)) engine = innodb;
|
||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
||||
create table server_stopword(value varchar(30)) engine = innodb;
|
||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
||||
insert into user_stopword values("this"),("will"),("the");
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
id title body
|
||||
insert into server_stopword values("what"),("where");
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
DELETE FROM user_stopword;
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
insert into user_stopword values("this"),("will"),("the");
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
SET SESSION innodb_ft_enable_stopword = 0;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SET SESSION innodb_ft_enable_stopword = 1;
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
id title body
|
||||
SET SESSION innodb_ft_enable_stopword = 1;
|
||||
SET SESSION innodb_ft_user_stopword_table = default;
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
DROP TABLE articles,user_stopword,server_stopword;
|
||||
SET innodb_ft_enable_stopword=@innodb_ft_enable_stopword_orig;
|
||||
SET GLOBAL innodb_ft_server_stopword_table=default;
|
||||
SET SESSION innodb_ft_user_stopword_table=default;
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT `idx` (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
SHOW CREATE TABLE articles;
|
||||
Table Create Table
|
||||
articles CREATE TABLE `articles` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(200) DEFAULT NULL,
|
||||
`body` text DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
FULLTEXT KEY `idx` (`title`,`body`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
INSERT INTO articles (title,body) VALUES
|
||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||
('when To Use MySQL Well','After that you went through a ...'),
|
||||
('where will Optimizing MySQL','In what 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 ...');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
id title body
|
||||
create table user_stopword(value varchar(30)) engine = innodb;
|
||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
||||
insert into user_stopword values("mysqld"),("DBMS");
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+DBMS +mysql" IN BOOLEAN MODE);
|
||||
id title body
|
||||
1 MySQL from Tutorial DBMS stands for DataBase ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysqld');
|
||||
id title body
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+DBMS +mysql" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysqld');
|
||||
id title body
|
||||
set session innodb_ft_user_stopword_table = default;
|
||||
create table server_stopword(value varchar(30)) engine = innodb;
|
||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
||||
insert into server_stopword values("root"),("properly");
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+root +mysql" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('properly');
|
||||
id title body
|
||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+root +mysql" IN BOOLEAN MODE);
|
||||
id title body
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('properly');
|
||||
id title body
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
||||
DELETE FROM user_stopword;
|
||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
||||
DELETE FROM server_stopword;
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+root +mysql" IN BOOLEAN MODE);
|
||||
id title body
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('properly');
|
||||
id title body
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+DBMS +mysql" IN BOOLEAN MODE);
|
||||
id title body
|
||||
1 MySQL from Tutorial DBMS stands for DataBase ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysqld');
|
||||
id title body
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||
DROP TABLE articles,user_stopword,server_stopword;
|
||||
SET SESSION innodb_ft_enable_stopword=@innodb_ft_enable_stopword_orig;
|
||||
SET GLOBAL innodb_ft_server_stopword_table=default;
|
||||
SET SESSION innodb_ft_user_stopword_table=default;
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT `idx` (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
SHOW CREATE TABLE articles;
|
||||
Table Create Table
|
||||
articles CREATE TABLE `articles` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(200) DEFAULT NULL,
|
||||
`body` text DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
FULLTEXT KEY `idx` (`title`,`body`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
INSERT INTO articles (title,body) VALUES
|
||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||
('when To Use MySQL Well','After that you went through a ...'),
|
||||
('where will Optimizing MySQL','In what 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 SESSION innodb_ft_enable_stopword = 0;
|
||||
select @@innodb_ft_enable_stopword;
|
||||
@@innodb_ft_enable_stopword
|
||||
0
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
"In connection 1"
|
||||
connection con1;
|
||||
select @@innodb_ft_enable_stopword;
|
||||
@@innodb_ft_enable_stopword
|
||||
1
|
||||
ANALYZE TABLE articles;
|
||||
Table Op Msg_type Msg_text
|
||||
test.articles analyze status OK
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
||||
id title body
|
||||
2 when To Use MySQL Well After that you went through a ...
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
1 MySQL from Tutorial DBMS stands for DataBase ...
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
2 when To Use MySQL Well After that you went through a ...
|
||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||
5 MySQL vs. YourSQL In the following database comparison ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
||||
id title body
|
||||
2 when To Use MySQL Well After that you went through a ...
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
||||
id title body
|
||||
1 MySQL from Tutorial DBMS stands for DataBase ...
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SET SESSION innodb_ft_enable_stopword = 1;
|
||||
select @@innodb_ft_enable_stopword;
|
||||
@@innodb_ft_enable_stopword
|
||||
1
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
||||
id title body
|
||||
"In connection default"
|
||||
connection default;
|
||||
select @@innodb_ft_enable_stopword;
|
||||
@@innodb_ft_enable_stopword
|
||||
0
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
||||
id title body
|
||||
INSERT INTO articles(title,body) values ('the record will' , 'not index the , will words');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
||||
id title body
|
||||
SET SESSION innodb_ft_enable_stopword = 1;
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
||||
id title body
|
||||
"In connection 1"
|
||||
connection con1;
|
||||
SET SESSION innodb_ft_enable_stopword = 1;
|
||||
create table user_stopword(value varchar(30)) engine = innodb;
|
||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
||||
insert into user_stopword values("this"),("will"),("the");
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
id title body
|
||||
"In connection default"
|
||||
connection default;
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
id title body
|
||||
select @@innodb_ft_user_stopword_table;
|
||||
@@innodb_ft_user_stopword_table
|
||||
NULL
|
||||
create table user_stopword_1(value varchar(30)) engine = innodb;
|
||||
set session innodb_ft_user_stopword_table = "test/user_stopword_1";
|
||||
insert into user_stopword_1 values("when");
|
||||
SET SESSION innodb_ft_enable_stopword = 1;
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+when" IN BOOLEAN MODE);
|
||||
id title body
|
||||
2 when To Use MySQL Well After that you went through a ...
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('when');
|
||||
id title body
|
||||
2 when To Use MySQL Well After that you went through a ...
|
||||
6 MySQL Security When configured properly, MySQL ...
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+when" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('when');
|
||||
id title body
|
||||
"In connection 1"
|
||||
connection con1;
|
||||
SET SESSION innodb_ft_enable_stopword = 1;
|
||||
SET SESSION innodb_ft_user_stopword_table=default;
|
||||
select @@innodb_ft_user_stopword_table;
|
||||
@@innodb_ft_user_stopword_table
|
||||
NULL
|
||||
select @@innodb_ft_server_stopword_table;
|
||||
@@innodb_ft_server_stopword_table
|
||||
NULL
|
||||
create table server_stopword(value varchar(30)) engine = innodb;
|
||||
SET GLOBAL innodb_ft_server_stopword_table = "test/server_stopword";
|
||||
select @@innodb_ft_server_stopword_table;
|
||||
@@innodb_ft_server_stopword_table
|
||||
test/server_stopword
|
||||
insert into server_stopword values("when"),("the");
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+when" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('the');
|
||||
id title body
|
||||
disconnect con1;
|
||||
"In connection default"
|
||||
connection default;
|
||||
SET SESSION innodb_ft_enable_stopword = 1;
|
||||
SET SESSION innodb_ft_user_stopword_table=default;
|
||||
select @@innodb_ft_server_stopword_table;
|
||||
@@innodb_ft_server_stopword_table
|
||||
test/server_stopword
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+will +where" IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('where');
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
insert into server_stopword values("where"),("will");
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+will +where" IN BOOLEAN MODE);
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('where');
|
||||
id title body
|
||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+when" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('the');
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+will +where" IN BOOLEAN MODE);
|
||||
id title body
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('where');
|
||||
id title body
|
||||
DROP TABLE articles,user_stopword,user_stopword_1,server_stopword;
|
||||
SET GLOBAL innodb_ft_user_stopword_table=@innodb_ft_user_stopword_table_orig;
|
||||
SET GLOBAL innodb_ft_server_stopword_table=@innodb_ft_server_stopword_table_orig;
|
1
mysql-test/suite/innodb_fts/t/stopword.opt
Normal file
1
mysql-test/suite/innodb_fts/t/stopword.opt
Normal file
|
@ -0,0 +1 @@
|
|||
--innodb-ft-default-stopword
|
657
mysql-test/suite/innodb_fts/t/stopword.test
Normal file
657
mysql-test/suite/innodb_fts/t/stopword.test
Normal file
|
@ -0,0 +1,657 @@
|
|||
# This is the basic function tests for innodb FTS
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
call mtr.add_suppression("\\[ERROR\\] InnoDB: user stopword table not_defined does not exist.");
|
||||
call mtr.add_suppression("\\[ERROR\\] InnoDB: user stopword table test/user_stopword_session does not exist.");
|
||||
|
||||
select * from information_schema.innodb_ft_default_stopword;
|
||||
|
||||
# Create FTS table
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
# Insert six rows
|
||||
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 ...');
|
||||
|
||||
# "the" is in the default stopword, it would not be selected
|
||||
SELECT * FROM articles WHERE MATCH (title,body)
|
||||
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
||||
|
||||
SET @innodb_ft_server_stopword_table_orig=@@innodb_ft_server_stopword_table;
|
||||
SET @innodb_ft_enable_stopword_orig=@@innodb_ft_enable_stopword;
|
||||
SET @innodb_ft_user_stopword_table_orig=@@innodb_ft_user_stopword_table;
|
||||
|
||||
# Provide user defined stopword table, if not (correctly) defined,
|
||||
# it will be rejected
|
||||
--error ER_WRONG_VALUE_FOR_VAR
|
||||
set global innodb_ft_server_stopword_table = "not_defined";
|
||||
set global innodb_ft_server_stopword_table = NULL;
|
||||
|
||||
# Define a correct formated user stopword table
|
||||
create table user_stopword(value varchar(30)) engine = innodb;
|
||||
|
||||
# The set operation should be successful
|
||||
set global innodb_ft_server_stopword_table = "test/user_stopword";
|
||||
|
||||
drop index title on articles;
|
||||
|
||||
create fulltext index idx on articles(title, body);
|
||||
|
||||
# Now we should be able to find "the"
|
||||
SELECT * FROM articles WHERE MATCH (title,body)
|
||||
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
||||
|
||||
# Nothing inserted into the default stopword, so essentially
|
||||
# nothing get screened. The new stopword could only be
|
||||
# effective for table created thereafter
|
||||
CREATE TABLE articles_2 (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO articles_2 (title, body)
|
||||
VALUES ('test for stopwords','this is it...');
|
||||
|
||||
# Now we can find record with "this"
|
||||
SELECT * FROM articles_2 WHERE MATCH (title,body)
|
||||
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
||||
|
||||
# Ok, let's instantiate some value into user supplied stop word
|
||||
# table
|
||||
insert into user_stopword values("this");
|
||||
|
||||
# Ok, let's repeat with the new table again.
|
||||
CREATE TABLE articles_3 (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO articles_3 (title, body)
|
||||
VALUES ('test for stopwords','this is it...');
|
||||
|
||||
# Now we should NOT find record with "this"
|
||||
SELECT * FROM articles_3 WHERE MATCH (title,body)
|
||||
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
||||
|
||||
# Test session level stopword control "innodb_user_stopword_table"
|
||||
create table user_stopword_session(value varchar(30)) engine = innodb;
|
||||
|
||||
insert into user_stopword_session values("session");
|
||||
|
||||
set session innodb_ft_user_stopword_table="test/user_stopword_session";
|
||||
|
||||
CREATE TABLE articles_4 (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO articles_4 (title, body)
|
||||
VALUES ('test for session stopwords','this should also be excluded...');
|
||||
|
||||
# "session" is excluded
|
||||
SELECT * FROM articles_4 WHERE MATCH (title,body)
|
||||
AGAINST ('session' IN NATURAL LANGUAGE MODE);
|
||||
|
||||
# But we can find record with "this"
|
||||
SELECT * FROM articles_4 WHERE MATCH (title,body)
|
||||
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
||||
|
||||
--connect (con1,localhost,root,,)
|
||||
CREATE TABLE articles_5 (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO articles_5 (title, body)
|
||||
VALUES ('test for session stopwords','this should also be excluded...');
|
||||
|
||||
# "session" should be found since the stopword table is session specific
|
||||
SELECT * FROM articles_5 WHERE MATCH (title,body)
|
||||
AGAINST ('session' IN NATURAL LANGUAGE MODE);
|
||||
|
||||
--connection default
|
||||
drop table articles;
|
||||
drop table articles_2;
|
||||
drop table articles_3;
|
||||
drop table articles_4;
|
||||
drop table articles_5;
|
||||
drop table user_stopword;
|
||||
drop table user_stopword_session;
|
||||
|
||||
SET GLOBAL innodb_ft_enable_stopword=@innodb_ft_enable_stopword_orig;
|
||||
SET GLOBAL innodb_ft_server_stopword_table=default;
|
||||
|
||||
#---------------------------------------------------------------------------------------
|
||||
# Behavior :
|
||||
# The stopword is loaded into memory at
|
||||
# 1) create fulltext index time,
|
||||
# 2) boot server,
|
||||
# 3) first time FTs is used
|
||||
# So if you already created a FTS index, and then turn off stopword
|
||||
# or change stopword table content it won't affect the FTS
|
||||
# that already created since the stopword list are already loaded.
|
||||
# It will only affect the new FTS index created after you changed
|
||||
# the settings.
|
||||
|
||||
# Create FTS table
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT `idx` (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
SHOW CREATE TABLE articles;
|
||||
|
||||
# Insert six rows
|
||||
INSERT INTO articles (title,body) VALUES
|
||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||
('when To Use MySQL Well','After that you went through a ...'),
|
||||
('where will Optimizing MySQL','In what 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 ...');
|
||||
|
||||
# Case : server_stopword=default
|
||||
# Try to Search default stopword from innodb, "where", "will", "what"
|
||||
# and "when" are all stopwords
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
||||
# boolean No result expected
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
||||
# no result expected
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
||||
# no result expected
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
||||
|
||||
INSERT INTO articles(title,body) values ('the record will' , 'not index the , will words');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
||||
# Not going to update as where condition can not find record
|
||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
||||
WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
# Update the record
|
||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
||||
WHERE id = 7;
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
# Delete will not work as where condition do not return
|
||||
DELETE FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE id = 7;
|
||||
DELETE FROM articles WHERE id = 7;
|
||||
|
||||
|
||||
|
||||
# Case : Turn OFF stopword list variable and search stopword on OLD index.
|
||||
# disable stopword list
|
||||
SET global innodb_ft_server_stopword_table = NULL;
|
||||
SET SESSION innodb_ft_enable_stopword = 0;
|
||||
select @@innodb_ft_enable_stopword;
|
||||
SET global innodb_ft_user_stopword_table = NULL;
|
||||
|
||||
# search default stopword with innodb_ft_enable_stopword is OFF.
|
||||
# No records expected even though we turned OFF stopwod filtering
|
||||
# (refer Behavior (at the top of the test) for explanation )
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
||||
|
||||
INSERT INTO articles(title,body) values ('the record will' , 'not index the , will words');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
||||
# Not going to update as where condition can not find record
|
||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
||||
WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
# Update the record
|
||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
||||
WHERE id = 8;
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
SELECT * FROM articles WHERE id = 8;
|
||||
# Delete will not work as where condition do not return
|
||||
DELETE FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE id = 8;
|
||||
DELETE FROM articles WHERE id = 8;
|
||||
|
||||
# Case : Turn OFF stopword list variable and search stopword on NEW index.
|
||||
# Drop index
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
SHOW CREATE TABLE articles;
|
||||
|
||||
# Create the FTS index Using Alter Table.
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
|
||||
ANALYZE TABLE articles;
|
||||
|
||||
# search default stopword with innodb_ft_enable_stopword is OFF.
|
||||
# All records expected as stopwod filtering is OFF and we created
|
||||
# new FTS index.
|
||||
# (refer Behavior (at the top of the test) for explanation )
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
||||
|
||||
INSERT INTO articles(title,body) values ('the record will' , 'not index the , will words');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
||||
# Update will succeed.
|
||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
||||
WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
|
||||
SELECT COUNT(*),max(id) FROM articles;
|
||||
# Update the record - uncommet on fix
|
||||
#UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
||||
#WHERE id = 9;
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
# Delete will succeed.
|
||||
DELETE FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE id = 9;
|
||||
|
||||
|
||||
DROP TABLE articles;
|
||||
|
||||
SET SESSION innodb_ft_enable_stopword=@innodb_ft_enable_stopword_orig;
|
||||
SET GLOBAL innodb_ft_server_stopword_table=@innodb_ft_server_stopword_table_orig;
|
||||
SET GLOBAL innodb_ft_user_stopword_table=@innodb_ft_user_stopword_table_orig;
|
||||
SET SESSION innodb_ft_user_stopword_table=default;
|
||||
|
||||
# Create FTS table
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT `idx` (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
# Insert six rows
|
||||
INSERT INTO articles (title,body) VALUES
|
||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||
('when To Use MySQL Well','After that you went through a ...'),
|
||||
('where will Optimizing MySQL','In what 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 ...');
|
||||
|
||||
# No records expeced for select
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
# Define a correct formated user stopword table
|
||||
create table user_stopword(value varchar(30)) engine = innodb;
|
||||
# The set operation should be successful
|
||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
||||
# Define a correct formated server stopword table
|
||||
create table server_stopword(value varchar(30)) engine = innodb;
|
||||
# The set operation should be successful
|
||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
||||
# Add values into user supplied stop word table
|
||||
insert into user_stopword values("this"),("will"),("the");
|
||||
|
||||
# Drop existing index and create the FTS index Using Alter Table.
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
|
||||
# Add values into server supplied stop word table
|
||||
insert into server_stopword values("what"),("where");
|
||||
# Follwoing should return result as server stopword list was empty at create index time
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
|
||||
# Delete stopword from user list
|
||||
DELETE FROM user_stopword;
|
||||
# Drop existing index and create the FTS index Using Alter Table.
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
# Follwoing should return result even though to server stopword list
|
||||
# conatin these words. Session level stopword list takes priority
|
||||
# Here user_stopword is set using innodb_ft_user_stopword_table
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
|
||||
# Follwoing should return result as user stopword list was empty at create index time
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
|
||||
# Add values into user supplied stop word table
|
||||
insert into user_stopword values("this"),("will"),("the");
|
||||
|
||||
# Drop existing index and create the FTS index Using Alter Table.
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
SET SESSION innodb_ft_enable_stopword = 0;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
|
||||
# Session level stopword list takes priority
|
||||
SET SESSION innodb_ft_enable_stopword = 1;
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
|
||||
# Make user stopword list deafult so as to server stopword list takes priority
|
||||
SET SESSION innodb_ft_enable_stopword = 1;
|
||||
SET SESSION innodb_ft_user_stopword_table = default;
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
|
||||
|
||||
DROP TABLE articles,user_stopword,server_stopword;
|
||||
|
||||
# Restore Defaults
|
||||
SET innodb_ft_enable_stopword=@innodb_ft_enable_stopword_orig;
|
||||
SET GLOBAL innodb_ft_server_stopword_table=default;
|
||||
SET SESSION innodb_ft_user_stopword_table=default;
|
||||
|
||||
#---------------------------------------------------------------------------------------
|
||||
# Create FTS table
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT `idx` (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
SHOW CREATE TABLE articles;
|
||||
|
||||
# Insert six rows
|
||||
INSERT INTO articles (title,body) VALUES
|
||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||
('when To Use MySQL Well','After that you went through a ...'),
|
||||
('where will Optimizing MySQL','In what 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 ...');
|
||||
|
||||
# No records expeced for select
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
# Define a correct formated user stopword table
|
||||
create table user_stopword(value varchar(30)) engine = innodb;
|
||||
# The set operation should be successful
|
||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
||||
insert into user_stopword values("mysqld"),("DBMS");
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+DBMS +mysql" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysqld');
|
||||
|
||||
|
||||
# Drop existing index and create the FTS index Using Alter Table.
|
||||
# user stopword list will take effect.
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+DBMS +mysql" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysqld');
|
||||
|
||||
# set user stopword list empty
|
||||
set session innodb_ft_user_stopword_table = default;
|
||||
# Define a correct formated user stopword table
|
||||
create table server_stopword(value varchar(30)) engine = innodb;
|
||||
# The set operation should be successful
|
||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
||||
insert into server_stopword values("root"),("properly");
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+root +mysql" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('properly');
|
||||
|
||||
|
||||
# set user stopword list empty
|
||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
||||
# The set operation should be successful
|
||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
||||
# user stopword list take effect as its session level
|
||||
# Result expected for select
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+root +mysql" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('properly');
|
||||
|
||||
# set user stopword list
|
||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
||||
DELETE FROM user_stopword;
|
||||
# The set operation should be successful
|
||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
||||
DELETE FROM server_stopword;
|
||||
# user stopword list take affect as its session level
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+root +mysql" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('properly');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+DBMS +mysql" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysqld');
|
||||
|
||||
DROP TABLE articles,user_stopword,server_stopword;
|
||||
|
||||
# Restore Values
|
||||
SET SESSION innodb_ft_enable_stopword=@innodb_ft_enable_stopword_orig;
|
||||
SET GLOBAL innodb_ft_server_stopword_table=default;
|
||||
SET SESSION innodb_ft_user_stopword_table=default;
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# FTS stopword list test - check varaibles across sessions
|
||||
|
||||
# Create FTS table
|
||||
CREATE TABLE articles (
|
||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
body TEXT,
|
||||
FULLTEXT `idx` (title,body)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
SHOW CREATE TABLE articles;
|
||||
|
||||
# Insert six rows
|
||||
INSERT INTO articles (title,body) VALUES
|
||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||
('when To Use MySQL Well','After that you went through a ...'),
|
||||
('where will Optimizing MySQL','In what 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 ...');
|
||||
|
||||
# session varaible innodb_ft_enable_stopword=0 will take effect for new FTS index
|
||||
SET SESSION innodb_ft_enable_stopword = 0;
|
||||
select @@innodb_ft_enable_stopword;
|
||||
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
|
||||
|
||||
--echo "In connection 1"
|
||||
--connection con1
|
||||
select @@innodb_ft_enable_stopword;
|
||||
|
||||
ANALYZE TABLE articles;
|
||||
|
||||
# result expected as index created before setting innodb_ft_enable_stopword varaible off
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
||||
|
||||
SET SESSION innodb_ft_enable_stopword = 1;
|
||||
select @@innodb_ft_enable_stopword;
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
# no result expected turned innodb_ft_enable_stopword is ON
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
||||
|
||||
|
||||
--echo "In connection default"
|
||||
--connection default
|
||||
select @@innodb_ft_enable_stopword;
|
||||
# no result expected as word not indexed from connection 1
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
||||
|
||||
INSERT INTO articles(title,body) values ('the record will' , 'not index the , will words');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
||||
|
||||
SET SESSION innodb_ft_enable_stopword = 1;
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
||||
|
||||
|
||||
--echo "In connection 1"
|
||||
--connection con1
|
||||
SET SESSION innodb_ft_enable_stopword = 1;
|
||||
# Define a correct formated user stopword table
|
||||
create table user_stopword(value varchar(30)) engine = innodb;
|
||||
# The set operation should be successful
|
||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
||||
# Add values into user supplied stop word table
|
||||
insert into user_stopword values("this"),("will"),("the");
|
||||
# Drop existing index and create the FTS index Using Alter Table.
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
# no result expected as innodb_ft_user_stopword_table filter it
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
|
||||
|
||||
--echo "In connection default"
|
||||
--connection default
|
||||
# no result expected as innodb_ft_user_stopword_table filter it from connection1
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||
select @@innodb_ft_user_stopword_table;
|
||||
# Define a correct formated user stopword table
|
||||
create table user_stopword_1(value varchar(30)) engine = innodb;
|
||||
# The set operation should be successful
|
||||
set session innodb_ft_user_stopword_table = "test/user_stopword_1";
|
||||
insert into user_stopword_1 values("when");
|
||||
SET SESSION innodb_ft_enable_stopword = 1;
|
||||
# result expected
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+when" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('when');
|
||||
# Drop existing index and create the FTS index Using Alter Table.
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
# no result expected
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+when" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('when');
|
||||
|
||||
--echo "In connection 1"
|
||||
--connection con1
|
||||
SET SESSION innodb_ft_enable_stopword = 1;
|
||||
SET SESSION innodb_ft_user_stopword_table=default;
|
||||
select @@innodb_ft_user_stopword_table;
|
||||
select @@innodb_ft_server_stopword_table;
|
||||
# Define a correct formated server stopword table
|
||||
create table server_stopword(value varchar(30)) engine = innodb;
|
||||
# The set operation should be successful
|
||||
SET GLOBAL innodb_ft_server_stopword_table = "test/server_stopword";
|
||||
select @@innodb_ft_server_stopword_table;
|
||||
insert into server_stopword values("when"),("the");
|
||||
# Drop existing index and create the FTS index Using Alter Table.
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
# no result expected
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+when" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('the');
|
||||
|
||||
disconnect con1;
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--echo "In connection default"
|
||||
--connection default
|
||||
SET SESSION innodb_ft_enable_stopword = 1;
|
||||
SET SESSION innodb_ft_user_stopword_table=default;
|
||||
select @@innodb_ft_server_stopword_table;
|
||||
# result expected
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+will +where" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('where');
|
||||
insert into server_stopword values("where"),("will");
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+will +where" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('where');
|
||||
ALTER TABLE articles DROP INDEX idx;
|
||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||
# no result expected
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+when" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('the');
|
||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+will +where" IN BOOLEAN MODE);
|
||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('where');
|
||||
|
||||
|
||||
DROP TABLE articles,user_stopword,user_stopword_1,server_stopword;
|
||||
|
||||
# Restore Values
|
||||
SET GLOBAL innodb_ft_user_stopword_table=@innodb_ft_user_stopword_table_orig;
|
||||
SET GLOBAL innodb_ft_server_stopword_table=@innodb_ft_server_stopword_table_orig;
|
|
@ -1214,8 +1214,8 @@
|
|||
COMMAND_LINE_ARGUMENT OPTIONAL
|
||||
VARIABLE_NAME INNODB_VERSION
|
||||
SESSION_VALUE NULL
|
||||
-GLOBAL_VALUE 5.6.47
|
||||
+GLOBAL_VALUE 5.6.46-86.2
|
||||
-GLOBAL_VALUE 5.6.48
|
||||
+GLOBAL_VALUE 5.6.47-87.0
|
||||
GLOBAL_VALUE_ORIGIN COMPILE-TIME
|
||||
DEFAULT_VALUE NULL
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
|
@ -684,8 +684,8 @@
|
|||
COMMAND_LINE_ARGUMENT OPTIONAL
|
||||
VARIABLE_NAME INNODB_VERSION
|
||||
SESSION_VALUE NULL
|
||||
-GLOBAL_VALUE 5.6.47
|
||||
+GLOBAL_VALUE 5.6.46-86.2
|
||||
-GLOBAL_VALUE 5.6.48
|
||||
+GLOBAL_VALUE 5.6.47-87.0
|
||||
GLOBAL_VALUE_ORIGIN COMPILE-TIME
|
||||
DEFAULT_VALUE NULL
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 2011, 2017, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2017, 2018, MariaDB Corporation.
|
||||
Copyright (c) 2017, 2020, MariaDB Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
|
@ -25,6 +25,7 @@ Created April 08, 2011 Vasil Dimov
|
|||
*******************************************************/
|
||||
|
||||
#include "my_global.h"
|
||||
#include "mysqld.h"
|
||||
#include "my_sys.h"
|
||||
|
||||
#include "mysql/psi/mysql_stage.h"
|
||||
|
@ -185,7 +186,7 @@ get_buf_dump_dir()
|
|||
|
||||
/* The dump file should be created in the default data directory if
|
||||
innodb_data_home_dir is set as an empty string. */
|
||||
if (strcmp(srv_data_home, "") == 0) {
|
||||
if (!*srv_data_home) {
|
||||
dump_dir = fil_path_to_mysql_datadir;
|
||||
} else {
|
||||
dump_dir = srv_data_home;
|
||||
|
@ -197,16 +198,14 @@ get_buf_dump_dir()
|
|||
/** Generate the path to the buffer pool dump/load file.
|
||||
@param[out] path generated path
|
||||
@param[in] path_size size of 'path', used as in snprintf(3). */
|
||||
static
|
||||
void
|
||||
buf_dump_generate_path(
|
||||
char* path,
|
||||
size_t path_size)
|
||||
static void buf_dump_generate_path(char *path, size_t path_size)
|
||||
{
|
||||
char buf[FN_REFLEN];
|
||||
|
||||
mysql_mutex_lock(&LOCK_global_system_variables);
|
||||
snprintf(buf, sizeof(buf), "%s%c%s", get_buf_dump_dir(),
|
||||
OS_PATH_SEPARATOR, srv_buf_dump_filename);
|
||||
mysql_mutex_unlock(&LOCK_global_system_variables);
|
||||
|
||||
os_file_type_t type;
|
||||
bool exists = false;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2016, 2019, MariaDB Corporation.
|
||||
Copyright (c) 2016, 2020, MariaDB Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
|
@ -444,9 +444,9 @@ fts_read_stopword(
|
|||
|
||||
/******************************************************************//**
|
||||
Load user defined stopword from designated user table
|
||||
@return TRUE if load operation is successful */
|
||||
@return whether the operation is successful */
|
||||
static
|
||||
ibool
|
||||
bool
|
||||
fts_load_user_stopword(
|
||||
/*===================*/
|
||||
fts_t* fts, /*!< in: FTS struct */
|
||||
|
@ -454,27 +454,26 @@ fts_load_user_stopword(
|
|||
name */
|
||||
fts_stopword_t* stopword_info) /*!< in: Stopword info */
|
||||
{
|
||||
pars_info_t* info;
|
||||
que_t* graph;
|
||||
dberr_t error = DB_SUCCESS;
|
||||
ibool ret = TRUE;
|
||||
trx_t* trx;
|
||||
ibool has_lock = fts->dict_locked;
|
||||
|
||||
trx = trx_allocate_for_background();
|
||||
trx->op_info = "Load user stopword table into FTS cache";
|
||||
|
||||
if (!has_lock) {
|
||||
if (!fts->dict_locked) {
|
||||
mutex_enter(&dict_sys->mutex);
|
||||
}
|
||||
|
||||
/* Validate the user table existence and in the right
|
||||
format */
|
||||
/* Validate the user table existence in the right format */
|
||||
bool ret= false;
|
||||
stopword_info->charset = fts_valid_stopword_table(stopword_table_name);
|
||||
if (!stopword_info->charset) {
|
||||
ret = FALSE;
|
||||
goto cleanup;
|
||||
} else if (!stopword_info->cached_stopword) {
|
||||
cleanup:
|
||||
if (!fts->dict_locked) {
|
||||
mutex_exit(&dict_sys->mutex);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
trx_t* trx = trx_allocate_for_background();
|
||||
trx->op_info = "Load user stopword table into FTS cache";
|
||||
|
||||
if (!stopword_info->cached_stopword) {
|
||||
/* Create the stopword RB tree with the stopword column
|
||||
charset. All comparison will use this charset */
|
||||
stopword_info->cached_stopword = rbt_create_arg_cmp(
|
||||
|
@ -483,14 +482,14 @@ fts_load_user_stopword(
|
|||
|
||||
}
|
||||
|
||||
info = pars_info_create();
|
||||
pars_info_t* info = pars_info_create();
|
||||
|
||||
pars_info_bind_id(info, TRUE, "table_stopword", stopword_table_name);
|
||||
|
||||
pars_info_bind_function(info, "my_func", fts_read_stopword,
|
||||
stopword_info);
|
||||
|
||||
graph = fts_parse_sql_no_dict_lock(
|
||||
que_t* graph = fts_parse_sql_no_dict_lock(
|
||||
NULL,
|
||||
info,
|
||||
"DECLARE FUNCTION my_func;\n"
|
||||
|
@ -509,14 +508,13 @@ fts_load_user_stopword(
|
|||
"CLOSE c;");
|
||||
|
||||
for (;;) {
|
||||
error = fts_eval_sql(trx, graph);
|
||||
dberr_t error = fts_eval_sql(trx, graph);
|
||||
|
||||
if (error == DB_SUCCESS) {
|
||||
fts_sql_commit(trx);
|
||||
stopword_info->status = STOPWORD_USER_TABLE;
|
||||
break;
|
||||
} else {
|
||||
|
||||
fts_sql_rollback(trx);
|
||||
|
||||
if (error == DB_LOCK_WAIT_TIMEOUT) {
|
||||
|
@ -535,14 +533,9 @@ fts_load_user_stopword(
|
|||
}
|
||||
|
||||
que_graph_free(graph);
|
||||
|
||||
cleanup:
|
||||
if (!has_lock) {
|
||||
mutex_exit(&dict_sys->mutex);
|
||||
}
|
||||
|
||||
trx_free_for_background(trx);
|
||||
return(ret);
|
||||
ret = true;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/******************************************************************//**
|
||||
|
@ -3412,7 +3405,7 @@ fts_add_doc_from_tuple(
|
|||
if (table->fts->cache->stopword_info.status
|
||||
& STOPWORD_NOT_INIT) {
|
||||
fts_load_stopword(table, NULL, NULL,
|
||||
NULL, TRUE, TRUE);
|
||||
true, true);
|
||||
}
|
||||
|
||||
fts_cache_add_doc(
|
||||
|
@ -3576,8 +3569,8 @@ fts_add_doc_by_id(
|
|||
|
||||
if (table->fts->cache->stopword_info.status
|
||||
& STOPWORD_NOT_INIT) {
|
||||
fts_load_stopword(table, NULL, NULL,
|
||||
NULL, TRUE, TRUE);
|
||||
fts_load_stopword(table, NULL,
|
||||
NULL, true, true);
|
||||
}
|
||||
|
||||
fts_cache_add_doc(
|
||||
|
@ -7168,20 +7161,18 @@ This function loads the stopword into the FTS cache. It also
|
|||
records/fetches stopword configuration to/from FTS configure
|
||||
table, depending on whether we are creating or reloading the
|
||||
FTS.
|
||||
@return TRUE if load operation is successful */
|
||||
ibool
|
||||
@return true if load operation is successful */
|
||||
bool
|
||||
fts_load_stopword(
|
||||
/*==============*/
|
||||
const dict_table_t*
|
||||
table, /*!< in: Table with FTS */
|
||||
trx_t* trx, /*!< in: Transactions */
|
||||
const char* global_stopword_table, /*!< in: Global stopword table
|
||||
name */
|
||||
const char* session_stopword_table, /*!< in: Session stopword table
|
||||
name */
|
||||
ibool stopword_is_on, /*!< in: Whether stopword
|
||||
bool stopword_is_on, /*!< in: Whether stopword
|
||||
option is turned on/off */
|
||||
ibool reload) /*!< in: Whether it is
|
||||
bool reload) /*!< in: Whether it is
|
||||
for reloading FTS table */
|
||||
{
|
||||
fts_table_t fts_table;
|
||||
|
@ -7197,9 +7188,8 @@ fts_load_stopword(
|
|||
|
||||
cache = table->fts->cache;
|
||||
|
||||
if (!reload && !(cache->stopword_info.status
|
||||
& STOPWORD_NOT_INIT)) {
|
||||
return(TRUE);
|
||||
if (!reload && !(cache->stopword_info.status & STOPWORD_NOT_INIT)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!trx) {
|
||||
|
@ -7249,12 +7239,11 @@ fts_load_stopword(
|
|||
goto cleanup;
|
||||
}
|
||||
|
||||
if (strlen((char*) str.f_str) > 0) {
|
||||
if (*str.f_str) {
|
||||
stopword_to_use = (const char*) str.f_str;
|
||||
}
|
||||
} else {
|
||||
stopword_to_use = (session_stopword_table)
|
||||
? session_stopword_table : global_stopword_table;
|
||||
stopword_to_use = session_stopword_table;
|
||||
}
|
||||
|
||||
if (stopword_to_use
|
||||
|
@ -7292,7 +7281,7 @@ cleanup:
|
|||
&my_charset_latin1);
|
||||
}
|
||||
|
||||
return(error == DB_SUCCESS);
|
||||
return error == DB_SUCCESS;
|
||||
}
|
||||
|
||||
/**********************************************************************//**
|
||||
|
@ -7493,7 +7482,7 @@ fts_init_index(
|
|||
} else {
|
||||
if (table->fts->cache->stopword_info.status
|
||||
& STOPWORD_NOT_INIT) {
|
||||
fts_load_stopword(table, NULL, NULL, NULL, TRUE, TRUE);
|
||||
fts_load_stopword(table, NULL, NULL, true, true);
|
||||
}
|
||||
|
||||
for (ulint i = 0; i < ib_vector_size(cache->get_docs); ++i) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2008, 2009 Google Inc.
|
||||
Copyright (c) 2009, Percona Inc.
|
||||
Copyright (c) 2012, Facebook Inc.
|
||||
|
@ -11871,10 +11871,17 @@ innobase_fts_load_stopword(
|
|||
trx_t* trx, /*!< in: transaction */
|
||||
THD* thd) /*!< in: current thread */
|
||||
{
|
||||
return(fts_load_stopword(table, trx,
|
||||
innobase_server_stopword_table,
|
||||
THDVAR(thd, ft_user_stopword_table),
|
||||
THDVAR(thd, ft_enable_stopword), FALSE));
|
||||
const char *stopword_table= THDVAR(thd, ft_user_stopword_table);
|
||||
if (!stopword_table)
|
||||
{
|
||||
mysql_mutex_lock(&LOCK_global_system_variables);
|
||||
if (innobase_server_stopword_table)
|
||||
stopword_table= thd_strdup(thd, innobase_server_stopword_table);
|
||||
mysql_mutex_unlock(&LOCK_global_system_variables);
|
||||
}
|
||||
|
||||
return fts_load_stopword(table, trx, stopword_table,
|
||||
THDVAR(thd, ft_enable_stopword), false);
|
||||
}
|
||||
|
||||
/** Parse the table name into normal name and remote path if needed.
|
||||
|
@ -17994,7 +18001,6 @@ innodb_stopword_table_validate(
|
|||
char buff[STRING_BUFFER_USUAL_SIZE];
|
||||
int len = sizeof(buff);
|
||||
trx_t* trx;
|
||||
int ret = 1;
|
||||
|
||||
ut_a(save != NULL);
|
||||
ut_a(value != NULL);
|
||||
|
@ -18007,14 +18013,22 @@ innodb_stopword_table_validate(
|
|||
|
||||
/* Validate the stopword table's (if supplied) existence and
|
||||
of the right format */
|
||||
if (!stopword_table_name
|
||||
|| fts_valid_stopword_table(stopword_table_name)) {
|
||||
*static_cast<const char**>(save) = stopword_table_name;
|
||||
ret = 0;
|
||||
}
|
||||
int ret = stopword_table_name && !fts_valid_stopword_table(
|
||||
stopword_table_name);
|
||||
|
||||
row_mysql_unlock_data_dictionary(trx);
|
||||
|
||||
if (!ret) {
|
||||
if (stopword_table_name == buff) {
|
||||
ut_ad(static_cast<size_t>(len) < sizeof buff);
|
||||
stopword_table_name = thd_strmake(thd,
|
||||
stopword_table_name,
|
||||
len);
|
||||
}
|
||||
|
||||
*static_cast<const char**>(save) = stopword_table_name;
|
||||
}
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
@ -18048,9 +18062,10 @@ innodb_buffer_pool_size_update(
|
|||
static char* innodb_ft_aux_table;
|
||||
|
||||
/** Update innodb_ft_aux_table_id on SET GLOBAL innodb_ft_aux_table.
|
||||
@param[in,out] thd connection
|
||||
@param[out] save new value of innodb_ft_aux_table
|
||||
@param[in] value user-specified value */
|
||||
static int innodb_ft_aux_table_validate(THD*, st_mysql_sys_var*,
|
||||
static int innodb_ft_aux_table_validate(THD *thd, st_mysql_sys_var*,
|
||||
void* save, st_mysql_value* value)
|
||||
{
|
||||
char buf[STRING_BUFFER_USUAL_SIZE];
|
||||
|
@ -18064,6 +18079,15 @@ static int innodb_ft_aux_table_validate(THD*, st_mysql_sys_var*,
|
|||
dict_table_close(table, FALSE, FALSE);
|
||||
if (id) {
|
||||
innodb_ft_aux_table_id = id;
|
||||
if (table_name == buf) {
|
||||
ut_ad(static_cast<size_t>(len)
|
||||
< sizeof buf);
|
||||
table_name = thd_strmake(thd,
|
||||
table_name,
|
||||
len);
|
||||
}
|
||||
|
||||
|
||||
*static_cast<const char**>(save) = table_name;
|
||||
return 0;
|
||||
}
|
||||
|
@ -18790,51 +18814,43 @@ exit:
|
|||
return;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
/*************************************************************//**
|
||||
Validate if passed-in "value" is a valid value for
|
||||
innodb_buffer_pool_filename. On Windows, file names with colon (:)
|
||||
are not allowed.
|
||||
|
||||
@return 0 for valid name */
|
||||
static
|
||||
int
|
||||
innodb_srv_buf_dump_filename_validate(
|
||||
/*==================================*/
|
||||
THD* thd, /*!< in: thread handle */
|
||||
struct st_mysql_sys_var* var, /*!< in: pointer to system
|
||||
variable */
|
||||
void* save, /*!< out: immediate result
|
||||
for update function */
|
||||
struct st_mysql_value* value) /*!< in: incoming string */
|
||||
/** Validate SET GLOBAL innodb_buffer_pool_filename.
|
||||
On Windows, file names with colon (:) are not allowed.
|
||||
@param thd connection
|
||||
@param save &srv_buf_dump_filename
|
||||
@param value new value to be validated
|
||||
@return 0 for valid name */
|
||||
static int innodb_srv_buf_dump_filename_validate(THD *thd, st_mysql_sys_var*,
|
||||
void *save,
|
||||
st_mysql_value *value)
|
||||
{
|
||||
char buff[OS_FILE_MAX_PATH];
|
||||
int len = sizeof(buff);
|
||||
char buff[OS_FILE_MAX_PATH];
|
||||
int len= sizeof buff;
|
||||
|
||||
ut_a(save != NULL);
|
||||
ut_a(value != NULL);
|
||||
|
||||
const char* buf_name = value->val_str(value, buff, &len);
|
||||
|
||||
if (buf_name != NULL) {
|
||||
if (is_filename_allowed(buf_name, len, FALSE)){
|
||||
*static_cast<const char**>(save) = buf_name;
|
||||
return(0);
|
||||
} else {
|
||||
push_warning_printf(thd,
|
||||
Sql_condition::WARN_LEVEL_WARN,
|
||||
ER_WRONG_ARGUMENTS,
|
||||
"InnoDB: innodb_buffer_pool_filename"
|
||||
" cannot have colon (:) in the file name.");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return(1);
|
||||
}
|
||||
#else /* _WIN32 */
|
||||
# define innodb_srv_buf_dump_filename_validate NULL
|
||||
if (const char *buf_name= value->val_str(value, buff, &len))
|
||||
{
|
||||
#ifdef _WIN32
|
||||
if (!is_filename_allowed(buf_name, len, FALSE))
|
||||
{
|
||||
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
|
||||
ER_WRONG_ARGUMENTS,
|
||||
"InnoDB: innodb_buffer_pool_filename "
|
||||
"cannot have colon (:) in the file name.");
|
||||
return 1;
|
||||
}
|
||||
#endif /* _WIN32 */
|
||||
if (buf_name == buff)
|
||||
{
|
||||
ut_ad(static_cast<size_t>(len) < sizeof buff);
|
||||
buf_name= thd_strmake(thd, buf_name, len);
|
||||
}
|
||||
|
||||
*static_cast<const char**>(save)= buf_name;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef UNIV_DEBUG
|
||||
static char* srv_buffer_pool_evict;
|
||||
|
@ -18843,10 +18859,7 @@ static char* srv_buffer_pool_evict;
|
|||
Evict all uncompressed pages of compressed tables from the buffer pool.
|
||||
Keep the compressed pages in the buffer pool.
|
||||
@return whether all uncompressed pages were evicted */
|
||||
static MY_ATTRIBUTE((warn_unused_result))
|
||||
bool
|
||||
innodb_buffer_pool_evict_uncompressed(void)
|
||||
/*=======================================*/
|
||||
static bool innodb_buffer_pool_evict_uncompressed()
|
||||
{
|
||||
bool all_evicted = true;
|
||||
|
||||
|
@ -18867,9 +18880,13 @@ innodb_buffer_pool_evict_uncompressed(void)
|
|||
|
||||
if (!buf_LRU_free_page(&block->page, false)) {
|
||||
all_evicted = false;
|
||||
block = prev_block;
|
||||
} else {
|
||||
/* Because buf_LRU_free_page() may release
|
||||
and reacquire buf_pool_t::mutex, prev_block
|
||||
may be invalid. */
|
||||
block = UT_LIST_GET_LAST(buf_pool->unzip_LRU);
|
||||
}
|
||||
|
||||
block = prev_block;
|
||||
}
|
||||
|
||||
buf_pool_mutex_exit(buf_pool);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2016, 2019, MariaDB Corporation.
|
||||
Copyright (c) 2016, 2020, MariaDB Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
|
@ -877,20 +877,18 @@ fts_valid_stopword_table(
|
|||
name */
|
||||
/****************************************************************//**
|
||||
This function loads specified stopword into FTS cache
|
||||
@return TRUE if success */
|
||||
ibool
|
||||
@return true if success */
|
||||
bool
|
||||
fts_load_stopword(
|
||||
/*==============*/
|
||||
const dict_table_t*
|
||||
table, /*!< in: Table with FTS */
|
||||
trx_t* trx, /*!< in: Transaction */
|
||||
const char* global_stopword_table, /*!< in: Global stopword table
|
||||
name */
|
||||
const char* session_stopword_table, /*!< in: Session stopword table
|
||||
name */
|
||||
ibool stopword_is_on, /*!< in: Whether stopword
|
||||
bool stopword_is_on, /*!< in: Whether stopword
|
||||
option is turned on/off */
|
||||
ibool reload); /*!< in: Whether it is during
|
||||
bool reload); /*!< in: Whether it is during
|
||||
reload of FTS table */
|
||||
|
||||
/****************************************************************//**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 2011, 2017, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2017, 2018, MariaDB Corporation.
|
||||
Copyright (c) 2017, 2020, MariaDB Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
|
@ -176,7 +176,7 @@ get_buf_dump_dir()
|
|||
|
||||
/* The dump file should be created in the default data directory if
|
||||
innodb_data_home_dir is set as an empty string. */
|
||||
if (strcmp(srv_data_home, "") == 0) {
|
||||
if (!*srv_data_home) {
|
||||
dump_dir = fil_path_to_mysql_datadir;
|
||||
} else {
|
||||
dump_dir = srv_data_home;
|
||||
|
@ -208,9 +208,11 @@ buf_dump(
|
|||
ulint i;
|
||||
int ret;
|
||||
|
||||
mysql_mutex_lock(&LOCK_global_system_variables);
|
||||
ut_snprintf(full_filename, sizeof(full_filename),
|
||||
"%s%c%s", get_buf_dump_dir(), SRV_PATH_SEPARATOR,
|
||||
srv_buf_dump_filename);
|
||||
mysql_mutex_unlock(&LOCK_global_system_variables);
|
||||
|
||||
ut_snprintf(tmp_filename, sizeof(tmp_filename),
|
||||
format_name, full_filename);
|
||||
|
@ -514,9 +516,11 @@ buf_load()
|
|||
/* Ignore any leftovers from before */
|
||||
buf_load_abort_flag = FALSE;
|
||||
|
||||
mysql_mutex_lock(&LOCK_global_system_variables);
|
||||
ut_snprintf(full_filename, sizeof(full_filename),
|
||||
"%s%c%s", get_buf_dump_dir(), SRV_PATH_SEPARATOR,
|
||||
srv_buf_dump_filename);
|
||||
mysql_mutex_unlock(&LOCK_global_system_variables);
|
||||
|
||||
buf_load_status(STATUS_NOTICE,
|
||||
"Loading buffer pool(s) from %s", full_filename);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2016, 2019, MariaDB Corporation.
|
||||
Copyright (c) 2016, 2020, MariaDB Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
|
@ -443,9 +443,9 @@ fts_read_stopword(
|
|||
|
||||
/******************************************************************//**
|
||||
Load user defined stopword from designated user table
|
||||
@return TRUE if load operation is successful */
|
||||
@return whether the operation is successful */
|
||||
static
|
||||
ibool
|
||||
bool
|
||||
fts_load_user_stopword(
|
||||
/*===================*/
|
||||
fts_t* fts, /*!< in: FTS struct */
|
||||
|
@ -453,27 +453,26 @@ fts_load_user_stopword(
|
|||
name */
|
||||
fts_stopword_t* stopword_info) /*!< in: Stopword info */
|
||||
{
|
||||
pars_info_t* info;
|
||||
que_t* graph;
|
||||
dberr_t error = DB_SUCCESS;
|
||||
ibool ret = TRUE;
|
||||
trx_t* trx;
|
||||
ibool has_lock = fts->dict_locked;
|
||||
|
||||
trx = trx_allocate_for_background();
|
||||
trx->op_info = "Load user stopword table into FTS cache";
|
||||
|
||||
if (!has_lock) {
|
||||
if (!fts->dict_locked) {
|
||||
mutex_enter(&dict_sys->mutex);
|
||||
}
|
||||
|
||||
/* Validate the user table existence and in the right
|
||||
format */
|
||||
/* Validate the user table existence in the right format */
|
||||
bool ret= false;
|
||||
stopword_info->charset = fts_valid_stopword_table(stopword_table_name);
|
||||
if (!stopword_info->charset) {
|
||||
ret = FALSE;
|
||||
goto cleanup;
|
||||
} else if (!stopword_info->cached_stopword) {
|
||||
cleanup:
|
||||
if (!fts->dict_locked) {
|
||||
mutex_exit(&dict_sys->mutex);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
trx_t* trx = trx_allocate_for_background();
|
||||
trx->op_info = "Load user stopword table into FTS cache";
|
||||
|
||||
if (!stopword_info->cached_stopword) {
|
||||
/* Create the stopword RB tree with the stopword column
|
||||
charset. All comparison will use this charset */
|
||||
stopword_info->cached_stopword = rbt_create_arg_cmp(
|
||||
|
@ -482,14 +481,14 @@ fts_load_user_stopword(
|
|||
|
||||
}
|
||||
|
||||
info = pars_info_create();
|
||||
pars_info_t* info = pars_info_create();
|
||||
|
||||
pars_info_bind_id(info, TRUE, "table_stopword", stopword_table_name);
|
||||
|
||||
pars_info_bind_function(info, "my_func", fts_read_stopword,
|
||||
stopword_info);
|
||||
|
||||
graph = fts_parse_sql_no_dict_lock(
|
||||
que_t* graph = fts_parse_sql_no_dict_lock(
|
||||
NULL,
|
||||
info,
|
||||
"DECLARE FUNCTION my_func;\n"
|
||||
|
@ -508,14 +507,13 @@ fts_load_user_stopword(
|
|||
"CLOSE c;");
|
||||
|
||||
for (;;) {
|
||||
error = fts_eval_sql(trx, graph);
|
||||
dberr_t error = fts_eval_sql(trx, graph);
|
||||
|
||||
if (error == DB_SUCCESS) {
|
||||
fts_sql_commit(trx);
|
||||
stopword_info->status = STOPWORD_USER_TABLE;
|
||||
break;
|
||||
} else {
|
||||
|
||||
fts_sql_rollback(trx);
|
||||
|
||||
ut_print_timestamp(stderr);
|
||||
|
@ -537,14 +535,9 @@ fts_load_user_stopword(
|
|||
}
|
||||
|
||||
que_graph_free(graph);
|
||||
|
||||
cleanup:
|
||||
if (!has_lock) {
|
||||
mutex_exit(&dict_sys->mutex);
|
||||
}
|
||||
|
||||
trx_free_for_background(trx);
|
||||
return(ret);
|
||||
ret = true;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/******************************************************************//**
|
||||
|
@ -3495,8 +3488,8 @@ fts_add_doc_by_id(
|
|||
|
||||
if (table->fts->cache->stopword_info.status
|
||||
& STOPWORD_NOT_INIT) {
|
||||
fts_load_stopword(table, NULL, NULL,
|
||||
NULL, TRUE, TRUE);
|
||||
fts_load_stopword(table, NULL,
|
||||
NULL, true, true);
|
||||
}
|
||||
|
||||
fts_cache_add_doc(
|
||||
|
@ -7244,21 +7237,19 @@ This function loads the stopword into the FTS cache. It also
|
|||
records/fetches stopword configuration to/from FTS configure
|
||||
table, depending on whether we are creating or reloading the
|
||||
FTS.
|
||||
@return TRUE if load operation is successful */
|
||||
@return true if load operation is successful */
|
||||
UNIV_INTERN
|
||||
ibool
|
||||
bool
|
||||
fts_load_stopword(
|
||||
/*==============*/
|
||||
const dict_table_t*
|
||||
table, /*!< in: Table with FTS */
|
||||
trx_t* trx, /*!< in: Transactions */
|
||||
const char* global_stopword_table, /*!< in: Global stopword table
|
||||
name */
|
||||
const char* session_stopword_table, /*!< in: Session stopword table
|
||||
name */
|
||||
ibool stopword_is_on, /*!< in: Whether stopword
|
||||
bool stopword_is_on, /*!< in: Whether stopword
|
||||
option is turned on/off */
|
||||
ibool reload) /*!< in: Whether it is
|
||||
bool reload) /*!< in: Whether it is
|
||||
for reloading FTS table */
|
||||
{
|
||||
fts_table_t fts_table;
|
||||
|
@ -7274,9 +7265,8 @@ fts_load_stopword(
|
|||
|
||||
cache = table->fts->cache;
|
||||
|
||||
if (!reload && !(cache->stopword_info.status
|
||||
& STOPWORD_NOT_INIT)) {
|
||||
return(TRUE);
|
||||
if (!reload && !(cache->stopword_info.status & STOPWORD_NOT_INIT)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!trx) {
|
||||
|
@ -7321,12 +7311,11 @@ fts_load_stopword(
|
|||
goto cleanup;
|
||||
}
|
||||
|
||||
if (strlen((char*) str.f_str) > 0) {
|
||||
if (*str.f_str) {
|
||||
stopword_to_use = (const char*) str.f_str;
|
||||
}
|
||||
} else {
|
||||
stopword_to_use = (session_stopword_table)
|
||||
? session_stopword_table : global_stopword_table;
|
||||
stopword_to_use = session_stopword_table;
|
||||
}
|
||||
|
||||
if (stopword_to_use
|
||||
|
@ -7363,7 +7352,7 @@ cleanup:
|
|||
sizeof(fts_tokenizer_word_t), fts_utf8_string_cmp);
|
||||
}
|
||||
|
||||
return(error == DB_SUCCESS);
|
||||
return error == DB_SUCCESS;
|
||||
}
|
||||
|
||||
/**********************************************************************//**
|
||||
|
@ -7569,7 +7558,7 @@ fts_init_index(
|
|||
} else {
|
||||
if (table->fts->cache->stopword_info.status
|
||||
& STOPWORD_NOT_INIT) {
|
||||
fts_load_stopword(table, NULL, NULL, NULL, TRUE, TRUE);
|
||||
fts_load_stopword(table, NULL, NULL, true, true);
|
||||
}
|
||||
|
||||
for (ulint i = 0; i < ib_vector_size(cache->get_docs); ++i) {
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2013, 2018, MariaDB Corporation.
|
||||
Copyright (c) 2008, 2009 Google Inc.
|
||||
Copyright (c) 2009, Percona Inc.
|
||||
Copyright (c) 2012, Facebook Inc.
|
||||
|
@ -11984,10 +11983,17 @@ innobase_fts_load_stopword(
|
|||
trx_t* trx, /*!< in: transaction */
|
||||
THD* thd) /*!< in: current thread */
|
||||
{
|
||||
return(fts_load_stopword(table, trx,
|
||||
innobase_server_stopword_table,
|
||||
THDVAR(thd, ft_user_stopword_table),
|
||||
THDVAR(thd, ft_enable_stopword), FALSE));
|
||||
const char *stopword_table= THDVAR(thd, ft_user_stopword_table);
|
||||
if (!stopword_table)
|
||||
{
|
||||
mysql_mutex_lock(&LOCK_global_system_variables);
|
||||
if (innobase_server_stopword_table)
|
||||
stopword_table= thd_strdup(thd, innobase_server_stopword_table);
|
||||
mysql_mutex_unlock(&LOCK_global_system_variables);
|
||||
}
|
||||
|
||||
return fts_load_stopword(table, trx, stopword_table,
|
||||
THDVAR(thd, ft_enable_stopword), false);
|
||||
}
|
||||
|
||||
/*****************************************************************//**
|
||||
|
@ -17694,7 +17700,6 @@ innodb_stopword_table_validate(
|
|||
char buff[STRING_BUFFER_USUAL_SIZE];
|
||||
int len = sizeof(buff);
|
||||
trx_t* trx;
|
||||
int ret = 1;
|
||||
|
||||
ut_a(save != NULL);
|
||||
ut_a(value != NULL);
|
||||
|
@ -17707,14 +17712,22 @@ innodb_stopword_table_validate(
|
|||
|
||||
/* Validate the stopword table's (if supplied) existence and
|
||||
of the right format */
|
||||
if (!stopword_table_name
|
||||
|| fts_valid_stopword_table(stopword_table_name)) {
|
||||
*static_cast<const char**>(save) = stopword_table_name;
|
||||
ret = 0;
|
||||
}
|
||||
int ret = stopword_table_name && !fts_valid_stopword_table(
|
||||
stopword_table_name);
|
||||
|
||||
row_mysql_unlock_data_dictionary(trx);
|
||||
|
||||
if (!ret) {
|
||||
if (stopword_table_name == buff) {
|
||||
ut_ad(static_cast<size_t>(len) < sizeof buff);
|
||||
stopword_table_name = thd_strmake(thd,
|
||||
stopword_table_name,
|
||||
len);
|
||||
}
|
||||
|
||||
*static_cast<const char**>(save) = stopword_table_name;
|
||||
}
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
@ -17722,9 +17735,10 @@ innodb_stopword_table_validate(
|
|||
static char* innodb_ft_aux_table;
|
||||
|
||||
/** Update innodb_ft_aux_table_id on SET GLOBAL innodb_ft_aux_table.
|
||||
@param[in,out] thd connection
|
||||
@param[out] save new value of innodb_ft_aux_table
|
||||
@param[in] value user-specified value */
|
||||
static int innodb_ft_aux_table_validate(THD*, st_mysql_sys_var*,
|
||||
static int innodb_ft_aux_table_validate(THD *thd, st_mysql_sys_var*,
|
||||
void* save, st_mysql_value* value)
|
||||
{
|
||||
char buf[STRING_BUFFER_USUAL_SIZE];
|
||||
|
@ -17738,6 +17752,15 @@ static int innodb_ft_aux_table_validate(THD*, st_mysql_sys_var*,
|
|||
dict_table_close(table, FALSE, FALSE);
|
||||
if (id) {
|
||||
innodb_ft_aux_table_id = id;
|
||||
if (table_name == buf) {
|
||||
ut_ad(static_cast<size_t>(len)
|
||||
< sizeof buf);
|
||||
table_name = thd_strmake(thd,
|
||||
table_name,
|
||||
len);
|
||||
}
|
||||
|
||||
|
||||
*static_cast<const char**>(save) = table_name;
|
||||
return 0;
|
||||
}
|
||||
|
@ -18436,52 +18459,43 @@ exit:
|
|||
return;
|
||||
}
|
||||
|
||||
#ifdef __WIN__
|
||||
/*************************************************************//**
|
||||
Validate if passed-in "value" is a valid value for
|
||||
innodb_buffer_pool_filename. On Windows, file names with colon (:)
|
||||
are not allowed.
|
||||
|
||||
/** Validate SET GLOBAL innodb_buffer_pool_filename.
|
||||
On Windows, file names with colon (:) are not allowed.
|
||||
@param thd connection
|
||||
@param save &srv_buf_dump_filename
|
||||
@param value new value to be validated
|
||||
@return 0 for valid name */
|
||||
static
|
||||
int
|
||||
innodb_srv_buf_dump_filename_validate(
|
||||
/*==================================*/
|
||||
THD* thd, /*!< in: thread handle */
|
||||
struct st_mysql_sys_var* var, /*!< in: pointer to system
|
||||
variable */
|
||||
void* save, /*!< out: immediate result
|
||||
for update function */
|
||||
struct st_mysql_value* value) /*!< in: incoming string */
|
||||
static int innodb_srv_buf_dump_filename_validate(THD *thd, st_mysql_sys_var*,
|
||||
void *save,
|
||||
st_mysql_value *value)
|
||||
{
|
||||
const char* buf_name;
|
||||
char buff[OS_FILE_MAX_PATH];
|
||||
int len= sizeof(buff);
|
||||
char buff[OS_FILE_MAX_PATH];
|
||||
int len= sizeof buff;
|
||||
|
||||
ut_a(save != NULL);
|
||||
ut_a(value != NULL);
|
||||
|
||||
buf_name = value->val_str(value, buff, &len);
|
||||
|
||||
if (buf_name) {
|
||||
if (is_filename_allowed(buf_name, len, FALSE)){
|
||||
*static_cast<const char**>(save) = buf_name;
|
||||
return(0);
|
||||
} else {
|
||||
push_warning_printf(thd,
|
||||
Sql_condition::WARN_LEVEL_WARN,
|
||||
ER_WRONG_ARGUMENTS,
|
||||
"InnoDB: innodb_buffer_pool_filename "
|
||||
"cannot have colon (:) in the file name.");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return(1);
|
||||
}
|
||||
#else /* __WIN__ */
|
||||
# define innodb_srv_buf_dump_filename_validate NULL
|
||||
if (const char *buf_name= value->val_str(value, buff, &len))
|
||||
{
|
||||
#ifdef __WIN__
|
||||
if (!is_filename_allowed(buf_name, len, FALSE))
|
||||
{
|
||||
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
|
||||
ER_WRONG_ARGUMENTS,
|
||||
"InnoDB: innodb_buffer_pool_filename "
|
||||
"cannot have colon (:) in the file name.");
|
||||
return 1;
|
||||
}
|
||||
#endif /* __WIN__ */
|
||||
if (buf_name == buff)
|
||||
{
|
||||
ut_ad(static_cast<size_t>(len) < sizeof buff);
|
||||
buf_name= thd_strmake(thd, buf_name, len);
|
||||
}
|
||||
|
||||
*static_cast<const char**>(save)= buf_name;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef UNIV_DEBUG
|
||||
static char* srv_buffer_pool_evict;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2016, 2019, MariaDB Corporation.
|
||||
Copyright (c) 2016, 2020, MariaDB Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
|
@ -899,21 +899,19 @@ fts_valid_stopword_table(
|
|||
name */
|
||||
/****************************************************************//**
|
||||
This function loads specified stopword into FTS cache
|
||||
@return TRUE if success */
|
||||
@return true if success */
|
||||
UNIV_INTERN
|
||||
ibool
|
||||
bool
|
||||
fts_load_stopword(
|
||||
/*==============*/
|
||||
const dict_table_t*
|
||||
table, /*!< in: Table with FTS */
|
||||
trx_t* trx, /*!< in: Transaction */
|
||||
const char* global_stopword_table, /*!< in: Global stopword table
|
||||
name */
|
||||
const char* session_stopword_table, /*!< in: Session stopword table
|
||||
name */
|
||||
ibool stopword_is_on, /*!< in: Whether stopword
|
||||
bool stopword_is_on, /*!< in: Whether stopword
|
||||
option is turned on/off */
|
||||
ibool reload); /*!< in: Whether it is during
|
||||
bool reload); /*!< in: Whether it is during
|
||||
reload of FTS table */
|
||||
|
||||
/****************************************************************//**
|
||||
|
|
|
@ -45,10 +45,10 @@ Created 1/20/1994 Heikki Tuuri
|
|||
|
||||
#define INNODB_VERSION_MAJOR 5
|
||||
#define INNODB_VERSION_MINOR 6
|
||||
#define INNODB_VERSION_BUGFIX 46
|
||||
#define INNODB_VERSION_BUGFIX 47
|
||||
|
||||
#ifndef PERCONA_INNODB_VERSION
|
||||
#define PERCONA_INNODB_VERSION 86.2
|
||||
#define PERCONA_INNODB_VERSION 87.0
|
||||
#endif
|
||||
|
||||
/* Enable UNIV_LOG_ARCHIVE in XtraDB */
|
||||
|
|
Loading…
Reference in a new issue