mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 19:11:46 +01:00
Merge mysql-5.5-innodb from bk-internal into my local repo
This commit is contained in:
commit
22075c8fee
120 changed files with 2964 additions and 1374 deletions
|
@ -9,15 +9,19 @@
|
|||
*.core
|
||||
*.d
|
||||
*.da
|
||||
*.dll
|
||||
*.exe
|
||||
*.exp
|
||||
*.gcda
|
||||
*.gcno
|
||||
*.gcov
|
||||
*.idb
|
||||
*.ilk
|
||||
*.la
|
||||
*.lai
|
||||
*.lib
|
||||
*.lo
|
||||
*.manifest
|
||||
*.map
|
||||
*.o
|
||||
*.obj
|
||||
|
@ -148,6 +152,7 @@ Makefile
|
|||
Makefile.in
|
||||
Makefile.in'
|
||||
PENDING/*
|
||||
scripts/scripts
|
||||
TAGS
|
||||
VC++Files/client/mysql_amd64.dsp
|
||||
ac_available_languages_fragment
|
||||
|
@ -1981,6 +1986,7 @@ sql-bench/test-transactions
|
|||
sql-bench/test-wisconsin
|
||||
sql/*.cpp
|
||||
sql/*.ds?
|
||||
sql/*.def
|
||||
sql/*.vcproj
|
||||
sql/.deps/client.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.0.0
|
||||
sql/client.c
|
||||
sql/cmake_dummy.cc
|
||||
sql/Doxyfile
|
||||
sql/f.c
|
||||
sql/gen_lex_hash
|
||||
|
@ -3046,6 +3053,7 @@ vio/viotest.cpp
|
|||
win/configure.data
|
||||
win/vs71cache.txt
|
||||
win/vs8cache.txt
|
||||
win/nmake_cache.txt
|
||||
ylwrap
|
||||
zlib/*.ds?
|
||||
zlib/*.vcproj
|
||||
|
|
|
@ -115,18 +115,27 @@ ENDIF()
|
|||
# Control aspects of the development environment which are
|
||||
# specific to MySQL maintainers and developers.
|
||||
#
|
||||
INCLUDE (CheckCCompilerFlag)
|
||||
OPTION(MYSQL_MAINTAINER_MODE "MySQL maintainer-specific development environment" OFF)
|
||||
# Whether the maintainer mode should be enabled.
|
||||
IF(MYSQL_MAINTAINER_MODE)
|
||||
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
|
||||
"-Wall -Wextra -Wunused -Wwrite-strings -Wno-strict-aliasing -Werror"
|
||||
CACHE STRING "C warning options used in maintainer builds.")
|
||||
"-Wall -Wextra -Wunused -Wwrite-strings -Wno-strict-aliasing -Werror")
|
||||
ENDIF()
|
||||
IF(CMAKE_COMPILER_IS_GNUCXX)
|
||||
SET(MY_MAINTAINER_CXX_WARNINGS "${MY_MAINTAINER_C_WARNINGS} -Wno-unused-parameter"
|
||||
CACHE STRING "C++ warning options used in maintainer builds.")
|
||||
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.
|
||||
IF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX)
|
||||
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 "
|
||||
"statements if the --verbose option is also given; 'auto' prints base64 "
|
||||
"only when necessary (i.e., for row-based events and format description "
|
||||
"events); 'always' prints base64 whenever possible. 'always' is for "
|
||||
"debugging only and should not be used in a production system. If this "
|
||||
"argument is not given, the default is 'auto'; if it is given with no "
|
||||
"argument, 'always' is used.",
|
||||
"events); 'always' prints base64 whenever possible. 'always' is "
|
||||
"deprecated, will be removed in a future version, and should not be used "
|
||||
"in a production system. --base64-output with no 'name' argument is "
|
||||
"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,
|
||||
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)
|
||||
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);
|
||||
|
||||
|
|
|
@ -42,6 +42,9 @@ MACRO(GET_MYSQL_VERSION)
|
|||
IF(NOT VERSION_STRING)
|
||||
FILE(STRINGS configure.in str REGEX "AC_INIT\\(")
|
||||
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()
|
||||
|
|
|
@ -19,6 +19,7 @@ AC_DEFUN([MY_MAINTAINER_MODE_WARNINGS], [
|
|||
AS_IF([test "$GCC" = "yes"], [
|
||||
C_WARNINGS="-Wall -Wextra -Wunused -Wwrite-strings -Wno-strict-aliasing -Werror"
|
||||
CXX_WARNINGS="${C_WARNINGS} -Wno-unused-parameter"
|
||||
C_WARNINGS="${C_WARNINGS} -Wdeclaration-after-statement"
|
||||
])
|
||||
|
||||
# Test whether the warning options work.
|
||||
|
|
|
@ -27,7 +27,7 @@ dnl
|
|||
dnl When changing the major version number please also check the switch
|
||||
dnl statement in mysqlbinlog::check_master_version(). You may also need
|
||||
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_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 const char *charsets_dir;
|
||||
/* 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_file;
|
||||
|
||||
|
|
|
@ -90,8 +90,8 @@ typedef struct st_mysql_server_auth_info
|
|||
int password_used;
|
||||
|
||||
/**
|
||||
Set to the name of the connected client if it can be resolved, or to
|
||||
the address otherwise
|
||||
Set to the name of the connected client host, if it can be resolved,
|
||||
or to its IP address otherwise.
|
||||
*/
|
||||
const char *host_or_ip;
|
||||
|
||||
|
@ -107,7 +107,7 @@ typedef struct st_mysql_server_auth_info
|
|||
*/
|
||||
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
|
||||
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_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_argv= *argvp;
|
||||
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_2slaves # BUG#43828 2009-10-22 luis fails sporadically
|
||||
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.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 $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
|
||||
# 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;
|
||||
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
|
||||
if ($arg eq "--skip-core-file")
|
||||
{
|
||||
|
@ -5317,8 +5326,7 @@ sub gdb_arguments {
|
|||
"break mysql_parse\n" .
|
||||
"commands 1\n" .
|
||||
"disable 1\n" .
|
||||
"end\n" .
|
||||
"run");
|
||||
"end\n");
|
||||
}
|
||||
|
||||
if ( $opt_manual_gdb )
|
||||
|
|
|
@ -21,7 +21,7 @@ ndb_binlog_index
|
|||
plugin
|
||||
proc
|
||||
procs_priv
|
||||
proxy_priv
|
||||
proxies_priv
|
||||
servers
|
||||
slow_log
|
||||
tables_priv
|
||||
|
|
|
@ -15,7 +15,7 @@ ndb_binlog_index
|
|||
plugin
|
||||
proc
|
||||
procs_priv
|
||||
proxy_priv
|
||||
proxies_priv
|
||||
servers
|
||||
slow_log
|
||||
tables_priv
|
||||
|
@ -49,7 +49,7 @@ ndb_binlog_index
|
|||
plugin
|
||||
proc
|
||||
procs_priv
|
||||
proxy_priv
|
||||
proxies_priv
|
||||
servers
|
||||
slow_log
|
||||
tables_priv
|
||||
|
@ -91,7 +91,7 @@ ndb_binlog_index
|
|||
plugin
|
||||
proc
|
||||
procs_priv
|
||||
proxy_priv
|
||||
proxies_priv
|
||||
servers
|
||||
slow_log
|
||||
tables_priv
|
||||
|
|
|
@ -1425,7 +1425,7 @@ create table t1 as select concat(time_to_sec('10:11:12')) as c1;
|
|||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varbinary(10) NOT NULL DEFAULT ''
|
||||
`c1` varbinary(10) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
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;
|
||||
Table Create Table
|
||||
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
|
||||
drop table t1;
|
||||
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;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(10) NOT NULL DEFAULT ''
|
||||
`c1` varchar(10) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
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;
|
||||
Table Create Table
|
||||
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
|
||||
drop table t1;
|
||||
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;
|
||||
Table Create Table
|
||||
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
|
||||
drop table t1;
|
||||
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');
|
||||
ERROR 23000: Duplicate entry 'abc\x00\x00' for key 'PRIMARY'
|
||||
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
|
||||
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
|
||||
#
|
||||
# Bug#57039: constant subtime expression returns incorrect result.
|
||||
|
|
|
@ -88,7 +88,7 @@ host
|
|||
plugin
|
||||
proc
|
||||
procs_priv
|
||||
proxy_priv
|
||||
proxies_priv
|
||||
servers
|
||||
slow_log
|
||||
tables_priv
|
||||
|
|
|
@ -45,3 +45,227 @@ p1
|
|||
max=1
|
||||
drop procedure p1;
|
||||
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
|
||||
DROP TABLE t1;
|
||||
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 @@global.log_output= @old_log_output;
|
||||
SET @@global.slow_query_log= @old_slow_query_log;
|
||||
|
|
|
@ -27,7 +27,7 @@ mysql.ndb_binlog_index OK
|
|||
mysql.plugin OK
|
||||
mysql.proc OK
|
||||
mysql.procs_priv OK
|
||||
mysql.proxy_priv OK
|
||||
mysql.proxies_priv OK
|
||||
mysql.renamed_general_log OK
|
||||
mysql.servers OK
|
||||
mysql.slow_log OK
|
||||
|
|
|
@ -15,7 +15,7 @@ mysql.ndb_binlog_index OK
|
|||
mysql.plugin OK
|
||||
mysql.proc OK
|
||||
mysql.procs_priv OK
|
||||
mysql.proxy_priv OK
|
||||
mysql.proxies_priv OK
|
||||
mysql.servers OK
|
||||
mysql.slow_log OK
|
||||
mysql.tables_priv OK
|
||||
|
@ -44,7 +44,7 @@ mysql.ndb_binlog_index OK
|
|||
mysql.plugin OK
|
||||
mysql.proc OK
|
||||
mysql.procs_priv OK
|
||||
mysql.proxy_priv OK
|
||||
mysql.proxies_priv OK
|
||||
mysql.servers OK
|
||||
mysql.slow_log OK
|
||||
mysql.tables_priv OK
|
||||
|
@ -73,7 +73,7 @@ mysql.ndb_binlog_index OK
|
|||
mysql.plugin OK
|
||||
mysql.proc OK
|
||||
mysql.procs_priv OK
|
||||
mysql.proxy_priv OK
|
||||
mysql.proxies_priv OK
|
||||
mysql.servers OK
|
||||
mysql.slow_log OK
|
||||
mysql.tables_priv OK
|
||||
|
@ -104,7 +104,7 @@ mysql.ndb_binlog_index OK
|
|||
mysql.plugin OK
|
||||
mysql.proc OK
|
||||
mysql.procs_priv OK
|
||||
mysql.proxy_priv OK
|
||||
mysql.proxies_priv OK
|
||||
mysql.servers OK
|
||||
mysql.slow_log OK
|
||||
mysql.tables_priv OK
|
||||
|
@ -139,7 +139,7 @@ mysql.ndb_binlog_index OK
|
|||
mysql.plugin OK
|
||||
mysql.proc OK
|
||||
mysql.procs_priv OK
|
||||
mysql.proxy_priv OK
|
||||
mysql.proxies_priv OK
|
||||
mysql.servers OK
|
||||
mysql.slow_log OK
|
||||
mysql.tables_priv OK
|
||||
|
@ -177,7 +177,7 @@ mysql.ndb_binlog_index OK
|
|||
mysql.plugin OK
|
||||
mysql.proc OK
|
||||
mysql.procs_priv OK
|
||||
mysql.proxy_priv OK
|
||||
mysql.proxies_priv OK
|
||||
mysql.servers OK
|
||||
mysql.slow_log OK
|
||||
mysql.tables_priv OK
|
||||
|
|
|
@ -17,7 +17,7 @@ mysql.ndb_binlog_index OK
|
|||
mysql.plugin OK
|
||||
mysql.proc OK
|
||||
mysql.procs_priv OK
|
||||
mysql.proxy_priv OK
|
||||
mysql.proxies_priv OK
|
||||
mysql.servers OK
|
||||
mysql.slow_log OK
|
||||
mysql.tables_priv OK
|
||||
|
|
|
@ -879,3 +879,7 @@ ROLLBACK /* added by mysqlbinlog */;
|
|||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||
End of 5.0 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.proc OK
|
||||
mysql.procs_priv OK
|
||||
mysql.proxy_priv OK
|
||||
mysql.proxies_priv OK
|
||||
mysql.servers OK
|
||||
mysql.slow_log
|
||||
note : The storage engine for the table doesn't support analyze
|
||||
|
@ -46,7 +46,7 @@ mysql.ndb_binlog_index OK
|
|||
mysql.plugin OK
|
||||
mysql.proc OK
|
||||
mysql.procs_priv OK
|
||||
mysql.proxy_priv OK
|
||||
mysql.proxies_priv OK
|
||||
mysql.servers OK
|
||||
mysql.slow_log
|
||||
note : The storage engine for the table doesn't support optimize
|
||||
|
@ -72,7 +72,7 @@ mysql.ndb_binlog_index OK
|
|||
mysql.plugin OK
|
||||
mysql.proc OK
|
||||
mysql.procs_priv OK
|
||||
mysql.proxy_priv OK
|
||||
mysql.proxies_priv OK
|
||||
mysql.servers OK
|
||||
mysql.slow_log
|
||||
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.proc 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.slow_log
|
||||
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[=#]
|
||||
Offset added to Auto-increment columns. Used when
|
||||
auto-increment-increment != 1
|
||||
--autocommit Set default value for autocommit (0 or 1)
|
||||
--automatic-sp-privileges
|
||||
Creating and dropping stored procedures alters ACLs
|
||||
(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[=#]
|
||||
Offset added to Auto-increment columns. Used when
|
||||
auto-increment-increment != 1
|
||||
--autocommit Set default value for autocommit (0 or 1)
|
||||
--automatic-sp-privileges
|
||||
Creating and dropping stored procedures alters ACLs
|
||||
(Defaults to on; use --skip-automatic-sp-privileges to disable.)
|
||||
|
|
|
@ -11,6 +11,26 @@ test_plugin_server plug_dest
|
|||
## test plugin auth
|
||||
ERROR 28000: Access denied for user 'plug'@'localhost' (using password: YES)
|
||||
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();
|
||||
USER() CURRENT_USER()
|
||||
plug@localhost plug_dest@%
|
||||
|
@ -146,8 +166,8 @@ Grants for test_drop@localhost
|
|||
GRANT USAGE ON *.* TO 'test_drop'@'localhost'
|
||||
GRANT PROXY ON 'future_user'@'%' TO 'test_drop'@'localhost'
|
||||
DROP USER test_drop@localhost;
|
||||
SELECT * FROM mysql.proxy_priv WHERE Host = 'test_drop' AND User = 'localhost';
|
||||
Host User Proxied_Host Proxied_User With_Grant
|
||||
SELECT * FROM mysql.proxies_priv WHERE Host = 'test_drop' AND User = 'localhost';
|
||||
Host User Proxied_host Proxied_user With_grant Grantor Timestamp
|
||||
DROP USER proxy_admin;
|
||||
DROP USER grant_plug,grant_plug_dest,grant_plug_dest2;
|
||||
## END GRANT PROXY tests
|
||||
|
|
|
@ -14,7 +14,7 @@ ndb_binlog_index
|
|||
plugin
|
||||
proc
|
||||
procs_priv
|
||||
proxy_priv
|
||||
proxies_priv
|
||||
servers
|
||||
slow_log
|
||||
tables_priv
|
||||
|
|
|
@ -975,4 +975,14 @@ SELECT LENGTH(c) FROM t2;
|
|||
LENGTH(c)
|
||||
65535
|
||||
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
|
||||
|
|
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 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 proxy_priv Host 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI 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 proxy_priv Proxied_User 4 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 proxy_priv With_Grant 5 0 NO tinyint NULL NULL 3 0 NULL NULL tinyint(1) 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 proxies_priv Host 1 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 proxies_priv Proxied_user 4 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI 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 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
|
||||
|
@ -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 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
|
||||
3.0000 mysql proxy_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 proxy_priv Proxied_Host char 16 48 utf8 utf8_bin char(16)
|
||||
3.0000 mysql proxy_priv Proxied_User char 60 180 utf8 utf8_bin char(60)
|
||||
NULL mysql proxy_priv With_Grant tinyint NULL NULL NULL NULL tinyint(1)
|
||||
3.0000 mysql proxies_priv Host char 60 180 utf8 utf8_bin char(60)
|
||||
3.0000 mysql proxies_priv User 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 proxies_priv Proxied_user char 16 48 utf8 utf8_bin char(16)
|
||||
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 Host 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 Routine_name
|
||||
def mysql PRIMARY def mysql procs_priv Routine_type
|
||||
def mysql PRIMARY def mysql proxy_priv Host
|
||||
def mysql PRIMARY def mysql proxy_priv User
|
||||
def mysql PRIMARY def mysql proxy_priv Proxied_Host
|
||||
def mysql PRIMARY def mysql proxy_priv Proxied_User
|
||||
def mysql PRIMARY def mysql proxies_priv Host
|
||||
def mysql PRIMARY def mysql proxies_priv User
|
||||
def mysql PRIMARY def mysql proxies_priv Proxied_host
|
||||
def mysql PRIMARY def mysql proxies_priv Proxied_user
|
||||
def mysql PRIMARY def mysql servers Server_name
|
||||
def mysql PRIMARY def mysql tables_priv Host
|
||||
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 Grantor
|
||||
def mysql proxy_priv mysql PRIMARY
|
||||
def mysql proxy_priv mysql PRIMARY
|
||||
def mysql proxy_priv mysql PRIMARY
|
||||
def mysql proxy_priv mysql PRIMARY
|
||||
def mysql proxies_priv mysql PRIMARY
|
||||
def mysql proxies_priv mysql PRIMARY
|
||||
def mysql proxies_priv mysql PRIMARY
|
||||
def mysql proxies_priv mysql PRIMARY
|
||||
def mysql proxies_priv mysql Grantor
|
||||
def mysql servers 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 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 proxy_priv 0 mysql PRIMARY 1 Host A #CARD# NULL NULL BTREE
|
||||
def mysql proxy_priv 0 mysql PRIMARY 2 User A #CARD# NULL NULL BTREE
|
||||
def mysql proxy_priv 0 mysql PRIMARY 3 Proxied_Host A #CARD# NULL NULL BTREE
|
||||
def mysql proxy_priv 0 mysql PRIMARY 4 Proxied_User A #CARD# NULL NULL BTREE
|
||||
def mysql proxies_priv 1 mysql Grantor 1 Grantor A #CARD# NULL NULL BTREE
|
||||
def mysql proxies_priv 0 mysql PRIMARY 1 Host A #CARD# NULL NULL BTREE
|
||||
def mysql proxies_priv 0 mysql PRIMARY 2 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 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
|
||||
|
|
|
@ -73,7 +73,7 @@ def mysql PRIMARY mysql ndb_binlog_index
|
|||
def mysql PRIMARY mysql plugin
|
||||
def mysql PRIMARY mysql proc
|
||||
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 tables_priv
|
||||
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 proc 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 tables_priv PRIMARY KEY
|
||||
def mysql PRIMARY mysql time_zone PRIMARY KEY
|
||||
|
|
|
@ -336,7 +336,7 @@ user_comment Procedure privileges
|
|||
Separator -----------------------------------------------------
|
||||
TABLE_CATALOG def
|
||||
TABLE_SCHEMA mysql
|
||||
TABLE_NAME proxy_priv
|
||||
TABLE_NAME proxies_priv
|
||||
TABLE_TYPE BASE TABLE
|
||||
ENGINE MyISAM
|
||||
VERSION 10
|
||||
|
|
854
mysql-test/suite/innodb/r/innodb-create-options.result
Normal file
854
mysql-test/suite/innodb/r/innodb-create-options.result
Normal file
|
@ -0,0 +1,854 @@
|
|||
SET storage_engine=InnoDB;
|
||||
SET GLOBAL innodb_file_format=`Barracuda`;
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
SET SESSION innodb_strict_mode = ON;
|
||||
# Test 1) StrictMode=ON, CREATE and ALTER with each ROW_FORMAT & KEY_BLOCK_SIZE=0
|
||||
# KEY_BLOCK_SIZE=0 means 'no KEY_BLOCK_SIZE is specified'
|
||||
DROP TABLE IF EXISTS t1;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 't1'
|
||||
# 'FIXED' is sent to InnoDB since it is used by MyISAM.
|
||||
# But it is an invalid mode in InnoDB
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=FIXED;
|
||||
ERROR HY000: Can't create table 'test.t1' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: invalid ROW_FORMAT specifier.
|
||||
Error 1005 Can't create table 'test.t1' (errno: 1478)
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=COMPACT
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Dynamic row_format=DYNAMIC
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Redundant row_format=REDUNDANT
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact
|
||||
ALTER TABLE t1 ROW_FORMAT=FIXED KEY_BLOCK_SIZE=0;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: invalid ROW_FORMAT specifier.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact
|
||||
# Test 2) StrictMode=ON, CREATE with each ROW_FORMAT & a valid non-zero KEY_BLOCK_SIZE
|
||||
# KEY_BLOCK_SIZE is incompatible with COMPACT, REDUNDANT, & DYNAMIC
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
ERROR HY000: Can't create table 'test.t1' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = COMPACT with KEY_BLOCK_SIZE.
|
||||
Error 1005 Can't create table 'test.t1' (errno: 1478)
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=REDUNDANT KEY_BLOCK_SIZE=2;
|
||||
ERROR HY000: Can't create table 'test.t1' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = REDUNDANT with KEY_BLOCK_SIZE.
|
||||
Error 1005 Can't create table 'test.t1' (errno: 1478)
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DYNAMIC KEY_BLOCK_SIZE=4;
|
||||
ERROR HY000: Can't create table 'test.t1' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = DYNAMIC with KEY_BLOCK_SIZE.
|
||||
Error 1005 Can't create table 'test.t1' (errno: 1478)
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED KEY_BLOCK_SIZE=8
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED KEY_BLOCK_SIZE=8
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=16;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed KEY_BLOCK_SIZE=16
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed KEY_BLOCK_SIZE=16
|
||||
# Test 3) StrictMode=ON, ALTER with each ROW_FORMAT & a valid non-zero KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT );
|
||||
ALTER TABLE t1 ROW_FORMAT=FIXED KEY_BLOCK_SIZE=1;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: invalid ROW_FORMAT specifier.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=2;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = COMPACT with KEY_BLOCK_SIZE.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC KEY_BLOCK_SIZE=4;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = DYNAMIC with KEY_BLOCK_SIZE.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT KEY_BLOCK_SIZE=8;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = REDUNDANT with KEY_BLOCK_SIZE.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=16;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed KEY_BLOCK_SIZE=16
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED KEY_BLOCK_SIZE=1
|
||||
# Test 4) StrictMode=ON, CREATE with ROW_FORMAT=COMPACT, ALTER with a valid non-zero KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=COMPACT
|
||||
ALTER TABLE t1 KEY_BLOCK_SIZE=2;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = COMPACT with KEY_BLOCK_SIZE.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Redundant row_format=REDUNDANT
|
||||
ALTER TABLE t1 KEY_BLOCK_SIZE=4;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = REDUNDANT with KEY_BLOCK_SIZE.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Dynamic row_format=DYNAMIC
|
||||
ALTER TABLE t1 KEY_BLOCK_SIZE=8;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = DYNAMIC with KEY_BLOCK_SIZE.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED
|
||||
ALTER TABLE t1 KEY_BLOCK_SIZE=16;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED KEY_BLOCK_SIZE=16
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed KEY_BLOCK_SIZE=1
|
||||
# Test 5) StrictMode=ON, CREATE with a valid KEY_BLOCK_SIZE
|
||||
# ALTER with each ROW_FORMAT
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) KEY_BLOCK_SIZE=2;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=2
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`i` int(11) DEFAULT NULL,
|
||||
`f1` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=2
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = COMPACT with KEY_BLOCK_SIZE.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = REDUNDANT with KEY_BLOCK_SIZE.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = DYNAMIC with KEY_BLOCK_SIZE.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED KEY_BLOCK_SIZE=2
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=COMPACT
|
||||
# Test 6) StrictMode=ON, CREATE with an invalid KEY_BLOCK_SIZE.
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) KEY_BLOCK_SIZE=9;
|
||||
ERROR HY000: Can't create table 'test.t1' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: invalid KEY_BLOCK_SIZE = 9. Valid values are [1, 2, 4, 8, 16]
|
||||
Error 1005 Can't create table 'test.t1' (errno: 1478)
|
||||
# Test 7) StrictMode=ON, Make sure ROW_FORMAT= COMPRESSED & DYNAMIC and
|
||||
# and a valid non-zero KEY_BLOCK_SIZE are rejected with Antelope
|
||||
# and that they can be set to default values during strict mode.
|
||||
SET GLOBAL innodb_file_format=Antelope;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 't1'
|
||||
CREATE TABLE t1 ( i INT ) KEY_BLOCK_SIZE=4;
|
||||
ERROR HY000: Can't create table 'test.t1' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_format > Antelope.
|
||||
Error 1005 Can't create table 'test.t1' (errno: 1478)
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED;
|
||||
ERROR HY000: Can't create table 'test.t1' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_format > Antelope.
|
||||
Error 1005 Can't create table 'test.t1' (errno: 1478)
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DYNAMIC;
|
||||
ERROR HY000: Can't create table 'test.t1' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope.
|
||||
Error 1005 Can't create table 'test.t1' (errno: 1478)
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=REDUNDANT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Redundant row_format=REDUNDANT
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=COMPACT
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DEFAULT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
ALTER TABLE t1 KEY_BLOCK_SIZE=8;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_format > Antelope.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_format > Antelope.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
SET GLOBAL innodb_file_format=Barracuda;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
SET GLOBAL innodb_file_format=Antelope;
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_format > Antelope.
|
||||
Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_format > Antelope.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
ALTER TABLE t1 ADD COLUMN f2 INT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SET GLOBAL innodb_file_format=Barracuda;
|
||||
# Test 8) StrictMode=ON, Make sure ROW_FORMAT= COMPRESSED & DYNAMIC and
|
||||
# and a valid non-zero KEY_BLOCK_SIZE are rejected with
|
||||
# innodb_file_per_table=OFF and that they can be set to default
|
||||
# values during strict mode.
|
||||
SET GLOBAL innodb_file_per_table=OFF;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) KEY_BLOCK_SIZE=16;
|
||||
ERROR HY000: Can't create table 'test.t1' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_per_table.
|
||||
Error 1005 Can't create table 'test.t1' (errno: 1478)
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED;
|
||||
ERROR HY000: Can't create table 'test.t1' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_per_table.
|
||||
Error 1005 Can't create table 'test.t1' (errno: 1478)
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DYNAMIC;
|
||||
ERROR HY000: Can't create table 'test.t1' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_per_table.
|
||||
Error 1005 Can't create table 'test.t1' (errno: 1478)
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=REDUNDANT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Redundant row_format=REDUNDANT
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=COMPACT
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DEFAULT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
ALTER TABLE t1 KEY_BLOCK_SIZE=1;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_per_table.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_per_table.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_per_table.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=COMPACT
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Redundant row_format=REDUNDANT
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
SET GLOBAL innodb_file_per_table=OFF;
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_per_table.
|
||||
Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_per_table.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
ALTER TABLE t1 ADD COLUMN f2 INT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
##################################################
|
||||
SET SESSION innodb_strict_mode = OFF;
|
||||
# Test 9) StrictMode=OFF, CREATE and ALTER with each ROW_FORMAT & KEY_BLOCK_SIZE=0
|
||||
# KEY_BLOCK_SIZE=0 means 'no KEY_BLOCK_SIZE is specified'
|
||||
# 'FIXED' is sent to InnoDB since it is used by MyISAM.
|
||||
# It is an invalid mode in InnoDB, use COMPACT
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=FIXED;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=FIXED
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=COMPACT
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Dynamic row_format=DYNAMIC
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Redundant row_format=REDUNDANT
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact
|
||||
ALTER TABLE t1 ROW_FORMAT=FIXED KEY_BLOCK_SIZE=0;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=FIXED
|
||||
# Test 10) StrictMode=OFF, CREATE with each ROW_FORMAT & a valid KEY_BLOCK_SIZE
|
||||
# KEY_BLOCK_SIZE is ignored with COMPACT, REDUNDANT, & DYNAMIC
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=COMPACT KEY_BLOCK_SIZE=1
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=REDUNDANT KEY_BLOCK_SIZE=2;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=2 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=2 unless ROW_FORMAT=COMPRESSED.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Redundant row_format=REDUNDANT KEY_BLOCK_SIZE=2
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DYNAMIC KEY_BLOCK_SIZE=4;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=4 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=4 unless ROW_FORMAT=COMPRESSED.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Dynamic row_format=DYNAMIC KEY_BLOCK_SIZE=4
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED KEY_BLOCK_SIZE=8
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED KEY_BLOCK_SIZE=8
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=16;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed KEY_BLOCK_SIZE=16
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed KEY_BLOCK_SIZE=16
|
||||
# Test 11) StrictMode=OFF, ALTER with each ROW_FORMAT & a valid KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT );
|
||||
ALTER TABLE t1 ROW_FORMAT=FIXED KEY_BLOCK_SIZE=1;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=FIXED KEY_BLOCK_SIZE=1
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT );
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=2;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=2 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=2 unless ROW_FORMAT=COMPRESSED.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=COMPACT KEY_BLOCK_SIZE=2
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT );
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC KEY_BLOCK_SIZE=4;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=4 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=4 unless ROW_FORMAT=COMPRESSED.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Dynamic row_format=DYNAMIC KEY_BLOCK_SIZE=4
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT );
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT KEY_BLOCK_SIZE=8;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=8 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=8 unless ROW_FORMAT=COMPRESSED.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Redundant row_format=REDUNDANT KEY_BLOCK_SIZE=8
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT );
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=16;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed KEY_BLOCK_SIZE=16
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED KEY_BLOCK_SIZE=1
|
||||
# Test 12) StrictMode=OFF, CREATE with ROW_FORMAT=COMPACT, ALTER with a valid KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=COMPACT
|
||||
ALTER TABLE t1 KEY_BLOCK_SIZE=2;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=2 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=2 unless ROW_FORMAT=COMPRESSED.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=COMPACT KEY_BLOCK_SIZE=2
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=2 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=2 unless ROW_FORMAT=COMPRESSED.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Redundant row_format=REDUNDANT KEY_BLOCK_SIZE=2
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=2 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=2 unless ROW_FORMAT=COMPRESSED.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Dynamic row_format=DYNAMIC KEY_BLOCK_SIZE=2
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED KEY_BLOCK_SIZE=2
|
||||
ALTER TABLE t1 KEY_BLOCK_SIZE=4;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED KEY_BLOCK_SIZE=4
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=8;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed KEY_BLOCK_SIZE=8
|
||||
# Test 13) StrictMode=OFF, CREATE with a valid KEY_BLOCK_SIZE
|
||||
# ALTER with each ROW_FORMAT
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) KEY_BLOCK_SIZE=16;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=16
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`i` int(11) DEFAULT NULL,
|
||||
`f1` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=16
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=16 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=16 unless ROW_FORMAT=COMPRESSED.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=COMPACT KEY_BLOCK_SIZE=16
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=16 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=16 unless ROW_FORMAT=COMPRESSED.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Redundant row_format=REDUNDANT KEY_BLOCK_SIZE=16
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=16 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=16 unless ROW_FORMAT=COMPRESSED.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Dynamic row_format=DYNAMIC KEY_BLOCK_SIZE=16
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED KEY_BLOCK_SIZE=16
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=COMPACT
|
||||
# Test 14) StrictMode=OFF, CREATE with an invalid KEY_BLOCK_SIZE, it defaults to 8
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) KEY_BLOCK_SIZE=15;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=15.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=15.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact KEY_BLOCK_SIZE=15
|
||||
# Test 15) StrictMode=OFF, Make sure ROW_FORMAT= COMPRESSED & DYNAMIC and a
|
||||
valid KEY_BLOCK_SIZE are remembered but not used when ROW_FORMAT
|
||||
is reverted to Antelope and then used again when ROW_FORMAT=Barracuda.
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED KEY_BLOCK_SIZE=1
|
||||
SET GLOBAL innodb_file_format=Antelope;
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_format > Antelope.
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1.
|
||||
Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_format > Antelope.
|
||||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_format > Antelope.
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1.
|
||||
Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_format > Antelope.
|
||||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=COMPRESSED KEY_BLOCK_SIZE=1
|
||||
SET GLOBAL innodb_file_format=Barracuda;
|
||||
ALTER TABLE t1 ADD COLUMN f2 INT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED KEY_BLOCK_SIZE=1
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DYNAMIC;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Dynamic row_format=DYNAMIC
|
||||
SET GLOBAL innodb_file_format=Antelope;
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope.
|
||||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope.
|
||||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=DYNAMIC
|
||||
SET GLOBAL innodb_file_format=Barracuda;
|
||||
ALTER TABLE t1 ADD COLUMN f2 INT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Dynamic row_format=DYNAMIC
|
||||
# Test 16) StrictMode=OFF, Make sure ROW_FORMAT= COMPRESSED & DYNAMIC and a
|
||||
valid KEY_BLOCK_SIZE are remembered but not used when innodb_file_per_table=OFF
|
||||
and then used again when innodb_file_per_table=ON.
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=2;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED KEY_BLOCK_SIZE=2
|
||||
SET GLOBAL innodb_file_per_table=OFF;
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_per_table.
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=2.
|
||||
Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_per_table.
|
||||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_per_table.
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=2.
|
||||
Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_per_table.
|
||||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=COMPRESSED KEY_BLOCK_SIZE=2
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
ALTER TABLE t1 ADD COLUMN f2 INT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compressed row_format=COMPRESSED KEY_BLOCK_SIZE=2
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DYNAMIC;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Dynamic row_format=DYNAMIC
|
||||
SET GLOBAL innodb_file_per_table=OFF;
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_per_table.
|
||||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_per_table.
|
||||
Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT.
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Compact row_format=DYNAMIC
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
ALTER TABLE t1 ADD COLUMN f2 INT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
t1 Dynamic row_format=DYNAMIC
|
||||
# Cleanup
|
||||
DROP TABLE IF EXISTS t1;
|
|
@ -84,8 +84,6 @@ test t8 Compact
|
|||
test t9 Compact
|
||||
drop table t0,t00,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14;
|
||||
alter table t1 key_block_size=0;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=0.
|
||||
alter table t1 row_format=dynamic;
|
||||
SELECT table_schema, table_name, row_format
|
||||
FROM information_schema.tables WHERE engine='innodb';
|
||||
|
@ -191,16 +189,9 @@ set global innodb_file_per_table = on;
|
|||
set global innodb_file_format = `1`;
|
||||
set innodb_strict_mode = off;
|
||||
create table t1 (id int primary key) engine = innodb key_block_size = 0;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=0.
|
||||
drop table t1;
|
||||
set innodb_strict_mode = on;
|
||||
create table t1 (id int primary key) engine = innodb key_block_size = 0;
|
||||
ERROR HY000: Can't create table 'test.t1' (errno: 1478)
|
||||
show warnings;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: invalid KEY_BLOCK_SIZE = 0. Valid values are [1, 2, 4, 8, 16]
|
||||
Error 1005 Can't create table 'test.t1' (errno: 1478)
|
||||
create table t2 (id int primary key) engine = innodb key_block_size = 9;
|
||||
ERROR HY000: Can't create table 'test.t2' (errno: 1478)
|
||||
show warnings;
|
||||
|
@ -219,6 +210,7 @@ create table t11(id int primary key) engine = innodb row_format = redundant;
|
|||
SELECT table_schema, table_name, row_format
|
||||
FROM information_schema.tables WHERE engine='innodb';
|
||||
table_schema table_name row_format
|
||||
test t1 Compact
|
||||
test t10 Compact
|
||||
test t11 Redundant
|
||||
test t3 Compressed
|
||||
|
@ -228,7 +220,7 @@ test t6 Compressed
|
|||
test t7 Compressed
|
||||
test t8 Compressed
|
||||
test t9 Dynamic
|
||||
drop table t3, t4, t5, t6, t7, t8, t9, t10, t11;
|
||||
drop table t1, t3, t4, t5, t6, t7, t8, t9, t10, t11;
|
||||
create table t1 (id int primary key) engine = innodb
|
||||
key_block_size = 8 row_format = compressed;
|
||||
create table t2 (id int primary key) engine = innodb
|
||||
|
@ -254,16 +246,12 @@ Warning 1478 InnoDB: cannot specify ROW_FORMAT = DYNAMIC with KEY_BLOCK_SIZE.
|
|||
Error 1005 Can't create table 'test.t4' (errno: 1478)
|
||||
create table t5 (id int primary key) engine = innodb
|
||||
key_block_size = 8 row_format = default;
|
||||
ERROR HY000: Can't create table 'test.t5' (errno: 1478)
|
||||
show warnings;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = COMPACT with KEY_BLOCK_SIZE.
|
||||
Error 1005 Can't create table 'test.t5' (errno: 1478)
|
||||
SELECT table_schema, table_name, row_format
|
||||
FROM information_schema.tables WHERE engine='innodb';
|
||||
table_schema table_name row_format
|
||||
test t1 Compressed
|
||||
drop table t1;
|
||||
test t5 Compressed
|
||||
drop table t1, t5;
|
||||
create table t1 (id int primary key) engine = innodb
|
||||
key_block_size = 9 row_format = redundant;
|
||||
ERROR HY000: Can't create table 'test.t1' (errno: 1478)
|
||||
|
|
|
@ -1,88 +0,0 @@
|
|||
SET GLOBAL innodb_file_format='Barracuda';
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
SET innodb_strict_mode=ON;
|
||||
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
|
||||
WHERE TABLE_NAME='bug54679';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug54679 Compressed row_format=COMPRESSED
|
||||
ALTER TABLE bug54679 ADD COLUMN b INT;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
|
||||
WHERE TABLE_NAME='bug54679';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug54679 Compressed row_format=COMPRESSED
|
||||
DROP TABLE bug54679;
|
||||
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
|
||||
WHERE TABLE_NAME='bug54679';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug54679 Compact
|
||||
ALTER TABLE bug54679 KEY_BLOCK_SIZE=1;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
|
||||
WHERE TABLE_NAME='bug54679';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug54679 Compressed KEY_BLOCK_SIZE=1
|
||||
ALTER TABLE bug54679 ROW_FORMAT=REDUNDANT;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = REDUNDANT with KEY_BLOCK_SIZE.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
DROP TABLE bug54679;
|
||||
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
|
||||
WHERE TABLE_NAME='bug54679';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug54679 Redundant row_format=REDUNDANT
|
||||
ALTER TABLE bug54679 KEY_BLOCK_SIZE=2;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
|
||||
WHERE TABLE_NAME='bug54679';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug54679 Compressed row_format=REDUNDANT KEY_BLOCK_SIZE=2
|
||||
SET GLOBAL innodb_file_format=Antelope;
|
||||
ALTER TABLE bug54679 KEY_BLOCK_SIZE=4;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_format > Antelope.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE bug54679 ROW_FORMAT=DYNAMIC;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_format > Antelope.
|
||||
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope.
|
||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = DYNAMIC with KEY_BLOCK_SIZE.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
DROP TABLE bug54679;
|
||||
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||
ERROR HY000: Can't create table 'test.bug54679' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope.
|
||||
Error 1005 Can't create table 'test.bug54679' (errno: 1478)
|
||||
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB;
|
||||
SET GLOBAL innodb_file_format=Barracuda;
|
||||
SET GLOBAL innodb_file_per_table=OFF;
|
||||
ALTER TABLE bug54679 KEY_BLOCK_SIZE=4;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: KEY_BLOCK_SIZE requires innodb_file_per_table.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
ALTER TABLE bug54679 ROW_FORMAT=DYNAMIC;
|
||||
ERROR HY000: Can't create table '#sql-temporary' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_per_table.
|
||||
Error 1005 Can't create table '#sql-temporary' (errno: 1478)
|
||||
DROP TABLE bug54679;
|
||||
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||
ERROR HY000: Can't create table 'test.bug54679' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_per_table.
|
||||
Error 1005 Can't create table 'test.bug54679' (errno: 1478)
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||
DROP TABLE bug54679;
|
|
@ -1,294 +0,0 @@
|
|||
SET storage_engine=InnoDB;
|
||||
SET GLOBAL innodb_file_format=`Barracuda`;
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
SET SESSION innodb_strict_mode = ON;
|
||||
# Test 1) CREATE with ROW_FORMAT & KEY_BLOCK_SIZE, ALTER with neither
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'bug56632'
|
||||
CREATE TABLE bug56632 ( i INT ) ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
ERROR HY000: Can't create table 'test.bug56632' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = COMPACT with KEY_BLOCK_SIZE.
|
||||
Error 1005 Can't create table 'test.bug56632' (errno: 1478)
|
||||
# Test 2) CREATE with ROW_FORMAT, ALTER with KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'bug56632'
|
||||
CREATE TABLE bug56632 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact row_format=COMPACT
|
||||
ALTER TABLE bug56632 KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compressed row_format=COMPACT KEY_BLOCK_SIZE=1
|
||||
# Test 3) CREATE with KEY_BLOCK_SIZE, ALTER with ROW_FORMAT
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compressed KEY_BLOCK_SIZE=1
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compressed KEY_BLOCK_SIZE=1
|
||||
# Test 4) CREATE with neither, ALTER with ROW_FORMAT & KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT );
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact
|
||||
# Test 5) CREATE with KEY_BLOCK_SIZE=3 (invalid).
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=3;
|
||||
ERROR HY000: Can't create table 'test.bug56632' (errno: 1478)
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: invalid KEY_BLOCK_SIZE = 3. Valid values are [1, 2, 4, 8, 16]
|
||||
Error 1005 Can't create table 'test.bug56632' (errno: 1478)
|
||||
SET SESSION innodb_strict_mode = OFF;
|
||||
# Test 6) CREATE with ROW_FORMAT & KEY_BLOCK_SIZE, ALTER with neither
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'bug56632'
|
||||
CREATE TABLE bug56632 ( i INT ) ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact row_format=COMPACT KEY_BLOCK_SIZE=1
|
||||
ALTER TABLE bug56632 ADD COLUMN f1 INT;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL,
|
||||
`f1` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact row_format=COMPACT KEY_BLOCK_SIZE=1
|
||||
# Test 7) CREATE with ROW_FORMAT, ALTER with KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact row_format=COMPACT
|
||||
ALTER TABLE bug56632 KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compressed row_format=COMPACT KEY_BLOCK_SIZE=1
|
||||
# Test 8) CREATE with KEY_BLOCK_SIZE, ALTER with ROW_FORMAT
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compressed KEY_BLOCK_SIZE=1
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact row_format=COMPACT KEY_BLOCK_SIZE=1
|
||||
# Test 9) CREATE with neither, ALTER with ROW_FORMAT & KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT );
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=1 unless ROW_FORMAT=COMPRESSED.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact row_format=COMPACT KEY_BLOCK_SIZE=1
|
||||
# Test 10) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with neither.
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=3;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=3
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact KEY_BLOCK_SIZE=3
|
||||
ALTER TABLE bug56632 ADD COLUMN f1 INT;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL,
|
||||
`f1` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=3
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact KEY_BLOCK_SIZE=3
|
||||
# Test 11) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with ROW_FORMAT=COMPACT.
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=3;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=3
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact KEY_BLOCK_SIZE=3
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=3
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact row_format=COMPACT KEY_BLOCK_SIZE=3
|
||||
# Test 12) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with KEY_BLOCK_SIZE=1.
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=3;
|
||||
Warnings:
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=3.
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=3
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compact KEY_BLOCK_SIZE=3
|
||||
ALTER TABLE bug56632 KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SHOW CREATE TABLE bug56632;
|
||||
Table Create Table
|
||||
bug56632 CREATE TABLE `bug56632` (
|
||||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=1
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
TABLE_NAME ROW_FORMAT CREATE_OPTIONS
|
||||
bug56632 Compressed KEY_BLOCK_SIZE=1
|
||||
# Cleanup
|
||||
DROP TABLE IF EXISTS bug56632;
|
|
@ -24,7 +24,7 @@ MATCH_OPTION NONE
|
|||
UPDATE_RULE CASCADE
|
||||
DELETE_RULE RESTRICT
|
||||
TABLE_NAME product_order
|
||||
REFERENCED_TABLE_NAME pro
|
||||
REFERENCED_TABLE_NAME product
|
||||
CONSTRAINT_CATALOG def
|
||||
CONSTRAINT_SCHEMA test
|
||||
CONSTRAINT_NAME product_order_ibfk_2
|
||||
|
@ -35,7 +35,7 @@ MATCH_OPTION NONE
|
|||
UPDATE_RULE RESTRICT
|
||||
DELETE_RULE RESTRICT
|
||||
TABLE_NAME product_order
|
||||
REFERENCED_TABLE_NAME cus
|
||||
REFERENCED_TABLE_NAME customer
|
||||
DROP TABLE product_order;
|
||||
DROP TABLE product;
|
||||
DROP TABLE customer;
|
||||
|
|
575
mysql-test/suite/innodb/t/innodb-create-options.test
Normal file
575
mysql-test/suite/innodb/t/innodb-create-options.test
Normal file
|
@ -0,0 +1,575 @@
|
|||
# Tests for various combinations of ROW_FORMAT and KEY_BLOCK_SIZE
|
||||
# Related bugs;
|
||||
# Bug#54679: ALTER TABLE causes compressed row_format to revert to compact
|
||||
# Bug#56628: ALTER TABLE .. KEY_BLOCK_SIZE=0 produces untrue warning or unnecessary error
|
||||
# Bug#56632: ALTER TABLE implicitly changes ROW_FORMAT to COMPRESSED
|
||||
# Rules for interpreting CREATE_OPTIONS
|
||||
# 1) Create options on an ALTER are added to the options on the
|
||||
# previous CREATE or ALTER statements.
|
||||
# 2) KEY_BLOCK_SIZE=0 is considered a unspecified value.
|
||||
# If the current ROW_FORMAT has explicitly been set to COMPRESSED,
|
||||
# InnoDB will use a default value of 8. Otherwise KEY_BLOCK_SIZE
|
||||
# will not be used.
|
||||
# 3) ROW_FORMAT=DEFAULT allows InnoDB to choose its own default, COMPACT.
|
||||
# 4) ROW_FORMAT=DEFAULT and KEY_BLOCK_SIZE=0 can be used at any time to
|
||||
# unset or erase the values persisted in the MySQL dictionary and
|
||||
# by SHOW CTREATE TABLE.
|
||||
# 5) When incompatible values for ROW_FORMAT and KEY_BLOCK_SIZE are
|
||||
# both explicitly given, the ROW_FORMAT is always used in non-strict
|
||||
# mode.
|
||||
# 6) InnoDB will automatically convert a table to COMPRESSED only if a
|
||||
# valid non-zero KEY_BLOCK_SIZE has been given and ROW_FORMAT=DEFAULT
|
||||
# or has not been used on a previous CREATE TABLE or ALTER TABLE.
|
||||
# 7) InnoDB strict mode is designed to prevent incompatible create
|
||||
# options from being used together.
|
||||
# 8) The non-strict behavior is intended to permit you to import a
|
||||
# mysqldump file into a database that does not support compressed
|
||||
# tables, even if the source database contained compressed tables.
|
||||
# All invalid values and/or incompatible combinations of ROW_FORMAT
|
||||
# and KEY_BLOCK_SIZE are automatically corrected
|
||||
#
|
||||
# *** innodb_strict_mode=ON ***
|
||||
# 1) Valid ROW_FORMATs are COMPRESSED, COMPACT, DEFAULT, DYNAMIC
|
||||
# & REDUNDANT. All others are rejected.
|
||||
# 2) Valid KEY_BLOCK_SIZEs are 0,1,2,4,8,16. All others are rejected.
|
||||
# 3) KEY_BLOCK_SIZE=0 can be used to set it to 'unspecified'.
|
||||
# 4) KEY_BLOCK_SIZE=1,2,4,8 & 16 are incompatible with COMPACT, DYNAMIC &
|
||||
# REDUNDANT.
|
||||
# 5) KEY_BLOCK_SIZE=1,2,4,8 & 16 as well as ROW_FORMAT=COMPRESSED and
|
||||
# ROW_FORMAT=DYNAMIC are incompatible with innodb_file_format=Antelope
|
||||
# and innodb_file_per_table=OFF
|
||||
# 6) KEY_BLOCK_SIZE on an ALTER must occur with ROW_FORMAT=COMPRESSED
|
||||
# or ROW_FORMAT=DEFAULT if the ROW_FORMAT was previously specified
|
||||
# as COMPACT, DYNAMIC or REDUNDANT.
|
||||
# 7) KEY_BLOCK_SIZE on an ALTER can occur without a ROW_FORMAT if the
|
||||
# previous ROW_FORMAT was DEFAULT, COMPRESSED, or unspecified.
|
||||
#
|
||||
# *** innodb_strict_mode=OFF ***
|
||||
# 1. Ignore a bad KEY_BLOCK_SIZE, defaulting it to 8.
|
||||
# 2. Ignore a bad ROW_FORMAT, defaulting to COMPACT.
|
||||
# 3. Ignore a valid KEY_BLOCK_SIZE when an incompatible but valid
|
||||
# ROW_FORMAT is specified.
|
||||
# 4. If innodb_file_format=Antelope or innodb_file_per_table=OFF
|
||||
# it will ignore ROW_FORMAT=COMPRESSED or DYNAMIC and it will
|
||||
# ignore all non-zero KEY_BLOCK_SIZEs.
|
||||
#
|
||||
# See InnoDB documentation page "SQL Compression Syntax Warnings and Errors"
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
SET storage_engine=InnoDB;
|
||||
|
||||
--disable_query_log
|
||||
# These values can change during the test
|
||||
LET $innodb_file_format_orig=`select @@innodb_file_format`;
|
||||
LET $innodb_file_format_max_orig=`select @@innodb_file_format_max`;
|
||||
LET $innodb_file_per_table_orig=`select @@innodb_file_per_table`;
|
||||
LET $innodb_strict_mode_orig=`select @@session.innodb_strict_mode`;
|
||||
--enable_query_log
|
||||
|
||||
SET GLOBAL innodb_file_format=`Barracuda`;
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
|
||||
# The first half of these tests are with strict mode ON.
|
||||
SET SESSION innodb_strict_mode = ON;
|
||||
|
||||
--echo # Test 1) StrictMode=ON, CREATE and ALTER with each ROW_FORMAT & KEY_BLOCK_SIZE=0
|
||||
--echo # KEY_BLOCK_SIZE=0 means 'no KEY_BLOCK_SIZE is specified'
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--echo # 'FIXED' is sent to InnoDB since it is used by MyISAM.
|
||||
--echo # But it is an invalid mode in InnoDB
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=FIXED;
|
||||
SHOW WARNINGS;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 ROW_FORMAT=FIXED KEY_BLOCK_SIZE=0;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
|
||||
|
||||
|
||||
--echo # Test 2) StrictMode=ON, CREATE with each ROW_FORMAT & a valid non-zero KEY_BLOCK_SIZE
|
||||
--echo # KEY_BLOCK_SIZE is incompatible with COMPACT, REDUNDANT, & DYNAMIC
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=REDUNDANT KEY_BLOCK_SIZE=2;
|
||||
SHOW WARNINGS;
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DYNAMIC KEY_BLOCK_SIZE=4;
|
||||
SHOW WARNINGS;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=16;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
|
||||
|
||||
--echo # Test 3) StrictMode=ON, ALTER with each ROW_FORMAT & a valid non-zero KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT );
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 ROW_FORMAT=FIXED KEY_BLOCK_SIZE=1;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=2;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC KEY_BLOCK_SIZE=4;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT KEY_BLOCK_SIZE=8;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=16;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
|
||||
|
||||
--echo # Test 4) StrictMode=ON, CREATE with ROW_FORMAT=COMPACT, ALTER with a valid non-zero KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 KEY_BLOCK_SIZE=2;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 KEY_BLOCK_SIZE=4;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 KEY_BLOCK_SIZE=8;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 KEY_BLOCK_SIZE=16;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
|
||||
--echo # Test 5) StrictMode=ON, CREATE with a valid KEY_BLOCK_SIZE
|
||||
--echo # ALTER with each ROW_FORMAT
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) KEY_BLOCK_SIZE=2;
|
||||
SHOW CREATE TABLE t1;
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
SHOW CREATE TABLE t1;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
|
||||
--echo # Test 6) StrictMode=ON, CREATE with an invalid KEY_BLOCK_SIZE.
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE t1 ( i INT ) KEY_BLOCK_SIZE=9;
|
||||
SHOW WARNINGS;
|
||||
|
||||
--echo # Test 7) StrictMode=ON, Make sure ROW_FORMAT= COMPRESSED & DYNAMIC and
|
||||
--echo # and a valid non-zero KEY_BLOCK_SIZE are rejected with Antelope
|
||||
--echo # and that they can be set to default values during strict mode.
|
||||
SET GLOBAL innodb_file_format=Antelope;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE t1 ( i INT ) KEY_BLOCK_SIZE=4;
|
||||
SHOW WARNINGS;
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED;
|
||||
SHOW WARNINGS;
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DYNAMIC;
|
||||
SHOW WARNINGS;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=REDUNDANT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DEFAULT;
|
||||
SHOW WARNINGS;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 KEY_BLOCK_SIZE=8;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
SET GLOBAL innodb_file_format=Barracuda;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
SET GLOBAL innodb_file_format=Antelope;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
ALTER TABLE t1 ADD COLUMN f2 INT;
|
||||
SHOW WARNINGS;
|
||||
SET GLOBAL innodb_file_format=Barracuda;
|
||||
|
||||
--echo # Test 8) StrictMode=ON, Make sure ROW_FORMAT= COMPRESSED & DYNAMIC and
|
||||
--echo # and a valid non-zero KEY_BLOCK_SIZE are rejected with
|
||||
--echo # innodb_file_per_table=OFF and that they can be set to default
|
||||
--echo # values during strict mode.
|
||||
SET GLOBAL innodb_file_per_table=OFF;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE t1 ( i INT ) KEY_BLOCK_SIZE=16;
|
||||
SHOW WARNINGS;
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED;
|
||||
SHOW WARNINGS;
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DYNAMIC;
|
||||
SHOW WARNINGS;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=REDUNDANT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DEFAULT;
|
||||
SHOW WARNINGS;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 KEY_BLOCK_SIZE=1;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
SET GLOBAL innodb_file_per_table=OFF;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
ALTER TABLE t1 ADD COLUMN f2 INT;
|
||||
SHOW WARNINGS;
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
|
||||
--echo ##################################################
|
||||
SET SESSION innodb_strict_mode = OFF;
|
||||
|
||||
--echo # Test 9) StrictMode=OFF, CREATE and ALTER with each ROW_FORMAT & KEY_BLOCK_SIZE=0
|
||||
--echo # KEY_BLOCK_SIZE=0 means 'no KEY_BLOCK_SIZE is specified'
|
||||
--echo # 'FIXED' is sent to InnoDB since it is used by MyISAM.
|
||||
--echo # It is an invalid mode in InnoDB, use COMPACT
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=FIXED;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=FIXED KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
|
||||
--echo # Test 10) StrictMode=OFF, CREATE with each ROW_FORMAT & a valid KEY_BLOCK_SIZE
|
||||
--echo # KEY_BLOCK_SIZE is ignored with COMPACT, REDUNDANT, & DYNAMIC
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=REDUNDANT KEY_BLOCK_SIZE=2;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DYNAMIC KEY_BLOCK_SIZE=4;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=16;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
|
||||
|
||||
--echo # Test 11) StrictMode=OFF, ALTER with each ROW_FORMAT & a valid KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT );
|
||||
ALTER TABLE t1 ROW_FORMAT=FIXED KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT );
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=2;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT );
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC KEY_BLOCK_SIZE=4;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT );
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT KEY_BLOCK_SIZE=8;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT );
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=16;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
|
||||
|
||||
--echo # Test 12) StrictMode=OFF, CREATE with ROW_FORMAT=COMPACT, ALTER with a valid KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 KEY_BLOCK_SIZE=2;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 KEY_BLOCK_SIZE=4;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=8;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
|
||||
--echo # Test 13) StrictMode=OFF, CREATE with a valid KEY_BLOCK_SIZE
|
||||
--echo # ALTER with each ROW_FORMAT
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) KEY_BLOCK_SIZE=16;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE t1;
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE t1;
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=DYNAMIC;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=DEFAULT KEY_BLOCK_SIZE=0;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
ALTER TABLE t1 ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
|
||||
--echo # Test 14) StrictMode=OFF, CREATE with an invalid KEY_BLOCK_SIZE, it defaults to 8
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) KEY_BLOCK_SIZE=15;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
|
||||
--echo # Test 15) StrictMode=OFF, Make sure ROW_FORMAT= COMPRESSED & DYNAMIC and a
|
||||
--echo valid KEY_BLOCK_SIZE are remembered but not used when ROW_FORMAT
|
||||
--echo is reverted to Antelope and then used again when ROW_FORMAT=Barracuda.
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
SET GLOBAL innodb_file_format=Antelope;
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
SET GLOBAL innodb_file_format=Barracuda;
|
||||
ALTER TABLE t1 ADD COLUMN f2 INT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DYNAMIC;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
SET GLOBAL innodb_file_format=Antelope;
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
SET GLOBAL innodb_file_format=Barracuda;
|
||||
ALTER TABLE t1 ADD COLUMN f2 INT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
|
||||
--echo # Test 16) StrictMode=OFF, Make sure ROW_FORMAT= COMPRESSED & DYNAMIC and a
|
||||
--echo valid KEY_BLOCK_SIZE are remembered but not used when innodb_file_per_table=OFF
|
||||
--echo and then used again when innodb_file_per_table=ON.
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=2;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
SET GLOBAL innodb_file_per_table=OFF;
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
ALTER TABLE t1 ADD COLUMN f2 INT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 ( i INT ) ROW_FORMAT=DYNAMIC;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
SET GLOBAL innodb_file_per_table=OFF;
|
||||
ALTER TABLE t1 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
ALTER TABLE t1 ADD COLUMN f2 INT;
|
||||
SHOW WARNINGS;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 't1';
|
||||
|
||||
|
||||
--echo # Cleanup
|
||||
DROP TABLE IF EXISTS t1;
|
||||
|
||||
--disable_query_log
|
||||
EVAL SET GLOBAL innodb_file_format=$innodb_file_format_orig;
|
||||
EVAL SET GLOBAL innodb_file_format_max=$innodb_file_format_max_orig;
|
||||
EVAL SET GLOBAL innodb_file_per_table=$innodb_file_per_table_orig;
|
||||
EVAL SET SESSION innodb_strict_mode=$innodb_strict_mode_orig;
|
||||
--enable_query_log
|
||||
|
|
@ -176,9 +176,7 @@ set innodb_strict_mode = on;
|
|||
|
||||
#Test different values of KEY_BLOCK_SIZE
|
||||
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
create table t1 (id int primary key) engine = innodb key_block_size = 0;
|
||||
show warnings;
|
||||
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
create table t2 (id int primary key) engine = innodb key_block_size = 9;
|
||||
|
@ -199,7 +197,7 @@ create table t11(id int primary key) engine = innodb row_format = redundant;
|
|||
|
||||
SELECT table_schema, table_name, row_format
|
||||
FROM information_schema.tables WHERE engine='innodb';
|
||||
drop table t3, t4, t5, t6, t7, t8, t9, t10, t11;
|
||||
drop table t1, t3, t4, t5, t6, t7, t8, t9, t10, t11;
|
||||
|
||||
#test different values of ROW_FORMAT with KEY_BLOCK_SIZE
|
||||
create table t1 (id int primary key) engine = innodb
|
||||
|
@ -220,14 +218,12 @@ create table t4 (id int primary key) engine = innodb
|
|||
key_block_size = 8 row_format = dynamic;
|
||||
show warnings;
|
||||
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
create table t5 (id int primary key) engine = innodb
|
||||
key_block_size = 8 row_format = default;
|
||||
show warnings;
|
||||
|
||||
SELECT table_schema, table_name, row_format
|
||||
FROM information_schema.tables WHERE engine='innodb';
|
||||
drop table t1;
|
||||
drop table t1, t5;
|
||||
|
||||
#test multiple errors
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
|
|
|
@ -1,101 +0,0 @@
|
|||
# Test Bug #54679 alter table causes compressed row_format to revert to compact
|
||||
|
||||
--source include/have_innodb.inc
|
||||
|
||||
let $file_format=`select @@innodb_file_format`;
|
||||
let $file_format_max=`select @@innodb_file_format_max`;
|
||||
let $file_per_table=`select @@innodb_file_per_table`;
|
||||
SET GLOBAL innodb_file_format='Barracuda';
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
SET innodb_strict_mode=ON;
|
||||
|
||||
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
|
||||
WHERE TABLE_NAME='bug54679';
|
||||
|
||||
# The ROW_FORMAT of the table should be preserved when it is not specified
|
||||
# in ALTER TABLE.
|
||||
ALTER TABLE bug54679 ADD COLUMN b INT;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
|
||||
WHERE TABLE_NAME='bug54679';
|
||||
|
||||
DROP TABLE bug54679;
|
||||
|
||||
# Check that the ROW_FORMAT conversion to/from COMPRESSED works.
|
||||
|
||||
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
|
||||
WHERE TABLE_NAME='bug54679';
|
||||
|
||||
# KEY_BLOCK_SIZE implies COMPRESSED.
|
||||
ALTER TABLE bug54679 KEY_BLOCK_SIZE=1;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
|
||||
WHERE TABLE_NAME='bug54679';
|
||||
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE bug54679 ROW_FORMAT=REDUNDANT;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
DROP TABLE bug54679;
|
||||
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
|
||||
WHERE TABLE_NAME='bug54679';
|
||||
|
||||
ALTER TABLE bug54679 KEY_BLOCK_SIZE=2;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables
|
||||
WHERE TABLE_NAME='bug54679';
|
||||
|
||||
# This prevents other than REDUNDANT or COMPACT ROW_FORMAT for new tables.
|
||||
SET GLOBAL innodb_file_format=Antelope;
|
||||
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE bug54679 KEY_BLOCK_SIZE=4;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE bug54679 ROW_FORMAT=DYNAMIC;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
DROP TABLE bug54679;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB;
|
||||
|
||||
SET GLOBAL innodb_file_format=Barracuda;
|
||||
# This will prevent ROW_FORMAT=COMPRESSED, because the system tablespace
|
||||
# cannot be compressed.
|
||||
SET GLOBAL innodb_file_per_table=OFF;
|
||||
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE bug54679 KEY_BLOCK_SIZE=4;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE bug54679 ROW_FORMAT=DYNAMIC;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
DROP TABLE bug54679;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||
--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/
|
||||
SHOW WARNINGS;
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
CREATE TABLE bug54679 (a INT) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||
DROP TABLE bug54679;
|
||||
|
||||
# restore original values, quietly so the test does not fail if those
|
||||
# defaults are changed
|
||||
-- disable_query_log
|
||||
EVAL SET GLOBAL innodb_file_format=$file_format;
|
||||
EVAL SET GLOBAL innodb_file_format_max=$file_format_max;
|
||||
EVAL SET GLOBAL innodb_file_per_table=$file_per_table;
|
||||
-- enable_query_log
|
|
@ -1,216 +0,0 @@
|
|||
#
|
||||
# Bug#56632: ALTER TABLE implicitly changes ROW_FORMAT to COMPRESSED
|
||||
# http://bugs.mysql.com/56632
|
||||
#
|
||||
# Innodb automatically uses compressed mode when the KEY_BLOCK_SIZE
|
||||
# parameter is used, except if the ROW_FORMAT is also specified, in
|
||||
# which case the KEY_BLOCK_SIZE is ignored and a warning is shown.
|
||||
# But Innodb was getting confused when neither of those parameters
|
||||
# was used on the ALTER statement after they were both used on the
|
||||
# CREATE.
|
||||
#
|
||||
# This will test the results of all 4 combinations of these two
|
||||
# parameters of the CREATE and ALTER.
|
||||
#
|
||||
# Tests 1-5 use INNODB_STRICT_MODE=1 which returns an error
|
||||
# if there is anything wrong with the statement.
|
||||
#
|
||||
# 1) CREATE with ROW_FORMAT=COMPACT & KEY_BLOCK_SIZE=1, ALTER with neither.
|
||||
# Result; CREATE; fails with error ER_CANT_CREATE_TABLE
|
||||
# 2) CREATE with ROW_FORMAT=COMPACT, ALTER with KEY_BLOCK_SIZE=1
|
||||
# Result; CREATE succeeds,
|
||||
# ALTER quietly converts ROW_FORMAT to compressed.
|
||||
# 3) CREATE with KEY_BLOCK_SIZE=1, ALTER with ROW_FORMAT=COMPACT
|
||||
# Result; CREATE quietly converts ROW_FORMAT to compressed,
|
||||
# ALTER fails with error ER_CANT_CREATE_TABLE.
|
||||
# 4) CREATE with neither, ALTER with ROW_FORMAT=COMPACT & KEY_BLOCK_SIZE=1
|
||||
# Result; CREATE succeeds,
|
||||
# ALTER; fails with error ER_CANT_CREATE_TABLE
|
||||
# 5) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with neither.
|
||||
# Result; CREATE; fails with error ER_CANT_CREATE_TABLE
|
||||
#
|
||||
# Tests 6-11 use INNODB_STRICT_MODE=0 which automatically makes
|
||||
# adjustments if the prameters are incompatible.
|
||||
#
|
||||
# 6) CREATE with ROW_FORMAT=COMPACT & KEY_BLOCK_SIZE=1, ALTER with neither.
|
||||
# Result; CREATE succeeds, warns that KEY_BLOCK_SIZE is ignored.
|
||||
# ALTER succeeds, no warnings.
|
||||
# 7) CREATE with ROW_FORMAT=COMPACT, ALTER with KEY_BLOCK_SIZE=1
|
||||
# Result; CREATE succeeds,
|
||||
# ALTER quietly converts ROW_FORMAT to compressed.
|
||||
# 8) CREATE with KEY_BLOCK_SIZE=1, ALTER with ROW_FORMAT=COMPACT
|
||||
# Result; CREATE quietly converts ROW_FORMAT to compressed,
|
||||
# ALTER succeeds, warns that KEY_BLOCK_SIZE is ignored.
|
||||
# 9) CREATE with neither, ALTER with ROW_FORMAT=COMPACT & KEY_BLOCK_SIZE=1
|
||||
# Result; CREATE succeeds,
|
||||
# ALTER succeeds, warns that KEY_BLOCK_SIZE is ignored.
|
||||
# 10) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with neither.
|
||||
# Result; CREATE succeeds, warns that KEY_BLOCK_SIZE=3 is ignored.
|
||||
# ALTER succeeds, warns that KEY_BLOCK_SIZE=3 is ignored.
|
||||
# 11) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with ROW_FORMAT=COMPACT.
|
||||
# Result; CREATE succeeds, warns that KEY_BLOCK_SIZE=3 is ignored.
|
||||
# ALTER succeeds, warns that KEY_BLOCK_SIZE=3 is ignored.
|
||||
# 12) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with KEY_BLOCK_SIZE=1.
|
||||
# Result; CREATE succeeds, warns that KEY_BLOCK_SIZE=3 is ignored.
|
||||
# ALTER succeeds, quietly converts ROW_FORMAT to compressed.
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
SET storage_engine=InnoDB;
|
||||
|
||||
--disable_query_log
|
||||
# These values can change during the test
|
||||
LET $innodb_file_format_orig=`select @@innodb_file_format`;
|
||||
LET $innodb_file_format_max_orig=`select @@innodb_file_format_max`;
|
||||
LET $innodb_file_per_table_orig=`select @@innodb_file_per_table`;
|
||||
LET $innodb_strict_mode_orig=`select @@session.innodb_strict_mode`;
|
||||
--enable_query_log
|
||||
|
||||
SET GLOBAL innodb_file_format=`Barracuda`;
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
|
||||
# Innodb strict mode will cause an error on the CREATE or ALTER when;
|
||||
# 1. both ROW_FORMAT=COMPACT and KEY_BLOCK_SIZE=1,
|
||||
# 2. KEY_BLOCK_SIZE is not a valid number (0,1,2,4,8,16).
|
||||
# With innodb_strict_mode = OFF, These errors are corrected
|
||||
# and just a warning is returned.
|
||||
SET SESSION innodb_strict_mode = ON;
|
||||
|
||||
--echo # Test 1) CREATE with ROW_FORMAT & KEY_BLOCK_SIZE, ALTER with neither
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE bug56632 ( i INT ) ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
|
||||
--echo # Test 2) CREATE with ROW_FORMAT, ALTER with KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
ALTER TABLE bug56632 KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 3) CREATE with KEY_BLOCK_SIZE, ALTER with ROW_FORMAT
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
--disable_result_log
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT;
|
||||
--enable_result_log
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 4) CREATE with neither, ALTER with ROW_FORMAT & KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT );
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
--disable_result_log
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
--enable_result_log
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 5) CREATE with KEY_BLOCK_SIZE=3 (invalid).
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
--error ER_CANT_CREATE_TABLE
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=3;
|
||||
SHOW WARNINGS;
|
||||
|
||||
SET SESSION innodb_strict_mode = OFF;
|
||||
|
||||
--echo # Test 6) CREATE with ROW_FORMAT & KEY_BLOCK_SIZE, ALTER with neither
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
ALTER TABLE bug56632 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 7) CREATE with ROW_FORMAT, ALTER with KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
ALTER TABLE bug56632 KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 8) CREATE with KEY_BLOCK_SIZE, ALTER with ROW_FORMAT
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 9) CREATE with neither, ALTER with ROW_FORMAT & KEY_BLOCK_SIZE
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT );
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 10) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with neither.
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=3;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
ALTER TABLE bug56632 ADD COLUMN f1 INT;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 11) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with ROW_FORMAT=COMPACT.
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=3;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
ALTER TABLE bug56632 ROW_FORMAT=COMPACT;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Test 12) CREATE with KEY_BLOCK_SIZE=3 (invalid), ALTER with KEY_BLOCK_SIZE=1.
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
CREATE TABLE bug56632 ( i INT ) KEY_BLOCK_SIZE=3;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
ALTER TABLE bug56632 KEY_BLOCK_SIZE=1;
|
||||
SHOW WARNINGS;
|
||||
SHOW CREATE TABLE bug56632;
|
||||
SELECT TABLE_NAME,ROW_FORMAT,CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_NAME = 'bug56632';
|
||||
|
||||
--echo # Cleanup
|
||||
DROP TABLE IF EXISTS bug56632;
|
||||
|
||||
--disable_query_log
|
||||
EVAL SET GLOBAL innodb_file_per_table=$innodb_file_per_table_orig;
|
||||
EVAL SET GLOBAL innodb_file_format_max=$innodb_file_format_max_orig;
|
||||
EVAL SET GLOBAL innodb_file_format=$innodb_file_format_orig;
|
||||
EVAL SET SESSION innodb_strict_mode=$innodb_strict_mode_orig;
|
||||
--enable_query_log
|
||||
|
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
|
||||
INSERT INTO t1 VALUES ('abc\0\0');
|
||||
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);
|
||||
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 #
|
||||
|
|
|
@ -62,5 +62,103 @@ call p1();
|
|||
drop procedure p1;
|
||||
drop table t1;
|
||||
|
||||
|
||||
# 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;
|
||||
|
||||
#
|
||||
# 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 @@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
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog.warn.empty;
|
||||
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
|
||||
|
||||
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);
|
||||
|
||||
|
@ -226,7 +231,7 @@ CREATE USER test_drop@localhost;
|
|||
GRANT PROXY ON future_user TO test_drop@localhost;
|
||||
SHOW GRANTS FOR 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;
|
||||
|
||||
|
|
|
@ -72,7 +72,7 @@ CREATE TABLE time_zone_leap_second ( Transition_time bigint signed NOT NULL,
|
|||
-- disable_query_log
|
||||
|
||||
# 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
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@ INSERT INTO servers VALUES ('test','localhost','test','root','', 0,'','mysql','r
|
|||
-- disable_query_log
|
||||
|
||||
# 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
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ CREATE TABLE IF NOT EXISTS ndb_binlog_index (Position BIGINT UNSIGNED NOT NULL,
|
|||
-- disable_query_log
|
||||
|
||||
# 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
|
||||
|
||||
|
|
|
@ -617,4 +617,17 @@ SELECT LENGTH(c) FROM 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
|
||||
|
|
|
@ -66,7 +66,9 @@
|
|||
const char *args_separator= "----args-separator----";
|
||||
const char *my_defaults_file=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) */
|
||||
|
||||
|
@ -139,6 +141,36 @@ static const char **init_default_directories(MEM_ROOT *alloc);
|
|||
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.
|
||||
|
||||
|
@ -167,6 +199,7 @@ static char *remove_end_comment(char *ptr);
|
|||
0 ok
|
||||
1 given cinf_file doesn't exist
|
||||
2 out of memory
|
||||
3 Can't get current working directory
|
||||
|
||||
The global variable 'my_defaults_group_suffix' is updated with value for
|
||||
--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)
|
||||
my_defaults_group_suffix= getenv(STRINGIFY_ARG(DEFAULT_GROUP_SUFFIX_ENV));
|
||||
|
||||
if (forced_extra_defaults)
|
||||
my_defaults_extra_file= (char *) forced_extra_defaults;
|
||||
|
||||
if (forced_default_file)
|
||||
my_defaults_file= forced_default_file;
|
||||
if (forced_extra_defaults && !defaults_already_read)
|
||||
{
|
||||
int error= fn_expand(forced_extra_defaults, &my_defaults_extra_file);
|
||||
if (error)
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
if (forced_default_file && !defaults_already_read)
|
||||
{
|
||||
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
|
||||
|
@ -236,15 +279,15 @@ int my_search_option_files(const char *conf_file, int *argc, char ***argv,
|
|||
group->type_names[group->count]= 0;
|
||||
}
|
||||
|
||||
if (forced_default_file)
|
||||
if (my_defaults_file)
|
||||
{
|
||||
if ((error= search_default_file_with_ext(func, func_ctx, "", "",
|
||||
forced_default_file, 0)) < 0)
|
||||
my_defaults_file, 0)) < 0)
|
||||
goto err;
|
||||
if (error > 0)
|
||||
{
|
||||
fprintf(stderr, "Could not open required defaults file: %s\n",
|
||||
forced_default_file);
|
||||
my_defaults_file);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -315,6 +315,9 @@ end:
|
|||
/* Produce a core for the thread */
|
||||
void my_write_core(int sig)
|
||||
{
|
||||
#ifdef HAVE_gcov
|
||||
extern void __gcov_flush(void);
|
||||
#endif
|
||||
signal(sig, SIG_DFL);
|
||||
#ifdef HAVE_gcov
|
||||
/*
|
||||
|
@ -322,7 +325,6 @@ void my_write_core(int sig)
|
|||
information from this process, causing gcov output to be incomplete.
|
||||
So we force the writing of coverage information here before terminating.
|
||||
*/
|
||||
extern void __gcov_flush(void);
|
||||
__gcov_flush();
|
||||
#endif
|
||||
pthread_kill(pthread_self(), sig);
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
|
||||
/**
|
||||
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.
|
||||
*/
|
||||
#define ORDINARY_QUESTION "\2"
|
||||
|
@ -176,7 +176,7 @@ mysql_declare_plugin_end;
|
|||
This plugin performs a dialog with the user, asking questions and
|
||||
reading answers. Depending on the client it may be desirable to do it
|
||||
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
|
||||
"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
|
||||
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
|
||||
authentication plugin on the client if the first question
|
||||
asks for a password - which will be sent in clear text, by the way)
|
||||
|
|
|
@ -17,22 +17,12 @@
|
|||
/**
|
||||
@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
|
||||
asks the user the question, as provided by the server and reports
|
||||
the answer back to the server. No encryption is involved,
|
||||
the answers are sent in clear text.
|
||||
|
||||
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.
|
||||
This is a set of test plugins used to test the external authentication
|
||||
implementation.
|
||||
See the above test file for more details.
|
||||
This test plugin is based on the dialog plugin example.
|
||||
*/
|
||||
|
||||
#include <my_global.h>
|
||||
|
@ -55,7 +45,7 @@
|
|||
/********************* 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)
|
||||
{
|
||||
|
@ -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
|
||||
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
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -478,7 +478,7 @@ PREPARE stmt FROM @str;
|
|||
EXECUTE 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
|
||||
set @had_proxy_priv_table= @@warning_count != 0;
|
||||
-- Remember for later if proxies_priv table already existed
|
||||
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;
|
||||
DROP TABLE tmp_user;
|
||||
|
||||
CREATE TEMPORARY TABLE tmp_proxy_priv LIKE proxy_priv;
|
||||
INSERT INTO tmp_proxy_priv VALUES ('localhost', 'root', '', '', TRUE);
|
||||
REPLACE INTO tmp_proxy_priv SELECT @current_hostname, 'root', '', '', TRUE FROM DUAL WHERE LOWER (@current_hostname) != 'localhost';
|
||||
INSERT INTO proxy_priv SELECT * FROM tmp_proxy_priv WHERE @had_proxy_priv_table=0;
|
||||
DROP TABLE tmp_proxy_priv;
|
||||
CREATE TEMPORARY TABLE tmp_proxies_priv LIKE proxies_priv;
|
||||
INSERT INTO tmp_proxies_priv VALUES ('localhost', 'root', '', '', TRUE, '', now());
|
||||
REPLACE INTO tmp_proxies_priv SELECT @current_hostname, 'root', '', '', TRUE, '', now() FROM DUAL WHERE LOWER (@current_hostname) != 'localhost';
|
||||
INSERT INTO proxies_priv SELECT * FROM tmp_proxies_priv WHERE @had_proxies_priv_table=0;
|
||||
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 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
|
||||
# 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,
|
||||
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;
|
||||
ptr= (uchar*) from;
|
||||
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);
|
||||
}
|
||||
ptr=save; // Restore org row pointer
|
||||
DBUG_DUMP("packed", to, packlength + length);
|
||||
DBUG_RETURN(to+packlength+length);
|
||||
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
|
||||
returns 1 if the fields are equally defined
|
||||
|
|
106
sql/field.h
106
sql/field.h
|
@ -554,6 +554,48 @@ private:
|
|||
{ return 0; }
|
||||
|
||||
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
|
||||
*/
|
||||
|
@ -598,6 +640,32 @@ protected:
|
|||
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)
|
||||
{
|
||||
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,
|
||||
uint max_length, bool low_byte_first)
|
||||
{
|
||||
int16 val;
|
||||
#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);
|
||||
return pack_int16(to, from, low_byte_first);
|
||||
}
|
||||
|
||||
virtual const uchar *unpack(uchar* to, const uchar *from,
|
||||
uint param_data, bool low_byte_first)
|
||||
{
|
||||
int16 val;
|
||||
#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);
|
||||
return unpack_int16(to, from, low_byte_first);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1895,6 +1935,12 @@ public:
|
|||
bool has_charset(void) const { return TRUE; }
|
||||
/* enum and set are sorted as integers */
|
||||
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:
|
||||
int do_save_field_metadata(uchar *first_byte);
|
||||
uint is_equal(Create_field *new_field);
|
||||
|
|
|
@ -935,22 +935,16 @@ private:
|
|||
/* lock already taken */
|
||||
if (auto_increment_safe_stmt_log_lock)
|
||||
return;
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
DBUG_ASSERT(table_share->ha_part_data && !auto_increment_lock);
|
||||
#endif
|
||||
if(table_share->tmp_table == NO_TMP_TABLE)
|
||||
{
|
||||
auto_increment_lock= TRUE;
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
mysql_mutex_lock(&table_share->ha_part_data->LOCK_auto_inc);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
virtual void unlock_auto_increment()
|
||||
{
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
DBUG_ASSERT(table_share->ha_part_data);
|
||||
#endif
|
||||
/*
|
||||
If auto_increment_safe_stmt_log_lock is true, we have to keep the lock.
|
||||
It will be set to false and thus unlocked at the end of the statement by
|
||||
|
@ -958,25 +952,19 @@ private:
|
|||
*/
|
||||
if(auto_increment_lock && !auto_increment_safe_stmt_log_lock)
|
||||
{
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
mysql_mutex_unlock(&table_share->ha_part_data->LOCK_auto_inc);
|
||||
#endif
|
||||
auto_increment_lock= FALSE;
|
||||
}
|
||||
}
|
||||
virtual void set_auto_increment_if_higher(Field *field)
|
||||
{
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
ulonglong nr= (((Field_num*) field)->unsigned_flag ||
|
||||
field->val_int() > 0) ? field->val_int() : 0;
|
||||
#endif
|
||||
lock_auto_increment();
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
DBUG_ASSERT(table_share->ha_part_data->auto_inc_initialized == TRUE);
|
||||
/* must check when the mutex is taken */
|
||||
if (nr >= table_share->ha_part_data->next_auto_inc_val)
|
||||
table_share->ha_part_data->next_auto_inc_val= nr + 1;
|
||||
#endif
|
||||
unlock_auto_increment();
|
||||
}
|
||||
|
||||
|
|
11
sql/item.cc
11
sql/item.cc
|
@ -1853,11 +1853,12 @@ bool agg_item_set_converter(DTCollation &coll, const char *fname,
|
|||
*arg= conv;
|
||||
else
|
||||
thd->change_item_tree(arg, conv);
|
||||
/*
|
||||
We do not check conv->fixed, because Item_func_conv_charset which can
|
||||
be return by safe_charset_converter can't be fixed at creation
|
||||
*/
|
||||
conv->fix_fields(thd, arg);
|
||||
|
||||
if (conv->fix_fields(thd, arg))
|
||||
{
|
||||
res= TRUE;
|
||||
break; // we cannot return here, we need to restore "arena".
|
||||
}
|
||||
}
|
||||
if (arena)
|
||||
thd->restore_active_arena(arena, &backup);
|
||||
|
|
|
@ -361,6 +361,7 @@ public:
|
|||
const char *func_name() const { return "time_to_sec"; }
|
||||
void fix_length_and_dec()
|
||||
{
|
||||
maybe_null= TRUE;
|
||||
decimals=0;
|
||||
max_length=10*MY_CHARSET_BIN_MB_MAXLEN;
|
||||
}
|
||||
|
|
|
@ -3778,12 +3778,12 @@ static int init_server_components()
|
|||
unireg_abort(1);
|
||||
}
|
||||
|
||||
/* initialize delegates for extension observers */
|
||||
/*
|
||||
initialize delegates for extension observers, errors have already
|
||||
been reported in the function
|
||||
*/
|
||||
if (delegates_init())
|
||||
{
|
||||
sql_print_error("Initialize extension delegates failed");
|
||||
unireg_abort(1);
|
||||
}
|
||||
|
||||
/* need to configure logging before initializing storage engines */
|
||||
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 "
|
||||
"will also set transaction isolation level 'serializable'.", 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.",
|
||||
&my_bind_addr_str, &my_bind_addr_str, 0, GET_STR,
|
||||
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
|
@ -7114,6 +7120,13 @@ mysqld_get_one_option(int optid,
|
|||
if (argument == NULL) /* no argument */
|
||||
log_error_file_ptr= const_cast<char*>("");
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -391,7 +391,8 @@ enum options_mysqld
|
|||
OPT_UPDATE_LOG,
|
||||
OPT_WANT_CORE,
|
||||
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;
|
||||
|
||||
if (!transaction_delegate->is_inited())
|
||||
{
|
||||
sql_print_error("Initialization of transaction delegates failed. "
|
||||
"Please report a bug.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
binlog_storage_delegate= new (place_storage_mem) Binlog_storage_delegate;
|
||||
|
||||
if (!binlog_storage_delegate->is_inited())
|
||||
{
|
||||
sql_print_error("Initialization binlog storage delegates failed. "
|
||||
"Please report a bug.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef HAVE_REPLICATION
|
||||
void *place_transmit_mem= transmit_mem.data;
|
||||
|
@ -119,16 +127,29 @@ int delegates_init()
|
|||
binlog_transmit_delegate= new (place_transmit_mem) Binlog_transmit_delegate;
|
||||
|
||||
if (!binlog_transmit_delegate->is_inited())
|
||||
{
|
||||
sql_print_error("Initialization of binlog transmit delegates failed. "
|
||||
"Please report a bug.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
binlog_relay_io_delegate= new (place_relay_io_mem) Binlog_relay_IO_delegate;
|
||||
|
||||
if (!binlog_relay_io_delegate->is_inited())
|
||||
{
|
||||
sql_print_error("Initialization binlog relay IO delegates failed. "
|
||||
"Please report a bug.");
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
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 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -78,8 +78,6 @@ pack_row(TABLE *table, MY_BITMAP const* cols,
|
|||
unsigned int null_mask= 1U;
|
||||
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))
|
||||
{
|
||||
my_ptrdiff_t offset;
|
||||
|
@ -110,6 +108,7 @@ pack_row(TABLE *table, MY_BITMAP const* cols,
|
|||
field->field_name, field->real_type(),
|
||||
(ulong) old_pack_ptr, (ulong) pack_ptr,
|
||||
(int) (pack_ptr - old_pack_ptr)));
|
||||
DBUG_DUMP("packed_data", old_pack_ptr, pack_ptr - old_pack_ptr);
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
if (!((null_bits & null_mask) && tabledef->maybe_null(i)))
|
||||
pack_ptr+= tabledef->calc_field_size(i, (uchar *) pack_ptr);
|
||||
if (!((null_bits & null_mask) && tabledef->maybe_null(i))) {
|
||||
uint32 len= tabledef->calc_field_size(i, (uchar *) pack_ptr);
|
||||
DBUG_DUMP("field_data", pack_ptr, len);
|
||||
pack_ptr+= len;
|
||||
}
|
||||
null_mask <<= 1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -268,11 +268,13 @@ class ACL_PROXY_USER :public ACL_ACCESS
|
|||
bool with_grant;
|
||||
|
||||
typedef enum {
|
||||
MYSQL_PROXY_PRIV_HOST,
|
||||
MYSQL_PROXY_PRIV_USER,
|
||||
MYSQL_PROXY_PRIV_PROXIED_HOST,
|
||||
MYSQL_PROXY_PRIV_PROXIED_USER,
|
||||
MYSQL_PROXY_PRIV_WITH_GRANT } old_acl_proxy_users;
|
||||
MYSQL_PROXIES_PRIV_HOST,
|
||||
MYSQL_PROXIES_PRIV_USER,
|
||||
MYSQL_PROXIES_PRIV_PROXIED_HOST,
|
||||
MYSQL_PROXIES_PRIV_PROXIED_USER,
|
||||
MYSQL_PROXIES_PRIV_WITH_GRANT,
|
||||
MYSQL_PROXIES_PRIV_GRANTOR,
|
||||
MYSQL_PROXIES_PRIV_TIMESTAMP } old_acl_proxy_users;
|
||||
public:
|
||||
ACL_PROXY_USER () {};
|
||||
|
||||
|
@ -308,11 +310,11 @@ public:
|
|||
|
||||
void init(TABLE *table, MEM_ROOT *mem)
|
||||
{
|
||||
init (get_field(mem, table->field[MYSQL_PROXY_PRIV_HOST]),
|
||||
get_field(mem, table->field[MYSQL_PROXY_PRIV_USER]),
|
||||
get_field(mem, table->field[MYSQL_PROXY_PRIV_PROXIED_HOST]),
|
||||
get_field(mem, table->field[MYSQL_PROXY_PRIV_PROXIED_USER]),
|
||||
table->field[MYSQL_PROXY_PRIV_WITH_GRANT]->val_int() != 0);
|
||||
init (get_field(mem, table->field[MYSQL_PROXIES_PRIV_HOST]),
|
||||
get_field(mem, table->field[MYSQL_PROXIES_PRIV_USER]),
|
||||
get_field(mem, table->field[MYSQL_PROXIES_PRIV_PROXIED_HOST]),
|
||||
get_field(mem, table->field[MYSQL_PROXIES_PRIV_PROXIED_USER]),
|
||||
table->field[MYSQL_PROXIES_PRIV_WITH_GRANT]->val_int() != 0);
|
||||
}
|
||||
|
||||
bool get_with_grant() { return with_grant; }
|
||||
|
@ -337,7 +339,7 @@ public:
|
|||
(hostname_requires_resolving(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.",
|
||||
proxied_user ? proxied_user : "",
|
||||
proxied_host.hostname ? proxied_host.hostname : "",
|
||||
|
@ -452,19 +454,19 @@ public:
|
|||
user->str ? user->str : "<NULL>",
|
||||
proxied_host->str ? proxied_host->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,
|
||||
system_charset_info))
|
||||
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,
|
||||
system_charset_info))
|
||||
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,
|
||||
system_charset_info))
|
||||
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,
|
||||
system_charset_info))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
@ -472,20 +474,25 @@ public:
|
|||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
|
||||
static int store_data_record(TABLE *table,
|
||||
const LEX_STRING *host,
|
||||
static int store_data_record(TABLE *table,
|
||||
const LEX_STRING *host,
|
||||
const LEX_STRING *user,
|
||||
const LEX_STRING *proxied_host,
|
||||
const LEX_STRING *proxied_host,
|
||||
const LEX_STRING *proxied_user,
|
||||
bool with_grant)
|
||||
bool with_grant,
|
||||
const char *grantor)
|
||||
{
|
||||
DBUG_ENTER ("ACL_PROXY_USER::store_pk");
|
||||
if (store_pk (table, host, user, proxied_host, proxied_user))
|
||||
DBUG_ENTER("ACL_PROXY_USER::store_pk");
|
||||
if (store_pk(table, host, user, proxied_host, proxied_user))
|
||||
DBUG_RETURN(TRUE);
|
||||
DBUG_PRINT ("info", ("with_grant=%s", with_grant ? "TRUE" : "FALSE"));
|
||||
if (table->field[MYSQL_PROXY_PRIV_WITH_GRANT]->store(with_grant ? 1 : 0,
|
||||
DBUG_PRINT("info", ("with_grant=%s", with_grant ? "TRUE" : "FALSE"));
|
||||
if (table->field[MYSQL_PROXIES_PRIV_WITH_GRANT]->store(with_grant ? 1 : 0,
|
||||
TRUE))
|
||||
DBUG_RETURN(TRUE);
|
||||
if (table->field[MYSQL_PROXIES_PRIV_GRANTOR]->store(grantor,
|
||||
strlen(grantor),
|
||||
system_charset_info))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
|
@ -1113,8 +1120,8 @@ my_bool acl_reload(THD *thd)
|
|||
tables[2].init_one_table(C_STRING_WITH_LEN("mysql"),
|
||||
C_STRING_WITH_LEN("db"), "db", TL_READ);
|
||||
tables[3].init_one_table(C_STRING_WITH_LEN("mysql"),
|
||||
C_STRING_WITH_LEN("proxy_priv"),
|
||||
"proxy_priv", TL_READ);
|
||||
C_STRING_WITH_LEN("proxies_priv"),
|
||||
"proxies_priv", TL_READ);
|
||||
tables[0].next_local= tables[0].next_global= tables + 1;
|
||||
tables[1].next_local= tables[1].next_global= tables + 2;
|
||||
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
|
||||
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,
|
||||
bool revoke_grant)
|
||||
{
|
||||
|
@ -2616,8 +2623,9 @@ replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user,
|
|||
int error;
|
||||
uchar user_key[MAX_KEY_LENGTH];
|
||||
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)
|
||||
{
|
||||
|
@ -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,
|
||||
table->key_info->key_length);
|
||||
|
||||
get_grantor(thd, grantor);
|
||||
|
||||
table->file->ha_index_init(0, 1);
|
||||
if (table->file->index_read_map(table->record[0], user_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,
|
||||
&proxied_user->host,
|
||||
&proxied_user->user,
|
||||
with_grant_arg);
|
||||
with_grant_arg,
|
||||
grantor);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2712,7 +2723,7 @@ table_error:
|
|||
table->file->print_error(error, MYF(0)); /* purecov: inspected */
|
||||
|
||||
abort:
|
||||
DBUG_PRINT("info", ("aborting replace_proxy_priv_table"));
|
||||
DBUG_PRINT("info", ("aborting replace_proxies_priv_table"));
|
||||
table->file->ha_index_end();
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
@ -3962,14 +3973,14 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &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"),
|
||||
C_STRING_WITH_LEN("user"), "user", TL_WRITE);
|
||||
if (is_proxy)
|
||||
|
||||
tables[1].init_one_table(C_STRING_WITH_LEN("mysql"),
|
||||
C_STRING_WITH_LEN("proxy_priv"),
|
||||
"proxy_priv",
|
||||
C_STRING_WITH_LEN("proxies_priv"),
|
||||
"proxies_priv",
|
||||
TL_WRITE);
|
||||
else
|
||||
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)
|
||||
{
|
||||
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,
|
||||
revoke_grant))
|
||||
result= -1;
|
||||
|
@ -5690,8 +5701,8 @@ int open_grant_tables(THD *thd, TABLE_LIST *tables)
|
|||
C_STRING_WITH_LEN("procs_priv"),
|
||||
"procs_priv", TL_WRITE);
|
||||
(tables+5)->init_one_table(C_STRING_WITH_LEN("mysql"),
|
||||
C_STRING_WITH_LEN("proxy_priv"),
|
||||
"proxy_priv", TL_WRITE);
|
||||
C_STRING_WITH_LEN("proxies_priv"),
|
||||
"proxies_priv", TL_WRITE);
|
||||
tables->next_local= tables->next_global= tables + 1;
|
||||
(tables+1)->next_local= (tables+1)->next_global= tables + 2;
|
||||
(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)
|
||||
{
|
||||
/* 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
|
||||
{
|
||||
/* Handle proxy_priv array. */
|
||||
/* Handle proxies_priv array. */
|
||||
if ((handle_grant_struct(5, drop, user_from, user_to) && !result) ||
|
||||
found)
|
||||
result= 1; /* At least one record/element found. */
|
||||
|
|
|
@ -1997,7 +1997,7 @@ static int add_part_field_list(File fptr, List<char> field_list)
|
|||
String field_string("", 0, system_charset_info);
|
||||
THD *thd= current_thd;
|
||||
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,
|
||||
strlen(field_str));
|
||||
thd->variables.option_bits= save_options;
|
||||
|
@ -2016,8 +2016,7 @@ static int add_name_string(File fptr, const char *name)
|
|||
String name_string("", 0, system_charset_info);
|
||||
THD *thd= current_thd;
|
||||
ulonglong save_options= thd->variables.option_bits;
|
||||
|
||||
thd->variables.option_bits= 0;
|
||||
thd->variables.option_bits&= ~OPTION_QUOTE_SHOW_CREATE;
|
||||
append_identifier(thd, &name_string, name,
|
||||
strlen(name));
|
||||
thd->variables.option_bits= save_options;
|
||||
|
|
|
@ -18,7 +18,9 @@
|
|||
#include "sql_lex.h" // Sql_statement
|
||||
#include "sql_admin.h" // Analyze/Check/.._table_statement
|
||||
#include "sql_partition_admin.h" // Alter_table_*_partition
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
#include "ha_partition.h" // ha_partition
|
||||
#endif
|
||||
#include "sql_base.h" // open_and_lock_tables
|
||||
|
||||
#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_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);
|
||||
if (argv)
|
||||
free_defaults(argv);
|
||||
|
|
|
@ -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,
|
||||
ren_table->table_name);
|
||||
DBUG_RETURN(1);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
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,
|
||||
ren_table->table_name);
|
||||
DBUG_RETURN(1);
|
||||
goto err;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -139,7 +139,7 @@ bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list, bool silent)
|
|||
else
|
||||
my_error(ER_CANT_RENAME_LOG_TABLE, MYF(0), 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;
|
||||
}
|
||||
else if (type == MYSQL_TYPE_BLOB)
|
||||
key_length+= MAX_BLOB_WIDTH; // Can't be used as a key
|
||||
else
|
||||
{
|
||||
/*
|
||||
|
|
|
@ -480,12 +480,6 @@ find_files(THD *thd, List<LEX_STRING> *files, const char *db,
|
|||
else if (wild_compare(uname, wild, 0))
|
||||
continue;
|
||||
}
|
||||
if (!(file_name=
|
||||
thd->make_lex_string(file_name, uname, file_name_len, TRUE)))
|
||||
{
|
||||
my_dirend(dirp);
|
||||
DBUG_RETURN(FIND_FILES_OOM);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -12497,6 +12497,7 @@ keyword_sp:
|
|||
| FILE_SYM {}
|
||||
| FIRST_SYM {}
|
||||
| FIXED_SYM {}
|
||||
| GENERAL {}
|
||||
| GEOMETRY_SYM {}
|
||||
| GEOMETRYCOLLECTION {}
|
||||
| GET_FORMAT {}
|
||||
|
@ -12506,6 +12507,7 @@ keyword_sp:
|
|||
| HOSTS_SYM {}
|
||||
| HOUR_SYM {}
|
||||
| IDENTIFIED_SYM {}
|
||||
| IGNORE_SERVER_IDS_SYM {}
|
||||
| INVOKER_SYM {}
|
||||
| IMPORT {}
|
||||
| INDEXES {}
|
||||
|
@ -12528,6 +12530,7 @@ keyword_sp:
|
|||
| LOGS_SYM {}
|
||||
| MAX_ROWS {}
|
||||
| MASTER_SYM {}
|
||||
| MASTER_HEARTBEAT_PERIOD_SYM {}
|
||||
| MASTER_HOST_SYM {}
|
||||
| MASTER_PORT_SYM {}
|
||||
| MASTER_LOG_FILE_SYM {}
|
||||
|
@ -12633,6 +12636,7 @@ keyword_sp:
|
|||
| SIMPLE_SYM {}
|
||||
| SHARE_SYM {}
|
||||
| SHUTDOWN {}
|
||||
| SLOW {}
|
||||
| SNAPSHOT_SYM {}
|
||||
| SOUNDS_SYM {}
|
||||
| SOURCE_SYM {}
|
||||
|
|
|
@ -1071,7 +1071,7 @@ btr_cur_ins_lock_and_undo(
|
|||
not zero, the parameters index and thr
|
||||
should be specified */
|
||||
btr_cur_t* cursor, /*!< in: cursor on page after which to insert */
|
||||
const dtuple_t* entry, /*!< in: entry to insert */
|
||||
dtuple_t* entry, /*!< in/out: entry to insert */
|
||||
que_thr_t* thr, /*!< in: query thread or NULL */
|
||||
mtr_t* mtr, /*!< in/out: mini-transaction */
|
||||
ibool* inherit)/*!< out: TRUE if the inserted new record maybe
|
||||
|
@ -4069,7 +4069,7 @@ Stores the fields in big_rec_vec to the tablespace and puts pointers to
|
|||
them in rec. The extern flags in rec will have to be set beforehand.
|
||||
The fields are stored on pages allocated from leaf node
|
||||
file segment of the index tree.
|
||||
@return DB_SUCCESS or error */
|
||||
@return DB_SUCCESS or DB_OUT_OF_FILE_SPACE */
|
||||
UNIV_INTERN
|
||||
ulint
|
||||
btr_store_big_rec_extern_fields(
|
||||
|
|
|
@ -828,7 +828,7 @@ dict_truncate_index_tree(
|
|||
appropriate field in the SYS_INDEXES record: this mini-transaction
|
||||
marks the B-tree totally truncated */
|
||||
|
||||
btr_page_get(space, zip_size, root_page_no, RW_X_LATCH, mtr);
|
||||
btr_block_get(space, zip_size, root_page_no, RW_X_LATCH, mtr);
|
||||
|
||||
btr_free_root(space, zip_size, root_page_no, mtr);
|
||||
create:
|
||||
|
|
|
@ -339,14 +339,15 @@ fil_get_space_id_for_table(
|
|||
/*******************************************************************//**
|
||||
Frees a space object from the tablespace memory cache. Closes the files in
|
||||
the chain but does not delete them. There must not be any pending i/o's or
|
||||
flushes on the files. */
|
||||
flushes on the files.
|
||||
@return TRUE on success */
|
||||
static
|
||||
ibool
|
||||
fil_space_free(
|
||||
/*===========*/
|
||||
/* out: TRUE if success */
|
||||
ulint id, /* in: space id */
|
||||
ibool own_mutex);/* in: TRUE if own system->mutex */
|
||||
ulint id, /* in: space id */
|
||||
ibool x_latched); /* in: TRUE if caller has space->latch
|
||||
in X mode */
|
||||
/********************************************************************//**
|
||||
Reads data from a space to a buffer. Remember that the possible incomplete
|
||||
blocks at the end of file are ignored: they are not taken into account when
|
||||
|
@ -1140,6 +1141,7 @@ try_again:
|
|||
space = fil_space_get_by_name(name);
|
||||
|
||||
if (UNIV_LIKELY_NULL(space)) {
|
||||
ibool success;
|
||||
ulint namesake_id;
|
||||
|
||||
ut_print_timestamp(stderr);
|
||||
|
@ -1178,9 +1180,10 @@ try_again:
|
|||
|
||||
namesake_id = space->id;
|
||||
|
||||
mutex_exit(&fil_system->mutex);
|
||||
success = fil_space_free(namesake_id, FALSE);
|
||||
ut_a(success);
|
||||
|
||||
fil_space_free(namesake_id, FALSE);
|
||||
mutex_exit(&fil_system->mutex);
|
||||
|
||||
goto try_again;
|
||||
}
|
||||
|
@ -1331,15 +1334,14 @@ fil_space_free(
|
|||
/*===========*/
|
||||
/* out: TRUE if success */
|
||||
ulint id, /* in: space id */
|
||||
ibool own_mutex) /* in: TRUE if own system->mutex */
|
||||
ibool x_latched) /* in: TRUE if caller has space->latch
|
||||
in X mode */
|
||||
{
|
||||
fil_space_t* space;
|
||||
fil_space_t* namespace;
|
||||
fil_node_t* fil_node;
|
||||
|
||||
if (!own_mutex) {
|
||||
mutex_enter(&fil_system->mutex);
|
||||
}
|
||||
ut_ad(mutex_own(&fil_system->mutex));
|
||||
|
||||
space = fil_space_get_by_id(id);
|
||||
|
||||
|
@ -1350,8 +1352,6 @@ fil_space_free(
|
|||
" from the cache but\n"
|
||||
"InnoDB: it is not there.\n", (ulong) id);
|
||||
|
||||
mutex_exit(&fil_system->mutex);
|
||||
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
|
@ -1386,8 +1386,8 @@ fil_space_free(
|
|||
|
||||
ut_a(0 == UT_LIST_GET_LEN(space->chain));
|
||||
|
||||
if (!own_mutex) {
|
||||
mutex_exit(&fil_system->mutex);
|
||||
if (x_latched) {
|
||||
rw_lock_x_unlock(&space->latch);
|
||||
}
|
||||
|
||||
rw_lock_free(&(space->latch));
|
||||
|
@ -1633,25 +1633,27 @@ fil_close_all_files(void)
|
|||
/*=====================*/
|
||||
{
|
||||
fil_space_t* space;
|
||||
fil_node_t* node;
|
||||
|
||||
mutex_enter(&fil_system->mutex);
|
||||
|
||||
space = UT_LIST_GET_FIRST(fil_system->space_list);
|
||||
|
||||
while (space != NULL) {
|
||||
fil_node_t* node;
|
||||
fil_space_t* prev_space = space;
|
||||
|
||||
node = UT_LIST_GET_FIRST(space->chain);
|
||||
for (node = UT_LIST_GET_FIRST(space->chain);
|
||||
node != NULL;
|
||||
node = UT_LIST_GET_NEXT(chain, node)) {
|
||||
|
||||
while (node != NULL) {
|
||||
if (node->open) {
|
||||
fil_node_close_file(node, fil_system);
|
||||
}
|
||||
node = UT_LIST_GET_NEXT(chain, node);
|
||||
}
|
||||
|
||||
space = UT_LIST_GET_NEXT(space_list, space);
|
||||
fil_space_free(prev_space->id, TRUE);
|
||||
|
||||
fil_space_free(prev_space->id, FALSE);
|
||||
}
|
||||
|
||||
mutex_exit(&fil_system->mutex);
|
||||
|
@ -2271,6 +2273,19 @@ try_again:
|
|||
path = mem_strdup(space->name);
|
||||
|
||||
mutex_exit(&fil_system->mutex);
|
||||
|
||||
/* Important: We rely on the data dictionary mutex to ensure
|
||||
that a race is not possible here. It should serialize the tablespace
|
||||
drop/free. We acquire an X latch only to avoid a race condition
|
||||
when accessing the tablespace instance via:
|
||||
|
||||
fsp_get_available_space_in_free_extents().
|
||||
|
||||
There our main motivation is to reduce the contention on the
|
||||
dictionary mutex. */
|
||||
|
||||
rw_lock_x_lock(&space->latch);
|
||||
|
||||
#ifndef UNIV_HOTBACKUP
|
||||
/* Invalidate in the buffer pool all pages belonging to the
|
||||
tablespace. Since we have set space->is_being_deleted = TRUE, readahead
|
||||
|
@ -2283,7 +2298,11 @@ try_again:
|
|||
#endif
|
||||
/* printf("Deleting tablespace %s id %lu\n", space->name, id); */
|
||||
|
||||
success = fil_space_free(id, FALSE);
|
||||
mutex_enter(&fil_system->mutex);
|
||||
|
||||
success = fil_space_free(id, TRUE);
|
||||
|
||||
mutex_exit(&fil_system->mutex);
|
||||
|
||||
if (success) {
|
||||
success = os_file_delete(path);
|
||||
|
@ -2291,6 +2310,8 @@ try_again:
|
|||
if (!success) {
|
||||
success = os_file_delete_if_exists(path);
|
||||
}
|
||||
} else {
|
||||
rw_lock_x_unlock(&space->latch);
|
||||
}
|
||||
|
||||
if (success) {
|
||||
|
@ -2318,6 +2339,31 @@ try_again:
|
|||
return(FALSE);
|
||||
}
|
||||
|
||||
/*******************************************************************//**
|
||||
Returns TRUE if a single-table tablespace is being deleted.
|
||||
@return TRUE if being deleted */
|
||||
UNIV_INTERN
|
||||
ibool
|
||||
fil_tablespace_is_being_deleted(
|
||||
/*============================*/
|
||||
ulint id) /*!< in: space id */
|
||||
{
|
||||
fil_space_t* space;
|
||||
ibool is_being_deleted;
|
||||
|
||||
mutex_enter(&fil_system->mutex);
|
||||
|
||||
space = fil_space_get_by_id(id);
|
||||
|
||||
ut_a(space != NULL);
|
||||
|
||||
is_being_deleted = space->is_being_deleted;
|
||||
|
||||
mutex_exit(&fil_system->mutex);
|
||||
|
||||
return(is_being_deleted);
|
||||
}
|
||||
|
||||
#ifndef UNIV_HOTBACKUP
|
||||
/*******************************************************************//**
|
||||
Discards a single-table tablespace. The tablespace must be cached in the
|
||||
|
@ -4788,7 +4834,7 @@ fil_page_get_type(
|
|||
return(mach_read_from_2(page + FIL_PAGE_TYPE));
|
||||
}
|
||||
|
||||
/********************************************************************
|
||||
/****************************************************************//**
|
||||
Initializes the tablespace memory cache. */
|
||||
UNIV_INTERN
|
||||
void
|
||||
|
|
|
@ -3097,13 +3097,63 @@ fsp_get_available_space_in_free_extents(
|
|||
|
||||
ut_ad(!mutex_own(&kernel_mutex));
|
||||
|
||||
/* The convoluted mutex acquire is to overcome latching order
|
||||
issues: The problem is that the fil_mutex is at a lower level
|
||||
than the tablespace latch and the buffer pool mutex. We have to
|
||||
first prevent any operations on the file system by acquiring the
|
||||
dictionary mutex. Then acquire the tablespace latch to obey the
|
||||
latching order and then release the dictionary mutex. That way we
|
||||
ensure that the tablespace instance can't be freed while we are
|
||||
examining its contents (see fil_space_free()).
|
||||
|
||||
However, there is one further complication, we release the fil_mutex
|
||||
when we need to invalidate the the pages in the buffer pool and we
|
||||
reacquire the fil_mutex when deleting and freeing the tablespace
|
||||
instance in fil0fil.c. Here we need to account for that situation
|
||||
too. */
|
||||
|
||||
mutex_enter(&dict_sys->mutex);
|
||||
|
||||
/* At this stage there is no guarantee that the tablespace even
|
||||
exists in the cache. */
|
||||
|
||||
if (fil_tablespace_deleted_or_being_deleted_in_mem(space, -1)) {
|
||||
|
||||
mutex_exit(&dict_sys->mutex);
|
||||
|
||||
return(ULLINT_UNDEFINED);
|
||||
}
|
||||
|
||||
mtr_start(&mtr);
|
||||
|
||||
latch = fil_space_get_latch(space, &flags);
|
||||
|
||||
/* This should ensure that the tablespace instance can't be freed
|
||||
by another thread. However, the tablespace pages can still be freed
|
||||
from the buffer pool. We need to check for that again. */
|
||||
|
||||
zip_size = dict_table_flags_to_zip_size(flags);
|
||||
|
||||
mtr_x_lock(latch, &mtr);
|
||||
|
||||
mutex_exit(&dict_sys->mutex);
|
||||
|
||||
/* At this point it is possible for the tablespace to be deleted and
|
||||
its pages removed from the buffer pool. We need to check for that
|
||||
situation. However, the tablespace instance can't be deleted because
|
||||
our latching above should ensure that. */
|
||||
|
||||
if (fil_tablespace_is_being_deleted(space)) {
|
||||
|
||||
mtr_commit(&mtr);
|
||||
|
||||
return(ULLINT_UNDEFINED);
|
||||
}
|
||||
|
||||
/* From here on even if the user has dropped the tablespace, the
|
||||
pages _must_ still exist in the buffer pool and the tablespace
|
||||
instance _must_ be in the file system hash table. */
|
||||
|
||||
space_header = fsp_get_space_header(space, zip_size, &mtr);
|
||||
|
||||
size = mtr_read_ulint(space_header + FSP_SIZE, MLOG_4BYTES, &mtr);
|
||||
|
|
|
@ -6493,6 +6493,33 @@ create_clustered_index_when_no_primary(
|
|||
return(error);
|
||||
}
|
||||
|
||||
/*****************************************************************//**
|
||||
Return a display name for the row format
|
||||
@return row format name */
|
||||
|
||||
const char *get_row_format_name(
|
||||
/*============================*/
|
||||
enum row_type row_format) /*!< in: Row Format */
|
||||
{
|
||||
switch (row_format) {
|
||||
case ROW_TYPE_COMPACT:
|
||||
return("COMPACT");
|
||||
case ROW_TYPE_COMPRESSED:
|
||||
return("COMPRESSED");
|
||||
case ROW_TYPE_DYNAMIC:
|
||||
return("DYNAMIC");
|
||||
case ROW_TYPE_REDUNDANT:
|
||||
return("REDUNDANT");
|
||||
case ROW_TYPE_DEFAULT:
|
||||
return("DEFAULT");
|
||||
case ROW_TYPE_FIXED:
|
||||
return("FIXED");
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return("NOT USED");
|
||||
}
|
||||
|
||||
/*****************************************************************//**
|
||||
Validates the create options. We may build on this function
|
||||
in future. For now, it checks two specifiers:
|
||||
|
@ -6508,9 +6535,9 @@ create_options_are_valid(
|
|||
columns and indexes */
|
||||
HA_CREATE_INFO* create_info) /*!< in: create info. */
|
||||
{
|
||||
ibool kbs_specified = FALSE;
|
||||
ibool kbs_specified = FALSE;
|
||||
ibool ret = TRUE;
|
||||
|
||||
enum row_type row_type = form->s->row_type;
|
||||
|
||||
ut_ad(thd != NULL);
|
||||
|
||||
|
@ -6519,13 +6546,28 @@ create_options_are_valid(
|
|||
return(TRUE);
|
||||
}
|
||||
|
||||
/* Check for a valid Innodb ROW_FORMAT specifier. For example,
|
||||
ROW_TYPE_FIXED can be sent to Innodb */
|
||||
switch (row_type) {
|
||||
case ROW_TYPE_COMPACT:
|
||||
case ROW_TYPE_COMPRESSED:
|
||||
case ROW_TYPE_DYNAMIC:
|
||||
case ROW_TYPE_REDUNDANT:
|
||||
case ROW_TYPE_DEFAULT:
|
||||
break;
|
||||
default:
|
||||
push_warning(
|
||||
thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: invalid ROW_FORMAT specifier.");
|
||||
ret = FALSE;
|
||||
}
|
||||
|
||||
ut_ad(form != NULL);
|
||||
ut_ad(create_info != NULL);
|
||||
|
||||
/* First check if KEY_BLOCK_SIZE was specified. */
|
||||
if (create_info->key_block_size
|
||||
|| (create_info->used_fields & HA_CREATE_USED_KEY_BLOCK_SIZE)) {
|
||||
|
||||
/* First check if a non-zero KEY_BLOCK_SIZE was specified. */
|
||||
if (create_info->key_block_size) {
|
||||
kbs_specified = TRUE;
|
||||
switch (create_info->key_block_size) {
|
||||
case 1:
|
||||
|
@ -6536,13 +6578,12 @@ create_options_are_valid(
|
|||
/* Valid value. */
|
||||
break;
|
||||
default:
|
||||
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: invalid"
|
||||
" KEY_BLOCK_SIZE = %lu."
|
||||
" Valid values are"
|
||||
" [1, 2, 4, 8, 16]",
|
||||
create_info->key_block_size);
|
||||
push_warning_printf(
|
||||
thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: invalid KEY_BLOCK_SIZE = %lu."
|
||||
" Valid values are [1, 2, 4, 8, 16]",
|
||||
create_info->key_block_size);
|
||||
ret = FALSE;
|
||||
}
|
||||
}
|
||||
|
@ -6550,109 +6591,67 @@ create_options_are_valid(
|
|||
/* If KEY_BLOCK_SIZE was specified, check for its
|
||||
dependencies. */
|
||||
if (kbs_specified && !srv_file_per_table) {
|
||||
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: KEY_BLOCK_SIZE"
|
||||
" requires innodb_file_per_table.");
|
||||
push_warning(
|
||||
thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: KEY_BLOCK_SIZE requires"
|
||||
" innodb_file_per_table.");
|
||||
ret = FALSE;
|
||||
}
|
||||
|
||||
if (kbs_specified && srv_file_format < DICT_TF_FORMAT_ZIP) {
|
||||
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: KEY_BLOCK_SIZE"
|
||||
" requires innodb_file_format >"
|
||||
" Antelope.");
|
||||
push_warning(
|
||||
thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: KEY_BLOCK_SIZE requires"
|
||||
" innodb_file_format > Antelope.");
|
||||
ret = FALSE;
|
||||
}
|
||||
|
||||
/* Now check for ROW_FORMAT specifier. */
|
||||
if (create_info->used_fields & HA_CREATE_USED_ROW_FORMAT) {
|
||||
switch (form->s->row_type) {
|
||||
const char* row_format_name;
|
||||
case ROW_TYPE_COMPRESSED:
|
||||
case ROW_TYPE_DYNAMIC:
|
||||
row_format_name
|
||||
= form->s->row_type == ROW_TYPE_COMPRESSED
|
||||
? "COMPRESSED"
|
||||
: "DYNAMIC";
|
||||
|
||||
/* These two ROW_FORMATs require srv_file_per_table
|
||||
and srv_file_format > Antelope */
|
||||
if (!srv_file_per_table) {
|
||||
push_warning_printf(
|
||||
thd,
|
||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: ROW_FORMAT=%s"
|
||||
" requires innodb_file_per_table.",
|
||||
row_format_name);
|
||||
ret = FALSE;
|
||||
}
|
||||
|
||||
if (srv_file_format < DICT_TF_FORMAT_ZIP) {
|
||||
push_warning_printf(
|
||||
thd,
|
||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: ROW_FORMAT=%s"
|
||||
" requires innodb_file_format >"
|
||||
" Antelope.",
|
||||
row_format_name);
|
||||
ret = FALSE;
|
||||
}
|
||||
|
||||
/* Cannot specify KEY_BLOCK_SIZE with
|
||||
ROW_FORMAT = DYNAMIC.
|
||||
However, we do allow COMPRESSED to be
|
||||
specified with KEY_BLOCK_SIZE. */
|
||||
if (kbs_specified
|
||||
&& form->s->row_type == ROW_TYPE_DYNAMIC) {
|
||||
push_warning_printf(
|
||||
thd,
|
||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: cannot specify"
|
||||
" ROW_FORMAT = DYNAMIC with"
|
||||
" KEY_BLOCK_SIZE.");
|
||||
ret = FALSE;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case ROW_TYPE_REDUNDANT:
|
||||
case ROW_TYPE_COMPACT:
|
||||
case ROW_TYPE_DEFAULT:
|
||||
/* Default is COMPACT. */
|
||||
row_format_name
|
||||
= form->s->row_type == ROW_TYPE_REDUNDANT
|
||||
? "REDUNDANT"
|
||||
: "COMPACT";
|
||||
|
||||
/* Cannot specify KEY_BLOCK_SIZE with these
|
||||
format specifiers. */
|
||||
if (kbs_specified) {
|
||||
push_warning_printf(
|
||||
thd,
|
||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: cannot specify"
|
||||
" ROW_FORMAT = %s with"
|
||||
" KEY_BLOCK_SIZE.",
|
||||
row_format_name);
|
||||
ret = FALSE;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
push_warning(thd,
|
||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: invalid ROW_FORMAT specifier.");
|
||||
ret = FALSE;
|
||||
|
||||
switch (row_type) {
|
||||
case ROW_TYPE_COMPRESSED:
|
||||
case ROW_TYPE_DYNAMIC:
|
||||
/* These two ROW_FORMATs require srv_file_per_table
|
||||
and srv_file_format > Antelope */
|
||||
if (!srv_file_per_table) {
|
||||
push_warning_printf(
|
||||
thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: ROW_FORMAT=%s requires"
|
||||
" innodb_file_per_table.",
|
||||
get_row_format_name(row_type));
|
||||
ret = FALSE;
|
||||
}
|
||||
|
||||
if (srv_file_format < DICT_TF_FORMAT_ZIP) {
|
||||
push_warning_printf(
|
||||
thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: ROW_FORMAT=%s requires"
|
||||
" innodb_file_format > Antelope.",
|
||||
get_row_format_name(row_type));
|
||||
ret = FALSE;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch (row_type) {
|
||||
case ROW_TYPE_REDUNDANT:
|
||||
case ROW_TYPE_COMPACT:
|
||||
case ROW_TYPE_DYNAMIC:
|
||||
/* KEY_BLOCK_SIZE is only allowed with Compressed or Default */
|
||||
if (kbs_specified) {
|
||||
push_warning_printf(
|
||||
thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: cannot specify ROW_FORMAT = %s"
|
||||
" with KEY_BLOCK_SIZE.",
|
||||
get_row_format_name(row_type));
|
||||
ret = FALSE;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return(ret);
|
||||
|
@ -6778,8 +6777,7 @@ ha_innobase::create(
|
|||
goto cleanup;
|
||||
}
|
||||
|
||||
if (create_info->key_block_size
|
||||
|| (create_info->used_fields & HA_CREATE_USED_KEY_BLOCK_SIZE)) {
|
||||
if (create_info->key_block_size) {
|
||||
/* Determine the page_zip.ssize corresponding to the
|
||||
requested page size (key_block_size) in kilobytes. */
|
||||
|
||||
|
@ -6800,38 +6798,39 @@ ha_innobase::create(
|
|||
}
|
||||
|
||||
if (!srv_file_per_table) {
|
||||
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: KEY_BLOCK_SIZE"
|
||||
" requires innodb_file_per_table.");
|
||||
push_warning(
|
||||
thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: KEY_BLOCK_SIZE requires"
|
||||
" innodb_file_per_table.");
|
||||
flags = 0;
|
||||
}
|
||||
|
||||
if (file_format < DICT_TF_FORMAT_ZIP) {
|
||||
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: KEY_BLOCK_SIZE"
|
||||
" requires innodb_file_format >"
|
||||
" Antelope.");
|
||||
push_warning(
|
||||
thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: KEY_BLOCK_SIZE requires"
|
||||
" innodb_file_format > Antelope.");
|
||||
flags = 0;
|
||||
}
|
||||
|
||||
if (!flags) {
|
||||
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: ignoring"
|
||||
" KEY_BLOCK_SIZE=%lu.",
|
||||
create_info->key_block_size);
|
||||
push_warning_printf(
|
||||
thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: ignoring"
|
||||
" KEY_BLOCK_SIZE=%lu.",
|
||||
create_info->key_block_size);
|
||||
}
|
||||
}
|
||||
|
||||
row_type = form->s->row_type;
|
||||
|
||||
if (flags) {
|
||||
/* if KEY_BLOCK_SIZE was specified on this statement and
|
||||
ROW_FORMAT was not, automatically change ROW_FORMAT to COMPRESSED.*/
|
||||
if ( (create_info->used_fields & HA_CREATE_USED_KEY_BLOCK_SIZE)
|
||||
&& !(create_info->used_fields & HA_CREATE_USED_ROW_FORMAT)) {
|
||||
/* if ROW_FORMAT is set to default,
|
||||
automatically change it to COMPRESSED.*/
|
||||
if (row_type == ROW_TYPE_DEFAULT) {
|
||||
row_type = ROW_TYPE_COMPRESSED;
|
||||
} else if (row_type != ROW_TYPE_COMPRESSED) {
|
||||
/* ROW_FORMAT other than COMPRESSED
|
||||
|
@ -6841,8 +6840,7 @@ ha_innobase::create(
|
|||
such combinations can be obtained
|
||||
with ALTER TABLE anyway. */
|
||||
push_warning_printf(
|
||||
thd,
|
||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: ignoring KEY_BLOCK_SIZE=%lu"
|
||||
" unless ROW_FORMAT=COMPRESSED.",
|
||||
|
@ -6867,33 +6865,24 @@ ha_innobase::create(
|
|||
}
|
||||
|
||||
switch (row_type) {
|
||||
const char* row_format_name;
|
||||
case ROW_TYPE_REDUNDANT:
|
||||
break;
|
||||
case ROW_TYPE_COMPRESSED:
|
||||
case ROW_TYPE_DYNAMIC:
|
||||
row_format_name
|
||||
= row_type == ROW_TYPE_COMPRESSED
|
||||
? "COMPRESSED"
|
||||
: "DYNAMIC";
|
||||
|
||||
if (!srv_file_per_table) {
|
||||
push_warning_printf(
|
||||
thd,
|
||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: ROW_FORMAT=%s"
|
||||
" requires innodb_file_per_table.",
|
||||
row_format_name);
|
||||
"InnoDB: ROW_FORMAT=%s requires"
|
||||
" innodb_file_per_table.",
|
||||
get_row_format_name(row_type));
|
||||
} else if (file_format < DICT_TF_FORMAT_ZIP) {
|
||||
push_warning_printf(
|
||||
thd,
|
||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: ROW_FORMAT=%s"
|
||||
" requires innodb_file_format >"
|
||||
" Antelope.",
|
||||
row_format_name);
|
||||
"InnoDB: ROW_FORMAT=%s requires"
|
||||
" innodb_file_format > Antelope.",
|
||||
get_row_format_name(row_type));
|
||||
} else {
|
||||
flags |= DICT_TF_COMPACT
|
||||
| (DICT_TF_FORMAT_ZIP
|
||||
|
@ -6905,10 +6894,10 @@ ha_innobase::create(
|
|||
case ROW_TYPE_NOT_USED:
|
||||
case ROW_TYPE_FIXED:
|
||||
default:
|
||||
push_warning(thd,
|
||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: assuming ROW_FORMAT=COMPACT.");
|
||||
push_warning(
|
||||
thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: assuming ROW_FORMAT=COMPACT.");
|
||||
case ROW_TYPE_DEFAULT:
|
||||
case ROW_TYPE_COMPACT:
|
||||
flags = DICT_TF_COMPACT;
|
||||
|
@ -7846,19 +7835,12 @@ ha_innobase::info_low(
|
|||
innodb_crash_recovery is set to a high value. */
|
||||
stats.delete_length = 0;
|
||||
} else {
|
||||
/* lock the data dictionary to avoid races with
|
||||
ibd_file_missing and tablespace_discarded */
|
||||
row_mysql_lock_data_dictionary(prebuilt->trx);
|
||||
ullint avail_space;
|
||||
|
||||
/* ib_table->space must be an existent tablespace */
|
||||
if (!ib_table->ibd_file_missing
|
||||
&& !ib_table->tablespace_discarded) {
|
||||
|
||||
stats.delete_length =
|
||||
fsp_get_available_space_in_free_extents(
|
||||
ib_table->space) * 1024;
|
||||
} else {
|
||||
avail_space = fsp_get_available_space_in_free_extents(
|
||||
ib_table->space);
|
||||
|
||||
if (avail_space == ULLINT_UNDEFINED) {
|
||||
THD* thd;
|
||||
|
||||
thd = ha_thd();
|
||||
|
@ -7875,9 +7857,9 @@ ha_innobase::info_low(
|
|||
ib_table->name);
|
||||
|
||||
stats.delete_length = 0;
|
||||
} else {
|
||||
stats.delete_length = avail_space * 1024;
|
||||
}
|
||||
|
||||
row_mysql_unlock_data_dictionary(prebuilt->trx);
|
||||
}
|
||||
|
||||
stats.check_time = 0;
|
||||
|
@ -8386,7 +8368,7 @@ get_foreign_key_info(
|
|||
|
||||
/* Referenced (parent) table name */
|
||||
ptr = dict_remove_db_name(foreign->referenced_table_name);
|
||||
len = filename_to_tablename(ptr, name_buff, sizeof(name));
|
||||
len = filename_to_tablename(ptr, name_buff, sizeof(name_buff));
|
||||
f_key_info.referenced_table = thd_make_lex_string(thd, 0, name_buff, len, 1);
|
||||
|
||||
/* Dependent (child) database name */
|
||||
|
|
|
@ -105,26 +105,35 @@ btr_root_get(
|
|||
Gets a buffer page and declares its latching order level. */
|
||||
UNIV_INLINE
|
||||
buf_block_t*
|
||||
btr_block_get(
|
||||
/*==========*/
|
||||
ulint space, /*!< in: space id */
|
||||
ulint zip_size, /*!< in: compressed page size in bytes
|
||||
or 0 for uncompressed pages */
|
||||
ulint page_no, /*!< in: page number */
|
||||
ulint mode, /*!< in: latch mode */
|
||||
mtr_t* mtr); /*!< in: mtr */
|
||||
/**************************************************************//**
|
||||
Gets a buffer page and declares its latching order level. */
|
||||
UNIV_INLINE
|
||||
page_t*
|
||||
btr_page_get(
|
||||
/*=========*/
|
||||
ulint space, /*!< in: space id */
|
||||
ulint zip_size, /*!< in: compressed page size in bytes
|
||||
or 0 for uncompressed pages */
|
||||
ulint page_no, /*!< in: page number */
|
||||
ulint mode, /*!< in: latch mode */
|
||||
mtr_t* mtr); /*!< in: mtr */
|
||||
btr_block_get_func(
|
||||
/*===============*/
|
||||
ulint space, /*!< in: space id */
|
||||
ulint zip_size, /*!< in: compressed page size in bytes
|
||||
or 0 for uncompressed pages */
|
||||
ulint page_no, /*!< in: page number */
|
||||
ulint mode, /*!< in: latch mode */
|
||||
const char* file, /*!< in: file name */
|
||||
ulint line, /*!< in: line where called */
|
||||
mtr_t* mtr) /*!< in/out: mtr */
|
||||
__attribute__((nonnull));
|
||||
/** Gets a buffer page and declares its latching order level.
|
||||
@param space tablespace identifier
|
||||
@param zip_size compressed page size in bytes or 0 for uncompressed pages
|
||||
@param page_no page number
|
||||
@param mode latch mode
|
||||
@param mtr mini-transaction handle
|
||||
@return the block descriptor */
|
||||
# define btr_block_get(space,zip_size,page_no,mode,mtr) \
|
||||
btr_block_get_func(space,zip_size,page_no,mode,__FILE__,__LINE__,mtr)
|
||||
/** Gets a buffer page and declares its latching order level.
|
||||
@param space tablespace identifier
|
||||
@param zip_size compressed page size in bytes or 0 for uncompressed pages
|
||||
@param page_no page number
|
||||
@param mode latch mode
|
||||
@param mtr mini-transaction handle
|
||||
@return the uncompressed page frame */
|
||||
# define btr_page_get(space,zip_size,page_no,mode,mtr) \
|
||||
buf_block_get_frame(btr_block_get(space,zip_size,page_no,mode,mtr))
|
||||
#endif /* !UNIV_HOTBACKUP */
|
||||
/**************************************************************//**
|
||||
Gets the index id field of a page.
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue