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
Expand all
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
This diff is collapsed.
Click to expand it.
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 diff is collapsed.
Click to expand it.
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