Merge mysql-5.5-bugteam --> local bugfixing branch
This commit is contained in:
commit
4ee5c36845
@ -9,15 +9,19 @@
|
|||||||
*.core
|
*.core
|
||||||
*.d
|
*.d
|
||||||
*.da
|
*.da
|
||||||
|
*.dll
|
||||||
*.exe
|
*.exe
|
||||||
|
*.exp
|
||||||
*.gcda
|
*.gcda
|
||||||
*.gcno
|
*.gcno
|
||||||
*.gcov
|
*.gcov
|
||||||
*.idb
|
*.idb
|
||||||
|
*.ilk
|
||||||
*.la
|
*.la
|
||||||
*.lai
|
*.lai
|
||||||
*.lib
|
*.lib
|
||||||
*.lo
|
*.lo
|
||||||
|
*.manifest
|
||||||
*.map
|
*.map
|
||||||
*.o
|
*.o
|
||||||
*.obj
|
*.obj
|
||||||
@ -148,6 +152,7 @@ Makefile
|
|||||||
Makefile.in
|
Makefile.in
|
||||||
Makefile.in'
|
Makefile.in'
|
||||||
PENDING/*
|
PENDING/*
|
||||||
|
scripts/scripts
|
||||||
TAGS
|
TAGS
|
||||||
VC++Files/client/mysql_amd64.dsp
|
VC++Files/client/mysql_amd64.dsp
|
||||||
ac_available_languages_fragment
|
ac_available_languages_fragment
|
||||||
@ -1981,6 +1986,7 @@ sql-bench/test-transactions
|
|||||||
sql-bench/test-wisconsin
|
sql-bench/test-wisconsin
|
||||||
sql/*.cpp
|
sql/*.cpp
|
||||||
sql/*.ds?
|
sql/*.ds?
|
||||||
|
sql/*.def
|
||||||
sql/*.vcproj
|
sql/*.vcproj
|
||||||
sql/.deps/client.Po
|
sql/.deps/client.Po
|
||||||
sql/.deps/derror.Po
|
sql/.deps/derror.Po
|
||||||
@ -2116,6 +2122,7 @@ sql/.libs/udf_example.lai
|
|||||||
sql/.libs/udf_example.so.0
|
sql/.libs/udf_example.so.0
|
||||||
sql/.libs/udf_example.so.0.0.0
|
sql/.libs/udf_example.so.0.0.0
|
||||||
sql/client.c
|
sql/client.c
|
||||||
|
sql/cmake_dummy.cc
|
||||||
sql/Doxyfile
|
sql/Doxyfile
|
||||||
sql/f.c
|
sql/f.c
|
||||||
sql/gen_lex_hash
|
sql/gen_lex_hash
|
||||||
@ -3046,6 +3053,7 @@ vio/viotest.cpp
|
|||||||
win/configure.data
|
win/configure.data
|
||||||
win/vs71cache.txt
|
win/vs71cache.txt
|
||||||
win/vs8cache.txt
|
win/vs8cache.txt
|
||||||
|
win/nmake_cache.txt
|
||||||
ylwrap
|
ylwrap
|
||||||
zlib/*.ds?
|
zlib/*.ds?
|
||||||
zlib/*.vcproj
|
zlib/*.vcproj
|
||||||
|
@ -115,18 +115,27 @@ ENDIF()
|
|||||||
# Control aspects of the development environment which are
|
# Control aspects of the development environment which are
|
||||||
# specific to MySQL maintainers and developers.
|
# specific to MySQL maintainers and developers.
|
||||||
#
|
#
|
||||||
|
INCLUDE (CheckCCompilerFlag)
|
||||||
OPTION(MYSQL_MAINTAINER_MODE "MySQL maintainer-specific development environment" OFF)
|
OPTION(MYSQL_MAINTAINER_MODE "MySQL maintainer-specific development environment" OFF)
|
||||||
# Whether the maintainer mode should be enabled.
|
# Whether the maintainer mode should be enabled.
|
||||||
IF(MYSQL_MAINTAINER_MODE)
|
IF(MYSQL_MAINTAINER_MODE)
|
||||||
IF(CMAKE_COMPILER_IS_GNUCC)
|
IF(CMAKE_COMPILER_IS_GNUCC)
|
||||||
|
CHECK_C_COMPILER_FLAG("-Wdeclaration-after-statement" HAVE_DECLARATION_AFTER_STATEMENT)
|
||||||
|
IF(HAVE_DECLARATION_AFTER_STATEMENT)
|
||||||
|
SET(MY_MAINTAINER_DECLARATION_AFTER_STATEMENT "-Wdeclaration-after-statement")
|
||||||
|
ENDIF()
|
||||||
SET(MY_MAINTAINER_C_WARNINGS
|
SET(MY_MAINTAINER_C_WARNINGS
|
||||||
"-Wall -Wextra -Wunused -Wwrite-strings -Wno-strict-aliasing -Werror"
|
"-Wall -Wextra -Wunused -Wwrite-strings -Wno-strict-aliasing -Werror")
|
||||||
CACHE STRING "C warning options used in maintainer builds.")
|
|
||||||
ENDIF()
|
ENDIF()
|
||||||
IF(CMAKE_COMPILER_IS_GNUCXX)
|
IF(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
SET(MY_MAINTAINER_CXX_WARNINGS "${MY_MAINTAINER_C_WARNINGS} -Wno-unused-parameter"
|
SET(MY_MAINTAINER_CXX_WARNINGS "${MY_MAINTAINER_C_WARNINGS} -Wno-unused-parameter"
|
||||||
CACHE STRING "C++ warning options used in maintainer builds.")
|
CACHE STRING "C++ warning options used in maintainer builds.")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
IF(CMAKE_COMPILER_IS_GNUCC)
|
||||||
|
SET(MY_MAINTAINER_C_WARNINGS
|
||||||
|
"${MY_MAINTAINER_C_WARNINGS} ${MY_MAINTAINER_DECLARATION_AFTER_STATEMENT}"
|
||||||
|
CACHE STRING "C warning options used in maintainer builds.")
|
||||||
|
ENDIF()
|
||||||
# Do not make warnings in checks into errors.
|
# Do not make warnings in checks into errors.
|
||||||
IF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX)
|
IF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX)
|
||||||
SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Wno-error")
|
SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Wno-error")
|
||||||
|
@ -1010,10 +1010,11 @@ static struct my_option my_long_options[] =
|
|||||||
"row-based events; 'decode-rows' decodes row events into commented SQL "
|
"row-based events; 'decode-rows' decodes row events into commented SQL "
|
||||||
"statements if the --verbose option is also given; 'auto' prints base64 "
|
"statements if the --verbose option is also given; 'auto' prints base64 "
|
||||||
"only when necessary (i.e., for row-based events and format description "
|
"only when necessary (i.e., for row-based events and format description "
|
||||||
"events); 'always' prints base64 whenever possible. 'always' is for "
|
"events); 'always' prints base64 whenever possible. 'always' is "
|
||||||
"debugging only and should not be used in a production system. If this "
|
"deprecated, will be removed in a future version, and should not be used "
|
||||||
"argument is not given, the default is 'auto'; if it is given with no "
|
"in a production system. --base64-output with no 'name' argument is "
|
||||||
"argument, 'always' is used.",
|
"equivalent to --base64-output=always and is also deprecated. If no "
|
||||||
|
"--base64-output[=name] option is given at all, the default is 'auto'.",
|
||||||
&opt_base64_output_mode_str, &opt_base64_output_mode_str,
|
&opt_base64_output_mode_str, &opt_base64_output_mode_str,
|
||||||
0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
/*
|
/*
|
||||||
@ -2024,6 +2025,13 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
if (opt_base64_output_mode == BASE64_OUTPUT_UNSPEC)
|
if (opt_base64_output_mode == BASE64_OUTPUT_UNSPEC)
|
||||||
opt_base64_output_mode= BASE64_OUTPUT_AUTO;
|
opt_base64_output_mode= BASE64_OUTPUT_AUTO;
|
||||||
|
if (opt_base64_output_mode == BASE64_OUTPUT_ALWAYS)
|
||||||
|
warning("The --base64-output=always flag and the --base64-output flag "
|
||||||
|
"(with '=MODE' omitted), are deprecated. "
|
||||||
|
"The output generated when these flags are used cannot be "
|
||||||
|
"parsed by mysql 5.6.0 and later. "
|
||||||
|
"The flags will be removed in a future version. "
|
||||||
|
"Please use --base64-output=auto instead.");
|
||||||
|
|
||||||
my_set_max_open_files(open_files_limit);
|
my_set_max_open_files(open_files_limit);
|
||||||
|
|
||||||
|
@ -42,6 +42,9 @@ MACRO(GET_MYSQL_VERSION)
|
|||||||
IF(NOT VERSION_STRING)
|
IF(NOT VERSION_STRING)
|
||||||
FILE(STRINGS configure.in str REGEX "AC_INIT\\(")
|
FILE(STRINGS configure.in str REGEX "AC_INIT\\(")
|
||||||
STRING(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+[-][a-zAZ0-9]+" VERSION_STRING "${str}")
|
STRING(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+[-][a-zAZ0-9]+" VERSION_STRING "${str}")
|
||||||
|
IF(NOT VERSION_STRING)
|
||||||
|
STRING(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" VERSION_STRING "${str}")
|
||||||
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
@ -19,6 +19,7 @@ AC_DEFUN([MY_MAINTAINER_MODE_WARNINGS], [
|
|||||||
AS_IF([test "$GCC" = "yes"], [
|
AS_IF([test "$GCC" = "yes"], [
|
||||||
C_WARNINGS="-Wall -Wextra -Wunused -Wwrite-strings -Wno-strict-aliasing -Werror"
|
C_WARNINGS="-Wall -Wextra -Wunused -Wwrite-strings -Wno-strict-aliasing -Werror"
|
||||||
CXX_WARNINGS="${C_WARNINGS} -Wno-unused-parameter"
|
CXX_WARNINGS="${C_WARNINGS} -Wno-unused-parameter"
|
||||||
|
C_WARNINGS="${C_WARNINGS} -Wdeclaration-after-statement"
|
||||||
])
|
])
|
||||||
|
|
||||||
# Test whether the warning options work.
|
# Test whether the warning options work.
|
||||||
|
@ -27,7 +27,7 @@ dnl
|
|||||||
dnl When changing the major version number please also check the switch
|
dnl When changing the major version number please also check the switch
|
||||||
dnl statement in mysqlbinlog::check_master_version(). You may also need
|
dnl statement in mysqlbinlog::check_master_version(). You may also need
|
||||||
dnl to update version.c in ndb.
|
dnl to update version.c in ndb.
|
||||||
AC_INIT([MySQL Server], [5.5.8-ga], [], [mysql])
|
AC_INIT([MySQL Server], [5.5.8], [], [mysql])
|
||||||
|
|
||||||
AC_CONFIG_SRCDIR([sql/mysqld.cc])
|
AC_CONFIG_SRCDIR([sql/mysqld.cc])
|
||||||
AC_CANONICAL_SYSTEM
|
AC_CANONICAL_SYSTEM
|
||||||
|
@ -256,7 +256,7 @@ extern my_bool my_disable_locking, my_disable_async_io,
|
|||||||
extern char wild_many,wild_one,wild_prefix;
|
extern char wild_many,wild_one,wild_prefix;
|
||||||
extern const char *charsets_dir;
|
extern const char *charsets_dir;
|
||||||
/* from default.c */
|
/* from default.c */
|
||||||
extern char *my_defaults_extra_file;
|
extern const char *my_defaults_extra_file;
|
||||||
extern const char *my_defaults_group_suffix;
|
extern const char *my_defaults_group_suffix;
|
||||||
extern const char *my_defaults_file;
|
extern const char *my_defaults_file;
|
||||||
|
|
||||||
|
@ -90,8 +90,8 @@ typedef struct st_mysql_server_auth_info
|
|||||||
int password_used;
|
int password_used;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Set to the name of the connected client if it can be resolved, or to
|
Set to the name of the connected client host, if it can be resolved,
|
||||||
the address otherwise
|
or to its IP address otherwise.
|
||||||
*/
|
*/
|
||||||
const char *host_or_ip;
|
const char *host_or_ip;
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ typedef struct st_mysql_server_auth_info
|
|||||||
*/
|
*/
|
||||||
struct st_mysql_auth
|
struct st_mysql_auth
|
||||||
{
|
{
|
||||||
int interface_version; /**< version plugin uses */
|
int interface_version; /** version plugin uses */
|
||||||
/**
|
/**
|
||||||
A plugin that a client must use for authentication with this server
|
A plugin that a client must use for authentication with this server
|
||||||
plugin. Can be NULL to mean "any plugin".
|
plugin. Can be NULL to mean "any plugin".
|
||||||
|
@ -506,7 +506,8 @@ int init_embedded_server(int argc, char **argv, char **groups)
|
|||||||
|
|
||||||
orig_argc= *argcp;
|
orig_argc= *argcp;
|
||||||
orig_argv= *argvp;
|
orig_argv= *argvp;
|
||||||
load_defaults("my", (const char **)groups, argcp, argvp);
|
if (load_defaults("my", (const char **)groups, argcp, argvp))
|
||||||
|
return 1;
|
||||||
defaults_argc= *argcp;
|
defaults_argc= *argcp;
|
||||||
defaults_argv= *argvp;
|
defaults_argv= *argvp;
|
||||||
remaining_argc= argc;
|
remaining_argc= argc;
|
||||||
|
@ -24,8 +24,6 @@ main.wait_timeout @solaris # Bug#51244 2010-04-26 alik wait_timeou
|
|||||||
rpl.rpl_heartbeat_basic # BUG#54820 2010-06-26 alik rpl.rpl_heartbeat_basic fails sporadically again
|
rpl.rpl_heartbeat_basic # BUG#54820 2010-06-26 alik rpl.rpl_heartbeat_basic fails sporadically again
|
||||||
rpl.rpl_heartbeat_2slaves # BUG#43828 2009-10-22 luis fails sporadically
|
rpl.rpl_heartbeat_2slaves # BUG#43828 2009-10-22 luis fails sporadically
|
||||||
rpl.rpl_innodb_bug28430* # Bug#46029
|
rpl.rpl_innodb_bug28430* # Bug#46029
|
||||||
rpl.rpl_innodb_bug30888* @solaris # Bug#47646 2009-09-25 alik rpl.rpl_innodb_bug30888 fails sporadically on Solaris
|
|
||||||
rpl.rpl_killed_ddl @windows # Bug#47638 2010-01-20 alik The rpl_killed_ddl test fails on Windows
|
|
||||||
|
|
||||||
sys_vars.max_sp_recursion_depth_func @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
sys_vars.max_sp_recursion_depth_func @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
||||||
sys_vars.slow_query_log_func @solaris # Bug#54819 2010-06-26 alik sys_vars.slow_query_log_func fails sporadically on Solaris 10
|
sys_vars.slow_query_log_func @solaris # Bug#54819 2010-06-26 alik sys_vars.slow_query_log_func fails sporadically on Solaris 10
|
||||||
|
@ -4463,7 +4463,13 @@ sub mysqld_arguments ($$$) {
|
|||||||
my $mysqld= shift;
|
my $mysqld= shift;
|
||||||
my $extra_opts= shift;
|
my $extra_opts= shift;
|
||||||
|
|
||||||
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
my @defaults = grep(/^--defaults-file=/, @$extra_opts);
|
||||||
|
if (@defaults > 0) {
|
||||||
|
mtr_add_arg($args, pop(@defaults))
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
||||||
|
}
|
||||||
|
|
||||||
# When mysqld is run by a root user(euid is 0), it will fail
|
# When mysqld is run by a root user(euid is 0), it will fail
|
||||||
# to start unless we specify what user to run as, see BUG#30630
|
# to start unless we specify what user to run as, see BUG#30630
|
||||||
@ -4499,6 +4505,9 @@ sub mysqld_arguments ($$$) {
|
|||||||
my $found_skip_core= 0;
|
my $found_skip_core= 0;
|
||||||
foreach my $arg ( @$extra_opts )
|
foreach my $arg ( @$extra_opts )
|
||||||
{
|
{
|
||||||
|
# Skip --defaults-file option since it's handled above.
|
||||||
|
next if $arg =~ /^--defaults-file/;
|
||||||
|
|
||||||
# Allow --skip-core-file to be set in <testname>-[master|slave].opt file
|
# Allow --skip-core-file to be set in <testname>-[master|slave].opt file
|
||||||
if ($arg eq "--skip-core-file")
|
if ($arg eq "--skip-core-file")
|
||||||
{
|
{
|
||||||
@ -5317,8 +5326,7 @@ sub gdb_arguments {
|
|||||||
"break mysql_parse\n" .
|
"break mysql_parse\n" .
|
||||||
"commands 1\n" .
|
"commands 1\n" .
|
||||||
"disable 1\n" .
|
"disable 1\n" .
|
||||||
"end\n" .
|
"end\n");
|
||||||
"run");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $opt_manual_gdb )
|
if ( $opt_manual_gdb )
|
||||||
|
@ -21,7 +21,7 @@ ndb_binlog_index
|
|||||||
plugin
|
plugin
|
||||||
proc
|
proc
|
||||||
procs_priv
|
procs_priv
|
||||||
proxy_priv
|
proxies_priv
|
||||||
servers
|
servers
|
||||||
slow_log
|
slow_log
|
||||||
tables_priv
|
tables_priv
|
||||||
|
@ -15,7 +15,7 @@ ndb_binlog_index
|
|||||||
plugin
|
plugin
|
||||||
proc
|
proc
|
||||||
procs_priv
|
procs_priv
|
||||||
proxy_priv
|
proxies_priv
|
||||||
servers
|
servers
|
||||||
slow_log
|
slow_log
|
||||||
tables_priv
|
tables_priv
|
||||||
@ -49,7 +49,7 @@ ndb_binlog_index
|
|||||||
plugin
|
plugin
|
||||||
proc
|
proc
|
||||||
procs_priv
|
procs_priv
|
||||||
proxy_priv
|
proxies_priv
|
||||||
servers
|
servers
|
||||||
slow_log
|
slow_log
|
||||||
tables_priv
|
tables_priv
|
||||||
@ -91,7 +91,7 @@ ndb_binlog_index
|
|||||||
plugin
|
plugin
|
||||||
proc
|
proc
|
||||||
procs_priv
|
procs_priv
|
||||||
proxy_priv
|
proxies_priv
|
||||||
servers
|
servers
|
||||||
slow_log
|
slow_log
|
||||||
tables_priv
|
tables_priv
|
||||||
|
@ -1425,7 +1425,7 @@ create table t1 as select concat(time_to_sec('10:11:12')) as c1;
|
|||||||
show create table t1;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`c1` varbinary(10) NOT NULL DEFAULT ''
|
`c1` varbinary(10) DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
select hex(concat(extract(year from 20090702)));
|
select hex(concat(extract(year from 20090702)));
|
||||||
|
@ -1507,7 +1507,7 @@ create table t1 as select concat(time_to_sec('10:11:12')) as c1;
|
|||||||
show create table t1;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`c1` varchar(10) CHARACTER SET cp1251 NOT NULL DEFAULT ''
|
`c1` varchar(10) CHARACTER SET cp1251 DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
select hex(concat(extract(year from 20090702)));
|
select hex(concat(extract(year from 20090702)));
|
||||||
|
@ -1835,7 +1835,7 @@ create table t1 as select concat(time_to_sec('10:11:12')) as c1;
|
|||||||
show create table t1;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`c1` varchar(10) NOT NULL DEFAULT ''
|
`c1` varchar(10) DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
select hex(concat(extract(year from 20090702)));
|
select hex(concat(extract(year from 20090702)));
|
||||||
|
@ -2667,7 +2667,7 @@ create table t1 as select concat(time_to_sec('10:11:12')) as c1;
|
|||||||
show create table t1;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`c1` varchar(10) CHARACTER SET ucs2 NOT NULL DEFAULT ''
|
`c1` varchar(10) CHARACTER SET ucs2 DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
select hex(concat(extract(year from 20090702)));
|
select hex(concat(extract(year from 20090702)));
|
||||||
|
@ -3511,7 +3511,7 @@ create table t1 as select concat(time_to_sec('10:11:12')) as c1;
|
|||||||
show create table t1;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`c1` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT ''
|
`c1` varchar(10) CHARACTER SET utf8 DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
select hex(concat(extract(year from 20090702)));
|
select hex(concat(extract(year from 20090702)));
|
||||||
|
@ -134,3 +134,15 @@ INSERT INTO t1 VALUES ('abc\0\0');
|
|||||||
INSERT INTO t1 VALUES ('abc\0\0');
|
INSERT INTO t1 VALUES ('abc\0\0');
|
||||||
ERROR 23000: Duplicate entry 'abc\x00\x00' for key 'PRIMARY'
|
ERROR 23000: Duplicate entry 'abc\x00\x00' for key 'PRIMARY'
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug#57882: Item_func_conv_charset::val_str(String*):
|
||||||
|
# Assertion `fixed == 1' failed
|
||||||
|
#
|
||||||
|
SELECT (CONVERT('0' USING latin1) IN (CHAR(COT('v') USING utf8),''));
|
||||||
|
ERROR 22003: DOUBLE value is out of range in 'cot('v')'
|
||||||
|
SET NAMES utf8 COLLATE utf8_latvian_ci ;
|
||||||
|
SELECT UPDATEXML(-73 * -2465717823867977728,@@global.auto_increment_increment,null);
|
||||||
|
ERROR 22003: BIGINT value is out of range in '(-(73) * -(2465717823867977728))'
|
||||||
|
#
|
||||||
|
# End Bug#57882
|
||||||
|
#
|
||||||
|
@ -1315,6 +1315,20 @@ SELECT 1 FROM t1 ORDER BY @x:=makedate(a,a);
|
|||||||
1
|
1
|
||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug #52160: crash and inconsistent results when grouping
|
||||||
|
# by a function and column
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a CHAR(10) NOT NULL);
|
||||||
|
INSERT INTO t1 VALUES (''),('');
|
||||||
|
SELECT COUNT(*) FROM t1 GROUP BY TIME_TO_SEC(a);
|
||||||
|
COUNT(*)
|
||||||
|
2
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect time value: ''
|
||||||
|
Warning 1292 Truncated incorrect time value: ''
|
||||||
|
Warning 1292 Truncated incorrect time value: ''
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
#
|
#
|
||||||
# Bug#57039: constant subtime expression returns incorrect result.
|
# Bug#57039: constant subtime expression returns incorrect result.
|
||||||
|
@ -88,7 +88,7 @@ host
|
|||||||
plugin
|
plugin
|
||||||
proc
|
proc
|
||||||
procs_priv
|
procs_priv
|
||||||
proxy_priv
|
proxies_priv
|
||||||
servers
|
servers
|
||||||
slow_log
|
slow_log
|
||||||
tables_priv
|
tables_priv
|
||||||
|
@ -45,3 +45,227 @@ p1
|
|||||||
max=1
|
max=1
|
||||||
drop procedure p1;
|
drop procedure p1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE slow (slow INT, general INT, master_heartbeat_period INT, ignore_server_ids INT);
|
||||||
|
INSERT INTO slow(slow, general, master_heartbeat_period, ignore_server_ids) VALUES (1,2,3,4), (5,6,7,8);
|
||||||
|
INSERT INTO slow(slow, general, master_heartbeat_period) VALUES (1,2,3), (5,6,7);
|
||||||
|
INSERT INTO slow(slow, general) VALUES (1,2), (5,6);
|
||||||
|
INSERT INTO slow(slow) VALUES (1), (5);
|
||||||
|
SELECT slow, general, master_heartbeat_period, ignore_server_ids FROM slow ORDER BY slow;
|
||||||
|
slow general master_heartbeat_period ignore_server_ids
|
||||||
|
1 2 3 4
|
||||||
|
1 2 3 NULL
|
||||||
|
1 2 NULL NULL
|
||||||
|
1 NULL NULL NULL
|
||||||
|
5 6 7 8
|
||||||
|
5 6 7 NULL
|
||||||
|
5 6 NULL NULL
|
||||||
|
5 NULL NULL NULL
|
||||||
|
SELECT slow, general, master_heartbeat_period FROM slow ORDER BY slow;
|
||||||
|
slow general master_heartbeat_period
|
||||||
|
1 2 3
|
||||||
|
1 2 3
|
||||||
|
1 2 NULL
|
||||||
|
1 NULL NULL
|
||||||
|
5 6 7
|
||||||
|
5 6 7
|
||||||
|
5 6 NULL
|
||||||
|
5 NULL NULL
|
||||||
|
SELECT slow, master_heartbeat_period FROM slow ORDER BY slow;
|
||||||
|
slow master_heartbeat_period
|
||||||
|
1 3
|
||||||
|
1 3
|
||||||
|
1 NULL
|
||||||
|
1 NULL
|
||||||
|
5 7
|
||||||
|
5 7
|
||||||
|
5 NULL
|
||||||
|
5 NULL
|
||||||
|
SELECT slow FROM slow ORDER BY slow;
|
||||||
|
slow
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
5
|
||||||
|
5
|
||||||
|
5
|
||||||
|
5
|
||||||
|
DROP TABLE slow;
|
||||||
|
CREATE TABLE general (slow INT, general INT, master_heartbeat_period INT, ignore_server_ids INT);
|
||||||
|
INSERT INTO general(slow, general, master_heartbeat_period, ignore_server_ids) VALUES (1,2,3,4), (5,6,7,8);
|
||||||
|
INSERT INTO general(slow, general, master_heartbeat_period) VALUES (1,2,3), (5,6,7);
|
||||||
|
INSERT INTO general(slow, general) VALUES (1,2), (5,6);
|
||||||
|
INSERT INTO general(slow) VALUES (1), (5);
|
||||||
|
SELECT slow, general, master_heartbeat_period, ignore_server_ids FROM general ORDER BY slow;
|
||||||
|
slow general master_heartbeat_period ignore_server_ids
|
||||||
|
1 2 3 4
|
||||||
|
1 2 3 NULL
|
||||||
|
1 2 NULL NULL
|
||||||
|
1 NULL NULL NULL
|
||||||
|
5 6 7 8
|
||||||
|
5 6 7 NULL
|
||||||
|
5 6 NULL NULL
|
||||||
|
5 NULL NULL NULL
|
||||||
|
SELECT slow, general, master_heartbeat_period FROM general ORDER BY slow;
|
||||||
|
slow general master_heartbeat_period
|
||||||
|
1 2 3
|
||||||
|
1 2 3
|
||||||
|
1 2 NULL
|
||||||
|
1 NULL NULL
|
||||||
|
5 6 7
|
||||||
|
5 6 7
|
||||||
|
5 6 NULL
|
||||||
|
5 NULL NULL
|
||||||
|
SELECT slow, master_heartbeat_period FROM general ORDER BY slow;
|
||||||
|
slow master_heartbeat_period
|
||||||
|
1 3
|
||||||
|
1 3
|
||||||
|
1 NULL
|
||||||
|
1 NULL
|
||||||
|
5 7
|
||||||
|
5 7
|
||||||
|
5 NULL
|
||||||
|
5 NULL
|
||||||
|
SELECT slow FROM general ORDER BY slow;
|
||||||
|
slow
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
5
|
||||||
|
5
|
||||||
|
5
|
||||||
|
5
|
||||||
|
DROP TABLE general;
|
||||||
|
CREATE TABLE master_heartbeat_period (slow INT, general INT, master_heartbeat_period INT, ignore_server_ids INT);
|
||||||
|
INSERT INTO master_heartbeat_period(slow, general, master_heartbeat_period, ignore_server_ids) VALUES (1,2,3,4), (5,6,7,8);
|
||||||
|
INSERT INTO master_heartbeat_period(slow, general, master_heartbeat_period) VALUES (1,2,3), (5,6,7);
|
||||||
|
INSERT INTO master_heartbeat_period(slow, general) VALUES (1,2), (5,6);
|
||||||
|
INSERT INTO master_heartbeat_period(slow) VALUES (1), (5);
|
||||||
|
SELECT slow, general, master_heartbeat_period, ignore_server_ids FROM master_heartbeat_period ORDER BY slow;
|
||||||
|
slow general master_heartbeat_period ignore_server_ids
|
||||||
|
1 2 3 4
|
||||||
|
1 2 3 NULL
|
||||||
|
1 2 NULL NULL
|
||||||
|
1 NULL NULL NULL
|
||||||
|
5 6 7 8
|
||||||
|
5 6 7 NULL
|
||||||
|
5 6 NULL NULL
|
||||||
|
5 NULL NULL NULL
|
||||||
|
SELECT slow, general, master_heartbeat_period FROM master_heartbeat_period ORDER BY slow;
|
||||||
|
slow general master_heartbeat_period
|
||||||
|
1 2 3
|
||||||
|
1 2 3
|
||||||
|
1 2 NULL
|
||||||
|
1 NULL NULL
|
||||||
|
5 6 7
|
||||||
|
5 6 7
|
||||||
|
5 6 NULL
|
||||||
|
5 NULL NULL
|
||||||
|
SELECT slow, master_heartbeat_period FROM master_heartbeat_period ORDER BY slow;
|
||||||
|
slow master_heartbeat_period
|
||||||
|
1 3
|
||||||
|
1 3
|
||||||
|
1 NULL
|
||||||
|
1 NULL
|
||||||
|
5 7
|
||||||
|
5 7
|
||||||
|
5 NULL
|
||||||
|
5 NULL
|
||||||
|
SELECT slow FROM master_heartbeat_period ORDER BY slow;
|
||||||
|
slow
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
5
|
||||||
|
5
|
||||||
|
5
|
||||||
|
5
|
||||||
|
DROP TABLE master_heartbeat_period;
|
||||||
|
CREATE TABLE ignore_server_ids (slow INT, general INT, master_heartbeat_period INT, ignore_server_ids INT);
|
||||||
|
INSERT INTO ignore_server_ids(slow, general, master_heartbeat_period, ignore_server_ids) VALUES (1,2,3,4), (5,6,7,8);
|
||||||
|
INSERT INTO ignore_server_ids(slow, general, master_heartbeat_period) VALUES (1,2,3), (5,6,7);
|
||||||
|
INSERT INTO ignore_server_ids(slow, general) VALUES (1,2), (5,6);
|
||||||
|
INSERT INTO ignore_server_ids(slow) VALUES (1), (5);
|
||||||
|
SELECT slow, general, master_heartbeat_period, ignore_server_ids FROM ignore_server_ids ORDER BY slow;
|
||||||
|
slow general master_heartbeat_period ignore_server_ids
|
||||||
|
1 2 3 4
|
||||||
|
1 2 3 NULL
|
||||||
|
1 2 NULL NULL
|
||||||
|
1 NULL NULL NULL
|
||||||
|
5 6 7 8
|
||||||
|
5 6 7 NULL
|
||||||
|
5 6 NULL NULL
|
||||||
|
5 NULL NULL NULL
|
||||||
|
SELECT slow, general, master_heartbeat_period FROM ignore_server_ids ORDER BY slow;
|
||||||
|
slow general master_heartbeat_period
|
||||||
|
1 2 3
|
||||||
|
1 2 3
|
||||||
|
1 2 NULL
|
||||||
|
1 NULL NULL
|
||||||
|
5 6 7
|
||||||
|
5 6 7
|
||||||
|
5 6 NULL
|
||||||
|
5 NULL NULL
|
||||||
|
SELECT slow, master_heartbeat_period FROM ignore_server_ids ORDER BY slow;
|
||||||
|
slow master_heartbeat_period
|
||||||
|
1 3
|
||||||
|
1 3
|
||||||
|
1 NULL
|
||||||
|
1 NULL
|
||||||
|
5 7
|
||||||
|
5 7
|
||||||
|
5 NULL
|
||||||
|
5 NULL
|
||||||
|
SELECT slow FROM ignore_server_ids ORDER BY slow;
|
||||||
|
slow
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
5
|
||||||
|
5
|
||||||
|
5
|
||||||
|
5
|
||||||
|
DROP TABLE ignore_server_ids;
|
||||||
|
CREATE TABLE t1 (slow INT, general INT, ignore_server_ids INT, master_heartbeat_period INT);
|
||||||
|
INSERT INTO t1 VALUES (1,2,3,4);
|
||||||
|
CREATE PROCEDURE p1()
|
||||||
|
BEGIN
|
||||||
|
DECLARE slow INT;
|
||||||
|
DECLARE general INT;
|
||||||
|
DECLARE ignore_server_ids INT;
|
||||||
|
DECLARE master_heartbeat_period INT;
|
||||||
|
SELECT max(t1.slow) INTO slow FROM t1;
|
||||||
|
SELECT max(t1.general) INTO general FROM t1;
|
||||||
|
SELECT max(t1.ignore_server_ids) INTO ignore_server_ids FROM t1;
|
||||||
|
SELECT max(t1.master_heartbeat_period) INTO master_heartbeat_period FROM t1;
|
||||||
|
SELECT slow, general, ignore_server_ids, master_heartbeat_period;
|
||||||
|
END|
|
||||||
|
CREATE PROCEDURE p2()
|
||||||
|
BEGIN
|
||||||
|
DECLARE n INT DEFAULT 2;
|
||||||
|
general: WHILE n > 0 DO
|
||||||
|
SET n = n -1;
|
||||||
|
END WHILE general;
|
||||||
|
SET n = 2;
|
||||||
|
slow: WHILE n > 0 DO
|
||||||
|
SET n = n -1;
|
||||||
|
END WHILE slow;
|
||||||
|
SET n = 2;
|
||||||
|
ignore_server_ids: WHILE n > 0 DO
|
||||||
|
SET n = n -1;
|
||||||
|
END WHILE ignore_server_ids;
|
||||||
|
SET n = 2;
|
||||||
|
master_heartbeat_period: WHILE n > 0 DO
|
||||||
|
SET n = n -1;
|
||||||
|
END WHILE master_heartbeat_period;
|
||||||
|
END|
|
||||||
|
CALL p1();
|
||||||
|
slow general ignore_server_ids master_heartbeat_period
|
||||||
|
1 2 3 4
|
||||||
|
call p2();
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
DROP PROCEDURE p2;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -896,6 +896,16 @@ TIMESTAMP 1 1 SELECT SQL_NO_CACHE 'Bug#31700 - KEY', f1,f2,f3,SLEEP(1.1) FROM t1
|
|||||||
TIMESTAMP 1 1 SELECT SQL_NO_CACHE 'Bug#31700 - PK', f1,f2,f3,SLEEP(1.1) FROM t1 WHERE f1=2
|
TIMESTAMP 1 1 SELECT SQL_NO_CACHE 'Bug#31700 - PK', f1,f2,f3,SLEEP(1.1) FROM t1 WHERE f1=2
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
TRUNCATE TABLE mysql.slow_log;
|
TRUNCATE TABLE mysql.slow_log;
|
||||||
|
use mysql;
|
||||||
|
drop table if exists renamed_general_log;
|
||||||
|
drop table if exists renamed_slow_log;
|
||||||
|
RENAME TABLE general_log TO renamed_general_log;
|
||||||
|
ERROR HY000: Cannot rename 'general_log'. When logging enabled, rename to/from log table must rename two tables: the log table to an archive table and another table back to 'general_log'
|
||||||
|
RENAME TABLE slow_log TO renamed_slow_log;
|
||||||
|
ERROR HY000: Cannot rename 'slow_log'. When logging enabled, rename to/from log table must rename two tables: the log table to an archive table and another table back to 'slow_log'
|
||||||
|
use test;
|
||||||
|
flush tables with read lock;
|
||||||
|
unlock tables;
|
||||||
SET @@session.long_query_time= @old_long_query_time;
|
SET @@session.long_query_time= @old_long_query_time;
|
||||||
SET @@global.log_output= @old_log_output;
|
SET @@global.log_output= @old_log_output;
|
||||||
SET @@global.slow_query_log= @old_slow_query_log;
|
SET @@global.slow_query_log= @old_slow_query_log;
|
||||||
|
@ -27,7 +27,7 @@ mysql.ndb_binlog_index OK
|
|||||||
mysql.plugin OK
|
mysql.plugin OK
|
||||||
mysql.proc OK
|
mysql.proc OK
|
||||||
mysql.procs_priv OK
|
mysql.procs_priv OK
|
||||||
mysql.proxy_priv OK
|
mysql.proxies_priv OK
|
||||||
mysql.renamed_general_log OK
|
mysql.renamed_general_log OK
|
||||||
mysql.servers OK
|
mysql.servers OK
|
||||||
mysql.slow_log OK
|
mysql.slow_log OK
|
||||||
|
@ -15,7 +15,7 @@ mysql.ndb_binlog_index OK
|
|||||||
mysql.plugin OK
|
mysql.plugin OK
|
||||||
mysql.proc OK
|
mysql.proc OK
|
||||||
mysql.procs_priv OK
|
mysql.procs_priv OK
|
||||||
mysql.proxy_priv OK
|
mysql.proxies_priv OK
|
||||||
mysql.servers OK
|
mysql.servers OK
|
||||||
mysql.slow_log OK
|
mysql.slow_log OK
|
||||||
mysql.tables_priv OK
|
mysql.tables_priv OK
|
||||||
@ -44,7 +44,7 @@ mysql.ndb_binlog_index OK
|
|||||||
mysql.plugin OK
|
mysql.plugin OK
|
||||||
mysql.proc OK
|
mysql.proc OK
|
||||||
mysql.procs_priv OK
|
mysql.procs_priv OK
|
||||||
mysql.proxy_priv OK
|
mysql.proxies_priv OK
|
||||||
mysql.servers OK
|
mysql.servers OK
|
||||||
mysql.slow_log OK
|
mysql.slow_log OK
|
||||||
mysql.tables_priv OK
|
mysql.tables_priv OK
|
||||||
@ -73,7 +73,7 @@ mysql.ndb_binlog_index OK
|
|||||||
mysql.plugin OK
|
mysql.plugin OK
|
||||||
mysql.proc OK
|
mysql.proc OK
|
||||||
mysql.procs_priv OK
|
mysql.procs_priv OK
|
||||||
mysql.proxy_priv OK
|
mysql.proxies_priv OK
|
||||||
mysql.servers OK
|
mysql.servers OK
|
||||||
mysql.slow_log OK
|
mysql.slow_log OK
|
||||||
mysql.tables_priv OK
|
mysql.tables_priv OK
|
||||||
@ -104,7 +104,7 @@ mysql.ndb_binlog_index OK
|
|||||||
mysql.plugin OK
|
mysql.plugin OK
|
||||||
mysql.proc OK
|
mysql.proc OK
|
||||||
mysql.procs_priv OK
|
mysql.procs_priv OK
|
||||||
mysql.proxy_priv OK
|
mysql.proxies_priv OK
|
||||||
mysql.servers OK
|
mysql.servers OK
|
||||||
mysql.slow_log OK
|
mysql.slow_log OK
|
||||||
mysql.tables_priv OK
|
mysql.tables_priv OK
|
||||||
@ -139,7 +139,7 @@ mysql.ndb_binlog_index OK
|
|||||||
mysql.plugin OK
|
mysql.plugin OK
|
||||||
mysql.proc OK
|
mysql.proc OK
|
||||||
mysql.procs_priv OK
|
mysql.procs_priv OK
|
||||||
mysql.proxy_priv OK
|
mysql.proxies_priv OK
|
||||||
mysql.servers OK
|
mysql.servers OK
|
||||||
mysql.slow_log OK
|
mysql.slow_log OK
|
||||||
mysql.tables_priv OK
|
mysql.tables_priv OK
|
||||||
@ -177,7 +177,7 @@ mysql.ndb_binlog_index OK
|
|||||||
mysql.plugin OK
|
mysql.plugin OK
|
||||||
mysql.proc OK
|
mysql.proc OK
|
||||||
mysql.procs_priv OK
|
mysql.procs_priv OK
|
||||||
mysql.proxy_priv OK
|
mysql.proxies_priv OK
|
||||||
mysql.servers OK
|
mysql.servers OK
|
||||||
mysql.slow_log OK
|
mysql.slow_log OK
|
||||||
mysql.tables_priv OK
|
mysql.tables_priv OK
|
||||||
|
@ -17,7 +17,7 @@ mysql.ndb_binlog_index OK
|
|||||||
mysql.plugin OK
|
mysql.plugin OK
|
||||||
mysql.proc OK
|
mysql.proc OK
|
||||||
mysql.procs_priv OK
|
mysql.procs_priv OK
|
||||||
mysql.proxy_priv OK
|
mysql.proxies_priv OK
|
||||||
mysql.servers OK
|
mysql.servers OK
|
||||||
mysql.slow_log OK
|
mysql.slow_log OK
|
||||||
mysql.tables_priv OK
|
mysql.tables_priv OK
|
||||||
|
@ -879,3 +879,7 @@ ROLLBACK /* added by mysqlbinlog */;
|
|||||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
# Expect deprecation warning.
|
||||||
|
WARNING: The --base64-output=always flag and the --base64-output flag (with '=MODE' omitted), are deprecated. The output generated when these flags are used cannot be parsed by mysql 5.6.0 and later. The flags will be removed in a future version. Please use --base64-output=auto instead.
|
||||||
|
# Expect deprecation warning again.
|
||||||
|
WARNING: The --base64-output=always flag and the --base64-output flag (with '=MODE' omitted), are deprecated. The output generated when these flags are used cannot be parsed by mysql 5.6.0 and later. The flags will be removed in a future version. Please use --base64-output=auto instead.
|
||||||
|
@ -18,7 +18,7 @@ mysql.ndb_binlog_index OK
|
|||||||
mysql.plugin OK
|
mysql.plugin OK
|
||||||
mysql.proc OK
|
mysql.proc OK
|
||||||
mysql.procs_priv OK
|
mysql.procs_priv OK
|
||||||
mysql.proxy_priv OK
|
mysql.proxies_priv OK
|
||||||
mysql.servers OK
|
mysql.servers OK
|
||||||
mysql.slow_log
|
mysql.slow_log
|
||||||
note : The storage engine for the table doesn't support analyze
|
note : The storage engine for the table doesn't support analyze
|
||||||
@ -46,7 +46,7 @@ mysql.ndb_binlog_index OK
|
|||||||
mysql.plugin OK
|
mysql.plugin OK
|
||||||
mysql.proc OK
|
mysql.proc OK
|
||||||
mysql.procs_priv OK
|
mysql.procs_priv OK
|
||||||
mysql.proxy_priv OK
|
mysql.proxies_priv OK
|
||||||
mysql.servers OK
|
mysql.servers OK
|
||||||
mysql.slow_log
|
mysql.slow_log
|
||||||
note : The storage engine for the table doesn't support optimize
|
note : The storage engine for the table doesn't support optimize
|
||||||
@ -72,7 +72,7 @@ mysql.ndb_binlog_index OK
|
|||||||
mysql.plugin OK
|
mysql.plugin OK
|
||||||
mysql.proc OK
|
mysql.proc OK
|
||||||
mysql.procs_priv OK
|
mysql.procs_priv OK
|
||||||
mysql.proxy_priv OK
|
mysql.proxies_priv OK
|
||||||
mysql.servers OK
|
mysql.servers OK
|
||||||
mysql.slow_log
|
mysql.slow_log
|
||||||
note : The storage engine for the table doesn't support analyze
|
note : The storage engine for the table doesn't support analyze
|
||||||
@ -98,7 +98,7 @@ mysql.ndb_binlog_index Table is already up to date
|
|||||||
mysql.plugin Table is already up to date
|
mysql.plugin Table is already up to date
|
||||||
mysql.proc Table is already up to date
|
mysql.proc Table is already up to date
|
||||||
mysql.procs_priv Table is already up to date
|
mysql.procs_priv Table is already up to date
|
||||||
mysql.proxy_priv Table is already up to date
|
mysql.proxies_priv Table is already up to date
|
||||||
mysql.servers Table is already up to date
|
mysql.servers Table is already up to date
|
||||||
mysql.slow_log
|
mysql.slow_log
|
||||||
note : The storage engine for the table doesn't support optimize
|
note : The storage engine for the table doesn't support optimize
|
||||||
|
@ -19,6 +19,7 @@ The following options may be given as the first argument:
|
|||||||
--auto-increment-offset[=#]
|
--auto-increment-offset[=#]
|
||||||
Offset added to Auto-increment columns. Used when
|
Offset added to Auto-increment columns. Used when
|
||||||
auto-increment-increment != 1
|
auto-increment-increment != 1
|
||||||
|
--autocommit Set default value for autocommit (0 or 1)
|
||||||
--automatic-sp-privileges
|
--automatic-sp-privileges
|
||||||
Creating and dropping stored procedures alters ACLs
|
Creating and dropping stored procedures alters ACLs
|
||||||
(Defaults to on; use --skip-automatic-sp-privileges to disable.)
|
(Defaults to on; use --skip-automatic-sp-privileges to disable.)
|
||||||
|
@ -19,6 +19,7 @@ The following options may be given as the first argument:
|
|||||||
--auto-increment-offset[=#]
|
--auto-increment-offset[=#]
|
||||||
Offset added to Auto-increment columns. Used when
|
Offset added to Auto-increment columns. Used when
|
||||||
auto-increment-increment != 1
|
auto-increment-increment != 1
|
||||||
|
--autocommit Set default value for autocommit (0 or 1)
|
||||||
--automatic-sp-privileges
|
--automatic-sp-privileges
|
||||||
Creating and dropping stored procedures alters ACLs
|
Creating and dropping stored procedures alters ACLs
|
||||||
(Defaults to on; use --skip-automatic-sp-privileges to disable.)
|
(Defaults to on; use --skip-automatic-sp-privileges to disable.)
|
||||||
|
@ -11,6 +11,26 @@ test_plugin_server plug_dest
|
|||||||
## test plugin auth
|
## test plugin auth
|
||||||
ERROR 28000: Access denied for user 'plug'@'localhost' (using password: YES)
|
ERROR 28000: Access denied for user 'plug'@'localhost' (using password: YES)
|
||||||
GRANT PROXY ON plug_dest TO plug;
|
GRANT PROXY ON plug_dest TO plug;
|
||||||
|
test proxies_priv columns
|
||||||
|
SELECT * FROM mysql.proxies_priv;
|
||||||
|
Host User Proxied_host Proxied_user With_grant Grantor Timestamp
|
||||||
|
xx root 1 xx
|
||||||
|
xx root 1 xx
|
||||||
|
xx plug % plug_dest 0 root@localhost xx
|
||||||
|
test mysql.proxies_priv;
|
||||||
|
SHOW CREATE TABLE mysql.proxies_priv;
|
||||||
|
Table Create Table
|
||||||
|
proxies_priv CREATE TABLE `proxies_priv` (
|
||||||
|
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Proxied_host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Proxied_user` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`With_grant` tinyint(1) NOT NULL DEFAULT '0',
|
||||||
|
`Grantor` char(77) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||||
|
`Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`Host`,`User`,`Proxied_host`,`Proxied_user`),
|
||||||
|
KEY `Grantor` (`Grantor`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='User proxy privileges'
|
||||||
select USER(),CURRENT_USER();
|
select USER(),CURRENT_USER();
|
||||||
USER() CURRENT_USER()
|
USER() CURRENT_USER()
|
||||||
plug@localhost plug_dest@%
|
plug@localhost plug_dest@%
|
||||||
@ -146,8 +166,8 @@ Grants for test_drop@localhost
|
|||||||
GRANT USAGE ON *.* TO 'test_drop'@'localhost'
|
GRANT USAGE ON *.* TO 'test_drop'@'localhost'
|
||||||
GRANT PROXY ON 'future_user'@'%' TO 'test_drop'@'localhost'
|
GRANT PROXY ON 'future_user'@'%' TO 'test_drop'@'localhost'
|
||||||
DROP USER test_drop@localhost;
|
DROP USER test_drop@localhost;
|
||||||
SELECT * FROM mysql.proxy_priv WHERE Host = 'test_drop' AND User = 'localhost';
|
SELECT * FROM mysql.proxies_priv WHERE Host = 'test_drop' AND User = 'localhost';
|
||||||
Host User Proxied_Host Proxied_User With_Grant
|
Host User Proxied_host Proxied_user With_grant Grantor Timestamp
|
||||||
DROP USER proxy_admin;
|
DROP USER proxy_admin;
|
||||||
DROP USER grant_plug,grant_plug_dest,grant_plug_dest2;
|
DROP USER grant_plug,grant_plug_dest,grant_plug_dest2;
|
||||||
## END GRANT PROXY tests
|
## END GRANT PROXY tests
|
||||||
|
@ -3005,6 +3005,44 @@ EXECUTE stmt;
|
|||||||
1
|
1
|
||||||
DEALLOCATE PREPARE stmt;
|
DEALLOCATE PREPARE stmt;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug#54494 crash with explain extended and prepared statements
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
PREPARE stmt FROM 'EXPLAIN EXTENDED SELECT 1 FROM t1 RIGHT JOIN t1 t2 ON 1';
|
||||||
|
EXECUTE stmt;
|
||||||
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
|
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select 1 AS `1` from `test`.`t1` `t2` left join `test`.`t1` on(1) where 1
|
||||||
|
EXECUTE stmt;
|
||||||
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
|
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select 1 AS `1` from `test`.`t1` `t2` left join `test`.`t1` on(1) where 1
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug#54488 crash when using explain and prepared statements with subqueries
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(f1 INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(1);
|
||||||
|
PREPARE stmt FROM 'EXPLAIN SELECT 1 FROM t1 WHERE (SELECT (SELECT 1 FROM t1 GROUP BY f1))';
|
||||||
|
EXECUTE stmt;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t1 ALL NULL NULL NULL NULL 2
|
||||||
|
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
|
3 SUBQUERY t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
|
||||||
|
EXECUTE stmt;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t1 ALL NULL NULL NULL NULL 2
|
||||||
|
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
|
3 SUBQUERY t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
End of 5.1 tests.
|
End of 5.1 tests.
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ ndb_binlog_index
|
|||||||
plugin
|
plugin
|
||||||
proc
|
proc
|
||||||
procs_priv
|
procs_priv
|
||||||
proxy_priv
|
proxies_priv
|
||||||
servers
|
servers
|
||||||
slow_log
|
slow_log
|
||||||
tables_priv
|
tables_priv
|
||||||
|
@ -975,4 +975,14 @@ SELECT LENGTH(c) FROM t2;
|
|||||||
LENGTH(c)
|
LENGTH(c)
|
||||||
65535
|
65535
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
# Bug #52160: crash and inconsistent results when grouping
|
||||||
|
# by a function and column
|
||||||
|
CREATE FUNCTION f1() RETURNS TINYBLOB RETURN 1;
|
||||||
|
CREATE TABLE t1(a CHAR(1));
|
||||||
|
INSERT INTO t1 VALUES ('0'), ('0');
|
||||||
|
SELECT COUNT(*) FROM t1 GROUP BY f1(), a;
|
||||||
|
COUNT(*)
|
||||||
|
2
|
||||||
|
DROP FUNCTION f1;
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
95
mysql-test/std_data/bug57108.cnf
Normal file
95
mysql-test/std_data/bug57108.cnf
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
[mysqld]
|
||||||
|
open-files-limit=1024
|
||||||
|
character-set-server=latin1
|
||||||
|
connect-timeout=4711
|
||||||
|
log-bin-trust-function-creators=1
|
||||||
|
key_buffer_size=1M
|
||||||
|
sort_buffer=256K
|
||||||
|
max_heap_table_size=1M
|
||||||
|
loose-innodb_data_file_path=ibdata1:10M:autoextend
|
||||||
|
loose-innodb_buffer_pool_size=8M
|
||||||
|
loose-innodb_write_io_threads=2
|
||||||
|
loose-innodb_read_io_threads=2
|
||||||
|
loose-innodb_log_buffer_size=1M
|
||||||
|
loose-innodb_log_file_size=5M
|
||||||
|
loose-innodb_additional_mem_pool_size=1M
|
||||||
|
loose-innodb_log_files_in_group=2
|
||||||
|
slave-net-timeout=120
|
||||||
|
log-bin=mysqld-bin
|
||||||
|
loose-enable-performance-schema
|
||||||
|
loose-performance-schema-max-mutex-instances=10000
|
||||||
|
loose-performance-schema-max-rwlock-instances=10000
|
||||||
|
loose-performance-schema-max-table-instances=500
|
||||||
|
loose-performance-schema-max-table-handles=1000
|
||||||
|
binlog-direct-non-transactional-updates
|
||||||
|
|
||||||
|
[mysql]
|
||||||
|
default-character-set=latin1
|
||||||
|
|
||||||
|
[mysqlshow]
|
||||||
|
default-character-set=latin1
|
||||||
|
|
||||||
|
[mysqlimport]
|
||||||
|
default-character-set=latin1
|
||||||
|
|
||||||
|
[mysqlcheck]
|
||||||
|
default-character-set=latin1
|
||||||
|
|
||||||
|
[mysql_upgrade]
|
||||||
|
default-character-set=latin1
|
||||||
|
tmpdir=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/var/tmp
|
||||||
|
|
||||||
|
[mysqld.1]
|
||||||
|
#!run-master-sh
|
||||||
|
log-bin=master-bin
|
||||||
|
loose-enable-performance-schema
|
||||||
|
basedir=/home/bzr/bugs/b57108-5.5-bugteam
|
||||||
|
tmpdir=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/var/tmp/mysqld.1
|
||||||
|
character-sets-dir=/home/bzr/bugs/b57108-5.5-bugteam/sql/share/charsets
|
||||||
|
lc-messages-dir=/home/bzr/bugs/b57108-5.5-bugteam/sql/share/
|
||||||
|
datadir=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/var/mysqld.1/data
|
||||||
|
pid-file=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/var/run/mysqld.1.pid
|
||||||
|
#host=localhost
|
||||||
|
port=13000
|
||||||
|
socket=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/var/tmp/mysqld.1.sock
|
||||||
|
#log-error=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/var/log/mysqld.1.err
|
||||||
|
general_log=1
|
||||||
|
general_log_file=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/var/mysqld.1/mysqld.log
|
||||||
|
slow_query_log=1
|
||||||
|
slow_query_log_file=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/var/mysqld.1/mysqld-slow.log
|
||||||
|
#user=root
|
||||||
|
#password=
|
||||||
|
server-id=1
|
||||||
|
secure-file-priv=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/var
|
||||||
|
ssl-ca=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/std_data/cacert.pem
|
||||||
|
ssl-cert=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/std_data/server-cert.pem
|
||||||
|
ssl-key=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/std_data/server-key.pem
|
||||||
|
|
||||||
|
[mysqlbinlog]
|
||||||
|
disable-force-if-open
|
||||||
|
character-sets-dir=/home/bzr/bugs/b57108-5.5-bugteam/sql/share/charsets
|
||||||
|
|
||||||
|
[ENV]
|
||||||
|
MASTER_MYPORT=13000
|
||||||
|
MASTER_MYSOCK=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/var/tmp/mysqld.1.sock
|
||||||
|
|
||||||
|
[client]
|
||||||
|
password=
|
||||||
|
user=root
|
||||||
|
port=13000
|
||||||
|
host=localhost
|
||||||
|
socket=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/var/tmp/mysqld.1.sock
|
||||||
|
|
||||||
|
[mysqltest]
|
||||||
|
ssl-ca=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/std_data/cacert.pem
|
||||||
|
ssl-cert=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/std_data/client-cert.pem
|
||||||
|
ssl-key=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/std_data/client-key.pem
|
||||||
|
skip-ssl=1
|
||||||
|
|
||||||
|
[client.1]
|
||||||
|
password=
|
||||||
|
user=root
|
||||||
|
port=13000
|
||||||
|
host=localhost
|
||||||
|
socket=/home/bzr/bugs/b57108-5.5-bugteam/mysql-test/var/tmp/mysqld.1.sock
|
||||||
|
|
5
mysql-test/suite/bugs/r/bug57108.result
Normal file
5
mysql-test/suite/bugs/r/bug57108.result
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
INSTALL PLUGIN example SONAME 'ha_example.so';
|
||||||
|
SELECT @@global.connect_timeout AS connect_timeout, @@global.local_infile AS local_infile;
|
||||||
|
connect_timeout 4711
|
||||||
|
local_infile 1
|
||||||
|
UNINSTALL PLUGIN example;
|
2
mysql-test/suite/bugs/t/bug57108-master.opt
Normal file
2
mysql-test/suite/bugs/t/bug57108-master.opt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
--defaults-file=std_data/bug57108.cnf
|
||||||
|
$EXAMPLE_PLUGIN_OPT
|
12
mysql-test/suite/bugs/t/bug57108.test
Normal file
12
mysql-test/suite/bugs/t/bug57108.test
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
--source include/not_windows_embedded.inc
|
||||||
|
--source include/have_example_plugin.inc
|
||||||
|
|
||||||
|
# Test that we can install a plugin despite the fact that we have
|
||||||
|
# switched directory after starting the server and am using a relative
|
||||||
|
# --defaults-file.
|
||||||
|
--replace_regex /\.dll/.so/
|
||||||
|
eval INSTALL PLUGIN example SONAME $HA_EXAMPLE_SO;
|
||||||
|
|
||||||
|
--query_vertical SELECT @@global.connect_timeout AS connect_timeout, @@global.local_infile AS local_infile
|
||||||
|
|
||||||
|
UNINSTALL PLUGIN example;
|
@ -134,11 +134,13 @@ def mysql procs_priv Routine_name 4 NO char 64 192 NULL NULL utf8 utf8_general_
|
|||||||
def mysql procs_priv Routine_type 5 NULL NO enum 9 27 NULL NULL utf8 utf8_bin enum('FUNCTION','PROCEDURE') PRI select,insert,update,references
|
def mysql procs_priv Routine_type 5 NULL NO enum 9 27 NULL NULL utf8 utf8_bin enum('FUNCTION','PROCEDURE') PRI select,insert,update,references
|
||||||
def mysql procs_priv Timestamp 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
|
def mysql procs_priv Timestamp 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
|
||||||
def mysql procs_priv User 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
|
def mysql procs_priv User 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
|
||||||
def mysql proxy_priv Host 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
|
def mysql proxies_priv Grantor 6 NO char 77 231 NULL NULL utf8 utf8_bin char(77) MUL select,insert,update,references
|
||||||
def mysql proxy_priv Proxied_Host 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
|
def mysql proxies_priv Host 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
|
||||||
def mysql proxy_priv Proxied_User 4 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
|
def mysql proxies_priv Proxied_host 3 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
|
||||||
def mysql proxy_priv User 2 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
|
def mysql proxies_priv Proxied_user 4 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
|
||||||
def mysql proxy_priv With_Grant 5 0 NO tinyint NULL NULL 3 0 NULL NULL tinyint(1) select,insert,update,references
|
def mysql proxies_priv Timestamp 7 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
|
||||||
|
def mysql proxies_priv User 2 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
|
||||||
|
def mysql proxies_priv With_grant 5 0 NO tinyint NULL NULL 3 0 NULL NULL tinyint(1) select,insert,update,references
|
||||||
def mysql servers Db 3 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
|
def mysql servers Db 3 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
|
||||||
def mysql servers Host 2 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
|
def mysql servers Host 2 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
|
||||||
def mysql servers Owner 9 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
|
def mysql servers Owner 9 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
|
||||||
@ -425,11 +427,13 @@ NULL mysql proc modified timestamp NULL NULL NULL NULL timestamp
|
|||||||
3.0000 mysql procs_priv Grantor char 77 231 utf8 utf8_bin char(77)
|
3.0000 mysql procs_priv Grantor char 77 231 utf8 utf8_bin char(77)
|
||||||
3.0000 mysql procs_priv Proc_priv set 27 81 utf8 utf8_general_ci set('Execute','Alter Routine','Grant')
|
3.0000 mysql procs_priv Proc_priv set 27 81 utf8 utf8_general_ci set('Execute','Alter Routine','Grant')
|
||||||
NULL mysql procs_priv Timestamp timestamp NULL NULL NULL NULL timestamp
|
NULL mysql procs_priv Timestamp timestamp NULL NULL NULL NULL timestamp
|
||||||
3.0000 mysql proxy_priv Host char 60 180 utf8 utf8_bin char(60)
|
3.0000 mysql proxies_priv Host char 60 180 utf8 utf8_bin char(60)
|
||||||
3.0000 mysql proxy_priv User char 16 48 utf8 utf8_bin char(16)
|
3.0000 mysql proxies_priv User char 16 48 utf8 utf8_bin char(16)
|
||||||
3.0000 mysql proxy_priv Proxied_Host char 16 48 utf8 utf8_bin char(16)
|
3.0000 mysql proxies_priv Proxied_host char 60 180 utf8 utf8_bin char(60)
|
||||||
3.0000 mysql proxy_priv Proxied_User char 60 180 utf8 utf8_bin char(60)
|
3.0000 mysql proxies_priv Proxied_user char 16 48 utf8 utf8_bin char(16)
|
||||||
NULL mysql proxy_priv With_Grant tinyint NULL NULL NULL NULL tinyint(1)
|
NULL mysql proxies_priv With_grant tinyint NULL NULL NULL NULL tinyint(1)
|
||||||
|
3.0000 mysql proxies_priv Grantor char 77 231 utf8 utf8_bin char(77)
|
||||||
|
NULL mysql proxies_priv Timestamp timestamp NULL NULL NULL NULL timestamp
|
||||||
3.0000 mysql servers Server_name char 64 192 utf8 utf8_general_ci char(64)
|
3.0000 mysql servers Server_name char 64 192 utf8 utf8_general_ci char(64)
|
||||||
3.0000 mysql servers Host char 64 192 utf8 utf8_general_ci char(64)
|
3.0000 mysql servers Host char 64 192 utf8 utf8_general_ci char(64)
|
||||||
3.0000 mysql servers Db char 64 192 utf8 utf8_general_ci char(64)
|
3.0000 mysql servers Db char 64 192 utf8 utf8_general_ci char(64)
|
||||||
|
@ -106,10 +106,10 @@ def mysql PRIMARY def mysql procs_priv Db
|
|||||||
def mysql PRIMARY def mysql procs_priv User
|
def mysql PRIMARY def mysql procs_priv User
|
||||||
def mysql PRIMARY def mysql procs_priv Routine_name
|
def mysql PRIMARY def mysql procs_priv Routine_name
|
||||||
def mysql PRIMARY def mysql procs_priv Routine_type
|
def mysql PRIMARY def mysql procs_priv Routine_type
|
||||||
def mysql PRIMARY def mysql proxy_priv Host
|
def mysql PRIMARY def mysql proxies_priv Host
|
||||||
def mysql PRIMARY def mysql proxy_priv User
|
def mysql PRIMARY def mysql proxies_priv User
|
||||||
def mysql PRIMARY def mysql proxy_priv Proxied_Host
|
def mysql PRIMARY def mysql proxies_priv Proxied_host
|
||||||
def mysql PRIMARY def mysql proxy_priv Proxied_User
|
def mysql PRIMARY def mysql proxies_priv Proxied_user
|
||||||
def mysql PRIMARY def mysql servers Server_name
|
def mysql PRIMARY def mysql servers Server_name
|
||||||
def mysql PRIMARY def mysql tables_priv Host
|
def mysql PRIMARY def mysql tables_priv Host
|
||||||
def mysql PRIMARY def mysql tables_priv Db
|
def mysql PRIMARY def mysql tables_priv Db
|
||||||
|
@ -118,10 +118,11 @@ def mysql procs_priv mysql PRIMARY
|
|||||||
def mysql procs_priv mysql PRIMARY
|
def mysql procs_priv mysql PRIMARY
|
||||||
def mysql procs_priv mysql PRIMARY
|
def mysql procs_priv mysql PRIMARY
|
||||||
def mysql procs_priv mysql Grantor
|
def mysql procs_priv mysql Grantor
|
||||||
def mysql proxy_priv mysql PRIMARY
|
def mysql proxies_priv mysql PRIMARY
|
||||||
def mysql proxy_priv mysql PRIMARY
|
def mysql proxies_priv mysql PRIMARY
|
||||||
def mysql proxy_priv mysql PRIMARY
|
def mysql proxies_priv mysql PRIMARY
|
||||||
def mysql proxy_priv mysql PRIMARY
|
def mysql proxies_priv mysql PRIMARY
|
||||||
|
def mysql proxies_priv mysql Grantor
|
||||||
def mysql servers mysql PRIMARY
|
def mysql servers mysql PRIMARY
|
||||||
def mysql tables_priv mysql PRIMARY
|
def mysql tables_priv mysql PRIMARY
|
||||||
def mysql tables_priv mysql PRIMARY
|
def mysql tables_priv mysql PRIMARY
|
||||||
|
@ -40,10 +40,11 @@ def mysql procs_priv 0 mysql PRIMARY 2 Db A #CARD# NULL NULL BTREE
|
|||||||
def mysql procs_priv 0 mysql PRIMARY 3 User A #CARD# NULL NULL BTREE
|
def mysql procs_priv 0 mysql PRIMARY 3 User A #CARD# NULL NULL BTREE
|
||||||
def mysql procs_priv 0 mysql PRIMARY 4 Routine_name A #CARD# NULL NULL BTREE
|
def mysql procs_priv 0 mysql PRIMARY 4 Routine_name A #CARD# NULL NULL BTREE
|
||||||
def mysql procs_priv 0 mysql PRIMARY 5 Routine_type A #CARD# NULL NULL BTREE
|
def mysql procs_priv 0 mysql PRIMARY 5 Routine_type A #CARD# NULL NULL BTREE
|
||||||
def mysql proxy_priv 0 mysql PRIMARY 1 Host A #CARD# NULL NULL BTREE
|
def mysql proxies_priv 1 mysql Grantor 1 Grantor A #CARD# NULL NULL BTREE
|
||||||
def mysql proxy_priv 0 mysql PRIMARY 2 User A #CARD# NULL NULL BTREE
|
def mysql proxies_priv 0 mysql PRIMARY 1 Host A #CARD# NULL NULL BTREE
|
||||||
def mysql proxy_priv 0 mysql PRIMARY 3 Proxied_Host A #CARD# NULL NULL BTREE
|
def mysql proxies_priv 0 mysql PRIMARY 2 User A #CARD# NULL NULL BTREE
|
||||||
def mysql proxy_priv 0 mysql PRIMARY 4 Proxied_User A #CARD# NULL NULL BTREE
|
def mysql proxies_priv 0 mysql PRIMARY 3 Proxied_host A #CARD# NULL NULL BTREE
|
||||||
|
def mysql proxies_priv 0 mysql PRIMARY 4 Proxied_user A #CARD# NULL NULL BTREE
|
||||||
def mysql servers 0 mysql PRIMARY 1 Server_name A #CARD# NULL NULL BTREE
|
def mysql servers 0 mysql PRIMARY 1 Server_name A #CARD# NULL NULL BTREE
|
||||||
def mysql tables_priv 1 mysql Grantor 1 Grantor A #CARD# NULL NULL BTREE
|
def mysql tables_priv 1 mysql Grantor 1 Grantor A #CARD# NULL NULL BTREE
|
||||||
def mysql tables_priv 0 mysql PRIMARY 1 Host A #CARD# NULL NULL BTREE
|
def mysql tables_priv 0 mysql PRIMARY 1 Host A #CARD# NULL NULL BTREE
|
||||||
|
@ -73,7 +73,7 @@ def mysql PRIMARY mysql ndb_binlog_index
|
|||||||
def mysql PRIMARY mysql plugin
|
def mysql PRIMARY mysql plugin
|
||||||
def mysql PRIMARY mysql proc
|
def mysql PRIMARY mysql proc
|
||||||
def mysql PRIMARY mysql procs_priv
|
def mysql PRIMARY mysql procs_priv
|
||||||
def mysql PRIMARY mysql proxy_priv
|
def mysql PRIMARY mysql proxies_priv
|
||||||
def mysql PRIMARY mysql servers
|
def mysql PRIMARY mysql servers
|
||||||
def mysql PRIMARY mysql tables_priv
|
def mysql PRIMARY mysql tables_priv
|
||||||
def mysql PRIMARY mysql time_zone
|
def mysql PRIMARY mysql time_zone
|
||||||
|
@ -23,7 +23,7 @@ def mysql PRIMARY mysql ndb_binlog_index PRIMARY KEY
|
|||||||
def mysql PRIMARY mysql plugin PRIMARY KEY
|
def mysql PRIMARY mysql plugin PRIMARY KEY
|
||||||
def mysql PRIMARY mysql proc PRIMARY KEY
|
def mysql PRIMARY mysql proc PRIMARY KEY
|
||||||
def mysql PRIMARY mysql procs_priv PRIMARY KEY
|
def mysql PRIMARY mysql procs_priv PRIMARY KEY
|
||||||
def mysql PRIMARY mysql proxy_priv PRIMARY KEY
|
def mysql PRIMARY mysql proxies_priv PRIMARY KEY
|
||||||
def mysql PRIMARY mysql servers PRIMARY KEY
|
def mysql PRIMARY mysql servers PRIMARY KEY
|
||||||
def mysql PRIMARY mysql tables_priv PRIMARY KEY
|
def mysql PRIMARY mysql tables_priv PRIMARY KEY
|
||||||
def mysql PRIMARY mysql time_zone PRIMARY KEY
|
def mysql PRIMARY mysql time_zone PRIMARY KEY
|
||||||
|
@ -336,7 +336,7 @@ user_comment Procedure privileges
|
|||||||
Separator -----------------------------------------------------
|
Separator -----------------------------------------------------
|
||||||
TABLE_CATALOG def
|
TABLE_CATALOG def
|
||||||
TABLE_SCHEMA mysql
|
TABLE_SCHEMA mysql
|
||||||
TABLE_NAME proxy_priv
|
TABLE_NAME proxies_priv
|
||||||
TABLE_TYPE BASE TABLE
|
TABLE_TYPE BASE TABLE
|
||||||
ENGINE MyISAM
|
ENGINE MyISAM
|
||||||
VERSION 10
|
VERSION 10
|
||||||
|
10
mysql-test/suite/innodb/r/innodb_bug57255.result
Normal file
10
mysql-test/suite/innodb/r/innodb_bug57255.result
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
create table A(id int not null primary key) engine=innodb;
|
||||||
|
create table B(id int not null auto_increment primary key, f1 int not null, foreign key(f1) references A(id) on delete cascade) engine=innodb;
|
||||||
|
create table C(id int not null auto_increment primary key, f1 int not null, foreign key(f1) references B(id) on delete cascade) engine=innodb;
|
||||||
|
insert into A values(1), (2);
|
||||||
|
DELETE FROM A where id = 1;
|
||||||
|
DELETE FROM C where f1 = 2;
|
||||||
|
DELETE FROM A where id = 1;
|
||||||
|
DROP TABLE C;
|
||||||
|
DROP TABLE B;
|
||||||
|
DROP TABLE A;
|
36
mysql-test/suite/innodb/t/innodb_bug57255.test
Normal file
36
mysql-test/suite/innodb/t/innodb_bug57255.test
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# Test Bug #57255. Cascade deletes that affect different rows should not
|
||||||
|
# result in DB_FOREIGN_EXCEED_MAX_CASCADE error
|
||||||
|
|
||||||
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
create table A(id int not null primary key) engine=innodb;
|
||||||
|
|
||||||
|
create table B(id int not null auto_increment primary key, f1 int not null, foreign key(f1) references A(id) on delete cascade) engine=innodb;
|
||||||
|
|
||||||
|
create table C(id int not null auto_increment primary key, f1 int not null, foreign key(f1) references B(id) on delete cascade) engine=innodb;
|
||||||
|
|
||||||
|
insert into A values(1), (2);
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
let $i=257;
|
||||||
|
while ($i)
|
||||||
|
{
|
||||||
|
insert into B(f1) values(1);
|
||||||
|
dec $i;
|
||||||
|
}
|
||||||
|
let $i=486;
|
||||||
|
while ($i)
|
||||||
|
{
|
||||||
|
insert into C(f1) values(2);
|
||||||
|
dec $i;
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
# Following Deletes should not report error
|
||||||
|
DELETE FROM A where id = 1;
|
||||||
|
DELETE FROM C where f1 = 2;
|
||||||
|
DELETE FROM A where id = 1;
|
||||||
|
|
||||||
|
DROP TABLE C;
|
||||||
|
DROP TABLE B;
|
||||||
|
DROP TABLE A;
|
@ -2,5 +2,5 @@ call mtr.add_suppression(
|
|||||||
"Column count of mysql.setup_instruments is wrong. "
|
"Column count of mysql.setup_instruments is wrong. "
|
||||||
"Expected 4, found 3. The table is probably corrupted");
|
"Expected 4, found 3. The table is probably corrupted");
|
||||||
select * from performance_schema.setup_instruments limit 1;
|
select * from performance_schema.setup_instruments limit 1;
|
||||||
ERROR HY000: Native table 'performance_schema'.'SETUP_INSTRUMENTS' has the wrong structure
|
ERROR HY000: Native table 'performance_schema'.'setup_instruments' has the wrong structure
|
||||||
select * from performance_schema.setup_consumers limit 1;
|
select * from performance_schema.setup_consumers limit 1;
|
||||||
|
29
mysql-test/suite/sys_vars/inc/autocommit_func2.inc
Normal file
29
mysql-test/suite/sys_vars/inc/autocommit_func2.inc
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
CREATE TABLE t1
|
||||||
|
(
|
||||||
|
id INT NOT NULL auto_increment,
|
||||||
|
PRIMARY KEY (id),
|
||||||
|
name varchar(30)
|
||||||
|
) ENGINE = INNODB;
|
||||||
|
|
||||||
|
SELECT @@global.autocommit;
|
||||||
|
SELECT @@autocommit;
|
||||||
|
INSERT into t1(name) values('Record_1');
|
||||||
|
INSERT into t1(name) values('Record_2');
|
||||||
|
SELECT * from t1;
|
||||||
|
ROLLBACK;
|
||||||
|
SELECT * from t1;
|
||||||
|
|
||||||
|
set @@global.autocommit = 1-@@global.autocommit;
|
||||||
|
set @@autocommit = 1-@@autocommit;
|
||||||
|
SELECT @@global.autocommit;
|
||||||
|
SELECT @@autocommit;
|
||||||
|
INSERT into t1(name) values('Record_1');
|
||||||
|
INSERT into t1(name) values('Record_2');
|
||||||
|
SELECT * from t1;
|
||||||
|
ROLLBACK;
|
||||||
|
SELECT * from t1;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
set @@global.autocommit = 1-@@global.autocommit;
|
46
mysql-test/suite/sys_vars/r/autocommit_func2.result
Normal file
46
mysql-test/suite/sys_vars/r/autocommit_func2.result
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
CREATE TABLE t1
|
||||||
|
(
|
||||||
|
id INT NOT NULL auto_increment,
|
||||||
|
PRIMARY KEY (id),
|
||||||
|
name varchar(30)
|
||||||
|
) ENGINE = INNODB;
|
||||||
|
SELECT @@global.autocommit;
|
||||||
|
@@global.autocommit
|
||||||
|
1
|
||||||
|
SELECT @@autocommit;
|
||||||
|
@@autocommit
|
||||||
|
1
|
||||||
|
INSERT into t1(name) values('Record_1');
|
||||||
|
INSERT into t1(name) values('Record_2');
|
||||||
|
SELECT * from t1;
|
||||||
|
id name
|
||||||
|
1 Record_1
|
||||||
|
2 Record_2
|
||||||
|
ROLLBACK;
|
||||||
|
SELECT * from t1;
|
||||||
|
id name
|
||||||
|
1 Record_1
|
||||||
|
2 Record_2
|
||||||
|
set @@global.autocommit = 1-@@global.autocommit;
|
||||||
|
set @@autocommit = 1-@@autocommit;
|
||||||
|
SELECT @@global.autocommit;
|
||||||
|
@@global.autocommit
|
||||||
|
0
|
||||||
|
SELECT @@autocommit;
|
||||||
|
@@autocommit
|
||||||
|
0
|
||||||
|
INSERT into t1(name) values('Record_1');
|
||||||
|
INSERT into t1(name) values('Record_2');
|
||||||
|
SELECT * from t1;
|
||||||
|
id name
|
||||||
|
1 Record_1
|
||||||
|
2 Record_2
|
||||||
|
3 Record_1
|
||||||
|
4 Record_2
|
||||||
|
ROLLBACK;
|
||||||
|
SELECT * from t1;
|
||||||
|
id name
|
||||||
|
1 Record_1
|
||||||
|
2 Record_2
|
||||||
|
DROP TABLE t1;
|
||||||
|
set @@global.autocommit = 1-@@global.autocommit;
|
42
mysql-test/suite/sys_vars/r/autocommit_func3.result
Normal file
42
mysql-test/suite/sys_vars/r/autocommit_func3.result
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
CREATE TABLE t1
|
||||||
|
(
|
||||||
|
id INT NOT NULL auto_increment,
|
||||||
|
PRIMARY KEY (id),
|
||||||
|
name varchar(30)
|
||||||
|
) ENGINE = INNODB;
|
||||||
|
SELECT @@global.autocommit;
|
||||||
|
@@global.autocommit
|
||||||
|
0
|
||||||
|
SELECT @@autocommit;
|
||||||
|
@@autocommit
|
||||||
|
0
|
||||||
|
INSERT into t1(name) values('Record_1');
|
||||||
|
INSERT into t1(name) values('Record_2');
|
||||||
|
SELECT * from t1;
|
||||||
|
id name
|
||||||
|
1 Record_1
|
||||||
|
2 Record_2
|
||||||
|
ROLLBACK;
|
||||||
|
SELECT * from t1;
|
||||||
|
id name
|
||||||
|
set @@global.autocommit = 1-@@global.autocommit;
|
||||||
|
set @@autocommit = 1-@@autocommit;
|
||||||
|
SELECT @@global.autocommit;
|
||||||
|
@@global.autocommit
|
||||||
|
1
|
||||||
|
SELECT @@autocommit;
|
||||||
|
@@autocommit
|
||||||
|
1
|
||||||
|
INSERT into t1(name) values('Record_1');
|
||||||
|
INSERT into t1(name) values('Record_2');
|
||||||
|
SELECT * from t1;
|
||||||
|
id name
|
||||||
|
3 Record_1
|
||||||
|
4 Record_2
|
||||||
|
ROLLBACK;
|
||||||
|
SELECT * from t1;
|
||||||
|
id name
|
||||||
|
3 Record_1
|
||||||
|
4 Record_2
|
||||||
|
DROP TABLE t1;
|
||||||
|
set @@global.autocommit = 1-@@global.autocommit;
|
1
mysql-test/suite/sys_vars/t/autocommit_func2-master.opt
Normal file
1
mysql-test/suite/sys_vars/t/autocommit_func2-master.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--autocommit=1
|
1
mysql-test/suite/sys_vars/t/autocommit_func2.test
Normal file
1
mysql-test/suite/sys_vars/t/autocommit_func2.test
Normal file
@ -0,0 +1 @@
|
|||||||
|
--source suite/sys_vars/inc/autocommit_func2.inc
|
1
mysql-test/suite/sys_vars/t/autocommit_func3-master.opt
Normal file
1
mysql-test/suite/sys_vars/t/autocommit_func3-master.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--autocommit=0
|
1
mysql-test/suite/sys_vars/t/autocommit_func3.test
Normal file
1
mysql-test/suite/sys_vars/t/autocommit_func3.test
Normal file
@ -0,0 +1 @@
|
|||||||
|
--source suite/sys_vars/inc/autocommit_func2.inc
|
@ -155,3 +155,19 @@ INSERT INTO t1 VALUES ('abc\0\0');
|
|||||||
--error ER_DUP_ENTRY
|
--error ER_DUP_ENTRY
|
||||||
INSERT INTO t1 VALUES ('abc\0\0');
|
INSERT INTO t1 VALUES ('abc\0\0');
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#57882: Item_func_conv_charset::val_str(String*):
|
||||||
|
--echo # Assertion `fixed == 1' failed
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--error ER_DATA_OUT_OF_RANGE
|
||||||
|
SELECT (CONVERT('0' USING latin1) IN (CHAR(COT('v') USING utf8),''));
|
||||||
|
|
||||||
|
SET NAMES utf8 COLLATE utf8_latvian_ci ;
|
||||||
|
--error ER_DATA_OUT_OF_RANGE
|
||||||
|
SELECT UPDATEXML(-73 * -2465717823867977728,@@global.auto_increment_increment,null);
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End Bug#57882
|
||||||
|
--echo #
|
||||||
|
@ -832,6 +832,16 @@ INSERT INTO t1 VALUES (0),(9.216e-096);
|
|||||||
SELECT 1 FROM t1 ORDER BY @x:=makedate(a,a);
|
SELECT 1 FROM t1 ORDER BY @x:=makedate(a,a);
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #52160: crash and inconsistent results when grouping
|
||||||
|
--echo # by a function and column
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1(a CHAR(10) NOT NULL);
|
||||||
|
INSERT INTO t1 VALUES (''),('');
|
||||||
|
SELECT COUNT(*) FROM t1 GROUP BY TIME_TO_SEC(a);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -62,5 +62,103 @@ call p1();
|
|||||||
drop procedure p1;
|
drop procedure p1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
|
||||||
# End of 5.0 tests
|
# End of 5.0 tests
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#57899: Certain reserved words should not be reserved
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# We are looking for SYNTAX ERRORS here, so no need to
|
||||||
|
# log the queries
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE slow (slow INT, general INT, master_heartbeat_period INT, ignore_server_ids INT);
|
||||||
|
INSERT INTO slow(slow, general, master_heartbeat_period, ignore_server_ids) VALUES (1,2,3,4), (5,6,7,8);
|
||||||
|
INSERT INTO slow(slow, general, master_heartbeat_period) VALUES (1,2,3), (5,6,7);
|
||||||
|
INSERT INTO slow(slow, general) VALUES (1,2), (5,6);
|
||||||
|
INSERT INTO slow(slow) VALUES (1), (5);
|
||||||
|
SELECT slow, general, master_heartbeat_period, ignore_server_ids FROM slow ORDER BY slow;
|
||||||
|
SELECT slow, general, master_heartbeat_period FROM slow ORDER BY slow;
|
||||||
|
SELECT slow, master_heartbeat_period FROM slow ORDER BY slow;
|
||||||
|
SELECT slow FROM slow ORDER BY slow;
|
||||||
|
DROP TABLE slow;
|
||||||
|
CREATE TABLE general (slow INT, general INT, master_heartbeat_period INT, ignore_server_ids INT);
|
||||||
|
INSERT INTO general(slow, general, master_heartbeat_period, ignore_server_ids) VALUES (1,2,3,4), (5,6,7,8);
|
||||||
|
INSERT INTO general(slow, general, master_heartbeat_period) VALUES (1,2,3), (5,6,7);
|
||||||
|
INSERT INTO general(slow, general) VALUES (1,2), (5,6);
|
||||||
|
INSERT INTO general(slow) VALUES (1), (5);
|
||||||
|
SELECT slow, general, master_heartbeat_period, ignore_server_ids FROM general ORDER BY slow;
|
||||||
|
SELECT slow, general, master_heartbeat_period FROM general ORDER BY slow;
|
||||||
|
SELECT slow, master_heartbeat_period FROM general ORDER BY slow;
|
||||||
|
SELECT slow FROM general ORDER BY slow;
|
||||||
|
DROP TABLE general;
|
||||||
|
CREATE TABLE master_heartbeat_period (slow INT, general INT, master_heartbeat_period INT, ignore_server_ids INT);
|
||||||
|
INSERT INTO master_heartbeat_period(slow, general, master_heartbeat_period, ignore_server_ids) VALUES (1,2,3,4), (5,6,7,8);
|
||||||
|
INSERT INTO master_heartbeat_period(slow, general, master_heartbeat_period) VALUES (1,2,3), (5,6,7);
|
||||||
|
INSERT INTO master_heartbeat_period(slow, general) VALUES (1,2), (5,6);
|
||||||
|
INSERT INTO master_heartbeat_period(slow) VALUES (1), (5);
|
||||||
|
SELECT slow, general, master_heartbeat_period, ignore_server_ids FROM master_heartbeat_period ORDER BY slow;
|
||||||
|
SELECT slow, general, master_heartbeat_period FROM master_heartbeat_period ORDER BY slow;
|
||||||
|
SELECT slow, master_heartbeat_period FROM master_heartbeat_period ORDER BY slow;
|
||||||
|
SELECT slow FROM master_heartbeat_period ORDER BY slow;
|
||||||
|
DROP TABLE master_heartbeat_period;
|
||||||
|
CREATE TABLE ignore_server_ids (slow INT, general INT, master_heartbeat_period INT, ignore_server_ids INT);
|
||||||
|
INSERT INTO ignore_server_ids(slow, general, master_heartbeat_period, ignore_server_ids) VALUES (1,2,3,4), (5,6,7,8);
|
||||||
|
INSERT INTO ignore_server_ids(slow, general, master_heartbeat_period) VALUES (1,2,3), (5,6,7);
|
||||||
|
INSERT INTO ignore_server_ids(slow, general) VALUES (1,2), (5,6);
|
||||||
|
INSERT INTO ignore_server_ids(slow) VALUES (1), (5);
|
||||||
|
SELECT slow, general, master_heartbeat_period, ignore_server_ids FROM ignore_server_ids ORDER BY slow;
|
||||||
|
SELECT slow, general, master_heartbeat_period FROM ignore_server_ids ORDER BY slow;
|
||||||
|
SELECT slow, master_heartbeat_period FROM ignore_server_ids ORDER BY slow;
|
||||||
|
SELECT slow FROM ignore_server_ids ORDER BY slow;
|
||||||
|
DROP TABLE ignore_server_ids;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (slow INT, general INT, ignore_server_ids INT, master_heartbeat_period INT);
|
||||||
|
INSERT INTO t1 VALUES (1,2,3,4);
|
||||||
|
DELIMITER |;
|
||||||
|
CREATE PROCEDURE p1()
|
||||||
|
BEGIN
|
||||||
|
DECLARE slow INT;
|
||||||
|
DECLARE general INT;
|
||||||
|
DECLARE ignore_server_ids INT;
|
||||||
|
DECLARE master_heartbeat_period INT;
|
||||||
|
|
||||||
|
SELECT max(t1.slow) INTO slow FROM t1;
|
||||||
|
SELECT max(t1.general) INTO general FROM t1;
|
||||||
|
SELECT max(t1.ignore_server_ids) INTO ignore_server_ids FROM t1;
|
||||||
|
SELECT max(t1.master_heartbeat_period) INTO master_heartbeat_period FROM t1;
|
||||||
|
|
||||||
|
SELECT slow, general, ignore_server_ids, master_heartbeat_period;
|
||||||
|
END|
|
||||||
|
|
||||||
|
CREATE PROCEDURE p2()
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
DECLARE n INT DEFAULT 2;
|
||||||
|
general: WHILE n > 0 DO
|
||||||
|
SET n = n -1;
|
||||||
|
END WHILE general;
|
||||||
|
|
||||||
|
SET n = 2;
|
||||||
|
slow: WHILE n > 0 DO
|
||||||
|
SET n = n -1;
|
||||||
|
END WHILE slow;
|
||||||
|
|
||||||
|
SET n = 2;
|
||||||
|
ignore_server_ids: WHILE n > 0 DO
|
||||||
|
SET n = n -1;
|
||||||
|
END WHILE ignore_server_ids;
|
||||||
|
|
||||||
|
SET n = 2;
|
||||||
|
master_heartbeat_period: WHILE n > 0 DO
|
||||||
|
SET n = n -1;
|
||||||
|
END WHILE master_heartbeat_period;
|
||||||
|
|
||||||
|
END|
|
||||||
|
DELIMITER ;|
|
||||||
|
CALL p1();
|
||||||
|
call p2();
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
DROP PROCEDURE p2;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -1034,6 +1034,25 @@ DROP TABLE t1;
|
|||||||
|
|
||||||
TRUNCATE TABLE mysql.slow_log;
|
TRUNCATE TABLE mysql.slow_log;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #47924 main.log_tables times out sporadically
|
||||||
|
#
|
||||||
|
|
||||||
|
use mysql;
|
||||||
|
# Should result in error
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists renamed_general_log;
|
||||||
|
drop table if exists renamed_slow_log;
|
||||||
|
--enable_warnings
|
||||||
|
--error ER_CANT_RENAME_LOG_TABLE
|
||||||
|
RENAME TABLE general_log TO renamed_general_log;
|
||||||
|
--error ER_CANT_RENAME_LOG_TABLE
|
||||||
|
RENAME TABLE slow_log TO renamed_slow_log;
|
||||||
|
|
||||||
|
use test;
|
||||||
|
flush tables with read lock;
|
||||||
|
unlock tables;
|
||||||
|
|
||||||
SET @@session.long_query_time= @old_long_query_time;
|
SET @@session.long_query_time= @old_long_query_time;
|
||||||
|
|
||||||
SET @@global.log_output= @old_log_output;
|
SET @@global.log_output= @old_log_output;
|
||||||
|
@ -487,3 +487,18 @@ diff_files $MYSQLTEST_VARDIR/tmp/mysqlbinlog.warn $MYSQLTEST_VARDIR/tmp/mysqlbin
|
|||||||
# Cleanup for this part of test
|
# Cleanup for this part of test
|
||||||
remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog.warn.empty;
|
remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog.warn.empty;
|
||||||
remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog.warn;
|
remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog.warn;
|
||||||
|
|
||||||
|
#
|
||||||
|
# WL#5625: Deprecate mysqlbinlog options --base64-output=always and --base64-output
|
||||||
|
#
|
||||||
|
|
||||||
|
--echo # Expect deprecation warning.
|
||||||
|
--exec $MYSQL_BINLOG --base64-output=always std_data/master-bin.000001 > /dev/null 2> $MYSQLTEST_VARDIR/tmp/mysqlbinlog.warn
|
||||||
|
--cat_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog.warn
|
||||||
|
|
||||||
|
--echo # Expect deprecation warning again.
|
||||||
|
--exec $MYSQL_BINLOG --base64-output std_data/master-bin.000001 > /dev/null 2> $MYSQLTEST_VARDIR/tmp/mysqlbinlog.warn
|
||||||
|
--cat_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog.warn
|
||||||
|
|
||||||
|
# Clean up this part of the test.
|
||||||
|
--remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog.warn
|
||||||
|
@ -16,6 +16,11 @@ connect(plug_con,localhost,plug,plug_dest);
|
|||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
GRANT PROXY ON plug_dest TO plug;
|
GRANT PROXY ON plug_dest TO plug;
|
||||||
|
--echo test proxies_priv columns
|
||||||
|
--replace_column 1 xx 7 xx
|
||||||
|
SELECT * FROM mysql.proxies_priv;
|
||||||
|
--echo test mysql.proxies_priv;
|
||||||
|
SHOW CREATE TABLE mysql.proxies_priv;
|
||||||
|
|
||||||
connect(plug_con,localhost,plug,plug_dest);
|
connect(plug_con,localhost,plug,plug_dest);
|
||||||
|
|
||||||
@ -226,7 +231,7 @@ CREATE USER test_drop@localhost;
|
|||||||
GRANT PROXY ON future_user TO test_drop@localhost;
|
GRANT PROXY ON future_user TO test_drop@localhost;
|
||||||
SHOW GRANTS FOR test_drop@localhost;
|
SHOW GRANTS FOR test_drop@localhost;
|
||||||
DROP USER test_drop@localhost;
|
DROP USER test_drop@localhost;
|
||||||
SELECT * FROM mysql.proxy_priv WHERE Host = 'test_drop' AND User = 'localhost';
|
SELECT * FROM mysql.proxies_priv WHERE Host = 'test_drop' AND User = 'localhost';
|
||||||
|
|
||||||
DROP USER proxy_admin;
|
DROP USER proxy_admin;
|
||||||
|
|
||||||
|
@ -3079,7 +3079,27 @@ EXECUTE stmt;
|
|||||||
DEALLOCATE PREPARE stmt;
|
DEALLOCATE PREPARE stmt;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
###########################################################################
|
--echo #
|
||||||
|
--echo # Bug#54494 crash with explain extended and prepared statements
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1(a INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
PREPARE stmt FROM 'EXPLAIN EXTENDED SELECT 1 FROM t1 RIGHT JOIN t1 t2 ON 1';
|
||||||
|
EXECUTE stmt;
|
||||||
|
EXECUTE stmt;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#54488 crash when using explain and prepared statements with subqueries
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1(f1 INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(1);
|
||||||
|
PREPARE stmt FROM 'EXPLAIN SELECT 1 FROM t1 WHERE (SELECT (SELECT 1 FROM t1 GROUP BY f1))';
|
||||||
|
EXECUTE stmt;
|
||||||
|
EXECUTE stmt;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo
|
--echo
|
||||||
--echo End of 5.1 tests.
|
--echo End of 5.1 tests.
|
||||||
|
@ -72,7 +72,7 @@ CREATE TABLE time_zone_leap_second ( Transition_time bigint signed NOT NULL,
|
|||||||
-- disable_query_log
|
-- disable_query_log
|
||||||
|
|
||||||
# Drop all tables created by this test
|
# Drop all tables created by this test
|
||||||
DROP TABLE db, host, user, func, plugin, tables_priv, columns_priv, procs_priv, servers, help_category, help_keyword, help_relation, help_topic, proc, time_zone, time_zone_leap_second, time_zone_name, time_zone_transition, time_zone_transition_type, general_log, slow_log, event, ndb_binlog_index, proxy_priv;
|
DROP TABLE db, host, user, func, plugin, tables_priv, columns_priv, procs_priv, servers, help_category, help_keyword, help_relation, help_topic, proc, time_zone, time_zone_leap_second, time_zone_name, time_zone_transition, time_zone_transition_type, general_log, slow_log, event, ndb_binlog_index, proxies_priv;
|
||||||
|
|
||||||
-- enable_query_log
|
-- enable_query_log
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ INSERT INTO servers VALUES ('test','localhost','test','root','', 0,'','mysql','r
|
|||||||
-- disable_query_log
|
-- disable_query_log
|
||||||
|
|
||||||
# Drop all tables created by this test
|
# Drop all tables created by this test
|
||||||
DROP TABLE db, host, user, func, plugin, tables_priv, columns_priv, procs_priv, servers, help_category, help_keyword, help_relation, help_topic, proc, time_zone, time_zone_leap_second, time_zone_name, time_zone_transition, time_zone_transition_type, general_log, slow_log, event, ndb_binlog_index, proxy_priv;
|
DROP TABLE db, host, user, func, plugin, tables_priv, columns_priv, procs_priv, servers, help_category, help_keyword, help_relation, help_topic, proc, time_zone, time_zone_leap_second, time_zone_name, time_zone_transition, time_zone_transition_type, general_log, slow_log, event, ndb_binlog_index, proxies_priv;
|
||||||
|
|
||||||
-- enable_query_log
|
-- enable_query_log
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ CREATE TABLE IF NOT EXISTS ndb_binlog_index (Position BIGINT UNSIGNED NOT NULL,
|
|||||||
-- disable_query_log
|
-- disable_query_log
|
||||||
|
|
||||||
# Drop all tables created by this test
|
# Drop all tables created by this test
|
||||||
DROP TABLE db, host, user, func, plugin, tables_priv, columns_priv, procs_priv, servers, help_category, help_keyword, help_relation, help_topic, proc, time_zone, time_zone_leap_second, time_zone_name, time_zone_transition, time_zone_transition_type, general_log, slow_log, event, ndb_binlog_index, proxy_priv;
|
DROP TABLE db, host, user, func, plugin, tables_priv, columns_priv, procs_priv, servers, help_category, help_keyword, help_relation, help_topic, proc, time_zone, time_zone_leap_second, time_zone_name, time_zone_transition, time_zone_transition_type, general_log, slow_log, event, ndb_binlog_index, proxies_priv;
|
||||||
|
|
||||||
-- enable_query_log
|
-- enable_query_log
|
||||||
|
|
||||||
|
@ -617,4 +617,17 @@ SELECT LENGTH(c) FROM t2;
|
|||||||
|
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
--echo # Bug #52160: crash and inconsistent results when grouping
|
||||||
|
--echo # by a function and column
|
||||||
|
|
||||||
|
CREATE FUNCTION f1() RETURNS TINYBLOB RETURN 1;
|
||||||
|
|
||||||
|
CREATE TABLE t1(a CHAR(1));
|
||||||
|
INSERT INTO t1 VALUES ('0'), ('0');
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1 GROUP BY f1(), a;
|
||||||
|
|
||||||
|
DROP FUNCTION f1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@ -66,7 +66,9 @@
|
|||||||
const char *args_separator= "----args-separator----";
|
const char *args_separator= "----args-separator----";
|
||||||
const char *my_defaults_file=0;
|
const char *my_defaults_file=0;
|
||||||
const char *my_defaults_group_suffix=0;
|
const char *my_defaults_group_suffix=0;
|
||||||
char *my_defaults_extra_file=0;
|
const char *my_defaults_extra_file=0;
|
||||||
|
|
||||||
|
static my_bool defaults_already_read= FALSE;
|
||||||
|
|
||||||
/* Which directories are searched for options (and in which order) */
|
/* Which directories are searched for options (and in which order) */
|
||||||
|
|
||||||
@ -139,6 +141,36 @@ static const char **init_default_directories(MEM_ROOT *alloc);
|
|||||||
static char *remove_end_comment(char *ptr);
|
static char *remove_end_comment(char *ptr);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Expand a file name so that the current working directory is added if
|
||||||
|
the name is relative.
|
||||||
|
|
||||||
|
RETURNS
|
||||||
|
0 All OK
|
||||||
|
2 Out of memory or path to long
|
||||||
|
3 Not able to get working directory
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int
|
||||||
|
fn_expand(const char *filename, const char **filename_var)
|
||||||
|
{
|
||||||
|
char dir[FN_REFLEN], buf[FN_REFLEN];
|
||||||
|
const int flags= MY_UNPACK_FILENAME | MY_SAFE_PATH | MY_RELATIVE_PATH;
|
||||||
|
const char *result_path= NULL;
|
||||||
|
DBUG_ENTER("fn_expand");
|
||||||
|
DBUG_PRINT("enter", ("filename: %s, buf: 0x%lx", filename, (unsigned long) buf));
|
||||||
|
if (my_getwd(dir, sizeof(dir), MYF(0)))
|
||||||
|
DBUG_RETURN(3);
|
||||||
|
DBUG_PRINT("debug", ("dir: %s", dir));
|
||||||
|
if (fn_format(buf, filename, dir, NULL, flags) == NULL ||
|
||||||
|
(result_path= my_strdup(buf, MYF(0))) == NULL)
|
||||||
|
DBUG_RETURN(2);
|
||||||
|
DBUG_PRINT("return", ("result: %s", result_path));
|
||||||
|
DBUG_ASSERT(result_path != NULL);
|
||||||
|
*filename_var= result_path;
|
||||||
|
DBUG_RETURN(0);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Process config files in default directories.
|
Process config files in default directories.
|
||||||
|
|
||||||
@ -167,6 +199,7 @@ static char *remove_end_comment(char *ptr);
|
|||||||
0 ok
|
0 ok
|
||||||
1 given cinf_file doesn't exist
|
1 given cinf_file doesn't exist
|
||||||
2 out of memory
|
2 out of memory
|
||||||
|
3 Can't get current working directory
|
||||||
|
|
||||||
The global variable 'my_defaults_group_suffix' is updated with value for
|
The global variable 'my_defaults_group_suffix' is updated with value for
|
||||||
--defaults_group_suffix
|
--defaults_group_suffix
|
||||||
@ -189,11 +222,21 @@ int my_search_option_files(const char *conf_file, int *argc, char ***argv,
|
|||||||
if (! my_defaults_group_suffix)
|
if (! my_defaults_group_suffix)
|
||||||
my_defaults_group_suffix= getenv(STRINGIFY_ARG(DEFAULT_GROUP_SUFFIX_ENV));
|
my_defaults_group_suffix= getenv(STRINGIFY_ARG(DEFAULT_GROUP_SUFFIX_ENV));
|
||||||
|
|
||||||
if (forced_extra_defaults)
|
if (forced_extra_defaults && !defaults_already_read)
|
||||||
my_defaults_extra_file= (char *) forced_extra_defaults;
|
{
|
||||||
|
int error= fn_expand(forced_extra_defaults, &my_defaults_extra_file);
|
||||||
|
if (error)
|
||||||
|
DBUG_RETURN(error);
|
||||||
|
}
|
||||||
|
|
||||||
if (forced_default_file)
|
if (forced_default_file && !defaults_already_read)
|
||||||
my_defaults_file= forced_default_file;
|
{
|
||||||
|
int error= fn_expand(forced_default_file, &my_defaults_file);
|
||||||
|
if (error)
|
||||||
|
DBUG_RETURN(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
defaults_already_read= TRUE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
We can only handle 'defaults-group-suffix' if we are called from
|
We can only handle 'defaults-group-suffix' if we are called from
|
||||||
@ -236,15 +279,15 @@ int my_search_option_files(const char *conf_file, int *argc, char ***argv,
|
|||||||
group->type_names[group->count]= 0;
|
group->type_names[group->count]= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (forced_default_file)
|
if (my_defaults_file)
|
||||||
{
|
{
|
||||||
if ((error= search_default_file_with_ext(func, func_ctx, "", "",
|
if ((error= search_default_file_with_ext(func, func_ctx, "", "",
|
||||||
forced_default_file, 0)) < 0)
|
my_defaults_file, 0)) < 0)
|
||||||
goto err;
|
goto err;
|
||||||
if (error > 0)
|
if (error > 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Could not open required defaults file: %s\n",
|
fprintf(stderr, "Could not open required defaults file: %s\n",
|
||||||
forced_default_file);
|
my_defaults_file);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -315,6 +315,9 @@ end:
|
|||||||
/* Produce a core for the thread */
|
/* Produce a core for the thread */
|
||||||
void my_write_core(int sig)
|
void my_write_core(int sig)
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_gcov
|
||||||
|
extern void __gcov_flush(void);
|
||||||
|
#endif
|
||||||
signal(sig, SIG_DFL);
|
signal(sig, SIG_DFL);
|
||||||
#ifdef HAVE_gcov
|
#ifdef HAVE_gcov
|
||||||
/*
|
/*
|
||||||
@ -322,7 +325,6 @@ void my_write_core(int sig)
|
|||||||
information from this process, causing gcov output to be incomplete.
|
information from this process, causing gcov output to be incomplete.
|
||||||
So we force the writing of coverage information here before terminating.
|
So we force the writing of coverage information here before terminating.
|
||||||
*/
|
*/
|
||||||
extern void __gcov_flush(void);
|
|
||||||
__gcov_flush();
|
__gcov_flush();
|
||||||
#endif
|
#endif
|
||||||
pthread_kill(pthread_self(), sig);
|
pthread_kill(pthread_self(), sig);
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
first byte of the question string is the question "type".
|
first byte of the question string is the question "type".
|
||||||
It can be a "ordinary" or a "password" question.
|
It can be an "ordinary" or a "password" question.
|
||||||
The last bit set marks a last question in the authentication exchange.
|
The last bit set marks a last question in the authentication exchange.
|
||||||
*/
|
*/
|
||||||
#define ORDINARY_QUESTION "\2"
|
#define ORDINARY_QUESTION "\2"
|
||||||
@ -176,7 +176,7 @@ mysql_declare_plugin_end;
|
|||||||
This plugin performs a dialog with the user, asking questions and
|
This plugin performs a dialog with the user, asking questions and
|
||||||
reading answers. Depending on the client it may be desirable to do it
|
reading answers. Depending on the client it may be desirable to do it
|
||||||
using GUI, or console, with or without curses, or read answers
|
using GUI, or console, with or without curses, or read answers
|
||||||
from a smardcard, for example.
|
from a smartcard, for example.
|
||||||
|
|
||||||
To support all this variety, the dialog plugin has a callback function
|
To support all this variety, the dialog plugin has a callback function
|
||||||
"authentication_dialog_ask". If the client has a function of this name
|
"authentication_dialog_ask". If the client has a function of this name
|
||||||
@ -256,7 +256,7 @@ static int perform_dialog(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql)
|
|||||||
in mysql_change_user() the client sends the first packet, so
|
in mysql_change_user() the client sends the first packet, so
|
||||||
the first vio->read_packet() does nothing (pkt == 0).
|
the first vio->read_packet() does nothing (pkt == 0).
|
||||||
|
|
||||||
We send the "password", assuming the client knows what its doing.
|
We send the "password", assuming the client knows what it's doing.
|
||||||
(in other words, the dialog plugin should be only set as a default
|
(in other words, the dialog plugin should be only set as a default
|
||||||
authentication plugin on the client if the first question
|
authentication plugin on the client if the first question
|
||||||
asks for a password - which will be sent in clear text, by the way)
|
asks for a password - which will be sent in clear text, by the way)
|
||||||
|
@ -17,22 +17,12 @@
|
|||||||
/**
|
/**
|
||||||
@file
|
@file
|
||||||
|
|
||||||
dialog client authentication plugin with examples
|
Test driver for the mysql-test/t/plugin_auth.test
|
||||||
|
|
||||||
dialog is a general purpose client authentication plugin, it simply
|
This is a set of test plugins used to test the external authentication
|
||||||
asks the user the question, as provided by the server and reports
|
implementation.
|
||||||
the answer back to the server. No encryption is involved,
|
See the above test file for more details.
|
||||||
the answers are sent in clear text.
|
This test plugin is based on the dialog plugin example.
|
||||||
|
|
||||||
Two examples are provided: two_questions server plugin, that asks
|
|
||||||
the password and an "Are you sure?" question with a reply "yes, of course".
|
|
||||||
It demonstrates the usage of "password" (input is hidden) and "ordinary"
|
|
||||||
(input can be echoed) questions, and how to mark the last question,
|
|
||||||
to avoid an extra roundtrip.
|
|
||||||
|
|
||||||
And three_attempts plugin that gives the user three attempts to enter
|
|
||||||
a correct password. It shows the situation when a number of questions
|
|
||||||
is not known in advance.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
@ -55,7 +45,7 @@
|
|||||||
/********************* SERVER SIDE ****************************************/
|
/********************* SERVER SIDE ****************************************/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
dialog test plugin mimicing the ordinary auth mechanism. Used to test the auth plugin API
|
dialog test plugin mimicking the ordinary auth mechanism. Used to test the auth plugin API
|
||||||
*/
|
*/
|
||||||
static int auth_test_plugin(MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info)
|
static int auth_test_plugin(MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info)
|
||||||
{
|
{
|
||||||
@ -150,10 +140,10 @@ static int test_plugin_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql)
|
|||||||
in mysql_change_user() the client sends the first packet, so
|
in mysql_change_user() the client sends the first packet, so
|
||||||
the first vio->read_packet() does nothing (pkt == 0).
|
the first vio->read_packet() does nothing (pkt == 0).
|
||||||
|
|
||||||
We send the "password", assuming the client knows what its doing.
|
We send the "password", assuming the client knows what it's doing.
|
||||||
(in other words, the dialog plugin should be only set as a default
|
(in other words, the dialog plugin should be only set as a default
|
||||||
authentication plugin on the client if the first question
|
authentication plugin on the client if the first question
|
||||||
asks for a password - which will be sent in cleat text, by the way)
|
asks for a password - which will be sent in clear text, by the way)
|
||||||
*/
|
*/
|
||||||
reply= mysql->passwd;
|
reply= mysql->passwd;
|
||||||
}
|
}
|
||||||
|
@ -478,7 +478,7 @@ PREPARE stmt FROM @str;
|
|||||||
EXECUTE stmt;
|
EXECUTE stmt;
|
||||||
DROP PREPARE stmt;
|
DROP PREPARE stmt;
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS proxy_priv (Host char(60) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Proxied_Host char(16) binary DEFAULT '' NOT NULL, Proxied_User char(60) binary DEFAULT '' NOT NULL, With_Grant BOOL DEFAULT 0 NOT NULL, PRIMARY KEY Host (Host,User,Proxied_Host,Proxied_User) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='User proxy privileges';
|
CREATE TABLE IF NOT EXISTS proxies_priv (Host char(60) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Proxied_host char(60) binary DEFAULT '' NOT NULL, Proxied_user char(16) binary DEFAULT '' NOT NULL, With_grant BOOL DEFAULT 0 NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Timestamp timestamp, PRIMARY KEY Host (Host,User,Proxied_host,Proxied_user), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='User proxy privileges';
|
||||||
|
|
||||||
-- Remember for later if proxy_priv table already existed
|
-- Remember for later if proxies_priv table already existed
|
||||||
set @had_proxy_priv_table= @@warning_count != 0;
|
set @had_proxies_priv_table= @@warning_count != 0;
|
||||||
|
@ -30,8 +30,8 @@ INSERT INTO tmp_user (host,user) SELECT @current_hostname,'' FROM dual WHERE LOW
|
|||||||
INSERT INTO user SELECT * FROM tmp_user WHERE @had_user_table=0;
|
INSERT INTO user SELECT * FROM tmp_user WHERE @had_user_table=0;
|
||||||
DROP TABLE tmp_user;
|
DROP TABLE tmp_user;
|
||||||
|
|
||||||
CREATE TEMPORARY TABLE tmp_proxy_priv LIKE proxy_priv;
|
CREATE TEMPORARY TABLE tmp_proxies_priv LIKE proxies_priv;
|
||||||
INSERT INTO tmp_proxy_priv VALUES ('localhost', 'root', '', '', TRUE);
|
INSERT INTO tmp_proxies_priv VALUES ('localhost', 'root', '', '', TRUE, '', now());
|
||||||
REPLACE INTO tmp_proxy_priv SELECT @current_hostname, 'root', '', '', TRUE FROM DUAL WHERE LOWER (@current_hostname) != 'localhost';
|
REPLACE INTO tmp_proxies_priv SELECT @current_hostname, 'root', '', '', TRUE, '', now() FROM DUAL WHERE LOWER (@current_hostname) != 'localhost';
|
||||||
INSERT INTO proxy_priv SELECT * FROM tmp_proxy_priv WHERE @had_proxy_priv_table=0;
|
INSERT INTO proxies_priv SELECT * FROM tmp_proxies_priv WHERE @had_proxies_priv_table=0;
|
||||||
DROP TABLE tmp_proxy_priv;
|
DROP TABLE tmp_proxies_priv;
|
||||||
|
@ -643,7 +643,7 @@ drop procedure mysql.die;
|
|||||||
ALTER TABLE user ADD plugin char(60) DEFAULT '' NOT NULL, ADD authentication_string TEXT NOT NULL;
|
ALTER TABLE user ADD plugin char(60) DEFAULT '' NOT NULL, ADD authentication_string TEXT NOT NULL;
|
||||||
ALTER TABLE user MODIFY plugin char(60) DEFAULT '' NOT NULL;
|
ALTER TABLE user MODIFY plugin char(60) DEFAULT '' NOT NULL;
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS proxy_priv (Host char(60) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Proxied_User char(60) binary DEFAULT '' NOT NULL, Proxied_Host char(16) binary DEFAULT '' NOT NULL, With_Grant BOOL DEFAULT 0 NOT NULL, PRIMARY KEY Host (Host,User,Proxied_Host,Proxied_User) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Users and global privileges';
|
CREATE TABLE IF NOT EXISTS proxies_priv (Host char(60) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Proxied_host char(60) binary DEFAULT '' NOT NULL, Proxied_user char(16) binary DEFAULT '' NOT NULL, With_grant BOOL DEFAULT 0 NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Timestamp timestamp, PRIMARY KEY Host (Host,User,Proxied_host,Proxied_user), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='User proxy privileges';
|
||||||
|
|
||||||
# Activate the new, possible modified privilege tables
|
# Activate the new, possible modified privilege tables
|
||||||
# This should not be needed, but gives us some extra testing that the above
|
# This should not be needed, but gives us some extra testing that the above
|
||||||
|
57
sql/field.cc
57
sql/field.cc
@ -7725,12 +7725,6 @@ void Field_blob::sql_type(String &res) const
|
|||||||
uchar *Field_blob::pack(uchar *to, const uchar *from,
|
uchar *Field_blob::pack(uchar *to, const uchar *from,
|
||||||
uint max_length, bool low_byte_first)
|
uint max_length, bool low_byte_first)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("Field_blob::pack");
|
|
||||||
DBUG_PRINT("enter", ("to: 0x%lx; from: 0x%lx;"
|
|
||||||
" max_length: %u; low_byte_first: %d",
|
|
||||||
(ulong) to, (ulong) from,
|
|
||||||
max_length, low_byte_first));
|
|
||||||
DBUG_DUMP("record", from, table->s->reclength);
|
|
||||||
uchar *save= ptr;
|
uchar *save= ptr;
|
||||||
ptr= (uchar*) from;
|
ptr= (uchar*) from;
|
||||||
uint32 length=get_length(); // Length of from string
|
uint32 length=get_length(); // Length of from string
|
||||||
@ -7751,8 +7745,7 @@ uchar *Field_blob::pack(uchar *to, const uchar *from,
|
|||||||
memcpy(to+packlength, from,length);
|
memcpy(to+packlength, from,length);
|
||||||
}
|
}
|
||||||
ptr=save; // Restore org row pointer
|
ptr=save; // Restore org row pointer
|
||||||
DBUG_DUMP("packed", to, packlength + length);
|
return to+packlength+length;
|
||||||
DBUG_RETURN(to+packlength+length);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -8396,6 +8389,54 @@ uint Field_enum::is_equal(Create_field *new_field)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uchar *Field_enum::pack(uchar *to, const uchar *from,
|
||||||
|
uint max_length, bool low_byte_first)
|
||||||
|
{
|
||||||
|
DBUG_ENTER("Field_enum::pack");
|
||||||
|
DBUG_PRINT("debug", ("packlength: %d", packlength));
|
||||||
|
DBUG_DUMP("from", from, packlength);
|
||||||
|
|
||||||
|
switch (packlength)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
*to = *from;
|
||||||
|
DBUG_RETURN(to + 1);
|
||||||
|
case 2: DBUG_RETURN(pack_int16(to, from, low_byte_first));
|
||||||
|
case 3: DBUG_RETURN(pack_int24(to, from, low_byte_first));
|
||||||
|
case 4: DBUG_RETURN(pack_int32(to, from, low_byte_first));
|
||||||
|
case 8: DBUG_RETURN(pack_int64(to, from, low_byte_first));
|
||||||
|
default:
|
||||||
|
DBUG_ASSERT(0);
|
||||||
|
}
|
||||||
|
MY_ASSERT_UNREACHABLE();
|
||||||
|
DBUG_RETURN(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
const uchar *Field_enum::unpack(uchar *to, const uchar *from,
|
||||||
|
uint param_data, bool low_byte_first)
|
||||||
|
{
|
||||||
|
DBUG_ENTER("Field_enum::unpack");
|
||||||
|
DBUG_PRINT("debug", ("packlength: %d", packlength));
|
||||||
|
DBUG_DUMP("from", from, packlength);
|
||||||
|
|
||||||
|
switch (packlength)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
*to = *from;
|
||||||
|
DBUG_RETURN(from + 1);
|
||||||
|
|
||||||
|
case 2: DBUG_RETURN(unpack_int16(to, from, low_byte_first));
|
||||||
|
case 3: DBUG_RETURN(unpack_int24(to, from, low_byte_first));
|
||||||
|
case 4: DBUG_RETURN(unpack_int32(to, from, low_byte_first));
|
||||||
|
case 8: DBUG_RETURN(unpack_int64(to, from, low_byte_first));
|
||||||
|
default:
|
||||||
|
DBUG_ASSERT(0);
|
||||||
|
}
|
||||||
|
MY_ASSERT_UNREACHABLE();
|
||||||
|
DBUG_RETURN(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@return
|
@return
|
||||||
returns 1 if the fields are equally defined
|
returns 1 if the fields are equally defined
|
||||||
|
106
sql/field.h
106
sql/field.h
@ -554,6 +554,48 @@ private:
|
|||||||
{ return 0; }
|
{ return 0; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
static void handle_int16(uchar *to, const uchar *from,
|
||||||
|
bool low_byte_first_from, bool low_byte_first_to)
|
||||||
|
{
|
||||||
|
int16 val;
|
||||||
|
#ifdef WORDS_BIGENDIAN
|
||||||
|
if (low_byte_first_from)
|
||||||
|
val = sint2korr(from);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
shortget(val, from);
|
||||||
|
|
||||||
|
#ifdef WORDS_BIGENDIAN
|
||||||
|
if (low_byte_first_to)
|
||||||
|
int2store(to, val);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
shortstore(to, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void handle_int24(uchar *to, const uchar *from,
|
||||||
|
bool low_byte_first_from, bool low_byte_first_to)
|
||||||
|
{
|
||||||
|
int32 val;
|
||||||
|
#ifdef WORDS_BIGENDIAN
|
||||||
|
if (low_byte_first_from)
|
||||||
|
val = sint3korr(from);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
val= (from[0] << 16) + (from[1] << 8) + from[2];
|
||||||
|
|
||||||
|
#ifdef WORDS_BIGENDIAN
|
||||||
|
if (low_byte_first_to)
|
||||||
|
int2store(to, val);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
to[0]= 0xFF & (val >> 16);
|
||||||
|
to[1]= 0xFF & (val >> 8);
|
||||||
|
to[2]= 0xFF & val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Helper function to pack()/unpack() int32 values
|
Helper function to pack()/unpack() int32 values
|
||||||
*/
|
*/
|
||||||
@ -598,6 +640,32 @@ protected:
|
|||||||
longlongstore(to, val);
|
longlongstore(to, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uchar *pack_int16(uchar *to, const uchar *from, bool low_byte_first_to)
|
||||||
|
{
|
||||||
|
handle_int16(to, from, table->s->db_low_byte_first, low_byte_first_to);
|
||||||
|
return to + sizeof(int16);
|
||||||
|
}
|
||||||
|
|
||||||
|
const uchar *unpack_int16(uchar* to, const uchar *from,
|
||||||
|
bool low_byte_first_from)
|
||||||
|
{
|
||||||
|
handle_int16(to, from, low_byte_first_from, table->s->db_low_byte_first);
|
||||||
|
return from + sizeof(int16);
|
||||||
|
}
|
||||||
|
|
||||||
|
uchar *pack_int24(uchar *to, const uchar *from, bool low_byte_first_to)
|
||||||
|
{
|
||||||
|
handle_int24(to, from, table->s->db_low_byte_first, low_byte_first_to);
|
||||||
|
return to + 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uchar *unpack_int24(uchar* to, const uchar *from,
|
||||||
|
bool low_byte_first_from)
|
||||||
|
{
|
||||||
|
handle_int24(to, from, low_byte_first_from, table->s->db_low_byte_first);
|
||||||
|
return from + 3;
|
||||||
|
}
|
||||||
|
|
||||||
uchar *pack_int32(uchar *to, const uchar *from, bool low_byte_first_to)
|
uchar *pack_int32(uchar *to, const uchar *from, bool low_byte_first_to)
|
||||||
{
|
{
|
||||||
handle_int32(to, from, table->s->db_low_byte_first, low_byte_first_to);
|
handle_int32(to, from, table->s->db_low_byte_first, low_byte_first_to);
|
||||||
@ -918,41 +986,13 @@ public:
|
|||||||
virtual uchar *pack(uchar* to, const uchar *from,
|
virtual uchar *pack(uchar* to, const uchar *from,
|
||||||
uint max_length, bool low_byte_first)
|
uint max_length, bool low_byte_first)
|
||||||
{
|
{
|
||||||
int16 val;
|
return pack_int16(to, from, low_byte_first);
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
if (table->s->db_low_byte_first)
|
|
||||||
val = sint2korr(from);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
shortget(val, from);
|
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
if (low_byte_first)
|
|
||||||
int2store(to, val);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
shortstore(to, val);
|
|
||||||
return to + sizeof(val);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual const uchar *unpack(uchar* to, const uchar *from,
|
virtual const uchar *unpack(uchar* to, const uchar *from,
|
||||||
uint param_data, bool low_byte_first)
|
uint param_data, bool low_byte_first)
|
||||||
{
|
{
|
||||||
int16 val;
|
return unpack_int16(to, from, low_byte_first);
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
if (low_byte_first)
|
|
||||||
val = sint2korr(from);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
shortget(val, from);
|
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
if (table->s->db_low_byte_first)
|
|
||||||
int2store(to, val);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
shortstore(to, val);
|
|
||||||
return from + sizeof(val);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1895,6 +1935,12 @@ public:
|
|||||||
bool has_charset(void) const { return TRUE; }
|
bool has_charset(void) const { return TRUE; }
|
||||||
/* enum and set are sorted as integers */
|
/* enum and set are sorted as integers */
|
||||||
CHARSET_INFO *sort_charset(void) const { return &my_charset_bin; }
|
CHARSET_INFO *sort_charset(void) const { return &my_charset_bin; }
|
||||||
|
|
||||||
|
virtual uchar *pack(uchar *to, const uchar *from,
|
||||||
|
uint max_length, bool low_byte_first);
|
||||||
|
virtual const uchar *unpack(uchar *to, const uchar *from,
|
||||||
|
uint param_data, bool low_byte_first);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int do_save_field_metadata(uchar *first_byte);
|
int do_save_field_metadata(uchar *first_byte);
|
||||||
uint is_equal(Create_field *new_field);
|
uint is_equal(Create_field *new_field);
|
||||||
|
11
sql/item.cc
11
sql/item.cc
@ -1853,11 +1853,12 @@ bool agg_item_set_converter(DTCollation &coll, const char *fname,
|
|||||||
*arg= conv;
|
*arg= conv;
|
||||||
else
|
else
|
||||||
thd->change_item_tree(arg, conv);
|
thd->change_item_tree(arg, conv);
|
||||||
/*
|
|
||||||
We do not check conv->fixed, because Item_func_conv_charset which can
|
if (conv->fix_fields(thd, arg))
|
||||||
be return by safe_charset_converter can't be fixed at creation
|
{
|
||||||
*/
|
res= TRUE;
|
||||||
conv->fix_fields(thd, arg);
|
break; // we cannot return here, we need to restore "arena".
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (arena)
|
if (arena)
|
||||||
thd->restore_active_arena(arena, &backup);
|
thd->restore_active_arena(arena, &backup);
|
||||||
|
@ -1911,18 +1911,22 @@ int subselect_single_select_engine::exec()
|
|||||||
}
|
}
|
||||||
if (!select_lex->uncacheable && thd->lex->describe &&
|
if (!select_lex->uncacheable && thd->lex->describe &&
|
||||||
!(join->select_options & SELECT_DESCRIBE) &&
|
!(join->select_options & SELECT_DESCRIBE) &&
|
||||||
join->need_tmp && item->const_item())
|
join->need_tmp)
|
||||||
{
|
{
|
||||||
/*
|
item->update_used_tables();
|
||||||
Force join->join_tmp creation, because this subquery will be replaced
|
if (item->const_item())
|
||||||
by a simple select from the materialization temp table by optimize()
|
{
|
||||||
called by EXPLAIN and we need to preserve the initial query structure
|
/*
|
||||||
so we can display it.
|
Force join->join_tmp creation, because this subquery will be replaced
|
||||||
*/
|
by a simple select from the materialization temp table by optimize()
|
||||||
select_lex->uncacheable|= UNCACHEABLE_EXPLAIN;
|
called by EXPLAIN and we need to preserve the initial query structure
|
||||||
select_lex->master_unit()->uncacheable|= UNCACHEABLE_EXPLAIN;
|
so we can display it.
|
||||||
if (join->init_save_join_tab())
|
*/
|
||||||
DBUG_RETURN(1); /* purecov: inspected */
|
select_lex->uncacheable|= UNCACHEABLE_EXPLAIN;
|
||||||
|
select_lex->master_unit()->uncacheable|= UNCACHEABLE_EXPLAIN;
|
||||||
|
if (join->init_save_join_tab())
|
||||||
|
DBUG_RETURN(1); /* purecov: inspected */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (item->engine_changed)
|
if (item->engine_changed)
|
||||||
{
|
{
|
||||||
|
@ -361,6 +361,7 @@ public:
|
|||||||
const char *func_name() const { return "time_to_sec"; }
|
const char *func_name() const { return "time_to_sec"; }
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
|
maybe_null= TRUE;
|
||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=10*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=10*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
}
|
}
|
||||||
|
@ -3778,12 +3778,12 @@ static int init_server_components()
|
|||||||
unireg_abort(1);
|
unireg_abort(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* initialize delegates for extension observers */
|
/*
|
||||||
|
initialize delegates for extension observers, errors have already
|
||||||
|
been reported in the function
|
||||||
|
*/
|
||||||
if (delegates_init())
|
if (delegates_init())
|
||||||
{
|
|
||||||
sql_print_error("Initialize extension delegates failed");
|
|
||||||
unireg_abort(1);
|
unireg_abort(1);
|
||||||
}
|
|
||||||
|
|
||||||
/* need to configure logging before initializing storage engines */
|
/* need to configure logging before initializing storage engines */
|
||||||
if (opt_log_slave_updates && !opt_bin_log)
|
if (opt_log_slave_updates && !opt_bin_log)
|
||||||
@ -5662,6 +5662,12 @@ struct my_option my_long_options[]=
|
|||||||
{"ansi", 'a', "Use ANSI SQL syntax instead of MySQL syntax. This mode "
|
{"ansi", 'a', "Use ANSI SQL syntax instead of MySQL syntax. This mode "
|
||||||
"will also set transaction isolation level 'serializable'.", 0, 0, 0,
|
"will also set transaction isolation level 'serializable'.", 0, 0, 0,
|
||||||
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
/*
|
||||||
|
Because Sys_var_bit does not support command-line options, we need to
|
||||||
|
explicitely add one for --autocommit
|
||||||
|
*/
|
||||||
|
{"autocommit", OPT_AUTOCOMMIT, "Set default value for autocommit (0 or 1)",
|
||||||
|
NULL, NULL, 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, NULL},
|
||||||
{"bind-address", OPT_BIND_ADDRESS, "IP address to bind to.",
|
{"bind-address", OPT_BIND_ADDRESS, "IP address to bind to.",
|
||||||
&my_bind_addr_str, &my_bind_addr_str, 0, GET_STR,
|
&my_bind_addr_str, &my_bind_addr_str, 0, GET_STR,
|
||||||
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
@ -7114,6 +7120,13 @@ mysqld_get_one_option(int optid,
|
|||||||
if (argument == NULL) /* no argument */
|
if (argument == NULL) /* no argument */
|
||||||
log_error_file_ptr= const_cast<char*>("");
|
log_error_file_ptr= const_cast<char*>("");
|
||||||
break;
|
break;
|
||||||
|
case OPT_AUTOCOMMIT:
|
||||||
|
const ulonglong turn_bit_on= (argument && (atoi(argument) == 0)) ?
|
||||||
|
OPTION_NOT_AUTOCOMMIT : OPTION_AUTOCOMMIT;
|
||||||
|
global_system_variables.option_bits=
|
||||||
|
(global_system_variables.option_bits &
|
||||||
|
~(OPTION_NOT_AUTOCOMMIT | OPTION_AUTOCOMMIT)) | turn_bit_on;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -391,7 +391,8 @@ enum options_mysqld
|
|||||||
OPT_UPDATE_LOG,
|
OPT_UPDATE_LOG,
|
||||||
OPT_WANT_CORE,
|
OPT_WANT_CORE,
|
||||||
OPT_ENGINE_CONDITION_PUSHDOWN,
|
OPT_ENGINE_CONDITION_PUSHDOWN,
|
||||||
OPT_LOG_ERROR
|
OPT_LOG_ERROR,
|
||||||
|
OPT_AUTOCOMMIT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -105,12 +105,20 @@ int delegates_init()
|
|||||||
transaction_delegate= new (place_trans_mem) Trans_delegate;
|
transaction_delegate= new (place_trans_mem) Trans_delegate;
|
||||||
|
|
||||||
if (!transaction_delegate->is_inited())
|
if (!transaction_delegate->is_inited())
|
||||||
|
{
|
||||||
|
sql_print_error("Initialization of transaction delegates failed. "
|
||||||
|
"Please report a bug.");
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
binlog_storage_delegate= new (place_storage_mem) Binlog_storage_delegate;
|
binlog_storage_delegate= new (place_storage_mem) Binlog_storage_delegate;
|
||||||
|
|
||||||
if (!binlog_storage_delegate->is_inited())
|
if (!binlog_storage_delegate->is_inited())
|
||||||
|
{
|
||||||
|
sql_print_error("Initialization binlog storage delegates failed. "
|
||||||
|
"Please report a bug.");
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_REPLICATION
|
#ifdef HAVE_REPLICATION
|
||||||
void *place_transmit_mem= transmit_mem.data;
|
void *place_transmit_mem= transmit_mem.data;
|
||||||
@ -119,16 +127,29 @@ int delegates_init()
|
|||||||
binlog_transmit_delegate= new (place_transmit_mem) Binlog_transmit_delegate;
|
binlog_transmit_delegate= new (place_transmit_mem) Binlog_transmit_delegate;
|
||||||
|
|
||||||
if (!binlog_transmit_delegate->is_inited())
|
if (!binlog_transmit_delegate->is_inited())
|
||||||
|
{
|
||||||
|
sql_print_error("Initialization of binlog transmit delegates failed. "
|
||||||
|
"Please report a bug.");
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
binlog_relay_io_delegate= new (place_relay_io_mem) Binlog_relay_IO_delegate;
|
binlog_relay_io_delegate= new (place_relay_io_mem) Binlog_relay_IO_delegate;
|
||||||
|
|
||||||
if (!binlog_relay_io_delegate->is_inited())
|
if (!binlog_relay_io_delegate->is_inited())
|
||||||
|
{
|
||||||
|
sql_print_error("Initialization binlog relay IO delegates failed. "
|
||||||
|
"Please report a bug.");
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (pthread_key_create(&RPL_TRANS_BINLOG_INFO, NULL))
|
if (pthread_key_create(&RPL_TRANS_BINLOG_INFO, NULL))
|
||||||
|
{
|
||||||
|
sql_print_error("Error while creating pthread specific data key for replication. "
|
||||||
|
"Please report a bug.");
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,8 +78,6 @@ pack_row(TABLE *table, MY_BITMAP const* cols,
|
|||||||
unsigned int null_mask= 1U;
|
unsigned int null_mask= 1U;
|
||||||
for ( ; (field= *p_field) ; p_field++)
|
for ( ; (field= *p_field) ; p_field++)
|
||||||
{
|
{
|
||||||
DBUG_PRINT("debug", ("null_mask=%d; null_ptr=%p; row_data=%p; null_byte_count=%d",
|
|
||||||
null_mask, null_ptr, row_data, null_byte_count));
|
|
||||||
if (bitmap_is_set(cols, p_field - table->field))
|
if (bitmap_is_set(cols, p_field - table->field))
|
||||||
{
|
{
|
||||||
my_ptrdiff_t offset;
|
my_ptrdiff_t offset;
|
||||||
@ -110,6 +108,7 @@ pack_row(TABLE *table, MY_BITMAP const* cols,
|
|||||||
field->field_name, field->real_type(),
|
field->field_name, field->real_type(),
|
||||||
(ulong) old_pack_ptr, (ulong) pack_ptr,
|
(ulong) old_pack_ptr, (ulong) pack_ptr,
|
||||||
(int) (pack_ptr - old_pack_ptr)));
|
(int) (pack_ptr - old_pack_ptr)));
|
||||||
|
DBUG_DUMP("packed_data", old_pack_ptr, pack_ptr - old_pack_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
null_mask <<= 1;
|
null_mask <<= 1;
|
||||||
@ -380,8 +379,11 @@ unpack_row(Relay_log_info const *rli,
|
|||||||
}
|
}
|
||||||
DBUG_ASSERT(null_mask & 0xFF); // One of the 8 LSB should be set
|
DBUG_ASSERT(null_mask & 0xFF); // One of the 8 LSB should be set
|
||||||
|
|
||||||
if (!((null_bits & null_mask) && tabledef->maybe_null(i)))
|
if (!((null_bits & null_mask) && tabledef->maybe_null(i))) {
|
||||||
pack_ptr+= tabledef->calc_field_size(i, (uchar *) pack_ptr);
|
uint32 len= tabledef->calc_field_size(i, (uchar *) pack_ptr);
|
||||||
|
DBUG_DUMP("field_data", pack_ptr, len);
|
||||||
|
pack_ptr+= len;
|
||||||
|
}
|
||||||
null_mask <<= 1;
|
null_mask <<= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
118
sql/sql_acl.cc
118
sql/sql_acl.cc
@ -268,11 +268,13 @@ class ACL_PROXY_USER :public ACL_ACCESS
|
|||||||
bool with_grant;
|
bool with_grant;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
MYSQL_PROXY_PRIV_HOST,
|
MYSQL_PROXIES_PRIV_HOST,
|
||||||
MYSQL_PROXY_PRIV_USER,
|
MYSQL_PROXIES_PRIV_USER,
|
||||||
MYSQL_PROXY_PRIV_PROXIED_HOST,
|
MYSQL_PROXIES_PRIV_PROXIED_HOST,
|
||||||
MYSQL_PROXY_PRIV_PROXIED_USER,
|
MYSQL_PROXIES_PRIV_PROXIED_USER,
|
||||||
MYSQL_PROXY_PRIV_WITH_GRANT } old_acl_proxy_users;
|
MYSQL_PROXIES_PRIV_WITH_GRANT,
|
||||||
|
MYSQL_PROXIES_PRIV_GRANTOR,
|
||||||
|
MYSQL_PROXIES_PRIV_TIMESTAMP } old_acl_proxy_users;
|
||||||
public:
|
public:
|
||||||
ACL_PROXY_USER () {};
|
ACL_PROXY_USER () {};
|
||||||
|
|
||||||
@ -308,11 +310,11 @@ public:
|
|||||||
|
|
||||||
void init(TABLE *table, MEM_ROOT *mem)
|
void init(TABLE *table, MEM_ROOT *mem)
|
||||||
{
|
{
|
||||||
init (get_field(mem, table->field[MYSQL_PROXY_PRIV_HOST]),
|
init (get_field(mem, table->field[MYSQL_PROXIES_PRIV_HOST]),
|
||||||
get_field(mem, table->field[MYSQL_PROXY_PRIV_USER]),
|
get_field(mem, table->field[MYSQL_PROXIES_PRIV_USER]),
|
||||||
get_field(mem, table->field[MYSQL_PROXY_PRIV_PROXIED_HOST]),
|
get_field(mem, table->field[MYSQL_PROXIES_PRIV_PROXIED_HOST]),
|
||||||
get_field(mem, table->field[MYSQL_PROXY_PRIV_PROXIED_USER]),
|
get_field(mem, table->field[MYSQL_PROXIES_PRIV_PROXIED_USER]),
|
||||||
table->field[MYSQL_PROXY_PRIV_WITH_GRANT]->val_int() != 0);
|
table->field[MYSQL_PROXIES_PRIV_WITH_GRANT]->val_int() != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get_with_grant() { return with_grant; }
|
bool get_with_grant() { return with_grant; }
|
||||||
@ -337,7 +339,7 @@ public:
|
|||||||
(hostname_requires_resolving(host.hostname) ||
|
(hostname_requires_resolving(host.hostname) ||
|
||||||
hostname_requires_resolving(proxied_host.hostname)))
|
hostname_requires_resolving(proxied_host.hostname)))
|
||||||
{
|
{
|
||||||
sql_print_warning("'proxy_priv' entry '%s@%s %s@%s' "
|
sql_print_warning("'proxes_priv' entry '%s@%s %s@%s' "
|
||||||
"ignored in --skip-name-resolve mode.",
|
"ignored in --skip-name-resolve mode.",
|
||||||
proxied_user ? proxied_user : "",
|
proxied_user ? proxied_user : "",
|
||||||
proxied_host.hostname ? proxied_host.hostname : "",
|
proxied_host.hostname ? proxied_host.hostname : "",
|
||||||
@ -452,19 +454,19 @@ public:
|
|||||||
user->str ? user->str : "<NULL>",
|
user->str ? user->str : "<NULL>",
|
||||||
proxied_host->str ? proxied_host->str : "<NULL>",
|
proxied_host->str ? proxied_host->str : "<NULL>",
|
||||||
proxied_user->str ? proxied_user->str : "<NULL>"));
|
proxied_user->str ? proxied_user->str : "<NULL>"));
|
||||||
if (table->field[MYSQL_PROXY_PRIV_HOST]->store(host->str,
|
if (table->field[MYSQL_PROXIES_PRIV_HOST]->store(host->str,
|
||||||
host->length,
|
host->length,
|
||||||
system_charset_info))
|
system_charset_info))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
if (table->field[MYSQL_PROXY_PRIV_USER]->store(user->str,
|
if (table->field[MYSQL_PROXIES_PRIV_USER]->store(user->str,
|
||||||
user->length,
|
user->length,
|
||||||
system_charset_info))
|
system_charset_info))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
if (table->field[MYSQL_PROXY_PRIV_PROXIED_HOST]->store(proxied_host->str,
|
if (table->field[MYSQL_PROXIES_PRIV_PROXIED_HOST]->store(proxied_host->str,
|
||||||
proxied_host->length,
|
proxied_host->length,
|
||||||
system_charset_info))
|
system_charset_info))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
if (table->field[MYSQL_PROXY_PRIV_PROXIED_USER]->store(proxied_user->str,
|
if (table->field[MYSQL_PROXIES_PRIV_PROXIED_USER]->store(proxied_user->str,
|
||||||
proxied_user->length,
|
proxied_user->length,
|
||||||
system_charset_info))
|
system_charset_info))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
@ -477,15 +479,20 @@ public:
|
|||||||
const LEX_STRING *user,
|
const LEX_STRING *user,
|
||||||
const LEX_STRING *proxied_host,
|
const LEX_STRING *proxied_host,
|
||||||
const LEX_STRING *proxied_user,
|
const LEX_STRING *proxied_user,
|
||||||
bool with_grant)
|
bool with_grant,
|
||||||
|
const char *grantor)
|
||||||
{
|
{
|
||||||
DBUG_ENTER ("ACL_PROXY_USER::store_pk");
|
DBUG_ENTER("ACL_PROXY_USER::store_pk");
|
||||||
if (store_pk (table, host, user, proxied_host, proxied_user))
|
if (store_pk(table, host, user, proxied_host, proxied_user))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
DBUG_PRINT ("info", ("with_grant=%s", with_grant ? "TRUE" : "FALSE"));
|
DBUG_PRINT("info", ("with_grant=%s", with_grant ? "TRUE" : "FALSE"));
|
||||||
if (table->field[MYSQL_PROXY_PRIV_WITH_GRANT]->store(with_grant ? 1 : 0,
|
if (table->field[MYSQL_PROXIES_PRIV_WITH_GRANT]->store(with_grant ? 1 : 0,
|
||||||
TRUE))
|
TRUE))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
|
if (table->field[MYSQL_PROXIES_PRIV_GRANTOR]->store(grantor,
|
||||||
|
strlen(grantor),
|
||||||
|
system_charset_info))
|
||||||
|
DBUG_RETURN(TRUE);
|
||||||
|
|
||||||
DBUG_RETURN(FALSE);
|
DBUG_RETURN(FALSE);
|
||||||
}
|
}
|
||||||
@ -1113,8 +1120,8 @@ my_bool acl_reload(THD *thd)
|
|||||||
tables[2].init_one_table(C_STRING_WITH_LEN("mysql"),
|
tables[2].init_one_table(C_STRING_WITH_LEN("mysql"),
|
||||||
C_STRING_WITH_LEN("db"), "db", TL_READ);
|
C_STRING_WITH_LEN("db"), "db", TL_READ);
|
||||||
tables[3].init_one_table(C_STRING_WITH_LEN("mysql"),
|
tables[3].init_one_table(C_STRING_WITH_LEN("mysql"),
|
||||||
C_STRING_WITH_LEN("proxy_priv"),
|
C_STRING_WITH_LEN("proxies_priv"),
|
||||||
"proxy_priv", TL_READ);
|
"proxies_priv", TL_READ);
|
||||||
tables[0].next_local= tables[0].next_global= tables + 1;
|
tables[0].next_local= tables[0].next_global= tables + 1;
|
||||||
tables[1].next_local= tables[1].next_global= tables + 2;
|
tables[1].next_local= tables[1].next_global= tables + 2;
|
||||||
tables[2].next_local= tables[2].next_global= tables + 3;
|
tables[2].next_local= tables[2].next_global= tables + 3;
|
||||||
@ -2608,7 +2615,7 @@ acl_insert_proxy_user(ACL_PROXY_USER *new_value)
|
|||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user,
|
replace_proxies_priv_table(THD *thd, TABLE *table, const LEX_USER *user,
|
||||||
const LEX_USER *proxied_user, bool with_grant_arg,
|
const LEX_USER *proxied_user, bool with_grant_arg,
|
||||||
bool revoke_grant)
|
bool revoke_grant)
|
||||||
{
|
{
|
||||||
@ -2616,8 +2623,9 @@ replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user,
|
|||||||
int error;
|
int error;
|
||||||
uchar user_key[MAX_KEY_LENGTH];
|
uchar user_key[MAX_KEY_LENGTH];
|
||||||
ACL_PROXY_USER new_grant;
|
ACL_PROXY_USER new_grant;
|
||||||
|
char grantor[USER_HOST_BUFF_SIZE];
|
||||||
|
|
||||||
DBUG_ENTER("replace_proxy_priv_table");
|
DBUG_ENTER("replace_proxies_priv_table");
|
||||||
|
|
||||||
if (!initialized)
|
if (!initialized)
|
||||||
{
|
{
|
||||||
@ -2639,6 +2647,8 @@ replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user,
|
|||||||
key_copy(user_key, table->record[0], table->key_info,
|
key_copy(user_key, table->record[0], table->key_info,
|
||||||
table->key_info->key_length);
|
table->key_info->key_length);
|
||||||
|
|
||||||
|
get_grantor(thd, grantor);
|
||||||
|
|
||||||
table->file->ha_index_init(0, 1);
|
table->file->ha_index_init(0, 1);
|
||||||
if (table->file->index_read_map(table->record[0], user_key,
|
if (table->file->index_read_map(table->record[0], user_key,
|
||||||
HA_WHOLE_KEY,
|
HA_WHOLE_KEY,
|
||||||
@ -2655,7 +2665,8 @@ replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user,
|
|||||||
ACL_PROXY_USER::store_data_record(table, &user->host, &user->user,
|
ACL_PROXY_USER::store_data_record(table, &user->host, &user->user,
|
||||||
&proxied_user->host,
|
&proxied_user->host,
|
||||||
&proxied_user->user,
|
&proxied_user->user,
|
||||||
with_grant_arg);
|
with_grant_arg,
|
||||||
|
grantor);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2712,7 +2723,7 @@ table_error:
|
|||||||
table->file->print_error(error, MYF(0)); /* purecov: inspected */
|
table->file->print_error(error, MYF(0)); /* purecov: inspected */
|
||||||
|
|
||||||
abort:
|
abort:
|
||||||
DBUG_PRINT("info", ("aborting replace_proxy_priv_table"));
|
DBUG_PRINT("info", ("aborting replace_proxies_priv_table"));
|
||||||
table->file->ha_index_end();
|
table->file->ha_index_end();
|
||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(-1);
|
||||||
}
|
}
|
||||||
@ -3962,14 +3973,14 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list,
|
|||||||
proxied_user= str_list++;
|
proxied_user= str_list++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* open the mysql.user and mysql.db or mysql.proxy_priv tables */
|
/* open the mysql.user and mysql.db or mysql.proxies_priv tables */
|
||||||
tables[0].init_one_table(C_STRING_WITH_LEN("mysql"),
|
tables[0].init_one_table(C_STRING_WITH_LEN("mysql"),
|
||||||
C_STRING_WITH_LEN("user"), "user", TL_WRITE);
|
C_STRING_WITH_LEN("user"), "user", TL_WRITE);
|
||||||
if (is_proxy)
|
if (is_proxy)
|
||||||
|
|
||||||
tables[1].init_one_table(C_STRING_WITH_LEN("mysql"),
|
tables[1].init_one_table(C_STRING_WITH_LEN("mysql"),
|
||||||
C_STRING_WITH_LEN("proxy_priv"),
|
C_STRING_WITH_LEN("proxies_priv"),
|
||||||
"proxy_priv",
|
"proxies_priv",
|
||||||
TL_WRITE);
|
TL_WRITE);
|
||||||
else
|
else
|
||||||
tables[1].init_one_table(C_STRING_WITH_LEN("mysql"),
|
tables[1].init_one_table(C_STRING_WITH_LEN("mysql"),
|
||||||
@ -4063,7 +4074,7 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list,
|
|||||||
}
|
}
|
||||||
else if (is_proxy)
|
else if (is_proxy)
|
||||||
{
|
{
|
||||||
if (replace_proxy_priv_table (thd, tables[1].table, Str, proxied_user,
|
if (replace_proxies_priv_table (thd, tables[1].table, Str, proxied_user,
|
||||||
rights & GRANT_ACL ? TRUE : FALSE,
|
rights & GRANT_ACL ? TRUE : FALSE,
|
||||||
revoke_grant))
|
revoke_grant))
|
||||||
result= -1;
|
result= -1;
|
||||||
@ -5690,8 +5701,8 @@ int open_grant_tables(THD *thd, TABLE_LIST *tables)
|
|||||||
C_STRING_WITH_LEN("procs_priv"),
|
C_STRING_WITH_LEN("procs_priv"),
|
||||||
"procs_priv", TL_WRITE);
|
"procs_priv", TL_WRITE);
|
||||||
(tables+5)->init_one_table(C_STRING_WITH_LEN("mysql"),
|
(tables+5)->init_one_table(C_STRING_WITH_LEN("mysql"),
|
||||||
C_STRING_WITH_LEN("proxy_priv"),
|
C_STRING_WITH_LEN("proxies_priv"),
|
||||||
"proxy_priv", TL_WRITE);
|
"proxies_priv", TL_WRITE);
|
||||||
tables->next_local= tables->next_global= tables + 1;
|
tables->next_local= tables->next_global= tables + 1;
|
||||||
(tables+1)->next_local= (tables+1)->next_global= tables + 2;
|
(tables+1)->next_local= (tables+1)->next_global= tables + 2;
|
||||||
(tables+2)->next_local= (tables+2)->next_global= tables + 3;
|
(tables+2)->next_local= (tables+2)->next_global= tables + 3;
|
||||||
@ -6283,7 +6294,7 @@ static int handle_grant_data(TABLE_LIST *tables, bool drop,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle proxy_priv table. */
|
/* Handle proxies_priv table. */
|
||||||
if ((found= handle_grant_table(tables, 5, drop, user_from, user_to)) < 0)
|
if ((found= handle_grant_table(tables, 5, drop, user_from, user_to)) < 0)
|
||||||
{
|
{
|
||||||
/* Handle of table failed, don't touch the in-memory array. */
|
/* Handle of table failed, don't touch the in-memory array. */
|
||||||
@ -6291,7 +6302,7 @@ static int handle_grant_data(TABLE_LIST *tables, bool drop,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Handle proxy_priv array. */
|
/* Handle proxies_priv array. */
|
||||||
if ((handle_grant_struct(5, drop, user_from, user_to) && !result) ||
|
if ((handle_grant_struct(5, drop, user_from, user_to) && !result) ||
|
||||||
found)
|
found)
|
||||||
result= 1; /* At least one record/element found. */
|
result= 1; /* At least one record/element found. */
|
||||||
@ -8091,6 +8102,24 @@ static bool send_plugin_request_packet(MPVIO_EXT *mpvio,
|
|||||||
DBUG_RETURN (1);
|
DBUG_RETURN (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
If we're dealing with an older client we can't just send a change plugin
|
||||||
|
packet to re-initiate the authentication handshake, because the client
|
||||||
|
won't understand it. The good thing is that we don't need to : the old client
|
||||||
|
expects us to just check the user credentials here, which we can do by just reading
|
||||||
|
the cached data that are placed there by parse_com_change_user_packet()
|
||||||
|
In this case we just do nothing and behave as if normal authentication
|
||||||
|
should continue.
|
||||||
|
*/
|
||||||
|
if (!(mpvio->client_capabilities & CLIENT_PLUGIN_AUTH))
|
||||||
|
{
|
||||||
|
DBUG_PRINT("info", ("old client sent a COM_CHANGE_USER"));
|
||||||
|
DBUG_ASSERT(mpvio->cached_client_reply.pkt);
|
||||||
|
/* get the status back so the read can process the cached result */
|
||||||
|
mpvio->status= MPVIO_EXT::RESTART;
|
||||||
|
DBUG_RETURN(0);
|
||||||
|
}
|
||||||
|
|
||||||
DBUG_PRINT("info", ("requesting client to use the %s plugin",
|
DBUG_PRINT("info", ("requesting client to use the %s plugin",
|
||||||
client_auth_plugin));
|
client_auth_plugin));
|
||||||
DBUG_RETURN(net_write_command(net, switch_plugin_request_buf[0],
|
DBUG_RETURN(net_write_command(net, switch_plugin_request_buf[0],
|
||||||
@ -8574,8 +8603,16 @@ static int server_mpvio_write_packet(MYSQL_PLUGIN_VIO *param,
|
|||||||
int res;
|
int res;
|
||||||
|
|
||||||
DBUG_ENTER("server_mpvio_write_packet");
|
DBUG_ENTER("server_mpvio_write_packet");
|
||||||
/* reset cached_client_reply */
|
/*
|
||||||
mpvio->cached_client_reply.pkt= 0;
|
Reset cached_client_reply if not an old client doing mysql_change_user,
|
||||||
|
as this is where the password from COM_CHANGE_USER is stored.
|
||||||
|
*/
|
||||||
|
if (!((!(mpvio->client_capabilities & CLIENT_PLUGIN_AUTH)) &&
|
||||||
|
mpvio->status == MPVIO_EXT::RESTART &&
|
||||||
|
mpvio->cached_client_reply.plugin ==
|
||||||
|
((st_mysql_auth *) (plugin_decl(mpvio->plugin)->info))->client_auth_plugin
|
||||||
|
))
|
||||||
|
mpvio->cached_client_reply.pkt= 0;
|
||||||
/* for the 1st packet we wrap plugin data into the handshake packet */
|
/* for the 1st packet we wrap plugin data into the handshake packet */
|
||||||
if (mpvio->packets_written == 0)
|
if (mpvio->packets_written == 0)
|
||||||
res= send_server_handshake_packet(mpvio, (char*) packet, packet_len);
|
res= send_server_handshake_packet(mpvio, (char*) packet, packet_len);
|
||||||
@ -8641,6 +8678,15 @@ static int server_mpvio_read_packet(MYSQL_PLUGIN_VIO *param, uchar **buf)
|
|||||||
mpvio->packets_read++;
|
mpvio->packets_read++;
|
||||||
DBUG_RETURN ((int) mpvio->cached_client_reply.pkt_len);
|
DBUG_RETURN ((int) mpvio->cached_client_reply.pkt_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* older clients don't support change of client plugin request */
|
||||||
|
if (!(mpvio->client_capabilities & CLIENT_PLUGIN_AUTH))
|
||||||
|
{
|
||||||
|
mpvio->status= MPVIO_EXT::FAILURE;
|
||||||
|
pkt_len= packet_error;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
But if the client has used the wrong plugin, the cached data are
|
But if the client has used the wrong plugin, the cached data are
|
||||||
useless. Furthermore, we have to send a "change plugin" request
|
useless. Furthermore, we have to send a "change plugin" request
|
||||||
|
@ -166,12 +166,13 @@ int get_part_iter_for_interval_via_walking(partition_info *part_info,
|
|||||||
uint min_len, uint max_len,
|
uint min_len, uint max_len,
|
||||||
uint flags,
|
uint flags,
|
||||||
PARTITION_ITERATOR *part_iter);
|
PARTITION_ITERATOR *part_iter);
|
||||||
|
|
||||||
|
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||||
static int cmp_rec_and_tuple(part_column_list_val *val, uint32 nvals_in_rec);
|
static int cmp_rec_and_tuple(part_column_list_val *val, uint32 nvals_in_rec);
|
||||||
static int cmp_rec_and_tuple_prune(part_column_list_val *val,
|
static int cmp_rec_and_tuple_prune(part_column_list_val *val,
|
||||||
uint32 n_vals_in_rec,
|
uint32 n_vals_in_rec,
|
||||||
bool tail_is_min);
|
bool tail_is_min);
|
||||||
|
|
||||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
|
||||||
/*
|
/*
|
||||||
Convert constants in VALUES definition to the character set the
|
Convert constants in VALUES definition to the character set the
|
||||||
corresponding field uses.
|
corresponding field uses.
|
||||||
@ -1996,7 +1997,7 @@ static int add_part_field_list(File fptr, List<char> field_list)
|
|||||||
String field_string("", 0, system_charset_info);
|
String field_string("", 0, system_charset_info);
|
||||||
THD *thd= current_thd;
|
THD *thd= current_thd;
|
||||||
ulonglong save_options= thd->variables.option_bits;
|
ulonglong save_options= thd->variables.option_bits;
|
||||||
thd->variables.option_bits= 0;
|
thd->variables.option_bits&= ~OPTION_QUOTE_SHOW_CREATE;
|
||||||
append_identifier(thd, &field_string, field_str,
|
append_identifier(thd, &field_string, field_str,
|
||||||
strlen(field_str));
|
strlen(field_str));
|
||||||
thd->variables.option_bits= save_options;
|
thd->variables.option_bits= save_options;
|
||||||
@ -2015,8 +2016,7 @@ static int add_name_string(File fptr, const char *name)
|
|||||||
String name_string("", 0, system_charset_info);
|
String name_string("", 0, system_charset_info);
|
||||||
THD *thd= current_thd;
|
THD *thd= current_thd;
|
||||||
ulonglong save_options= thd->variables.option_bits;
|
ulonglong save_options= thd->variables.option_bits;
|
||||||
|
thd->variables.option_bits&= ~OPTION_QUOTE_SHOW_CREATE;
|
||||||
thd->variables.option_bits= 0;
|
|
||||||
append_identifier(thd, &name_string, name,
|
append_identifier(thd, &name_string, name,
|
||||||
strlen(name));
|
strlen(name));
|
||||||
thd->variables.option_bits= save_options;
|
thd->variables.option_bits= save_options;
|
||||||
|
@ -18,7 +18,9 @@
|
|||||||
#include "sql_lex.h" // Sql_statement
|
#include "sql_lex.h" // Sql_statement
|
||||||
#include "sql_admin.h" // Analyze/Check/.._table_statement
|
#include "sql_admin.h" // Analyze/Check/.._table_statement
|
||||||
#include "sql_partition_admin.h" // Alter_table_*_partition
|
#include "sql_partition_admin.h" // Alter_table_*_partition
|
||||||
|
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||||
#include "ha_partition.h" // ha_partition
|
#include "ha_partition.h" // ha_partition
|
||||||
|
#endif
|
||||||
#include "sql_base.h" // open_and_lock_tables
|
#include "sql_base.h" // open_and_lock_tables
|
||||||
|
|
||||||
#ifndef WITH_PARTITION_STORAGE_ENGINE
|
#ifndef WITH_PARTITION_STORAGE_ENGINE
|
||||||
|
@ -1738,7 +1738,11 @@ bool mysql_install_plugin(THD *thd, const LEX_STRING *name, const LEX_STRING *dl
|
|||||||
mysql_mutex_lock(&LOCK_plugin);
|
mysql_mutex_lock(&LOCK_plugin);
|
||||||
mysql_rwlock_wrlock(&LOCK_system_variables_hash);
|
mysql_rwlock_wrlock(&LOCK_system_variables_hash);
|
||||||
|
|
||||||
my_load_defaults(MYSQL_CONFIG_NAME, load_default_groups, &argc, &argv, NULL);
|
if (my_load_defaults(MYSQL_CONFIG_NAME, load_default_groups, &argc, &argv, NULL))
|
||||||
|
{
|
||||||
|
report_error(REPORT_TO_USER, ER_PLUGIN_IS_NOT_LOADED, name->str);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
error= plugin_add(thd->mem_root, name, dl, &argc, argv, REPORT_TO_USER);
|
error= plugin_add(thd->mem_root, name, dl, &argc, argv, REPORT_TO_USER);
|
||||||
if (argv)
|
if (argv)
|
||||||
free_defaults(argv);
|
free_defaults(argv);
|
||||||
|
@ -2420,11 +2420,15 @@ void reinit_stmt_before_use(THD *thd, LEX *lex)
|
|||||||
sl->where= sl->prep_where->copy_andor_structure(thd);
|
sl->where= sl->prep_where->copy_andor_structure(thd);
|
||||||
sl->where->cleanup();
|
sl->where->cleanup();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
sl->where= NULL;
|
||||||
if (sl->prep_having)
|
if (sl->prep_having)
|
||||||
{
|
{
|
||||||
sl->having= sl->prep_having->copy_andor_structure(thd);
|
sl->having= sl->prep_having->copy_andor_structure(thd);
|
||||||
sl->having->cleanup();
|
sl->having->cleanup();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
sl->having= NULL;
|
||||||
DBUG_ASSERT(sl->join == 0);
|
DBUG_ASSERT(sl->join == 0);
|
||||||
ORDER *order;
|
ORDER *order;
|
||||||
/* Fix GROUP list */
|
/* Fix GROUP list */
|
||||||
|
@ -108,7 +108,7 @@ bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list, bool silent)
|
|||||||
*/
|
*/
|
||||||
my_error(ER_CANT_RENAME_LOG_TABLE, MYF(0), ren_table->table_name,
|
my_error(ER_CANT_RENAME_LOG_TABLE, MYF(0), ren_table->table_name,
|
||||||
ren_table->table_name);
|
ren_table->table_name);
|
||||||
DBUG_RETURN(1);
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -121,7 +121,7 @@ bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list, bool silent)
|
|||||||
*/
|
*/
|
||||||
my_error(ER_CANT_RENAME_LOG_TABLE, MYF(0), ren_table->table_name,
|
my_error(ER_CANT_RENAME_LOG_TABLE, MYF(0), ren_table->table_name,
|
||||||
ren_table->table_name);
|
ren_table->table_name);
|
||||||
DBUG_RETURN(1);
|
goto err;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -139,7 +139,7 @@ bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list, bool silent)
|
|||||||
else
|
else
|
||||||
my_error(ER_CANT_RENAME_LOG_TABLE, MYF(0), rename_log_table[1],
|
my_error(ER_CANT_RENAME_LOG_TABLE, MYF(0), rename_log_table[1],
|
||||||
rename_log_table[1]);
|
rename_log_table[1]);
|
||||||
DBUG_RETURN(1);
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15218,6 +15218,8 @@ calc_group_buffer(JOIN *join,ORDER *group)
|
|||||||
{
|
{
|
||||||
key_length+= 8;
|
key_length+= 8;
|
||||||
}
|
}
|
||||||
|
else if (type == MYSQL_TYPE_BLOB)
|
||||||
|
key_length+= MAX_BLOB_WIDTH; // Can't be used as a key
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -98,11 +98,13 @@ static TYPELIB grant_types = { sizeof(grant_names)/sizeof(char **),
|
|||||||
static void store_key_options(THD *thd, String *packet, TABLE *table,
|
static void store_key_options(THD *thd, String *packet, TABLE *table,
|
||||||
KEY *key_info);
|
KEY *key_info);
|
||||||
|
|
||||||
|
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||||
static void get_cs_converted_string_value(THD *thd,
|
static void get_cs_converted_string_value(THD *thd,
|
||||||
String *input_str,
|
String *input_str,
|
||||||
String *output_str,
|
String *output_str,
|
||||||
CHARSET_INFO *cs,
|
CHARSET_INFO *cs,
|
||||||
bool use_hex);
|
bool use_hex);
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
append_algorithm(TABLE_LIST *table, String *buff);
|
append_algorithm(TABLE_LIST *table, String *buff);
|
||||||
@ -478,12 +480,6 @@ find_files(THD *thd, List<LEX_STRING> *files, const char *db,
|
|||||||
else if (wild_compare(uname, wild, 0))
|
else if (wild_compare(uname, wild, 0))
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!(file_name=
|
|
||||||
thd->make_lex_string(file_name, uname, file_name_len, TRUE)))
|
|
||||||
{
|
|
||||||
my_dirend(dirp);
|
|
||||||
DBUG_RETURN(FIND_FILES_OOM);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -7850,6 +7846,7 @@ void initialize_information_schema_acl()
|
|||||||
&is_internal_schema_access);
|
&is_internal_schema_access);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||||
/*
|
/*
|
||||||
Convert a string in character set in column character set format
|
Convert a string in character set in column character set format
|
||||||
to utf8 character set if possible, the utf8 character set string
|
to utf8 character set if possible, the utf8 character set string
|
||||||
@ -7941,3 +7938,4 @@ static void get_cs_converted_string_value(THD *thd,
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -12497,6 +12497,7 @@ keyword_sp:
|
|||||||
| FILE_SYM {}
|
| FILE_SYM {}
|
||||||
| FIRST_SYM {}
|
| FIRST_SYM {}
|
||||||
| FIXED_SYM {}
|
| FIXED_SYM {}
|
||||||
|
| GENERAL {}
|
||||||
| GEOMETRY_SYM {}
|
| GEOMETRY_SYM {}
|
||||||
| GEOMETRYCOLLECTION {}
|
| GEOMETRYCOLLECTION {}
|
||||||
| GET_FORMAT {}
|
| GET_FORMAT {}
|
||||||
@ -12506,6 +12507,7 @@ keyword_sp:
|
|||||||
| HOSTS_SYM {}
|
| HOSTS_SYM {}
|
||||||
| HOUR_SYM {}
|
| HOUR_SYM {}
|
||||||
| IDENTIFIED_SYM {}
|
| IDENTIFIED_SYM {}
|
||||||
|
| IGNORE_SERVER_IDS_SYM {}
|
||||||
| INVOKER_SYM {}
|
| INVOKER_SYM {}
|
||||||
| IMPORT {}
|
| IMPORT {}
|
||||||
| INDEXES {}
|
| INDEXES {}
|
||||||
@ -12528,6 +12530,7 @@ keyword_sp:
|
|||||||
| LOGS_SYM {}
|
| LOGS_SYM {}
|
||||||
| MAX_ROWS {}
|
| MAX_ROWS {}
|
||||||
| MASTER_SYM {}
|
| MASTER_SYM {}
|
||||||
|
| MASTER_HEARTBEAT_PERIOD_SYM {}
|
||||||
| MASTER_HOST_SYM {}
|
| MASTER_HOST_SYM {}
|
||||||
| MASTER_PORT_SYM {}
|
| MASTER_PORT_SYM {}
|
||||||
| MASTER_LOG_FILE_SYM {}
|
| MASTER_LOG_FILE_SYM {}
|
||||||
@ -12633,6 +12636,7 @@ keyword_sp:
|
|||||||
| SIMPLE_SYM {}
|
| SIMPLE_SYM {}
|
||||||
| SHARE_SYM {}
|
| SHARE_SYM {}
|
||||||
| SHUTDOWN {}
|
| SHUTDOWN {}
|
||||||
|
| SLOW {}
|
||||||
| SNAPSHOT_SYM {}
|
| SNAPSHOT_SYM {}
|
||||||
| SOUNDS_SYM {}
|
| SOUNDS_SYM {}
|
||||||
| SOURCE_SYM {}
|
| SOURCE_SYM {}
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
# This is the CMakeLists for InnoDB Plugin
|
# This is the CMakeLists for InnoDB
|
||||||
|
|
||||||
INCLUDE(CheckFunctionExists)
|
INCLUDE(CheckFunctionExists)
|
||||||
INCLUDE(CheckCSourceCompiles)
|
INCLUDE(CheckCSourceCompiles)
|
||||||
@ -254,29 +254,7 @@ IF(WITH_INNODB)
|
|||||||
SET(WITH_INNOBASE_STORAGE_ENGINE TRUE)
|
SET(WITH_INNOBASE_STORAGE_ENGINE TRUE)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
MYSQL_ADD_PLUGIN(innobase ${INNOBASE_SOURCES} STORAGE_ENGINE
|
||||||
#The plugin's CMakeLists.txt still needs to work with previous versions of MySQL.
|
DEFAULT
|
||||||
IF(EXISTS ${SOURCE_DIR}/storage/mysql_storage_engine.cmake)
|
MODULE_OUTPUT_NAME ha_innodb
|
||||||
# Old plugin support on Windows only,
|
LINK_LIBRARIES ${ZLIB_LIBRARY})
|
||||||
# use tricks to force ha_innodb.dll name for DLL
|
|
||||||
INCLUDE(${SOURCE_DIR}/storage/mysql_storage_engine.cmake)
|
|
||||||
MYSQL_STORAGE_ENGINE(INNOBASE)
|
|
||||||
GET_TARGET_PROPERTY(LIB_LOCATION ha_innobase LOCATION)
|
|
||||||
IF(LIB_LOCATION)
|
|
||||||
SET_TARGET_PROPERTIES(ha_innobase PROPERTIES OUTPUT_NAME ha_innodb)
|
|
||||||
ENDIF()
|
|
||||||
ELSEIF (MYSQL_VERSION_ID LESS "50137")
|
|
||||||
# Windows only, no plugin support
|
|
||||||
IF (NOT SOURCE_SUBLIBS)
|
|
||||||
ADD_DEFINITIONS(-DMYSQL_SERVER)
|
|
||||||
ADD_LIBRARY(innobase STATIC ${INNOBASE_SOURCES})
|
|
||||||
# Require mysqld_error.h, which is built as part of the GenError
|
|
||||||
ADD_DEPENDENCIES(innobase GenError)
|
|
||||||
ENDIF()
|
|
||||||
ELSE()
|
|
||||||
# New plugin support, cross-platform , base name for shared module is "ha_innodb"
|
|
||||||
MYSQL_ADD_PLUGIN(innobase ${INNOBASE_SOURCES} STORAGE_ENGINE
|
|
||||||
DEFAULT
|
|
||||||
MODULE_OUTPUT_NAME ha_innodb
|
|
||||||
LINK_LIBRARIES ${ZLIB_LIBRARY})
|
|
||||||
ENDIF()
|
|
||||||
|
@ -246,8 +246,8 @@ static const int WAIT_FOR_READ = 5000;
|
|||||||
/** Number of attemtps made to read in a page in the buffer pool */
|
/** Number of attemtps made to read in a page in the buffer pool */
|
||||||
static const ulint BUF_PAGE_READ_MAX_RETRIES = 100;
|
static const ulint BUF_PAGE_READ_MAX_RETRIES = 100;
|
||||||
|
|
||||||
/** The buffer buf_pool of the database */
|
/** The buffer pools of the database */
|
||||||
UNIV_INTERN buf_pool_t* buf_pool_ptr[MAX_BUFFER_POOLS];
|
UNIV_INTERN buf_pool_t* buf_pool_ptr;
|
||||||
|
|
||||||
#if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG
|
#if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG
|
||||||
static ulint buf_dbg_counter = 0; /*!< This is used to insert validation
|
static ulint buf_dbg_counter = 0; /*!< This is used to insert validation
|
||||||
@ -858,7 +858,7 @@ buf_block_init(
|
|||||||
|
|
||||||
block->frame = frame;
|
block->frame = frame;
|
||||||
|
|
||||||
block->page.buf_pool = buf_pool;
|
block->page.buf_pool_index = buf_pool_index(buf_pool);
|
||||||
block->page.state = BUF_BLOCK_NOT_USED;
|
block->page.state = BUF_BLOCK_NOT_USED;
|
||||||
block->page.buf_fix_count = 0;
|
block->page.buf_fix_count = 0;
|
||||||
block->page.io_fix = BUF_IO_NONE;
|
block->page.io_fix = BUF_IO_NONE;
|
||||||
@ -1280,8 +1280,6 @@ buf_pool_free_instance(
|
|||||||
mem_free(buf_pool->chunks);
|
mem_free(buf_pool->chunks);
|
||||||
hash_table_free(buf_pool->page_hash);
|
hash_table_free(buf_pool->page_hash);
|
||||||
hash_table_free(buf_pool->zip_hash);
|
hash_table_free(buf_pool->zip_hash);
|
||||||
mem_free(buf_pool);
|
|
||||||
buf_pool = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************//**
|
/********************************************************************//**
|
||||||
@ -1294,25 +1292,23 @@ buf_pool_init(
|
|||||||
ulint total_size, /*!< in: size of the total pool in bytes */
|
ulint total_size, /*!< in: size of the total pool in bytes */
|
||||||
ulint n_instances) /*!< in: number of instances */
|
ulint n_instances) /*!< in: number of instances */
|
||||||
{
|
{
|
||||||
ulint i;
|
ulint i;
|
||||||
|
const ulint size = total_size / n_instances;
|
||||||
|
|
||||||
|
ut_ad(n_instances > 0);
|
||||||
|
ut_ad(n_instances <= MAX_BUFFER_POOLS);
|
||||||
|
ut_ad(n_instances == srv_buf_pool_instances);
|
||||||
|
|
||||||
/* We create an extra buffer pool instance, this instance is used
|
/* We create an extra buffer pool instance, this instance is used
|
||||||
for flushing the flush lists, to keep track of n_flush for all
|
for flushing the flush lists, to keep track of n_flush for all
|
||||||
the buffer pools and also used as a waiting object during flushing. */
|
the buffer pools and also used as a waiting object during flushing. */
|
||||||
|
buf_pool_ptr = mem_zalloc(n_instances * sizeof *buf_pool_ptr);
|
||||||
|
|
||||||
for (i = 0; i < n_instances; i++) {
|
for (i = 0; i < n_instances; i++) {
|
||||||
buf_pool_t* ptr;
|
buf_pool_t* ptr = &buf_pool_ptr[i];
|
||||||
ulint size;
|
|
||||||
|
|
||||||
ptr = mem_zalloc(sizeof(*ptr));
|
|
||||||
|
|
||||||
size = total_size / n_instances;
|
|
||||||
|
|
||||||
buf_pool_ptr[i] = ptr;
|
|
||||||
|
|
||||||
if (buf_pool_init_instance(ptr, size, i) != DB_SUCCESS) {
|
if (buf_pool_init_instance(ptr, size, i) != DB_SUCCESS) {
|
||||||
|
|
||||||
mem_free(buf_pool_ptr[i]);
|
|
||||||
|
|
||||||
/* Free all the instances created so far. */
|
/* Free all the instances created so far. */
|
||||||
buf_pool_free(i);
|
buf_pool_free(i);
|
||||||
|
|
||||||
@ -1341,8 +1337,10 @@ buf_pool_free(
|
|||||||
|
|
||||||
for (i = 0; i < n_instances; i++) {
|
for (i = 0; i < n_instances; i++) {
|
||||||
buf_pool_free_instance(buf_pool_from_array(i));
|
buf_pool_free_instance(buf_pool_from_array(i));
|
||||||
buf_pool_ptr[i] = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mem_free(buf_pool_ptr);
|
||||||
|
buf_pool_ptr = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************//**
|
/********************************************************************//**
|
||||||
@ -3685,7 +3683,7 @@ err_exit:
|
|||||||
bpage = buf_buddy_alloc(buf_pool, sizeof *bpage, &lru);
|
bpage = buf_buddy_alloc(buf_pool, sizeof *bpage, &lru);
|
||||||
|
|
||||||
/* Initialize the buf_pool pointer. */
|
/* Initialize the buf_pool pointer. */
|
||||||
bpage->buf_pool = buf_pool;
|
bpage->buf_pool_index = buf_pool_index(buf_pool);
|
||||||
|
|
||||||
/* If buf_buddy_alloc() allocated storage from the LRU list,
|
/* If buf_buddy_alloc() allocated storage from the LRU list,
|
||||||
it released and reacquired buf_pool->mutex. Thus, we must
|
it released and reacquired buf_pool->mutex. Thus, we must
|
||||||
|
@ -1718,13 +1718,24 @@ err_exit:
|
|||||||
|
|
||||||
err = dict_load_indexes(table, heap);
|
err = dict_load_indexes(table, heap);
|
||||||
|
|
||||||
|
/* Initialize table foreign_child value. Its value could be
|
||||||
|
changed when dict_load_foreigns() is called below */
|
||||||
|
table->fk_max_recusive_level = 0;
|
||||||
|
|
||||||
/* If the force recovery flag is set, we open the table irrespective
|
/* If the force recovery flag is set, we open the table irrespective
|
||||||
of the error condition, since the user may want to dump data from the
|
of the error condition, since the user may want to dump data from the
|
||||||
clustered index. However we load the foreign key information only if
|
clustered index. However we load the foreign key information only if
|
||||||
all indexes were loaded. */
|
all indexes were loaded. */
|
||||||
if (!cached) {
|
if (!cached) {
|
||||||
} else if (err == DB_SUCCESS) {
|
} else if (err == DB_SUCCESS) {
|
||||||
err = dict_load_foreigns(table->name, TRUE);
|
err = dict_load_foreigns(table->name, TRUE, TRUE);
|
||||||
|
|
||||||
|
if (err != DB_SUCCESS) {
|
||||||
|
dict_table_remove_from_cache(table);
|
||||||
|
table = NULL;
|
||||||
|
} else {
|
||||||
|
table->fk_max_recusive_level = 0;
|
||||||
|
}
|
||||||
} else if (!srv_force_recovery) {
|
} else if (!srv_force_recovery) {
|
||||||
dict_table_remove_from_cache(table);
|
dict_table_remove_from_cache(table);
|
||||||
table = NULL;
|
table = NULL;
|
||||||
@ -1952,8 +1963,12 @@ dict_load_foreign(
|
|||||||
/*==============*/
|
/*==============*/
|
||||||
const char* id, /*!< in: foreign constraint id as a
|
const char* id, /*!< in: foreign constraint id as a
|
||||||
null-terminated string */
|
null-terminated string */
|
||||||
ibool check_charsets)
|
ibool check_charsets,
|
||||||
/*!< in: TRUE=check charset compatibility */
|
/*!< in: TRUE=check charset compatibility */
|
||||||
|
ibool check_recursive)
|
||||||
|
/*!< in: Whether to record the foreign table
|
||||||
|
parent count to avoid unlimited recursive
|
||||||
|
load of chained foreign tables */
|
||||||
{
|
{
|
||||||
dict_foreign_t* foreign;
|
dict_foreign_t* foreign;
|
||||||
dict_table_t* sys_foreign;
|
dict_table_t* sys_foreign;
|
||||||
@ -1967,6 +1982,8 @@ dict_load_foreign(
|
|||||||
ulint len;
|
ulint len;
|
||||||
ulint n_fields_and_type;
|
ulint n_fields_and_type;
|
||||||
mtr_t mtr;
|
mtr_t mtr;
|
||||||
|
dict_table_t* for_table;
|
||||||
|
dict_table_t* ref_table;
|
||||||
|
|
||||||
ut_ad(mutex_own(&(dict_sys->mutex)));
|
ut_ad(mutex_own(&(dict_sys->mutex)));
|
||||||
|
|
||||||
@ -2051,11 +2068,54 @@ dict_load_foreign(
|
|||||||
|
|
||||||
dict_load_foreign_cols(id, foreign);
|
dict_load_foreign_cols(id, foreign);
|
||||||
|
|
||||||
/* If the foreign table is not yet in the dictionary cache, we
|
ref_table = dict_table_check_if_in_cache_low(
|
||||||
have to load it so that we are able to make type comparisons
|
foreign->referenced_table_name);
|
||||||
in the next function call. */
|
|
||||||
|
|
||||||
dict_table_get_low(foreign->foreign_table_name);
|
/* We could possibly wind up in a deep recursive calls if
|
||||||
|
we call dict_table_get_low() again here if there
|
||||||
|
is a chain of tables concatenated together with
|
||||||
|
foreign constraints. In such case, each table is
|
||||||
|
both a parent and child of the other tables, and
|
||||||
|
act as a "link" in such table chains.
|
||||||
|
To avoid such scenario, we would need to check the
|
||||||
|
number of ancesters the current table has. If that
|
||||||
|
exceeds DICT_FK_MAX_CHAIN_LEN, we will stop loading
|
||||||
|
the child table.
|
||||||
|
Foreign constraints are loaded in a Breath First fashion,
|
||||||
|
that is, the index on FOR_NAME is scanned first, and then
|
||||||
|
index on REF_NAME. So foreign constrains in which
|
||||||
|
current table is a child (foreign table) are loaded first,
|
||||||
|
and then those constraints where current table is a
|
||||||
|
parent (referenced) table.
|
||||||
|
Thus we could check the parent (ref_table) table's
|
||||||
|
reference count (fk_max_recusive_level) to know how deep the
|
||||||
|
recursive call is. If the parent table (ref_table) is already
|
||||||
|
loaded, and its fk_max_recusive_level is larger than
|
||||||
|
DICT_FK_MAX_CHAIN_LEN, we will stop the recursive loading
|
||||||
|
by skipping loading the child table. It will not affect foreign
|
||||||
|
constraint check for DMLs since child table will be loaded
|
||||||
|
at that time for the constraint check. */
|
||||||
|
if (!ref_table
|
||||||
|
|| ref_table->fk_max_recusive_level < DICT_FK_MAX_RECURSIVE_LOAD) {
|
||||||
|
|
||||||
|
/* If the foreign table is not yet in the dictionary cache, we
|
||||||
|
have to load it so that we are able to make type comparisons
|
||||||
|
in the next function call. */
|
||||||
|
|
||||||
|
for_table = dict_table_get_low(foreign->foreign_table_name);
|
||||||
|
|
||||||
|
if (for_table && ref_table && check_recursive) {
|
||||||
|
/* This is to record the longest chain of ancesters
|
||||||
|
this table has, if the parent has more ancesters
|
||||||
|
than this table has, record it after add 1 (for this
|
||||||
|
parent */
|
||||||
|
if (ref_table->fk_max_recusive_level
|
||||||
|
>= for_table->fk_max_recusive_level) {
|
||||||
|
for_table->fk_max_recusive_level =
|
||||||
|
ref_table->fk_max_recusive_level + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Note that there may already be a foreign constraint object in
|
/* Note that there may already be a foreign constraint object in
|
||||||
the dictionary cache for this constraint: then the following
|
the dictionary cache for this constraint: then the following
|
||||||
@ -2080,6 +2140,8 @@ ulint
|
|||||||
dict_load_foreigns(
|
dict_load_foreigns(
|
||||||
/*===============*/
|
/*===============*/
|
||||||
const char* table_name, /*!< in: table name */
|
const char* table_name, /*!< in: table name */
|
||||||
|
ibool check_recursive,/*!< in: Whether to check recursive
|
||||||
|
load of tables chained by FK */
|
||||||
ibool check_charsets) /*!< in: TRUE=check charset
|
ibool check_charsets) /*!< in: TRUE=check charset
|
||||||
compatibility */
|
compatibility */
|
||||||
{
|
{
|
||||||
@ -2181,7 +2243,7 @@ loop:
|
|||||||
|
|
||||||
/* Load the foreign constraint definition to the dictionary cache */
|
/* Load the foreign constraint definition to the dictionary cache */
|
||||||
|
|
||||||
err = dict_load_foreign(id, check_charsets);
|
err = dict_load_foreign(id, check_charsets, check_recursive);
|
||||||
|
|
||||||
if (err != DB_SUCCESS) {
|
if (err != DB_SUCCESS) {
|
||||||
btr_pcur_close(&pcur);
|
btr_pcur_close(&pcur);
|
||||||
@ -2209,6 +2271,11 @@ load_next_index:
|
|||||||
|
|
||||||
mtr_start(&mtr);
|
mtr_start(&mtr);
|
||||||
|
|
||||||
|
/* Switch to scan index on REF_NAME, fk_max_recusive_level
|
||||||
|
already been updated when scanning FOR_NAME index, no need to
|
||||||
|
update again */
|
||||||
|
check_recursive = FALSE;
|
||||||
|
|
||||||
goto start_load;
|
goto start_load;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,10 +95,6 @@ extern "C" {
|
|||||||
# define MYSQL_PLUGIN_IMPORT /* nothing */
|
# define MYSQL_PLUGIN_IMPORT /* nothing */
|
||||||
# endif /* MYSQL_PLUGIN_IMPORT */
|
# endif /* MYSQL_PLUGIN_IMPORT */
|
||||||
|
|
||||||
#if MYSQL_VERSION_ID < 50124
|
|
||||||
bool check_global_access(THD *thd, ulong want_access);
|
|
||||||
#endif /* MYSQL_VERSION_ID < 50124 */
|
|
||||||
|
|
||||||
/** to protect innobase_open_files */
|
/** to protect innobase_open_files */
|
||||||
static mysql_mutex_t innobase_share_mutex;
|
static mysql_mutex_t innobase_share_mutex;
|
||||||
/** to force correct commit order in binlog */
|
/** to force correct commit order in binlog */
|
||||||
@ -240,7 +236,6 @@ static PSI_mutex_info all_innodb_mutexes[] = {
|
|||||||
{&ibuf_mutex_key, "ibuf_mutex", 0},
|
{&ibuf_mutex_key, "ibuf_mutex", 0},
|
||||||
{&ibuf_pessimistic_insert_mutex_key,
|
{&ibuf_pessimistic_insert_mutex_key,
|
||||||
"ibuf_pessimistic_insert_mutex", 0},
|
"ibuf_pessimistic_insert_mutex", 0},
|
||||||
{&ios_mutex_key, "ios_mutex", 0},
|
|
||||||
{&kernel_mutex_key, "kernel_mutex", 0},
|
{&kernel_mutex_key, "kernel_mutex", 0},
|
||||||
{&log_sys_mutex_key, "log_sys_mutex", 0},
|
{&log_sys_mutex_key, "log_sys_mutex", 0},
|
||||||
# ifdef UNIV_MEM_DEBUG
|
# ifdef UNIV_MEM_DEBUG
|
||||||
@ -900,6 +895,19 @@ convert_error_code_to_mysql(
|
|||||||
case DB_INTERRUPTED:
|
case DB_INTERRUPTED:
|
||||||
my_error(ER_QUERY_INTERRUPTED, MYF(0));
|
my_error(ER_QUERY_INTERRUPTED, MYF(0));
|
||||||
/* fall through */
|
/* fall through */
|
||||||
|
|
||||||
|
case DB_FOREIGN_EXCEED_MAX_CASCADE:
|
||||||
|
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||||
|
HA_ERR_ROW_IS_REFERENCED,
|
||||||
|
"InnoDB: Cannot delete/update "
|
||||||
|
"rows with cascading foreign key "
|
||||||
|
"constraints that exceed max "
|
||||||
|
"depth of %d. Please "
|
||||||
|
"drop extra constraints and try "
|
||||||
|
"again", DICT_FK_MAX_RECURSIVE_LOAD);
|
||||||
|
|
||||||
|
/* fall through */
|
||||||
|
|
||||||
case DB_ERROR:
|
case DB_ERROR:
|
||||||
default:
|
default:
|
||||||
return(-1); /* unspecified error */
|
return(-1); /* unspecified error */
|
||||||
@ -1886,11 +1894,7 @@ innobase_convert_identifier(
|
|||||||
FALSE=id is an UTF-8 string */
|
FALSE=id is an UTF-8 string */
|
||||||
{
|
{
|
||||||
char nz[NAME_LEN + 1];
|
char nz[NAME_LEN + 1];
|
||||||
#if MYSQL_VERSION_ID >= 50141
|
|
||||||
char nz2[NAME_LEN + 1 + EXPLAIN_FILENAME_MAX_EXTRA_LENGTH];
|
char nz2[NAME_LEN + 1 + EXPLAIN_FILENAME_MAX_EXTRA_LENGTH];
|
||||||
#else /* MYSQL_VERSION_ID >= 50141 */
|
|
||||||
char nz2[NAME_LEN + 1 + sizeof srv_mysql50_table_name_prefix];
|
|
||||||
#endif /* MYSQL_VERSION_ID >= 50141 */
|
|
||||||
|
|
||||||
const char* s = id;
|
const char* s = id;
|
||||||
int q;
|
int q;
|
||||||
@ -1908,13 +1912,9 @@ innobase_convert_identifier(
|
|||||||
nz[idlen] = 0;
|
nz[idlen] = 0;
|
||||||
|
|
||||||
s = nz2;
|
s = nz2;
|
||||||
#if MYSQL_VERSION_ID >= 50141
|
|
||||||
idlen = explain_filename((THD*) thd, nz, nz2, sizeof nz2,
|
idlen = explain_filename((THD*) thd, nz, nz2, sizeof nz2,
|
||||||
EXPLAIN_PARTITIONS_AS_COMMENT);
|
EXPLAIN_PARTITIONS_AS_COMMENT);
|
||||||
goto no_quote;
|
goto no_quote;
|
||||||
#else /* MYSQL_VERSION_ID >= 50141 */
|
|
||||||
idlen = filename_to_tablename(nz, nz2, sizeof nz2);
|
|
||||||
#endif /* MYSQL_VERSION_ID >= 50141 */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* See if the identifier needs to be quoted. */
|
/* See if the identifier needs to be quoted. */
|
||||||
@ -1925,9 +1925,7 @@ innobase_convert_identifier(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (q == EOF) {
|
if (q == EOF) {
|
||||||
#if MYSQL_VERSION_ID >= 50141
|
|
||||||
no_quote:
|
no_quote:
|
||||||
#endif /* MYSQL_VERSION_ID >= 50141 */
|
|
||||||
if (UNIV_UNLIKELY(idlen > buflen)) {
|
if (UNIV_UNLIKELY(idlen > buflen)) {
|
||||||
idlen = buflen;
|
idlen = buflen;
|
||||||
}
|
}
|
||||||
|
@ -276,14 +276,13 @@ int thd_binlog_format(const MYSQL_THD thd);
|
|||||||
*/
|
*/
|
||||||
void thd_mark_transaction_to_rollback(MYSQL_THD thd, bool all);
|
void thd_mark_transaction_to_rollback(MYSQL_THD thd, bool all);
|
||||||
|
|
||||||
#if MYSQL_VERSION_ID > 50140
|
|
||||||
/**
|
/**
|
||||||
Check if binary logging is filtered for thread's current db.
|
Check if binary logging is filtered for thread's current db.
|
||||||
@param thd Thread handle
|
@param thd Thread handle
|
||||||
@retval 1 the query is not filtered, 0 otherwise.
|
@retval 1 the query is not filtered, 0 otherwise.
|
||||||
*/
|
*/
|
||||||
bool thd_binlog_filter_ok(const MYSQL_THD thd);
|
bool thd_binlog_filter_ok(const MYSQL_THD thd);
|
||||||
#endif /* MYSQL_VERSION_ID > 50140 */
|
|
||||||
/**
|
/**
|
||||||
Check if the query may generate row changes which
|
Check if the query may generate row changes which
|
||||||
may end up in the binary.
|
may end up in the binary.
|
||||||
|
@ -1363,12 +1363,12 @@ ibuf_add_ops(
|
|||||||
const ulint* ops) /*!< in: operation counts */
|
const ulint* ops) /*!< in: operation counts */
|
||||||
|
|
||||||
{
|
{
|
||||||
|
ulint i;
|
||||||
|
|
||||||
#ifndef HAVE_ATOMIC_BUILTINS
|
#ifndef HAVE_ATOMIC_BUILTINS
|
||||||
ut_ad(mutex_own(&ibuf_mutex));
|
ut_ad(mutex_own(&ibuf_mutex));
|
||||||
#endif /* !HAVE_ATOMIC_BUILTINS */
|
#endif /* !HAVE_ATOMIC_BUILTINS */
|
||||||
|
|
||||||
ulint i;
|
|
||||||
|
|
||||||
for (i = 0; i < IBUF_OP_COUNT; i++) {
|
for (i = 0; i < IBUF_OP_COUNT; i++) {
|
||||||
#ifdef HAVE_ATOMIC_BUILTINS
|
#ifdef HAVE_ATOMIC_BUILTINS
|
||||||
os_atomic_increment_ulint(&arr[i], ops[i]);
|
os_atomic_increment_ulint(&arr[i], ops[i]);
|
||||||
|
@ -69,7 +69,7 @@ Created 11/5/1995 Heikki Tuuri
|
|||||||
#define BUF_POOL_WATCH_SIZE 1 /*!< Maximum number of concurrent
|
#define BUF_POOL_WATCH_SIZE 1 /*!< Maximum number of concurrent
|
||||||
buffer pool watches */
|
buffer pool watches */
|
||||||
|
|
||||||
extern buf_pool_t* buf_pool_ptr[MAX_BUFFER_POOLS]; /*!< The buffer pools
|
extern buf_pool_t* buf_pool_ptr; /*!< The buffer pools
|
||||||
of the database */
|
of the database */
|
||||||
#ifdef UNIV_DEBUG
|
#ifdef UNIV_DEBUG
|
||||||
extern ibool buf_debug_prints;/*!< If this is set TRUE, the program
|
extern ibool buf_debug_prints;/*!< If this is set TRUE, the program
|
||||||
@ -1034,6 +1034,15 @@ buf_page_address_fold(
|
|||||||
ulint space, /*!< in: space id */
|
ulint space, /*!< in: space id */
|
||||||
ulint offset) /*!< in: offset of the page within space */
|
ulint offset) /*!< in: offset of the page within space */
|
||||||
__attribute__((const));
|
__attribute__((const));
|
||||||
|
/********************************************************************//**
|
||||||
|
Calculates the index of a buffer pool to the buf_pool[] array.
|
||||||
|
@return the position of the buffer pool in buf_pool[] */
|
||||||
|
UNIV_INLINE
|
||||||
|
ulint
|
||||||
|
buf_pool_index(
|
||||||
|
/*===========*/
|
||||||
|
const buf_pool_t* buf_pool) /*!< in: buffer pool */
|
||||||
|
__attribute__((nonnull, const));
|
||||||
/******************************************************************//**
|
/******************************************************************//**
|
||||||
Returns the buffer pool instance given a page instance
|
Returns the buffer pool instance given a page instance
|
||||||
@return buf_pool */
|
@return buf_pool */
|
||||||
@ -1065,8 +1074,9 @@ Returns the buffer pool instance given its array index
|
|||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
buf_pool_t*
|
buf_pool_t*
|
||||||
buf_pool_from_array(
|
buf_pool_from_array(
|
||||||
/*====================*/
|
/*================*/
|
||||||
ulint index); /*!< in: array index to get buffer pool instance from */
|
ulint index); /*!< in: array index to get
|
||||||
|
buffer pool instance from */
|
||||||
/******************************************************************//**
|
/******************************************************************//**
|
||||||
Returns the control block of a file page, NULL if not found.
|
Returns the control block of a file page, NULL if not found.
|
||||||
@return block, NULL if not found */
|
@return block, NULL if not found */
|
||||||
@ -1204,8 +1214,13 @@ struct buf_page_struct{
|
|||||||
unsigned io_fix:2; /*!< type of pending I/O operation;
|
unsigned io_fix:2; /*!< type of pending I/O operation;
|
||||||
also protected by buf_pool->mutex
|
also protected by buf_pool->mutex
|
||||||
@see enum buf_io_fix */
|
@see enum buf_io_fix */
|
||||||
unsigned buf_fix_count:25;/*!< count of how manyfold this block
|
unsigned buf_fix_count:19;/*!< count of how manyfold this block
|
||||||
is currently bufferfixed */
|
is currently bufferfixed */
|
||||||
|
unsigned buf_pool_index:6;/*!< index number of the buffer pool
|
||||||
|
that this block belongs to */
|
||||||
|
# if MAX_BUFFER_POOLS > 64
|
||||||
|
# error "MAX_BUFFER_POOLS > 64; redefine buf_pool_index:6"
|
||||||
|
# endif
|
||||||
/* @} */
|
/* @} */
|
||||||
#endif /* !UNIV_HOTBACKUP */
|
#endif /* !UNIV_HOTBACKUP */
|
||||||
page_zip_des_t zip; /*!< compressed page; zip.data
|
page_zip_des_t zip; /*!< compressed page; zip.data
|
||||||
@ -1324,8 +1339,6 @@ struct buf_page_struct{
|
|||||||
frees a page in buffer pool */
|
frees a page in buffer pool */
|
||||||
# endif /* UNIV_DEBUG_FILE_ACCESSES */
|
# endif /* UNIV_DEBUG_FILE_ACCESSES */
|
||||||
#endif /* !UNIV_HOTBACKUP */
|
#endif /* !UNIV_HOTBACKUP */
|
||||||
buf_pool_t* buf_pool; /*!< buffer pool instance this
|
|
||||||
page belongs to */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/** The buffer control block structure */
|
/** The buffer control block structure */
|
||||||
|
@ -46,6 +46,48 @@ buf_pool_get_curr_size(void)
|
|||||||
return(srv_buf_pool_curr_size);
|
return(srv_buf_pool_curr_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/********************************************************************//**
|
||||||
|
Calculates the index of a buffer pool to the buf_pool[] array.
|
||||||
|
@return the position of the buffer pool in buf_pool[] */
|
||||||
|
UNIV_INLINE
|
||||||
|
ulint
|
||||||
|
buf_pool_index(
|
||||||
|
/*===========*/
|
||||||
|
const buf_pool_t* buf_pool) /*!< in: buffer pool */
|
||||||
|
{
|
||||||
|
ulint i = buf_pool - buf_pool_ptr;
|
||||||
|
ut_ad(i < MAX_BUFFER_POOLS);
|
||||||
|
ut_ad(i < srv_buf_pool_instances);
|
||||||
|
return(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************//**
|
||||||
|
Returns the buffer pool instance given a page instance
|
||||||
|
@return buf_pool */
|
||||||
|
UNIV_INLINE
|
||||||
|
buf_pool_t*
|
||||||
|
buf_pool_from_bpage(
|
||||||
|
/*================*/
|
||||||
|
const buf_page_t* bpage) /*!< in: buffer pool page */
|
||||||
|
{
|
||||||
|
ulint i;
|
||||||
|
i = bpage->buf_pool_index;
|
||||||
|
ut_ad(i < srv_buf_pool_instances);
|
||||||
|
return(&buf_pool_ptr[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************//**
|
||||||
|
Returns the buffer pool instance given a block instance
|
||||||
|
@return buf_pool */
|
||||||
|
UNIV_INLINE
|
||||||
|
buf_pool_t*
|
||||||
|
buf_pool_from_block(
|
||||||
|
/*================*/
|
||||||
|
const buf_block_t* block) /*!< in: block */
|
||||||
|
{
|
||||||
|
return(buf_pool_from_bpage(&block->page));
|
||||||
|
}
|
||||||
|
|
||||||
/*********************************************************************//**
|
/*********************************************************************//**
|
||||||
Gets the current size of buffer buf_pool in pages.
|
Gets the current size of buffer buf_pool in pages.
|
||||||
@return size in pages*/
|
@return size in pages*/
|
||||||
@ -885,33 +927,6 @@ buf_block_buf_fix_dec(
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************//**
|
|
||||||
Returns the buffer pool instance given a page instance
|
|
||||||
@return buf_pool */
|
|
||||||
UNIV_INLINE
|
|
||||||
buf_pool_t*
|
|
||||||
buf_pool_from_bpage(
|
|
||||||
/*================*/
|
|
||||||
const buf_page_t* bpage) /*!< in: buffer pool page */
|
|
||||||
{
|
|
||||||
/* Every page must be in some buffer pool. */
|
|
||||||
ut_ad(bpage->buf_pool != NULL);
|
|
||||||
|
|
||||||
return(bpage->buf_pool);
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************//**
|
|
||||||
Returns the buffer pool instance given a block instance
|
|
||||||
@return buf_pool */
|
|
||||||
UNIV_INLINE
|
|
||||||
buf_pool_t*
|
|
||||||
buf_pool_from_block(
|
|
||||||
/*================*/
|
|
||||||
const buf_block_t* block) /*!< in: block */
|
|
||||||
{
|
|
||||||
return(buf_pool_from_bpage(&block->page));
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************//**
|
/******************************************************************//**
|
||||||
Returns the buffer pool instance given space and offset of page
|
Returns the buffer pool instance given space and offset of page
|
||||||
@return buffer pool */
|
@return buffer pool */
|
||||||
@ -929,7 +944,7 @@ buf_pool_get(
|
|||||||
ignored_offset = offset >> 6; /* 2log of BUF_READ_AHEAD_AREA (64)*/
|
ignored_offset = offset >> 6; /* 2log of BUF_READ_AHEAD_AREA (64)*/
|
||||||
fold = buf_page_address_fold(space, ignored_offset);
|
fold = buf_page_address_fold(space, ignored_offset);
|
||||||
index = fold % srv_buf_pool_instances;
|
index = fold % srv_buf_pool_instances;
|
||||||
return buf_pool_ptr[index];
|
return(&buf_pool_ptr[index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************//**
|
/******************************************************************//**
|
||||||
@ -939,10 +954,12 @@ UNIV_INLINE
|
|||||||
buf_pool_t*
|
buf_pool_t*
|
||||||
buf_pool_from_array(
|
buf_pool_from_array(
|
||||||
/*================*/
|
/*================*/
|
||||||
ulint index) /*!< in: array index to get
|
ulint index) /*!< in: array index to get
|
||||||
buffer pool instance from */
|
buffer pool instance from */
|
||||||
{
|
{
|
||||||
return buf_pool_ptr[index];
|
ut_ad(index < MAX_BUFFER_POOLS);
|
||||||
|
ut_ad(index < srv_buf_pool_instances);
|
||||||
|
return(&buf_pool_ptr[index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************//**
|
/******************************************************************//**
|
||||||
|
@ -101,6 +101,9 @@ enum db_err {
|
|||||||
requested but this storage does not
|
requested but this storage does not
|
||||||
exist itself or the stats for a given
|
exist itself or the stats for a given
|
||||||
table do not exist */
|
table do not exist */
|
||||||
|
DB_FOREIGN_EXCEED_MAX_CASCADE, /* Foreign key constraint related
|
||||||
|
cascading delete/update exceeds
|
||||||
|
maximum allowed depth */
|
||||||
|
|
||||||
/* The following are partial failure codes */
|
/* The following are partial failure codes */
|
||||||
DB_FAIL = 1000,
|
DB_FAIL = 1000,
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user