Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
1fbdcada
Commit
1fbdcada
authored
Apr 28, 2020
by
Marko Mäkelä
Browse files
Options
Browse Files
Download
Plain Diff
Merge 10.2 into 10.3
parents
c7559747
dd5c307c
Changes
20
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
1931 additions
and
403 deletions
+1931
-403
cmake/install_layout.cmake
cmake/install_layout.cmake
+4
-0
debian/mariadb-server-10.3.preinst
debian/mariadb-server-10.3.preinst
+1
-1
extra/mariabackup/backup_mysql.cc
extra/mariabackup/backup_mysql.cc
+69
-55
mysql-test/suite/innodb/r/innodb_sys_var_valgrind.result
mysql-test/suite/innodb/r/innodb_sys_var_valgrind.result
+73
-0
mysql-test/suite/innodb/t/innodb_sys_var_valgrind.test
mysql-test/suite/innodb/t/innodb_sys_var_valgrind.test
+70
-0
mysql-test/suite/innodb_fts/r/stopword.result
mysql-test/suite/innodb_fts/r/stopword.result
+744
-0
mysql-test/suite/innodb_fts/t/stopword.opt
mysql-test/suite/innodb_fts/t/stopword.opt
+1
-0
mysql-test/suite/innodb_fts/t/stopword.test
mysql-test/suite/innodb_fts/t/stopword.test
+657
-0
mysql-test/suite/innodb_gis/r/rtree_split.result
mysql-test/suite/innodb_gis/r/rtree_split.result
+14
-42
mysql-test/suite/innodb_gis/t/rtree_split.test
mysql-test/suite/innodb_gis/t/rtree_split.test
+16
-48
mysql-test/suite/mariabackup/backup_lock_wait_timeout.result
mysql-test/suite/mariabackup/backup_lock_wait_timeout.result
+11
-0
mysql-test/suite/mariabackup/backup_lock_wait_timeout.test
mysql-test/suite/mariabackup/backup_lock_wait_timeout.test
+28
-0
plugin/auth_pam/CMakeLists.txt
plugin/auth_pam/CMakeLists.txt
+2
-2
storage/innobase/buf/buf0dump.cc
storage/innobase/buf/buf0dump.cc
+6
-7
storage/innobase/fts/fts0fts.cc
storage/innobase/fts/fts0fts.cc
+36
-47
storage/innobase/gis/gis0sea.cc
storage/innobase/gis/gis0sea.cc
+116
-118
storage/innobase/handler/ha_innodb.cc
storage/innobase/handler/ha_innodb.cc
+75
-56
storage/innobase/include/fts0fts.h
storage/innobase/include/fts0fts.h
+5
-7
storage/innobase/include/gis0rtree.h
storage/innobase/include/gis0rtree.h
+1
-17
storage/innobase/row/row0upd.cc
storage/innobase/row/row0upd.cc
+2
-3
No files found.
cmake/install_layout.cmake
View file @
1fbdcada
...
...
@@ -128,6 +128,8 @@ SET(INSTALL_SUPPORTFILESDIR_STANDALONE "support-files")
SET
(
INSTALL_MYSQLDATADIR_STANDALONE
"data"
)
SET
(
INSTALL_UNIX_ADDRDIR_STANDALONE
"/tmp/mysql.sock"
)
SET
(
INSTALL_PAMDIR_STANDALONE
"share"
)
SET
(
INSTALL_PAMDATADIR_STANDALONE
"share"
)
#
# RPM layout
#
...
...
@@ -164,6 +166,7 @@ SET(INSTALL_SYSTEMD_UNITDIR_RPM "/usr/lib/systemd/system")
SET
(
INSTALL_SYSTEMD_SYSUSERSDIR_RPM
"/usr/lib/sysusers.d"
)
SET
(
INSTALL_SYSTEMD_TMPFILESDIR_RPM
"/usr/lib/tmpfiles.d"
)
SET
(
INSTALL_PAMDIR_RPM
"/
${
INSTALL_LIBDIR_RPM
}
/security"
)
SET
(
INSTALL_PAMDATADIR_RPM
"/etc/security"
)
#
# DEB layout
...
...
@@ -197,6 +200,7 @@ SET(INSTALL_SYSTEMD_UNITDIR_DEB "/lib/systemd/system")
SET
(
INSTALL_SYSTEMD_SYSUSERSDIR_DEB
"/usr/lib/sysusers.d"
)
SET
(
INSTALL_SYSTEMD_TMPFILESDIR_DEB
"/usr/lib/tmpfiles.d"
)
SET
(
INSTALL_PAMDIR_DEB
"/lib/
${
CMAKE_CXX_LIBRARY_ARCHITECTURE
}
/security"
)
SET
(
INSTALL_PAMDATADIR_DEB
"/etc/security"
)
#
# SVR4 layout
...
...
debian/mariadb-server-10.3.preinst
View file @
1fbdcada
...
...
@@ -25,7 +25,7 @@ stop_server() {
# Return immediately if there are no mysql processes running
# as there is no point in trying to shutdown in that case.
if
!
pgrep mysqld
>
/dev/null
;
then return
;
fi
if
!
pgrep
--ns
$$
mysqld
>
/dev/null
;
then return
;
fi
set
+e
if
[
-x
/usr/sbin/invoke-rc.d
]
;
then
...
...
extra/mariabackup/backup_mysql.cc
View file @
1fbdcada
...
...
@@ -960,79 +960,93 @@ Function acquires either a backup tables lock, if supported
by the server, or a global read lock (FLUSH TABLES WITH READ LOCK)
otherwise.
@returns true if lock acquired */
bool
lock_tables
(
MYSQL
*
connection
)
bool
lock_tables
(
MYSQL
*
connection
)
{
if
(
have_lock_wait_timeout
)
{
/* Set the maximum supported session value for
lock_wait_timeout to prevent unnecessary timeouts when the
global value is changed from the default */
xb_mysql_query
(
connection
,
"SET SESSION lock_wait_timeout=31536000"
,
false
);
}
if
(
have_lock_wait_timeout
||
opt_lock_wait_timeout
)
{
char
buf
[
FN_REFLEN
];
/* Set the maximum supported session value for
lock_wait_timeout if opt_lock_wait_timeout is not set to prevent
unnecessary timeouts when the global value is changed from the default */
snprintf
(
buf
,
sizeof
(
buf
),
"SET SESSION lock_wait_timeout=%u"
,
opt_lock_wait_timeout
?
opt_lock_wait_timeout
:
31536000
);
xb_mysql_query
(
connection
,
buf
,
false
);
}
if
(
have_backup_locks
)
{
msg
(
"Executing LOCK TABLES FOR BACKUP..."
);
xb_mysql_query
(
connection
,
"LOCK TABLES FOR BACKUP"
,
false
);
return
(
true
);
}
if
(
have_backup_locks
)
{
msg
(
"Executing LOCK TABLES FOR BACKUP..."
);
xb_mysql_query
(
connection
,
"LOCK TABLES FOR BACKUP"
,
false
);
return
(
true
);
}
if
(
opt_lock_ddl_per_table
)
{
start_mdl_waiters_killer
();
}
if
(
opt_lock_ddl_per_table
)
{
start_mdl_waiters_killer
();
}
if
(
!
opt_lock_wait_timeout
&&
!
opt_kill_long_queries_timeout
)
{
if
(
!
opt_lock_wait_timeout
&&
!
opt_kill_long_queries_timeout
)
{
/* We do first a FLUSH TABLES. If a long update is running, the
FLUSH TABLES will wait but will not stall the whole mysqld, and
when the long update is done the FLUSH TABLES WITH READ LOCK
will start and succeed quickly. So, FLUSH TABLES is to lower
the probability of a stage where both mysqldump and most client
connections are stalled. Of course, if a second long update
starts between the two FLUSHes, we have that bad stall.
/* We do first a FLUSH TABLES. If a long update is running, the
FLUSH TABLES will wait but will not stall the whole mysqld, and
when the long update is done the FLUSH TABLES WITH READ LOCK
will start and succeed quickly. So, FLUSH TABLES is to lower
the probability of a stage where both mysqldump and most client
connections are stalled. Of course, if a second long update
starts between the two FLUSHes, we have that bad stall.
Option lock_wait_timeout serve the same purpose and is not
compatible with this trick.
*/
Option lock_wait_timeout serve the same purpose and is not
compatible with this trick.
*/
msg
(
"Executing FLUSH NO_WRITE_TO_BINLOG TABLES..."
);
msg
(
"Executing FLUSH NO_WRITE_TO_BINLOG TABLES..."
);
xb_mysql_query
(
connection
,
"FLUSH NO_WRITE_TO_BINLOG TABLES"
,
false
);
}
xb_mysql_query
(
connection
,
"FLUSH NO_WRITE_TO_BINLOG TABLES"
,
false
);
}
if
(
opt_lock_wait_timeout
)
{
if
(
!
wait_for_no_updates
(
connection
,
opt_lock_wait_timeout
,
opt_lock_wait_threshold
))
{
return
(
false
);
}
}
if
(
opt_lock_wait_timeout
)
{
if
(
!
wait_for_no_updates
(
connection
,
opt_lock_wait_timeout
,
opt_lock_wait_threshold
))
{
return
(
false
);
}
}
msg
(
"Executing FLUSH TABLES WITH READ LOCK..."
);
msg
(
"Executing FLUSH TABLES WITH READ LOCK..."
);
if
(
opt_kill_long_queries_timeout
)
{
start_query_killer
();
}
if
(
opt_kill_long_queries_timeout
)
{
start_query_killer
();
}
if
(
have_galera_enabled
)
{
xb_mysql_query
(
connection
,
"SET SESSION wsrep_causal_reads=0"
,
false
);
}
if
(
have_galera_enabled
)
{
xb_mysql_query
(
connection
,
"SET SESSION wsrep_causal_reads=0"
,
false
);
}
xb_mysql_query
(
connection
,
"FLUSH TABLES WITH READ LOCK"
,
false
);
xb_mysql_query
(
connection
,
"FLUSH TABLES WITH READ LOCK"
,
false
,
true
);
/* Set the maximum supported session value for
lock_wait_timeout to prevent unnecessary timeouts when the
global value is changed from the default */
if
(
opt_lock_wait_timeout
)
xb_mysql_query
(
connection
,
"SET SESSION lock_wait_timeout=31536000"
,
false
);
if
(
opt_lock_ddl_per_table
)
{
stop_mdl_waiters_killer
();
}
if
(
opt_lock_ddl_per_table
)
{
stop_mdl_waiters_killer
();
}
if
(
opt_kill_long_queries_timeout
)
{
stop_query_killer
();
}
if
(
opt_kill_long_queries_timeout
)
{
stop_query_killer
();
}
return
(
true
);
return
(
true
);
}
/*********************************************************************//**
If backup locks are used, execute LOCK BINLOG FOR BACKUP provided that we are
not in the --no-lock mode and the lock has not been acquired already.
...
...
mysql-test/suite/innodb/r/innodb_sys_var_valgrind.result
0 → 100644
View file @
1fbdcada
#
# 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;
mysql-test/suite/innodb/t/innodb_sys_var_valgrind.test
0 → 100644
View file @
1fbdcada
--
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
;
mysql-test/suite/innodb_fts/r/stopword.result
0 → 100644
View file @
1fbdcada
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;
mysql-test/suite/innodb_fts/t/stopword.opt
0 → 100644
View file @
1fbdcada
--innodb-ft-default-stopword
mysql-test/suite/innodb_fts/t/stopword.test
0 → 100644
View file @
1fbdcada
# 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
;
mysql-test/suite/innodb_gis/r/rtree_split.result
View file @
1fbdcada
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
insert into t1 values(1, Point(1,1));
insert into t1 values(2, Point(2,2));
insert into t1 values(3, Point(3,3));
insert into t1 values(4, Point(4,4));
insert into t1 values(5, Point(5,5));
insert into t1 values(6, Point(6,6));
insert into t1 values(7, Point(7,7));
insert into t1 values(8, Point(8,8));
insert into t1 values(9, Point(9,9));
insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;
begin;
insert into t1 select @s:=1+(seq mod 9), point(@s, @s)
from seq_1_to_576;
SET @saved_dbug = @@SESSION.debug_dbug;
SET debug_dbug = '+d, rtr_page_need_second_split';
insert into t1 select * from t1;
SET debug_dbug = '+d,rtr_page_need_second_split';
insert into t1 select @s:=1+(seq mod 9), point(@s, @s)
from seq_1_to_576;
SET debug_dbug = @saved_dbug;
delete from t1;
insert into t1 values(1, Point(1,1));
insert into t1 values(2, Point(2,2));
insert into t1 values(3, Point(3,3));
insert into t1 values(4, Point(4,4));
insert into t1 values(5, Point(5,5));
insert into t1 values(6, Point(6,6));
insert into t1 values(7, Point(7,7));
insert into t1 values(8, Point(8,8));
insert into t1 values(9, Point(9,9));
insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;
start transaction;
insert into t1 select * from t1;
rollback;
insert into t1 select @s:=1+(seq mod 9), point(@s, @s)
from seq_1_to_2304;
begin;
insert into t1 select @s:=1+(seq mod 9), point(@s, @s)
from seq_1_to_2304;
rollback;
check table t1;
Table Op Msg_type Msg_text
test.t1 check status OK
insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select @s:=1+(seq mod 9), point(@s, @s)
from seq_1_to_71424;
check table t1;
Table Op Msg_type Msg_text
test.t1 check status OK
...
...
mysql-test/suite/innodb_gis/t/rtree_split.test
View file @
1fbdcada
# WL#6745 InnoDB R-tree support
# This test case will test R-tree split, mostly on dupl
ci
ate records.
# This test case will test R-tree split, mostly on dupl
ic
ate records.
# Not supported in embedded
--
source
include
/
not_embedded
.
inc
...
...
@@ -8,65 +8,33 @@
--
source
include
/
big_test
.
inc
--
source
include
/
not_valgrind
.
inc
--
source
include
/
have_debug
.
inc
--
source
include
/
have_sequence
.
inc
# Create table with R-tree index.
create
table
t1
(
c1
int
,
c2
geometry
not
null
,
spatial
index
(
c2
))
engine
=
innodb
;
begin
;
# Insert enough values to let R-tree split.
insert
into
t1
values
(
1
,
Point
(
1
,
1
));
insert
into
t1
values
(
2
,
Point
(
2
,
2
));
insert
into
t1
values
(
3
,
Point
(
3
,
3
));
insert
into
t1
values
(
4
,
Point
(
4
,
4
));
insert
into
t1
values
(
5
,
Point
(
5
,
5
));
insert
into
t1
values
(
6
,
Point
(
6
,
6
));
insert
into
t1
values
(
7
,
Point
(
7
,
7
));
insert
into
t1
values
(
8
,
Point
(
8
,
8
));
insert
into
t1
values
(
9
,
Point
(
9
,
9
));
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
@
s
:=
1
+
(
seq
mod
9
),
point
(
@
s
,
@
s
)
from
seq_1_to_576
;
#Check second round spliting.
SET
@
saved_dbug
=
@@
SESSION
.
debug_dbug
;
SET
debug_dbug
=
'+d, rtr_page_need_second_split'
;
insert
into
t1
select
*
from
t1
;
SET
debug_dbug
=
'+d,rtr_page_need_second_split'
;
insert
into
t1
select
@
s
:=
1
+
(
seq
mod
9
),
point
(
@
s
,
@
s
)
from
seq_1_to_576
;
SET
debug_dbug
=
@
saved_dbug
;
rollback
;
delete
from
t1
;
insert
into
t1
values
(
1
,
Point
(
1
,
1
));
insert
into
t1
values
(
2
,
Point
(
2
,
2
));
insert
into
t1
values
(
3
,
Point
(
3
,
3
));
insert
into
t1
values
(
4
,
Point
(
4
,
4
));
insert
into
t1
values
(
5
,
Point
(
5
,
5
));
insert
into
t1
values
(
6
,
Point
(
6
,
6
));
insert
into
t1
values
(
7
,
Point
(
7
,
7
));
insert
into
t1
values
(
8
,
Point
(
8
,
8
));
insert
into
t1
values
(
9
,
Point
(
9
,
9
));
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
*
from
t1
;
start
transaction
;
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
@
s
:=
1
+
(
seq
mod
9
),
point
(
@
s
,
@
s
)
from
seq_1_to_2304
;
begin
;
insert
into
t1
select
@
s
:=
1
+
(
seq
mod
9
),
point
(
@
s
,
@
s
)
from
seq_1_to_2304
;
rollback
;
check
table
t1
;
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
*
from
t1
;
insert
into
t1
select
@
s
:=
1
+
(
seq
mod
9
),
point
(
@
s
,
@
s
)
from
seq_1_to_71424
;
check
table
t1
;
select
count
(
*
)
from
t1
;
...
...
mysql-test/suite/mariabackup/backup_lock_wait_timeout.result
0 → 100644
View file @
1fbdcada
CREATE TABLE t(i INT) ENGINE INNODB;
connect con1,localhost,root,,;
BEGIN;
LOCK TABLES t WRITE;
connection default;
# xtrabackup backup
connection con1;
COMMIT;
connection default;
disconnect con1;
DROP TABLE t;
mysql-test/suite/mariabackup/backup_lock_wait_timeout.test
0 → 100644
View file @
1fbdcada
--
source
include
/
have_innodb
.
inc
--
source
include
/
count_sessions
.
inc
CREATE
TABLE
t
(
i
INT
)
ENGINE
INNODB
;
connect
(
con1
,
localhost
,
root
,,);
BEGIN
;
LOCK
TABLES
t
WRITE
;
--
connection
default
echo
# xtrabackup backup;
let
$targetdir
=
$MYSQLTEST_VARDIR
/
tmp
/
backup
;
--
disable_result_log
--
error
1
exec
$XTRABACKUP
--
defaults
-
file
=
$MYSQLTEST_VARDIR
/
my
.
cnf
--
backup
--
ftwrl
-
wait
-
timeout
=
1
--
target
-
dir
=
$targetdir
;
--
enable_result_log
--
connection
con1
COMMIT
;
--
connection
default
--
disconnect
con1
DROP
TABLE
t
;
rmdir
$targetdir
;
--
source
include
/
wait_until_count_sessions
.
inc
plugin/auth_pam/CMakeLists.txt
View file @
1fbdcada
...
...
@@ -22,7 +22,7 @@ IF(HAVE_PAM_APPL_H)
IF
(
HAVE_STRNDUP
)
ADD_DEFINITIONS
(
-DHAVE_STRNDUP
)
ENDIF
(
HAVE_STRNDUP
)
FIND_LIBRARY
(
PAM_LIBRARY pam
)
FIND_LIBRARY
(
PAM_LIBRARY pam
)
# for srpm build-depends detection
MYSQL_ADD_PLUGIN
(
auth_pam auth_pam.c LINK_LIBRARIES pam MODULE_ONLY
)
IF
(
TARGET auth_pam
)
...
...
@@ -31,7 +31,7 @@ IF(HAVE_PAM_APPL_H)
SET_TARGET_PROPERTIES
(
pam_user_map PROPERTIES PREFIX
""
)
IF
(
INSTALL_PAMDIR
)
INSTALL
(
TARGETS pam_user_map DESTINATION
${
INSTALL_PAMDIR
}
COMPONENT Server
)
INSTALL
(
FILES mapper/user_map.conf DESTINATION
/etc/security
COMPONENT Server
)
INSTALL
(
FILES mapper/user_map.conf DESTINATION
${
INSTALL_PAMDATADIR
}
COMPONENT Server
)
ENDIF
()
ENDIF
()
ENDIF
(
HAVE_PAM_APPL_H
)
...
...
storage/innobase/buf/buf0dump.cc
View file @
1fbdcada
/*****************************************************************************
Copyright (c) 2011, 2017, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2017, 20
18
, MariaDB Corporation.
Copyright (c) 2017, 20
20
, 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
;
...
...
storage/innobase/fts/fts0fts.cc
View file @
1fbdcada
/*****************************************************************************
Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2016, 20
19
, MariaDB Corporation.
Copyright (c) 2016, 20
20
, 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
i
bool
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_create
();
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_create
();
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
(
info
,
"DECLARE FUNCTION my_func;
\n
"
"DECLARE CURSOR c IS"
...
...
@@ -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
);
if
(
error
==
DB_LOCK_WAIT_TIMEOUT
)
{
...
...
@@ -534,14 +532,9 @@ fts_load_user_stopword(
}
que_graph_free
(
graph
);
cleanup:
if
(
!
has_lock
)
{
mutex_exit
(
&
dict_sys
->
mutex
);
}
trx_free
(
trx
);
return
(
ret
);
ret
=
true
;
goto
cleanup
;
}
/******************************************************************//**
...
...
@@ -3387,7 +3380,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
(
...
...
@@ -3551,8 +3544,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
(
...
...
@@ -7124,20 +7117,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 */
i
bool
@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 */
i
bool
stopword_is_on
,
/*!< in: Whether stopword
bool
stopword_is_on
,
/*!< in: Whether stopword
option is turned on/off */
i
bool
reload
)
/*!< in: Whether it is
bool
reload
)
/*!< in: Whether it is
for reloading FTS table */
{
fts_table_t
fts_table
;
...
...
@@ -7153,9 +7144,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
)
{
...
...
@@ -7205,12 +7195,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
...
...
@@ -7248,7 +7237,7 @@ fts_load_stopword(
&
my_charset_latin1
);
}
return
(
error
==
DB_SUCCESS
)
;
return
error
==
DB_SUCCESS
;
}
/**********************************************************************//**
...
...
@@ -7449,7 +7438,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
)
{
...
...
storage/innobase/gis/gis0sea.cc
View file @
1fbdcada
/*****************************************************************************
Copyright (c) 2016, 2018, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2017, 20
18
, MariaDB Corporation.
Copyright (c) 2017, 20
20
, 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
...
...
@@ -685,6 +685,121 @@ rtr_page_get_father(
mem_heap_free
(
heap
);
}
/********************************************************************//**
Returns the upper level node pointer to a R-Tree page. It is assumed
that mtr holds an x-latch on the tree. */
static
void
rtr_get_father_node
(
dict_index_t
*
index
,
/*!< in: index */
ulint
level
,
/*!< in: the tree level of search */
const
dtuple_t
*
tuple
,
/*!< in: data tuple; NOTE: n_fields_cmp in
tuple must be set so that it cannot get
compared to the node ptr page number field! */
btr_cur_t
*
sea_cur
,
/*!< in: search cursor */
btr_cur_t
*
btr_cur
,
/*!< in/out: tree cursor; the cursor page is
s- or x-latched, but see also above! */
ulint
page_no
,
/*!< Current page no */
mtr_t
*
mtr
)
/*!< in: mtr */
{
mem_heap_t
*
heap
=
NULL
;
bool
ret
=
false
;
const
rec_t
*
rec
;
ulint
n_fields
;
bool
new_rtr
=
false
;
/* Try to optimally locate the parent node. Level should always
less than sea_cur->tree_height unless the root is splitting */
if
(
sea_cur
&&
sea_cur
->
tree_height
>
level
)
{
ut_ad
(
mtr_memo_contains_flagged
(
mtr
,
dict_index_get_lock
(
index
),
MTR_MEMO_X_LOCK
|
MTR_MEMO_SX_LOCK
));
ret
=
rtr_cur_restore_position
(
BTR_CONT_MODIFY_TREE
,
sea_cur
,
level
,
mtr
);
/* Once we block shrink tree nodes while there are
active search on it, this optimal locating should always
succeeds */
ut_ad
(
ret
);
if
(
ret
)
{
btr_pcur_t
*
r_cursor
=
rtr_get_parent_cursor
(
sea_cur
,
level
,
false
);
rec
=
btr_pcur_get_rec
(
r_cursor
);
ut_ad
(
r_cursor
->
rel_pos
==
BTR_PCUR_ON
);
page_cur_position
(
rec
,
btr_pcur_get_block
(
r_cursor
),
btr_cur_get_page_cur
(
btr_cur
));
btr_cur
->
rtr_info
=
sea_cur
->
rtr_info
;
btr_cur
->
tree_height
=
sea_cur
->
tree_height
;
ut_ad
(
rtr_compare_cursor_rec
(
index
,
btr_cur
,
page_no
,
&
heap
));
goto
func_exit
;
}
}
/* We arrive here in one of two scenario
1) check table and btr_valide
2) index root page being raised */
ut_ad
(
!
sea_cur
||
sea_cur
->
tree_height
==
level
);
if
(
btr_cur
->
rtr_info
)
{
rtr_clean_rtr_info
(
btr_cur
->
rtr_info
,
true
);
}
else
{
new_rtr
=
true
;
}
btr_cur
->
rtr_info
=
rtr_create_rtr_info
(
false
,
false
,
btr_cur
,
index
);
if
(
sea_cur
&&
sea_cur
->
tree_height
==
level
)
{
/* root split, and search the new root */
btr_cur_search_to_nth_level
(
index
,
level
,
tuple
,
PAGE_CUR_RTREE_LOCATE
,
BTR_CONT_MODIFY_TREE
,
btr_cur
,
0
,
__FILE__
,
__LINE__
,
mtr
);
}
else
{
/* btr_validate */
ut_ad
(
level
>=
1
);
ut_ad
(
!
sea_cur
);
btr_cur_search_to_nth_level
(
index
,
level
,
tuple
,
PAGE_CUR_RTREE_LOCATE
,
BTR_CONT_MODIFY_TREE
,
btr_cur
,
0
,
__FILE__
,
__LINE__
,
mtr
);
rec
=
btr_cur_get_rec
(
btr_cur
);
n_fields
=
dtuple_get_n_fields_cmp
(
tuple
);
if
(
page_rec_is_infimum
(
rec
)
||
(
btr_cur
->
low_match
!=
n_fields
))
{
ret
=
rtr_pcur_getnext_from_path
(
tuple
,
PAGE_CUR_RTREE_LOCATE
,
btr_cur
,
level
,
BTR_CONT_MODIFY_TREE
,
true
,
mtr
);
ut_ad
(
ret
&&
btr_cur
->
low_match
==
n_fields
);
}
}
ret
=
rtr_compare_cursor_rec
(
index
,
btr_cur
,
page_no
,
&
heap
);
ut_ad
(
ret
);
func_exit:
if
(
heap
)
{
mem_heap_free
(
heap
);
}
if
(
new_rtr
&&
btr_cur
->
rtr_info
)
{
rtr_clean_rtr_info
(
btr_cur
->
rtr_info
,
true
);
btr_cur
->
rtr_info
=
NULL
;
}
}
/** Returns the upper level node pointer to a R-Tree page. It is assumed
that mtr holds an SX-latch or X-latch on the tree.
@return rec_get_offsets() of the node pointer record */
...
...
@@ -805,123 +920,6 @@ rtr_page_get_father_block(
cursor
,
mtr
));
}
/********************************************************************//**
Returns the upper level node pointer to a R-Tree page. It is assumed
that mtr holds an x-latch on the tree. */
void
rtr_get_father_node
(
/*================*/
dict_index_t
*
index
,
/*!< in: index */
ulint
level
,
/*!< in: the tree level of search */
const
dtuple_t
*
tuple
,
/*!< in: data tuple; NOTE: n_fields_cmp in
tuple must be set so that it cannot get
compared to the node ptr page number field! */
btr_cur_t
*
sea_cur
,
/*!< in: search cursor */
btr_cur_t
*
btr_cur
,
/*!< in/out: tree cursor; the cursor page is
s- or x-latched, but see also above! */
ulint
page_no
,
/*!< Current page no */
mtr_t
*
mtr
)
/*!< in: mtr */
{
mem_heap_t
*
heap
=
NULL
;
bool
ret
=
false
;
const
rec_t
*
rec
;
ulint
n_fields
;
bool
new_rtr
=
false
;
/* Try to optimally locate the parent node. Level should always
less than sea_cur->tree_height unless the root is splitting */
if
(
sea_cur
&&
sea_cur
->
tree_height
>
level
)
{
ut_ad
(
mtr_memo_contains_flagged
(
mtr
,
dict_index_get_lock
(
index
),
MTR_MEMO_X_LOCK
|
MTR_MEMO_SX_LOCK
));
ret
=
rtr_cur_restore_position
(
BTR_CONT_MODIFY_TREE
,
sea_cur
,
level
,
mtr
);
/* Once we block shrink tree nodes while there are
active search on it, this optimal locating should always
succeeds */
ut_ad
(
ret
);
if
(
ret
)
{
btr_pcur_t
*
r_cursor
=
rtr_get_parent_cursor
(
sea_cur
,
level
,
false
);
rec
=
btr_pcur_get_rec
(
r_cursor
);
ut_ad
(
r_cursor
->
rel_pos
==
BTR_PCUR_ON
);
page_cur_position
(
rec
,
btr_pcur_get_block
(
r_cursor
),
btr_cur_get_page_cur
(
btr_cur
));
btr_cur
->
rtr_info
=
sea_cur
->
rtr_info
;
btr_cur
->
tree_height
=
sea_cur
->
tree_height
;
ut_ad
(
rtr_compare_cursor_rec
(
index
,
btr_cur
,
page_no
,
&
heap
));
goto
func_exit
;
}
}
/* We arrive here in one of two scenario
1) check table and btr_valide
2) index root page being raised */
ut_ad
(
!
sea_cur
||
sea_cur
->
tree_height
==
level
);
if
(
btr_cur
->
rtr_info
)
{
rtr_clean_rtr_info
(
btr_cur
->
rtr_info
,
true
);
}
else
{
new_rtr
=
true
;
}
btr_cur
->
rtr_info
=
rtr_create_rtr_info
(
false
,
false
,
btr_cur
,
index
);
if
(
sea_cur
&&
sea_cur
->
tree_height
==
level
)
{
/* root split, and search the new root */
btr_cur_search_to_nth_level
(
index
,
level
,
tuple
,
PAGE_CUR_RTREE_LOCATE
,
BTR_CONT_MODIFY_TREE
,
btr_cur
,
0
,
__FILE__
,
__LINE__
,
mtr
);
}
else
{
/* btr_validate */
ut_ad
(
level
>=
1
);
ut_ad
(
!
sea_cur
);
btr_cur_search_to_nth_level
(
index
,
level
,
tuple
,
PAGE_CUR_RTREE_LOCATE
,
BTR_CONT_MODIFY_TREE
,
btr_cur
,
0
,
__FILE__
,
__LINE__
,
mtr
);
rec
=
btr_cur_get_rec
(
btr_cur
);
n_fields
=
dtuple_get_n_fields_cmp
(
tuple
);
if
(
page_rec_is_infimum
(
rec
)
||
(
btr_cur
->
low_match
!=
n_fields
))
{
ret
=
rtr_pcur_getnext_from_path
(
tuple
,
PAGE_CUR_RTREE_LOCATE
,
btr_cur
,
level
,
BTR_CONT_MODIFY_TREE
,
true
,
mtr
);
ut_ad
(
ret
&&
btr_cur
->
low_match
==
n_fields
);
}
}
ret
=
rtr_compare_cursor_rec
(
index
,
btr_cur
,
page_no
,
&
heap
);
ut_ad
(
ret
);
func_exit:
if
(
heap
)
{
mem_heap_free
(
heap
);
}
if
(
new_rtr
&&
btr_cur
->
rtr_info
)
{
rtr_clean_rtr_info
(
btr_cur
->
rtr_info
,
true
);
btr_cur
->
rtr_info
=
NULL
;
}
}
/*******************************************************************//**
Create a RTree search info structure */
rtr_info_t
*
...
...
storage/innobase/handler/ha_innodb.cc
View file @
1fbdcada
/*****************************************************************************
Copyright (c) 2000, 20
19
, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2000, 20
20
, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2008, 2009 Google Inc.
Copyright (c) 2009, Percona Inc.
Copyright (c) 2012, Facebook Inc.
...
...
@@ -11672,10 +11672,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.
...
...
@@ -17449,7 +17456,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
);
...
...
@@ -17462,14 +17468,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
);
}
...
...
@@ -17496,9 +17510,10 @@ innodb_buffer_pool_size_update(THD*,st_mysql_sys_var*,void*, const void* save)
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
];
...
...
@@ -17512,6 +17527,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
;
}
...
...
@@ -18085,49 +18109,43 @@ innodb_monitor_update(
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
);
if
(
const
char
*
buf_name
=
value
->
val_str
(
value
,
buff
,
&
len
))
{
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."
);
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
)
;
return
1
;
}
#else
/* _WIN32 */
# define innodb_srv_buf_dump_filename_validate NULL
#endif
/* _WIN32 */
#ifdef UNIV_DEBUG
static
char
*
srv_buffer_pool_evict
;
...
...
@@ -18136,10 +18154,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
;
...
...
@@ -18160,9 +18175,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
);
...
...
storage/innobase/include/fts0fts.h
View file @
1fbdcada
/*****************************************************************************
Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2016, 20
19
, MariaDB Corporation.
Copyright (c) 2016, 20
20
, 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
...
...
@@ -878,20 +878,18 @@ fts_valid_stopword_table(
name */
/****************************************************************//**
This function loads specified stopword into FTS cache
@return
TRUE
if success */
i
bool
@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 */
i
bool
stopword_is_on
,
/*!< in: Whether stopword
bool
stopword_is_on
,
/*!< in: Whether stopword
option is turned on/off */
i
bool
reload
);
/*!< in: Whether it is during
bool
reload
);
/*!< in: Whether it is during
reload of FTS table */
/****************************************************************//**
...
...
storage/innobase/include/gis0rtree.h
View file @
1fbdcada
/*****************************************************************************
Copyright (c) 2014, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2017, 20
18
, MariaDB Corporation.
Copyright (c) 2017, 20
20
, 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
...
...
@@ -163,22 +163,6 @@ rtr_ins_enlarge_mbr(
btr_cur_t
*
cursor
,
/*!< in: btr cursor */
mtr_t
*
mtr
);
/*!< in: mtr */
/********************************************************************//**
*/
void
rtr_get_father_node
(
/*================*/
dict_index_t
*
index
,
/*!< in: index */
ulint
level
,
/*!< in: the tree level of search */
const
dtuple_t
*
tuple
,
/*!< in: data tuple; NOTE: n_fields_cmp in
tuple must be set so that it cannot get
compared to the node ptr page number field! */
btr_cur_t
*
sea_cur
,
/*!< in: search cursor */
btr_cur_t
*
cursor
,
/*!< in/out: tree cursor; the cursor page is
s- or x-latched */
ulint
page_no
,
/*!< in: current page no */
mtr_t
*
mtr
);
/*!< in: mtr */
/**************************************************************//**
push a nonleaf index node to the search path */
UNIV_INLINE
...
...
storage/innobase/row/row0upd.cc
View file @
1fbdcada
...
...
@@ -2810,9 +2810,8 @@ row_upd_clust_rec_by_insert(
mtr_commit
(
mtr
);
err
=
row_ins_clust_index_entry
(
index
,
entry
,
thr
,
node
->
upd_ext
?
node
->
upd_ext
->
n_ext
:
dtuple_get_n_ext
(
entry
));
err
=
row_ins_clust_index_entry
(
index
,
entry
,
thr
,
dtuple_get_n_ext
(
entry
));
node
->
state
=
UPD_NODE_INSERT_CLUSTERED
;
mem_heap_free
(
heap
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment