merge from 5.5 main
This commit is contained in:
commit
b0751e9395
2
VERSION
2
VERSION
@ -1,4 +1,4 @@
|
|||||||
MYSQL_VERSION_MAJOR=5
|
MYSQL_VERSION_MAJOR=5
|
||||||
MYSQL_VERSION_MINOR=5
|
MYSQL_VERSION_MINOR=5
|
||||||
MYSQL_VERSION_PATCH=16
|
MYSQL_VERSION_PATCH=17
|
||||||
MYSQL_VERSION_EXTRA=
|
MYSQL_VERSION_EXTRA=
|
||||||
|
@ -54,6 +54,9 @@ ADD_DEPENDENCIES(mysql_upgrade GenFixPrivs)
|
|||||||
MYSQL_ADD_EXECUTABLE(mysqlshow mysqlshow.c)
|
MYSQL_ADD_EXECUTABLE(mysqlshow mysqlshow.c)
|
||||||
TARGET_LINK_LIBRARIES(mysqlshow mysqlclient)
|
TARGET_LINK_LIBRARIES(mysqlshow mysqlclient)
|
||||||
|
|
||||||
|
MYSQL_ADD_EXECUTABLE(mysql_plugin mysql_plugin.c)
|
||||||
|
TARGET_LINK_LIBRARIES(mysql_plugin mysqlclient)
|
||||||
|
|
||||||
MYSQL_ADD_EXECUTABLE(mysqlbinlog mysqlbinlog.cc)
|
MYSQL_ADD_EXECUTABLE(mysqlbinlog mysqlbinlog.cc)
|
||||||
TARGET_LINK_LIBRARIES(mysqlbinlog mysqlclient)
|
TARGET_LINK_LIBRARIES(mysqlbinlog mysqlclient)
|
||||||
|
|
||||||
@ -69,7 +72,7 @@ IF(WIN32)
|
|||||||
MYSQL_ADD_EXECUTABLE(echo echo.c)
|
MYSQL_ADD_EXECUTABLE(echo echo.c)
|
||||||
ENDIF(WIN32)
|
ENDIF(WIN32)
|
||||||
|
|
||||||
SET_TARGET_PROPERTIES (mysqlcheck mysqldump mysqlimport mysql_upgrade mysqlshow mysqlslap
|
SET_TARGET_PROPERTIES (mysqlcheck mysqldump mysqlimport mysql_upgrade mysqlshow mysqlslap mysql_plugin
|
||||||
PROPERTIES HAS_CXX TRUE)
|
PROPERTIES HAS_CXX TRUE)
|
||||||
|
|
||||||
ADD_DEFINITIONS(-DHAVE_DLOPEN)
|
ADD_DEFINITIONS(-DHAVE_DLOPEN)
|
||||||
|
1192
client/mysql_plugin.c
Normal file
1192
client/mysql_plugin.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -603,6 +603,8 @@ typedef SOCKET_SIZE_TYPE size_socket;
|
|||||||
#define FN_LIBCHAR '\\'
|
#define FN_LIBCHAR '\\'
|
||||||
#define FN_LIBCHAR2 '/'
|
#define FN_LIBCHAR2 '/'
|
||||||
#define FN_DIRSEP "/\\" /* Valid directory separators */
|
#define FN_DIRSEP "/\\" /* Valid directory separators */
|
||||||
|
#define FN_EXEEXT ".exe"
|
||||||
|
#define FN_SOEXT ".dll"
|
||||||
#define FN_ROOTDIR "\\"
|
#define FN_ROOTDIR "\\"
|
||||||
#define FN_DEVCHAR ':'
|
#define FN_DEVCHAR ':'
|
||||||
#define FN_NETWORK_DRIVES /* Uses \\ to indicate network drives */
|
#define FN_NETWORK_DRIVES /* Uses \\ to indicate network drives */
|
||||||
@ -611,6 +613,8 @@ typedef SOCKET_SIZE_TYPE size_socket;
|
|||||||
#define FN_LIBCHAR '/'
|
#define FN_LIBCHAR '/'
|
||||||
#define FN_LIBCHAR2 '/'
|
#define FN_LIBCHAR2 '/'
|
||||||
#define FN_DIRSEP "/" /* Valid directory separators */
|
#define FN_DIRSEP "/" /* Valid directory separators */
|
||||||
|
#define FN_EXEEXT ""
|
||||||
|
#define FN_SOEXT ".so"
|
||||||
#define FN_ROOTDIR "/"
|
#define FN_ROOTDIR "/"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -12,10 +12,9 @@ main.signal_demo3 @solaris # Bug#11753919 2010-01-20 alik Several
|
|||||||
main.sp @solaris # Bug#11753919 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
main.sp @solaris # Bug#11753919 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
||||||
main.wait_timeout @solaris # Bug#11758972 2010-04-26 alik wait_timeout fails on OpenSolaris
|
main.wait_timeout @solaris # Bug#11758972 2010-04-26 alik wait_timeout fails on OpenSolaris
|
||||||
|
|
||||||
rpl.rpl_innodb_bug28430 # Bug#11754425
|
|
||||||
rpl.rpl_bug37426 # WL#5867: skozlov: test case moved from unused bugs suite
|
|
||||||
rpl.rpl_heartbeat_basic # BUG#12403008 2011-04-27 sven fails sporadically
|
rpl.rpl_heartbeat_basic # BUG#12403008 2011-04-27 sven fails sporadically
|
||||||
rpl.rpl_show_slave_hosts # BUG#12416700 2011-05-02 sven fails sporadically
|
rpl.rpl_innodb_bug28430 # Bug#11754425
|
||||||
|
rpl.rpl_row_sp011 @solaris # Bug#11753919 2011-07-25 sven Several test cases fail on Solaris with error Thread stack overrun
|
||||||
|
|
||||||
sys_vars.max_sp_recursion_depth_func @solaris # Bug#11753919 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
sys_vars.max_sp_recursion_depth_func @solaris # Bug#11753919 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
||||||
sys_vars.wait_timeout_func # Bug#11750645 2010-04-26 alik wait_timeout_func fails
|
sys_vars.wait_timeout_func # Bug#11750645 2010-04-26 alik wait_timeout_func fails
|
||||||
|
8
mysql-test/include/daemon_example_bad_format.ini
Normal file
8
mysql-test/include/daemon_example_bad_format.ini
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#
|
||||||
|
# Plugin configuration file. Place the following on a separate line:
|
||||||
|
#
|
||||||
|
# library binary file name (without .so or .dll)
|
||||||
|
# component_name
|
||||||
|
# [component_name] - additional components in plugin
|
||||||
|
#
|
||||||
|
libdaemon_example
|
9
mysql-test/include/daemon_example_bad_soname.ini
Normal file
9
mysql-test/include/daemon_example_bad_soname.ini
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Plugin configuration file. Place the following on a separate line:
|
||||||
|
#
|
||||||
|
# library binary file name (without .so or .dll)
|
||||||
|
# component_name
|
||||||
|
# [component_name] - additional components in plugin
|
||||||
|
#
|
||||||
|
libdaemon_BADNAME
|
||||||
|
daemon_BADNAME
|
@ -39,3 +39,4 @@ ha_archive storage/archive ARCHIVE_PLUGIN
|
|||||||
ha_blackhole storage/blackhole BLACKHOLE_PLUGIN
|
ha_blackhole storage/blackhole BLACKHOLE_PLUGIN
|
||||||
ha_federated storage/federated FEDERATED_PLUGIN
|
ha_federated storage/federated FEDERATED_PLUGIN
|
||||||
mypluglib plugin/fulltext SIMPLE_PARSER
|
mypluglib plugin/fulltext SIMPLE_PARSER
|
||||||
|
libdaemon_example plugin/daemon_example DAEMONEXAMPLE
|
||||||
|
@ -168,6 +168,7 @@ my $opt_suites;
|
|||||||
|
|
||||||
our $opt_verbose= 0; # Verbose output, enable with --verbose
|
our $opt_verbose= 0; # Verbose output, enable with --verbose
|
||||||
our $exe_mysql;
|
our $exe_mysql;
|
||||||
|
our $exe_mysql_plugin;
|
||||||
our $exe_mysqladmin;
|
our $exe_mysqladmin;
|
||||||
our $exe_mysqltest;
|
our $exe_mysqltest;
|
||||||
our $exe_libtool;
|
our $exe_libtool;
|
||||||
@ -1950,6 +1951,7 @@ sub executable_setup () {
|
|||||||
# Look for the client binaries
|
# Look for the client binaries
|
||||||
$exe_mysqladmin= mtr_exe_exists("$path_client_bindir/mysqladmin");
|
$exe_mysqladmin= mtr_exe_exists("$path_client_bindir/mysqladmin");
|
||||||
$exe_mysql= mtr_exe_exists("$path_client_bindir/mysql");
|
$exe_mysql= mtr_exe_exists("$path_client_bindir/mysql");
|
||||||
|
$exe_mysql_plugin= mtr_exe_exists("$path_client_bindir/mysql_plugin");
|
||||||
|
|
||||||
$exe_mysql_embedded= mtr_exe_maybe_exists("$basedir/libmysqld/examples/mysql_embedded");
|
$exe_mysql_embedded= mtr_exe_maybe_exists("$basedir/libmysqld/examples/mysql_embedded");
|
||||||
|
|
||||||
@ -2357,6 +2359,7 @@ sub environment_setup {
|
|||||||
$ENV{'MYSQLADMIN'}= native_path($exe_mysqladmin);
|
$ENV{'MYSQLADMIN'}= native_path($exe_mysqladmin);
|
||||||
$ENV{'MYSQL_CLIENT_TEST'}= mysql_client_test_arguments();
|
$ENV{'MYSQL_CLIENT_TEST'}= mysql_client_test_arguments();
|
||||||
$ENV{'EXE_MYSQL'}= $exe_mysql;
|
$ENV{'EXE_MYSQL'}= $exe_mysql;
|
||||||
|
$ENV{'MYSQL_PLUGIN'}= $exe_mysql_plugin;
|
||||||
$ENV{'MYSQL_EMBEDDED'}= $exe_mysql_embedded;
|
$ENV{'MYSQL_EMBEDDED'}= $exe_mysql_embedded;
|
||||||
|
|
||||||
# ----------------------------------------------------
|
# ----------------------------------------------------
|
||||||
|
@ -1398,6 +1398,12 @@ NULL
|
|||||||
SELECT WEEK(DATE_ADD(FROM_DAYS(1),INTERVAL 1 MONTH), 1);
|
SELECT WEEK(DATE_ADD(FROM_DAYS(1),INTERVAL 1 MONTH), 1);
|
||||||
WEEK(DATE_ADD(FROM_DAYS(1),INTERVAL 1 MONTH), 1)
|
WEEK(DATE_ADD(FROM_DAYS(1),INTERVAL 1 MONTH), 1)
|
||||||
NULL
|
NULL
|
||||||
|
#
|
||||||
|
# Bug#12584302 AFTER FIX FOR #12403504: ASSERTION FAILED: DELSUM+(INT) Y/4-TEMP > 0,
|
||||||
|
#
|
||||||
|
DO WEEK((DATE_ADD((CAST(0 AS DATE)), INTERVAL 1 YEAR_MONTH)), 5);
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Incorrect datetime value: '0'
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
#
|
#
|
||||||
# Bug#57039: constant subtime expression returns incorrect result.
|
# Bug#57039: constant subtime expression returns incorrect result.
|
||||||
|
@ -1849,5 +1849,119 @@ unlock tables;
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
drop view v1;
|
drop view v1;
|
||||||
#
|
#
|
||||||
|
# Test for bug #12828477 - "MDL SUBSYSTEM CREATES BIG OVERHEAD FOR
|
||||||
|
# CERTAIN QUERIES TO INFORMATION_SCHEMA".
|
||||||
|
#
|
||||||
|
# Check that metadata locks which are acquired during the process
|
||||||
|
# of opening tables/.FRMs/.TRG files while filling I_S table are
|
||||||
|
# not kept to the end of statement. Keeping the locks has caused
|
||||||
|
# performance problems in cases when big number of tables (.FRMs
|
||||||
|
# or .TRG files) were scanned as cost of new lock acquisition has
|
||||||
|
# increased linearly.
|
||||||
|
drop database if exists mysqltest;
|
||||||
|
create database mysqltest;
|
||||||
|
use mysqltest;
|
||||||
|
create table t0 (i int);
|
||||||
|
create table t1 (j int);
|
||||||
|
create table t2 (k int);
|
||||||
|
#
|
||||||
|
# Test that we don't keep locks in case when we to fill
|
||||||
|
# I_S table we perform full-blown table open.
|
||||||
|
#
|
||||||
|
# Acquire lock on 't2' so upcoming RENAME is
|
||||||
|
# blocked.
|
||||||
|
lock tables t2 read;
|
||||||
|
#
|
||||||
|
# Switching to connection 'con12828477_1'.
|
||||||
|
#
|
||||||
|
# The below RENAME should wait on 't2' while
|
||||||
|
# keeping X lock on 't1'.
|
||||||
|
rename table t1 to t3, t2 to t1, t3 to t2;
|
||||||
|
#
|
||||||
|
# Switching to connection 'con12828477_2'.
|
||||||
|
#
|
||||||
|
# Wait while the above RENAME is blocked.
|
||||||
|
# Issue query to I_S which will open 't0' and get
|
||||||
|
# blocked on 't1' because of RENAME.
|
||||||
|
select table_name, auto_increment from information_schema.tables where table_schema='mysqltest';
|
||||||
|
#
|
||||||
|
# Switching to connection 'con12828477_3'.
|
||||||
|
#
|
||||||
|
# Wait while the above SELECT is blocked.
|
||||||
|
#
|
||||||
|
# Check that it holds no lock on 't0' so it can be renamed.
|
||||||
|
rename table t0 to t4;
|
||||||
|
#
|
||||||
|
# Switching to connection 'default'.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Unblock the first RENAME.
|
||||||
|
unlock tables;
|
||||||
|
#
|
||||||
|
# Switching to connection 'con12828477_1'.
|
||||||
|
#
|
||||||
|
# Reap the first RENAME
|
||||||
|
#
|
||||||
|
# Switching to connection 'con12828477_2'.
|
||||||
|
#
|
||||||
|
# Reap SELECT to I_S.
|
||||||
|
table_name auto_increment
|
||||||
|
t0 NULL
|
||||||
|
t1 NULL
|
||||||
|
t2 NULL
|
||||||
|
#
|
||||||
|
# Switching to connection 'default'.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Now test that we don't keep locks in case when we to fill
|
||||||
|
# I_S table we read .FRM or .TRG file only (this was the case
|
||||||
|
# for which problem existed).
|
||||||
|
#
|
||||||
|
rename table t4 to t0;
|
||||||
|
# Acquire lock on 't2' so upcoming RENAME is
|
||||||
|
# blocked.
|
||||||
|
lock tables t2 read;
|
||||||
|
#
|
||||||
|
# Switching to connection 'con12828477_1'.
|
||||||
|
#
|
||||||
|
# The below RENAME should wait on 't2' while
|
||||||
|
# keeping X lock on 't1'.
|
||||||
|
rename table t1 to t3, t2 to t1, t3 to t2;
|
||||||
|
#
|
||||||
|
# Switching to connection 'con12828477_2'.
|
||||||
|
#
|
||||||
|
# Wait while the above RENAME is blocked.
|
||||||
|
# Issue query to I_S which will open 't0' and get
|
||||||
|
# blocked on 't1' because of RENAME.
|
||||||
|
select event_object_table, trigger_name from information_schema.triggers where event_object_schema='mysqltest';
|
||||||
|
#
|
||||||
|
# Switching to connection 'con12828477_3'.
|
||||||
|
#
|
||||||
|
# Wait while the above SELECT is blocked.
|
||||||
|
#
|
||||||
|
# Check that it holds no lock on 't0' so it can be renamed.
|
||||||
|
rename table t0 to t4;
|
||||||
|
#
|
||||||
|
# Switching to connection 'default'.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Unblock the first RENAME.
|
||||||
|
unlock tables;
|
||||||
|
#
|
||||||
|
# Switching to connection 'con12828477_1'.
|
||||||
|
#
|
||||||
|
# Reap the first RENAME
|
||||||
|
#
|
||||||
|
# Switching to connection 'con12828477_2'.
|
||||||
|
#
|
||||||
|
# Reap SELECT to I_S.
|
||||||
|
event_object_table trigger_name
|
||||||
|
#
|
||||||
|
# Switching to connection 'default'.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Clean-up.
|
||||||
|
drop database mysqltest;
|
||||||
|
#
|
||||||
# End of 5.5 tests
|
# End of 5.5 tests
|
||||||
#
|
#
|
||||||
|
@ -904,7 +904,8 @@ SELECT * FROM tm1;
|
|||||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
CHECK TABLE tm1;
|
CHECK TABLE tm1;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.tm1 check Error Table 'test.t1' doesn't exist
|
test.tm1 check Error Table 'test.t1' is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
test.tm1 check Error Table 'test.t2' is differently defined or of non-MyISAM type or doesn't exist
|
||||||
test.tm1 check Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
test.tm1 check Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
test.tm1 check error Corrupt
|
test.tm1 check error Corrupt
|
||||||
CREATE TABLE t1(a INT);
|
CREATE TABLE t1(a INT);
|
||||||
@ -912,7 +913,7 @@ SELECT * FROM tm1;
|
|||||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
CHECK TABLE tm1;
|
CHECK TABLE tm1;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.tm1 check Error Table 'test.t2' doesn't exist
|
test.tm1 check Error Table 'test.t2' is differently defined or of non-MyISAM type or doesn't exist
|
||||||
test.tm1 check Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
test.tm1 check Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
test.tm1 check error Corrupt
|
test.tm1 check error Corrupt
|
||||||
CREATE TABLE t2(a BLOB);
|
CREATE TABLE t2(a BLOB);
|
||||||
@ -920,7 +921,7 @@ SELECT * FROM tm1;
|
|||||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
CHECK TABLE tm1;
|
CHECK TABLE tm1;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.tm1 check Warning Table 'test.t2' is differently defined or of non-MyISAM type or doesn't exist
|
test.tm1 check Error Table 'test.t2' is differently defined or of non-MyISAM type or doesn't exist
|
||||||
test.tm1 check Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
test.tm1 check Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
test.tm1 check error Corrupt
|
test.tm1 check error Corrupt
|
||||||
ALTER TABLE t2 MODIFY a INT;
|
ALTER TABLE t2 MODIFY a INT;
|
||||||
@ -3634,7 +3635,7 @@ test.t1 analyze Error Unable to open underlying table which is differently defin
|
|||||||
test.t1 analyze error Corrupt
|
test.t1 analyze error Corrupt
|
||||||
CHECK TABLE t1;
|
CHECK TABLE t1;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 check Error Table 'test.t_not_exists' doesn't exist
|
test.t1 check Error Table 'test.t_not_exists' is differently defined or of non-MyISAM type or doesn't exist
|
||||||
test.t1 check Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
test.t1 check Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
test.t1 check error Corrupt
|
test.t1 check error Corrupt
|
||||||
CHECKSUM TABLE t1;
|
CHECKSUM TABLE t1;
|
||||||
@ -3650,7 +3651,7 @@ test.t1 optimize Error Unable to open underlying table which is differently defi
|
|||||||
test.t1 optimize error Corrupt
|
test.t1 optimize error Corrupt
|
||||||
REPAIR TABLE t1;
|
REPAIR TABLE t1;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 repair Error Table 'test.t_not_exists' doesn't exist
|
test.t1 repair Error Table 'test.t_not_exists' is differently defined or of non-MyISAM type or doesn't exist
|
||||||
test.t1 repair Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
test.t1 repair Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
test.t1 repair error Corrupt
|
test.t1 repair error Corrupt
|
||||||
REPAIR TABLE t1 USE_FRM;
|
REPAIR TABLE t1 USE_FRM;
|
||||||
@ -3676,4 +3677,37 @@ ALTER TABLE t1 engine=myisam;
|
|||||||
ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
|
ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
DROP TABLE m1, t1;
|
DROP TABLE m1, t1;
|
||||||
End of 6.0 tests
|
#
|
||||||
|
# Test for bug #11754210 - "45777: CHECK TABLE DOESN'T SHOW ALL
|
||||||
|
# PROBLEMS FOR MERGE TABLE COMPLIANCE IN 5.1"
|
||||||
|
#
|
||||||
|
drop tables if exists t1, t2, t3, t4, m1;
|
||||||
|
create table t1(id int) engine=myisam;
|
||||||
|
create view t3 as select 1 as id;
|
||||||
|
create table t4(id int) engine=memory;
|
||||||
|
create table m1(id int) engine=merge union=(t1,t2,t3,t4);
|
||||||
|
select * from m1;
|
||||||
|
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
# The below CHECK and REPAIR TABLE statements should
|
||||||
|
# report all problems with underlying tables:
|
||||||
|
# - absence of 't2',
|
||||||
|
# - missing base table for 't3',
|
||||||
|
# - wrong engine of 't4'.
|
||||||
|
check table m1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.m1 check Error Table 'test.t2' is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
test.m1 check Error Table 'test.t3' is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
test.m1 check Error Table 'test.t4' is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
test.m1 check Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
test.m1 check error Corrupt
|
||||||
|
repair table m1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.m1 repair Error Table 'test.t2' is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
test.m1 repair Error Table 'test.t3' is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
test.m1 repair Error Table 'test.t4' is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
test.m1 repair Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
test.m1 repair error Corrupt
|
||||||
|
# Clean-up.
|
||||||
|
drop tables m1, t1, t4;
|
||||||
|
drop view t3;
|
||||||
|
End of 5.5 tests
|
||||||
|
110
mysql-test/r/mysql_plugin.result
Normal file
110
mysql-test/r/mysql_plugin.result
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
#
|
||||||
|
# Ensure the plugin isn't loaded.
|
||||||
|
#
|
||||||
|
SELECT * FROM mysql.plugin WHERE name = 'daemon_example' ORDER BY name;
|
||||||
|
name dl
|
||||||
|
#
|
||||||
|
# Enable the plugin...
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Ensure the plugin is now loaded.
|
||||||
|
#
|
||||||
|
SELECT * FROM mysql.plugin WHERE name = 'daemon_example' ORDER BY name;
|
||||||
|
name dl
|
||||||
|
daemon_example libdaemon_example.so
|
||||||
|
#
|
||||||
|
# Disable the plugin...
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Ensure the plugin isn't loaded.
|
||||||
|
#
|
||||||
|
SELECT * FROM mysql.plugin WHERE name = 'daemon_example' ORDER BY name;
|
||||||
|
name dl
|
||||||
|
#
|
||||||
|
# Attempt to load non-existant plugin
|
||||||
|
#
|
||||||
|
ERROR: Cannot read plugin config file NOT_THERE_AT_ALL. File does not exist.
|
||||||
|
#
|
||||||
|
# Attempt to use non-existant plugin.ini file
|
||||||
|
#
|
||||||
|
ERROR: Cannot read plugin config file daemon_example. File does not exist.
|
||||||
|
#
|
||||||
|
# Attempt to omit the plugin
|
||||||
|
#
|
||||||
|
ERROR: No plugin specified.
|
||||||
|
#
|
||||||
|
# Attempt to omit DISABLE|ENABLE
|
||||||
|
#
|
||||||
|
ERROR: missing operation. Please specify either '<plugin> ENABLE' or '<plugin> DISABLE'.
|
||||||
|
#
|
||||||
|
# Attempt to use bad paths - datadir
|
||||||
|
#
|
||||||
|
ERROR: Cannot access datadir at '/data_not_there/'.
|
||||||
|
#
|
||||||
|
# Attempt to use bad paths - basedir
|
||||||
|
#
|
||||||
|
ERROR: Cannot access basedir at '/basedir_not_there/'.
|
||||||
|
#
|
||||||
|
# Attempt to use bad paths - plugin_dir
|
||||||
|
#
|
||||||
|
ERROR: Cannot read plugin config file daemon_example. File does not exist.
|
||||||
|
#
|
||||||
|
# Attempt to use bad paths - mysqld
|
||||||
|
#
|
||||||
|
ERROR: Cannot access mysqld path '/mysqld_not_there/'.
|
||||||
|
#
|
||||||
|
# Attempt to use bad paths - my_print_defaults
|
||||||
|
#
|
||||||
|
ERROR: Cannot access my-print-defaults path '/my_print_defaults_not_there/'.
|
||||||
|
#
|
||||||
|
# Missing library
|
||||||
|
#
|
||||||
|
ERROR: The plugin library is missing or in a different location.
|
||||||
|
#
|
||||||
|
# Bad format for config file
|
||||||
|
#
|
||||||
|
ERROR: Cannot read plugin config file daemon_example. Bad format in plugin configuration file.
|
||||||
|
#
|
||||||
|
# Missing base_dir option
|
||||||
|
#
|
||||||
|
ERROR: Missing --basedir option.
|
||||||
|
#
|
||||||
|
# Missing data_dir option
|
||||||
|
#
|
||||||
|
ERROR: Missing --datadir option.
|
||||||
|
#
|
||||||
|
# Missing plugin_dir option
|
||||||
|
#
|
||||||
|
ERROR: Missing --plugin_dir option.
|
||||||
|
#
|
||||||
|
# Show the help.
|
||||||
|
#
|
||||||
|
mysql_plugin Ver V.V.VV Distrib XX.XX.XX
|
||||||
|
Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
|
||||||
|
Enable or disable plugins.
|
||||||
|
|
||||||
|
Usage: mysql_plugin [options] <plugin> ENABLE|DISABLE
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-?, --help Display this help and exit.
|
||||||
|
-b, --basedir=name The basedir for the server.
|
||||||
|
-d, --datadir=name The datadir for the server.
|
||||||
|
-p, --plugin-dir=name
|
||||||
|
The plugin dir for the server.
|
||||||
|
-i, --plugin-ini=name
|
||||||
|
Read plugin information from configuration file specified
|
||||||
|
instead of from <plugin-dir>/<plugin_name>.ini.
|
||||||
|
-n, --no-defaults Do not read values from configuration file.
|
||||||
|
-P, --print-defaults
|
||||||
|
Show default values from configuration file.
|
||||||
|
-m, --mysqld=name Path to mysqld executable. Example: /sbin/temp1/mysql/bin
|
||||||
|
-f, --my-print-defaults=name
|
||||||
|
Path to my_print_defaults executable. Example:
|
||||||
|
/source/temp11/extra
|
||||||
|
-v, --verbose More verbose output; you can use this multiple times to
|
||||||
|
get even more verbose output.
|
||||||
|
-V, --version Output version information and exit.
|
||||||
|
|
||||||
|
|
||||||
|
mysql_plugin Ver V.V.VV Distrib XX.XX.XX
|
@ -7161,6 +7161,25 @@ init_connect
|
|||||||
SET @@GLOBAL.init_connect= @old_init_connect;
|
SET @@GLOBAL.init_connect= @old_init_connect;
|
||||||
DROP PROCEDURE p2;
|
DROP PROCEDURE p2;
|
||||||
DROP PROCEDURE p5;
|
DROP PROCEDURE p5;
|
||||||
|
#
|
||||||
|
# Bug#11766594 59736: SELECT DISTINCT.. INCORRECT RESULT WITH DETERMINISTIC FUNCTION IN WHERE C
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT, b INT, KEY(b));
|
||||||
|
CREATE TABLE t2 (c INT, d INT, KEY(c));
|
||||||
|
INSERT INTO t1 VALUES (1,1),(1,1),(1,2);
|
||||||
|
INSERT INTO t2 VALUES (1,1),(1,2);
|
||||||
|
CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
|
||||||
|
BEGIN
|
||||||
|
DECLARE a int;
|
||||||
|
-- SQL statement inside
|
||||||
|
SELECT 1 INTO a;
|
||||||
|
RETURN a;
|
||||||
|
END $
|
||||||
|
SELECT COUNT(DISTINCT d) FROM t1, t2 WHERE a = c AND b = f1();
|
||||||
|
COUNT(DISTINCT d)
|
||||||
|
2
|
||||||
|
DROP FUNCTION f1;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
# -- End of 5.1 tests
|
# -- End of 5.1 tests
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
|
@ -558,6 +558,52 @@ f1 bug13575(f1)
|
|||||||
3 ccc
|
3 ccc
|
||||||
drop function bug13575|
|
drop function bug13575|
|
||||||
drop table t3|
|
drop table t3|
|
||||||
|
SELECT @@GLOBAL.storage_engine INTO @old_engine|
|
||||||
|
SET @@GLOBAL.storage_engine=InnoDB|
|
||||||
|
SET @@SESSION.storage_engine=InnoDB|
|
||||||
|
SHOW GLOBAL VARIABLES LIKE 'storage_engine'|
|
||||||
|
Variable_name Value
|
||||||
|
storage_engine InnoDB
|
||||||
|
SHOW SESSION VARIABLES LIKE 'storage_engine'|
|
||||||
|
Variable_name Value
|
||||||
|
storage_engine InnoDB
|
||||||
|
CREATE PROCEDURE bug11758414()
|
||||||
|
BEGIN
|
||||||
|
SET @@GLOBAL.storage_engine="MyISAM";
|
||||||
|
SET @@SESSION.storage_engine="MyISAM";
|
||||||
|
# show defaults at execution time / that setting them worked
|
||||||
|
SHOW GLOBAL VARIABLES LIKE 'storage_engine';
|
||||||
|
SHOW SESSION VARIABLES LIKE 'storage_engine';
|
||||||
|
CREATE TABLE t1 (id int);
|
||||||
|
CREATE TABLE t2 (id int) ENGINE=InnoDB;
|
||||||
|
# show we're heeding the default (at run-time, not parse-time!)
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
# show that we didn't break explicit override with ENGINE=...
|
||||||
|
SHOW CREATE TABLE t2;
|
||||||
|
END;
|
||||||
|
|
|
||||||
|
CALL bug11758414|
|
||||||
|
Variable_name Value
|
||||||
|
storage_engine MyISAM
|
||||||
|
Variable_name Value
|
||||||
|
storage_engine MyISAM
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`id` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
Table Create Table
|
||||||
|
t2 CREATE TABLE `t2` (
|
||||||
|
`id` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
SHOW GLOBAL VARIABLES LIKE 'storage_engine'|
|
||||||
|
Variable_name Value
|
||||||
|
storage_engine MyISAM
|
||||||
|
SHOW SESSION VARIABLES LIKE 'storage_engine'|
|
||||||
|
Variable_name Value
|
||||||
|
storage_engine MyISAM
|
||||||
|
DROP PROCEDURE bug11758414|
|
||||||
|
DROP TABLE t1, t2|
|
||||||
|
SET @@GLOBAL.storage_engine=@old_engine|
|
||||||
#
|
#
|
||||||
# End of 5.1 tests
|
# End of 5.1 tests
|
||||||
#
|
#
|
||||||
|
@ -63,42 +63,42 @@ row_format=compressed;
|
|||||||
create table t14(a int primary key) engine=innodb key_block_size=9;
|
create table t14(a int primary key) engine=innodb key_block_size=9;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=9.
|
Warning 1478 InnoDB: ignoring KEY_BLOCK_SIZE=9.
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
table_schema table_name row_format
|
table_schema table_name row_format data_length index_length
|
||||||
test t0 Compact
|
test t0 Compact 16384 0
|
||||||
test t00 Compact
|
test t00 Compact 16384 0
|
||||||
test t1 Compact
|
test t1 Compact 16384 0
|
||||||
test t10 Dynamic
|
test t10 Dynamic 16384 0
|
||||||
test t11 Compressed
|
test t11 Compressed 1024 0
|
||||||
test t12 Compressed
|
test t12 Compressed 1024 0
|
||||||
test t13 Compressed
|
test t13 Compressed 8192 0
|
||||||
test t14 Compact
|
test t14 Compact 16384 0
|
||||||
test t2 Redundant
|
test t2 Redundant 16384 0
|
||||||
test t3 Compact
|
test t3 Compact 16384 0
|
||||||
test t4 Compact
|
test t4 Compact 16384 0
|
||||||
test t5 Redundant
|
test t5 Redundant 16384 0
|
||||||
test t6 Redundant
|
test t6 Redundant 16384 0
|
||||||
test t7 Redundant
|
test t7 Redundant 16384 0
|
||||||
test t8 Compact
|
test t8 Compact 16384 0
|
||||||
test t9 Compact
|
test t9 Compact 16384 0
|
||||||
drop table t0,t00,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14;
|
drop table t0,t00,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14;
|
||||||
alter table t1 key_block_size=0;
|
alter table t1 key_block_size=0;
|
||||||
alter table t1 row_format=dynamic;
|
alter table t1 row_format=dynamic;
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
table_schema table_name row_format
|
table_schema table_name row_format data_length index_length
|
||||||
test t1 Dynamic
|
test t1 Dynamic 16384 0
|
||||||
alter table t1 row_format=compact;
|
alter table t1 row_format=compact;
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
table_schema table_name row_format
|
table_schema table_name row_format data_length index_length
|
||||||
test t1 Compact
|
test t1 Compact 16384 0
|
||||||
alter table t1 row_format=redundant;
|
alter table t1 row_format=redundant;
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
table_schema table_name row_format
|
table_schema table_name row_format data_length index_length
|
||||||
test t1 Redundant
|
test t1 Redundant 16384 0
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1(a int not null, b text, index(b(10))) engine=innodb
|
create table t1(a int not null, b text, index(b(10))) engine=innodb
|
||||||
key_block_size=1;
|
key_block_size=1;
|
||||||
@ -115,11 +115,11 @@ rollback;
|
|||||||
select a,left(b,40) from t1 natural join t2;
|
select a,left(b,40) from t1 natural join t2;
|
||||||
a left(b,40)
|
a left(b,40)
|
||||||
1 1abcdefghijklmnopqrstuvwxyzAAAAAAAAAAAAA
|
1 1abcdefghijklmnopqrstuvwxyzAAAAAAAAAAAAA
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
table_schema table_name row_format
|
table_schema table_name row_format data_length index_length
|
||||||
test t1 Compressed
|
test t1 Compressed 2048 1024
|
||||||
test t2 Compact
|
test t2 Compact 16384 0
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
SET SESSION innodb_strict_mode = off;
|
SET SESSION innodb_strict_mode = off;
|
||||||
CREATE TABLE t1(
|
CREATE TABLE t1(
|
||||||
@ -207,19 +207,19 @@ create table t8 (id int primary key) engine = innodb row_format = compressed;
|
|||||||
create table t9 (id int primary key) engine = innodb row_format = dynamic;
|
create table t9 (id int primary key) engine = innodb row_format = dynamic;
|
||||||
create table t10(id int primary key) engine = innodb row_format = compact;
|
create table t10(id int primary key) engine = innodb row_format = compact;
|
||||||
create table t11(id int primary key) engine = innodb row_format = redundant;
|
create table t11(id int primary key) engine = innodb row_format = redundant;
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
table_schema table_name row_format
|
table_schema table_name row_format data_length index_length
|
||||||
test t1 Compact
|
test t1 Compact 16384 0
|
||||||
test t10 Compact
|
test t10 Compact 16384 0
|
||||||
test t11 Redundant
|
test t11 Redundant 16384 0
|
||||||
test t3 Compressed
|
test t3 Compressed 1024 0
|
||||||
test t4 Compressed
|
test t4 Compressed 2048 0
|
||||||
test t5 Compressed
|
test t5 Compressed 4096 0
|
||||||
test t6 Compressed
|
test t6 Compressed 8192 0
|
||||||
test t7 Compressed
|
test t7 Compressed 16384 0
|
||||||
test t8 Compressed
|
test t8 Compressed 8192 0
|
||||||
test t9 Dynamic
|
test t9 Dynamic 16384 0
|
||||||
drop table t1, 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
|
create table t1 (id int primary key) engine = innodb
|
||||||
key_block_size = 8 row_format = compressed;
|
key_block_size = 8 row_format = compressed;
|
||||||
@ -246,11 +246,11 @@ Warning 1478 InnoDB: cannot specify ROW_FORMAT = DYNAMIC with KEY_BLOCK_SIZE.
|
|||||||
Error 1005 Can't create table 'test.t4' (errno: 1478)
|
Error 1005 Can't create table 'test.t4' (errno: 1478)
|
||||||
create table t5 (id int primary key) engine = innodb
|
create table t5 (id int primary key) engine = innodb
|
||||||
key_block_size = 8 row_format = default;
|
key_block_size = 8 row_format = default;
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
table_schema table_name row_format
|
table_schema table_name row_format data_length index_length
|
||||||
test t1 Compressed
|
test t1 Compressed 8192 0
|
||||||
test t5 Compressed
|
test t5 Compressed 8192 0
|
||||||
drop table t1, t5;
|
drop table t1, t5;
|
||||||
create table t1 (id int primary key) engine = innodb
|
create table t1 (id int primary key) engine = innodb
|
||||||
key_block_size = 9 row_format = redundant;
|
key_block_size = 9 row_format = redundant;
|
||||||
@ -276,9 +276,9 @@ Level Code Message
|
|||||||
Warning 1478 InnoDB: invalid KEY_BLOCK_SIZE = 9. Valid values are [1, 2, 4, 8, 16]
|
Warning 1478 InnoDB: invalid KEY_BLOCK_SIZE = 9. Valid values are [1, 2, 4, 8, 16]
|
||||||
Warning 1478 InnoDB: cannot specify ROW_FORMAT = DYNAMIC with KEY_BLOCK_SIZE.
|
Warning 1478 InnoDB: cannot specify ROW_FORMAT = DYNAMIC with KEY_BLOCK_SIZE.
|
||||||
Error 1005 Can't create table 'test.t2' (errno: 1478)
|
Error 1005 Can't create table 'test.t2' (errno: 1478)
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
table_schema table_name row_format
|
table_schema table_name row_format data_length index_length
|
||||||
set global innodb_file_per_table = off;
|
set global innodb_file_per_table = off;
|
||||||
create table t1 (id int primary key) engine = innodb key_block_size = 1;
|
create table t1 (id int primary key) engine = innodb key_block_size = 1;
|
||||||
ERROR HY000: Can't create table 'test.t1' (errno: 1478)
|
ERROR HY000: Can't create table 'test.t1' (errno: 1478)
|
||||||
@ -324,11 +324,11 @@ Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_per_table.
|
|||||||
Error 1005 Can't create table 'test.t7' (errno: 1478)
|
Error 1005 Can't create table 'test.t7' (errno: 1478)
|
||||||
create table t8 (id int primary key) engine = innodb row_format = compact;
|
create table t8 (id int primary key) engine = innodb row_format = compact;
|
||||||
create table t9 (id int primary key) engine = innodb row_format = redundant;
|
create table t9 (id int primary key) engine = innodb row_format = redundant;
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
table_schema table_name row_format
|
table_schema table_name row_format data_length index_length
|
||||||
test t8 Compact
|
test t8 Compact 16384 0
|
||||||
test t9 Redundant
|
test t9 Redundant 16384 0
|
||||||
drop table t8, t9;
|
drop table t8, t9;
|
||||||
set global innodb_file_per_table = on;
|
set global innodb_file_per_table = on;
|
||||||
set global innodb_file_format = `0`;
|
set global innodb_file_format = `0`;
|
||||||
@ -376,11 +376,11 @@ Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope.
|
|||||||
Error 1005 Can't create table 'test.t7' (errno: 1478)
|
Error 1005 Can't create table 'test.t7' (errno: 1478)
|
||||||
create table t8 (id int primary key) engine = innodb row_format = compact;
|
create table t8 (id int primary key) engine = innodb row_format = compact;
|
||||||
create table t9 (id int primary key) engine = innodb row_format = redundant;
|
create table t9 (id int primary key) engine = innodb row_format = redundant;
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
table_schema table_name row_format
|
table_schema table_name row_format data_length index_length
|
||||||
test t8 Compact
|
test t8 Compact 16384 0
|
||||||
test t9 Redundant
|
test t9 Redundant 16384 0
|
||||||
drop table t8, t9;
|
drop table t8, t9;
|
||||||
set global innodb_file_per_table=0;
|
set global innodb_file_per_table=0;
|
||||||
set global innodb_file_format=Antelope;
|
set global innodb_file_format=Antelope;
|
||||||
|
@ -39,19 +39,19 @@ create table t13(a int primary key) engine=innodb
|
|||||||
row_format=compressed;
|
row_format=compressed;
|
||||||
create table t14(a int primary key) engine=innodb key_block_size=9;
|
create table t14(a int primary key) engine=innodb key_block_size=9;
|
||||||
|
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
|
|
||||||
drop table t0,t00,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14;
|
drop table t0,t00,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14;
|
||||||
alter table t1 key_block_size=0;
|
alter table t1 key_block_size=0;
|
||||||
alter table t1 row_format=dynamic;
|
alter table t1 row_format=dynamic;
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
alter table t1 row_format=compact;
|
alter table t1 row_format=compact;
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
alter table t1 row_format=redundant;
|
alter table t1 row_format=redundant;
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ connection default;
|
|||||||
disconnect a;
|
disconnect a;
|
||||||
disconnect b;
|
disconnect b;
|
||||||
|
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
@ -195,7 +195,7 @@ create table t9 (id int primary key) engine = innodb row_format = dynamic;
|
|||||||
create table t10(id int primary key) engine = innodb row_format = compact;
|
create table t10(id int primary key) engine = innodb row_format = compact;
|
||||||
create table t11(id int primary key) engine = innodb row_format = redundant;
|
create table t11(id int primary key) engine = innodb row_format = redundant;
|
||||||
|
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
drop table t1, t3, t4, t5, t6, t7, t8, t9, t10, t11;
|
drop table t1, t3, t4, t5, t6, t7, t8, t9, t10, t11;
|
||||||
|
|
||||||
@ -221,7 +221,7 @@ show warnings;
|
|||||||
create table t5 (id int primary key) engine = innodb
|
create table t5 (id int primary key) engine = innodb
|
||||||
key_block_size = 8 row_format = default;
|
key_block_size = 8 row_format = default;
|
||||||
|
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
drop table t1, t5;
|
drop table t1, t5;
|
||||||
|
|
||||||
@ -241,7 +241,7 @@ create table t2 (id int primary key) engine = innodb
|
|||||||
key_block_size = 9 row_format = dynamic;
|
key_block_size = 9 row_format = dynamic;
|
||||||
show warnings;
|
show warnings;
|
||||||
|
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
|
|
||||||
#test valid values with innodb_file_per_table unset
|
#test valid values with innodb_file_per_table unset
|
||||||
@ -271,7 +271,7 @@ show warnings;
|
|||||||
create table t8 (id int primary key) engine = innodb row_format = compact;
|
create table t8 (id int primary key) engine = innodb row_format = compact;
|
||||||
create table t9 (id int primary key) engine = innodb row_format = redundant;
|
create table t9 (id int primary key) engine = innodb row_format = redundant;
|
||||||
|
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
drop table t8, t9;
|
drop table t8, t9;
|
||||||
|
|
||||||
@ -303,7 +303,7 @@ show warnings;
|
|||||||
create table t8 (id int primary key) engine = innodb row_format = compact;
|
create table t8 (id int primary key) engine = innodb row_format = compact;
|
||||||
create table t9 (id int primary key) engine = innodb row_format = redundant;
|
create table t9 (id int primary key) engine = innodb row_format = redundant;
|
||||||
|
|
||||||
SELECT table_schema, table_name, row_format
|
SELECT table_schema, table_name, row_format, data_length, index_length
|
||||||
FROM information_schema.tables WHERE engine='innodb';
|
FROM information_schema.tables WHERE engine='innodb';
|
||||||
drop table t8, t9;
|
drop table t8, t9;
|
||||||
|
|
||||||
|
@ -11,13 +11,7 @@ There should be *no* long test name listed below:
|
|||||||
select variable_name as `There should be *no* variables listed below:` from t2
|
select variable_name as `There should be *no* variables listed below:` from t2
|
||||||
left join t1 on variable_name=test_name where test_name is null;
|
left join t1 on variable_name=test_name where test_name is null;
|
||||||
There should be *no* variables listed below:
|
There should be *no* variables listed below:
|
||||||
INNODB_ROLLBACK_SEGMENTS
|
|
||||||
INNODB_STATS_METHOD
|
|
||||||
INNODB_FILE_FORMAT_MAX
|
|
||||||
INNODB_LARGE_PREFIX
|
INNODB_LARGE_PREFIX
|
||||||
INNODB_ROLLBACK_SEGMENTS
|
|
||||||
INNODB_STATS_METHOD
|
|
||||||
INNODB_FILE_FORMAT_MAX
|
|
||||||
INNODB_LARGE_PREFIX
|
INNODB_LARGE_PREFIX
|
||||||
drop table t1;
|
drop table t1;
|
||||||
drop table t2;
|
drop table t2;
|
||||||
|
@ -1,59 +1,80 @@
|
|||||||
SET @start_global_value = @@global.innodb_file_format_max;
|
SET @start_global_value = @@global.innodb_file_format_check;
|
||||||
SELECT @start_global_value;
|
SELECT @start_global_value;
|
||||||
@start_global_value
|
@start_global_value
|
||||||
Antelope
|
|
||||||
Valid values are 'Antelope' and 'Barracuda'
|
|
||||||
select @@global.innodb_file_format_max in ('Antelope', 'Barracuda');
|
|
||||||
@@global.innodb_file_format_max in ('Antelope', 'Barracuda')
|
|
||||||
1
|
1
|
||||||
select @@global.innodb_file_format_max;
|
Valid values are 'ON' and 'OFF'
|
||||||
@@global.innodb_file_format_max
|
SELECT @@global.innodb_file_format_check in (0, 1);
|
||||||
Antelope
|
@@global.innodb_file_format_check in (0, 1)
|
||||||
select @@session.innodb_file_format_max;
|
1
|
||||||
ERROR HY000: Variable 'innodb_file_format_max' is a GLOBAL variable
|
SELECT @@global.innodb_file_format_check;
|
||||||
show global variables like 'innodb_file_format_max';
|
@@global.innodb_file_format_check
|
||||||
|
1
|
||||||
|
SELECT @@session.innodb_file_format_check;
|
||||||
|
ERROR HY000: Variable 'innodb_file_format_check' is a GLOBAL variable
|
||||||
|
SHOW global variables LIKE 'innodb_file_format_check';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
innodb_file_format_max Antelope
|
innodb_file_format_check ON
|
||||||
show session variables like 'innodb_file_format_max';
|
SHOW session variables LIKE 'innodb_file_format_check';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
innodb_file_format_max Antelope
|
innodb_file_format_check ON
|
||||||
select * from information_schema.global_variables where variable_name='innodb_file_format_max';
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_file_format_check';
|
||||||
VARIABLE_NAME VARIABLE_VALUE
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
INNODB_FILE_FORMAT_MAX Antelope
|
INNODB_FILE_FORMAT_CHECK ON
|
||||||
select * from information_schema.session_variables where variable_name='innodb_file_format_max';
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_file_format_check';
|
||||||
VARIABLE_NAME VARIABLE_VALUE
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
INNODB_FILE_FORMAT_MAX Antelope
|
INNODB_FILE_FORMAT_CHECK ON
|
||||||
set global innodb_file_format_max='Antelope';
|
SET @@global.innodb_file_format_check='Off';
|
||||||
select @@global.innodb_file_format_max;
|
ERROR HY000: Variable 'innodb_file_format_check' is a read only variable
|
||||||
@@global.innodb_file_format_max
|
Expected error 'Read only variable'
|
||||||
Antelope
|
SET @@global.innodb_file_format_check=1;
|
||||||
select * from information_schema.global_variables where variable_name='innodb_file_format_max';
|
ERROR HY000: Variable 'innodb_file_format_check' is a read only variable
|
||||||
VARIABLE_NAME VARIABLE_VALUE
|
Expected error 'Read only variable'
|
||||||
INNODB_FILE_FORMAT_MAX Antelope
|
SET @@global.innodb_file_format_check=0;
|
||||||
select * from information_schema.session_variables where variable_name='innodb_file_format_max';
|
ERROR HY000: Variable 'innodb_file_format_check' is a read only variable
|
||||||
VARIABLE_NAME VARIABLE_VALUE
|
Expected error 'Read only variable'
|
||||||
INNODB_FILE_FORMAT_MAX Antelope
|
SET @@global.innodb_file_format_check='On';
|
||||||
set @@global.innodb_file_format_max='Barracuda';
|
ERROR HY000: Variable 'innodb_file_format_check' is a read only variable
|
||||||
select @@global.innodb_file_format_max;
|
Expected error 'Read only variable'
|
||||||
@@global.innodb_file_format_max
|
SET session innodb_large_prefix='OFF';
|
||||||
Barracuda
|
ERROR HY000: Variable 'innodb_large_prefix' is a GLOBAL variable and should be set with SET GLOBAL
|
||||||
select * from information_schema.global_variables where variable_name='innodb_file_format_max';
|
SET @@session.innodb_stats_on_metadata='ON';
|
||||||
VARIABLE_NAME VARIABLE_VALUE
|
ERROR HY000: Variable 'innodb_stats_on_metadata' is a GLOBAL variable and should be set with SET GLOBAL
|
||||||
INNODB_FILE_FORMAT_MAX Barracuda
|
SELECT IF(@@GLOBAL.innodb_file_format_check, "ON", "OFF") = VARIABLE_VALUE
|
||||||
select * from information_schema.session_variables where variable_name='innodb_file_format_max';
|
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
||||||
VARIABLE_NAME VARIABLE_VALUE
|
WHERE VARIABLE_NAME='innodb_file_format_check';
|
||||||
INNODB_FILE_FORMAT_MAX Barracuda
|
IF(@@GLOBAL.innodb_file_format_check, "ON", "OFF") = VARIABLE_VALUE
|
||||||
set session innodb_file_format_max='Salmon';
|
1
|
||||||
ERROR HY000: Variable 'innodb_file_format_max' is a GLOBAL variable and should be set with SET GLOBAL
|
1 Expected
|
||||||
set @@session.innodb_file_format_max='Salmon';
|
SELECT COUNT(@@GLOBAL.innodb_file_format_check);
|
||||||
ERROR HY000: Variable 'innodb_file_format_max' is a GLOBAL variable and should be set with SET GLOBAL
|
COUNT(@@GLOBAL.innodb_file_format_check)
|
||||||
set global innodb_file_format_max=1.1;
|
1
|
||||||
ERROR 42000: Incorrect argument type to variable 'innodb_file_format_max'
|
1 Expected
|
||||||
set global innodb_file_format_max=1e1;
|
SELECT COUNT(VARIABLE_VALUE)
|
||||||
ERROR 42000: Incorrect argument type to variable 'innodb_file_format_max'
|
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
||||||
set global innodb_file_format_max='Salmon';
|
WHERE VARIABLE_NAME='innodb_file_format_check';
|
||||||
ERROR 42000: Variable 'innodb_file_format_max' can't be set to the value of 'Salmon'
|
COUNT(VARIABLE_VALUE)
|
||||||
SET @@global.innodb_file_format_max = @start_global_value;
|
1
|
||||||
SELECT @@global.innodb_file_format_max;
|
1 Expected
|
||||||
@@global.innodb_file_format_max
|
SELECT @@innodb_file_format_check = @@GLOBAL.innodb_file_format_check;
|
||||||
Antelope
|
@@innodb_file_format_check = @@GLOBAL.innodb_file_format_check
|
||||||
|
1
|
||||||
|
1 Expected
|
||||||
|
SELECT COUNT(@@innodb_file_format_check);
|
||||||
|
COUNT(@@innodb_file_format_check)
|
||||||
|
1
|
||||||
|
1 Expected
|
||||||
|
SELECT COUNT(@@local.innodb_file_format_check);
|
||||||
|
ERROR HY000: Variable 'innodb_file_format_check' is a GLOBAL variable
|
||||||
|
Expected error 'Variable is a GLOBAL variable'
|
||||||
|
SELECT COUNT(@@SESSION.innodb_file_format_check);
|
||||||
|
ERROR HY000: Variable 'innodb_file_format_check' is a GLOBAL variable
|
||||||
|
Expected error 'Variable is a GLOBAL variable'
|
||||||
|
SELECT COUNT(@@GLOBAL.innodb_file_format_check);
|
||||||
|
COUNT(@@GLOBAL.innodb_file_format_check)
|
||||||
|
1
|
||||||
|
1 Expected
|
||||||
|
SELECT innodb_file_format_check = @@SESSION.innodb_file_format_check;
|
||||||
|
ERROR 42S22: Unknown column 'innodb_file_format_check' in 'field list'
|
||||||
|
Expected error 'Readonly variable'
|
||||||
|
@ -0,0 +1,65 @@
|
|||||||
|
SET @start_global_value = @@global.innodb_file_format_max;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
@start_global_value
|
||||||
|
Antelope
|
||||||
|
Valid values are 'Antelope' and 'Barracuda'
|
||||||
|
SELECT @@global.innodb_file_format_max in ('Antelope', 'Barracuda');
|
||||||
|
@@global.innodb_file_format_max in ('Antelope', 'Barracuda')
|
||||||
|
1
|
||||||
|
SELECT @@global.innodb_file_format_max;
|
||||||
|
@@global.innodb_file_format_max
|
||||||
|
Antelope
|
||||||
|
SELECT @@session.innodb_file_format_max;
|
||||||
|
ERROR HY000: Variable 'innodb_file_format_max' is a GLOBAL variable
|
||||||
|
SHOW global variables LIKE 'innodb_file_format_max';
|
||||||
|
Variable_name Value
|
||||||
|
innodb_file_format_max Antelope
|
||||||
|
SHOW session variables LIKE 'innodb_file_format_max';
|
||||||
|
Variable_name Value
|
||||||
|
innodb_file_format_max Antelope
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_file_format_max';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_FILE_FORMAT_MAX Antelope
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_file_format_max';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_FILE_FORMAT_MAX Antelope
|
||||||
|
SET global innodb_file_format_max='Antelope';
|
||||||
|
SELECT @@global.innodb_file_format_max;
|
||||||
|
@@global.innodb_file_format_max
|
||||||
|
Antelope
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_file_format_max';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_FILE_FORMAT_MAX Antelope
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_file_format_max';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_FILE_FORMAT_MAX Antelope
|
||||||
|
SET @@global.innodb_file_format_max='Barracuda';
|
||||||
|
SELECT @@global.innodb_file_format_max;
|
||||||
|
@@global.innodb_file_format_max
|
||||||
|
Barracuda
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_file_format_max';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_FILE_FORMAT_MAX Barracuda
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_file_format_max';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_FILE_FORMAT_MAX Barracuda
|
||||||
|
SET session innodb_file_format_max='Salmon';
|
||||||
|
ERROR HY000: Variable 'innodb_file_format_max' is a GLOBAL variable and should be set with SET GLOBAL
|
||||||
|
SET @@session.innodb_file_format_max='Salmon';
|
||||||
|
ERROR HY000: Variable 'innodb_file_format_max' is a GLOBAL variable and should be set with SET GLOBAL
|
||||||
|
SET global innodb_file_format_max=1.1;
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'innodb_file_format_max'
|
||||||
|
SET global innodb_file_format_max=1e1;
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'innodb_file_format_max'
|
||||||
|
SET global innodb_file_format_max='Salmon';
|
||||||
|
ERROR 42000: Variable 'innodb_file_format_max' can't be set to the value of 'Salmon'
|
||||||
|
SET @@global.innodb_file_format_max = @start_global_value;
|
||||||
|
SELECT @@global.innodb_file_format_max;
|
||||||
|
@@global.innodb_file_format_max
|
||||||
|
Antelope
|
@ -0,0 +1,64 @@
|
|||||||
|
SET @start_global_value = @@global.innodb_rollback_segments;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
@start_global_value
|
||||||
|
128
|
||||||
|
Valid values are zero or above
|
||||||
|
SELECT @@global.innodb_rollback_segments >=0;
|
||||||
|
@@global.innodb_rollback_segments >=0
|
||||||
|
1
|
||||||
|
SELECT @@global.innodb_rollback_segments <=128;
|
||||||
|
@@global.innodb_rollback_segments <=128
|
||||||
|
1
|
||||||
|
SELECT @@global.innodb_rollback_segments;
|
||||||
|
@@global.innodb_rollback_segments
|
||||||
|
128
|
||||||
|
SELECT @@session.innodb_rollback_segments;
|
||||||
|
ERROR HY000: Variable 'innodb_rollback_segments' is a GLOBAL variable
|
||||||
|
SHOW global variables LIKE 'innodb_rollback_segments';
|
||||||
|
Variable_name Value
|
||||||
|
innodb_rollback_segments 128
|
||||||
|
SHOW session variables LIKE 'innodb_rollback_segments';
|
||||||
|
Variable_name Value
|
||||||
|
innodb_rollback_segments 128
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_rollback_segments';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_ROLLBACK_SEGMENTS 128
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_rollback_segments';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_ROLLBACK_SEGMENTS 128
|
||||||
|
SET global innodb_rollback_segments=100;
|
||||||
|
SELECT @@global.innodb_rollback_segments;
|
||||||
|
@@global.innodb_rollback_segments
|
||||||
|
100
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_rollback_segments';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_ROLLBACK_SEGMENTS 100
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_rollback_segments';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_ROLLBACK_SEGMENTS 100
|
||||||
|
SET session innodb_rollback_segments=1;
|
||||||
|
ERROR HY000: Variable 'innodb_rollback_segments' is a GLOBAL variable and should be set with SET GLOBAL
|
||||||
|
SET global innodb_rollback_segments=1.1;
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'innodb_rollback_segments'
|
||||||
|
SET global innodb_rollback_segments=1e1;
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'innodb_rollback_segments'
|
||||||
|
SET global innodb_rollback_segments="foo";
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'innodb_rollback_segments'
|
||||||
|
SET global innodb_rollback_segments=-7;
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect innodb_rollback_segments value: '-7'
|
||||||
|
SELECT @@global.innodb_rollback_segments;
|
||||||
|
@@global.innodb_rollback_segments
|
||||||
|
1
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_rollback_segments';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_ROLLBACK_SEGMENTS 1
|
||||||
|
SET @@global.innodb_rollback_segments = @start_global_value;
|
||||||
|
SELECT @@global.innodb_rollback_segments;
|
||||||
|
@@global.innodb_rollback_segments
|
||||||
|
128
|
83
mysql-test/suite/sys_vars/r/innodb_stats_method_basic.result
Normal file
83
mysql-test/suite/sys_vars/r/innodb_stats_method_basic.result
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
SET @start_global_value = @@global.innodb_stats_method;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
@start_global_value
|
||||||
|
nulls_equal
|
||||||
|
Valid values are 'nulls_equal', 'nulls_unequal', 'nulls_ignored'
|
||||||
|
SELECT @@global.innodb_stats_method in ('nulls_equal', 'nulls_unequal',
|
||||||
|
'nulls_ignored');
|
||||||
|
@@global.innodb_stats_method in ('nulls_equal', 'nulls_unequal',
|
||||||
|
'nulls_ignored')
|
||||||
|
1
|
||||||
|
SELECT @@global.innodb_stats_method;
|
||||||
|
@@global.innodb_stats_method
|
||||||
|
nulls_equal
|
||||||
|
SELECT @@session.innodb_stats_method;
|
||||||
|
ERROR HY000: Variable 'innodb_stats_method' is a GLOBAL variable
|
||||||
|
SHOW global variables LIKE 'innodb_stats_method';
|
||||||
|
Variable_name Value
|
||||||
|
innodb_stats_method nulls_equal
|
||||||
|
SHOW session variables LIKE 'innodb_stats_method';
|
||||||
|
Variable_name Value
|
||||||
|
innodb_stats_method nulls_equal
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_stats_method';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_STATS_METHOD nulls_equal
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_stats_method';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_STATS_METHOD nulls_equal
|
||||||
|
SET global innodb_stats_method='nulls_equal';
|
||||||
|
SELECT @@global.innodb_stats_method;
|
||||||
|
@@global.innodb_stats_method
|
||||||
|
nulls_equal
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_stats_method';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_STATS_METHOD nulls_equal
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_stats_method';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_STATS_METHOD nulls_equal
|
||||||
|
SET @@global.innodb_stats_method='nulls_unequal';
|
||||||
|
SELECT @@global.innodb_stats_method;
|
||||||
|
@@global.innodb_stats_method
|
||||||
|
nulls_unequal
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_stats_method';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_STATS_METHOD nulls_unequal
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_stats_method';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_STATS_METHOD nulls_unequal
|
||||||
|
SET global innodb_stats_method=2;
|
||||||
|
SELECT @@global.innodb_stats_method;
|
||||||
|
@@global.innodb_stats_method
|
||||||
|
nulls_ignored
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_stats_method';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_STATS_METHOD nulls_ignored
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_stats_method';
|
||||||
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
|
INNODB_STATS_METHOD nulls_ignored
|
||||||
|
SET session innodb_stats_method='nulls_equal';
|
||||||
|
ERROR HY000: Variable 'innodb_stats_method' is a GLOBAL variable and should be set with SET GLOBAL
|
||||||
|
SET @@session.innodb_stats_method='nulls_ignored';
|
||||||
|
ERROR HY000: Variable 'innodb_stats_method' is a GLOBAL variable and should be set with SET GLOBAL
|
||||||
|
SET global innodb_stats_method=1.1;
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'innodb_stats_method'
|
||||||
|
SET global innodb_stats_method=4;
|
||||||
|
ERROR 42000: Variable 'innodb_stats_method' can't be set to the value of '4'
|
||||||
|
SET global innodb_stats_method=-2;
|
||||||
|
ERROR 42000: Variable 'innodb_stats_method' can't be set to the value of '-2'
|
||||||
|
SET global innodb_stats_method=1e1;
|
||||||
|
ERROR 42000: Incorrect argument type to variable 'innodb_stats_method'
|
||||||
|
SET global innodb_stats_method='some';
|
||||||
|
ERROR 42000: Variable 'innodb_stats_method' can't be set to the value of 'some'
|
||||||
|
SET @@global.innodb_stats_method = @start_global_value;
|
||||||
|
SELECT @@global.innodb_stats_method;
|
||||||
|
@@global.innodb_stats_method
|
||||||
|
nulls_equal
|
@ -1,55 +1,95 @@
|
|||||||
|
|
||||||
|
|
||||||
# 2010-01-25 - Added
|
|
||||||
#
|
#
|
||||||
|
# 2011-08-02 - Added
|
||||||
|
#
|
||||||
|
|
||||||
--source include/not_embedded.inc
|
--source include/not_embedded.inc
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
SET @start_global_value = @@global.innodb_file_format_max;
|
SET @start_global_value = @@global.innodb_file_format_check;
|
||||||
SELECT @start_global_value;
|
SELECT @start_global_value;
|
||||||
|
|
||||||
#
|
#
|
||||||
# exists as global only
|
# exists as global only
|
||||||
#
|
#
|
||||||
--echo Valid values are 'Antelope' and 'Barracuda'
|
--echo Valid values are 'ON' and 'OFF'
|
||||||
select @@global.innodb_file_format_max in ('Antelope', 'Barracuda');
|
SELECT @@global.innodb_file_format_check in (0, 1);
|
||||||
select @@global.innodb_file_format_max;
|
SELECT @@global.innodb_file_format_check;
|
||||||
|
|
||||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
select @@session.innodb_file_format_max;
|
SELECT @@session.innodb_file_format_check;
|
||||||
show global variables like 'innodb_file_format_max';
|
SHOW global variables LIKE 'innodb_file_format_check';
|
||||||
show session variables like 'innodb_file_format_max';
|
SHOW session variables LIKE 'innodb_file_format_check';
|
||||||
select * from information_schema.global_variables where variable_name='innodb_file_format_max';
|
SELECT * FROM information_schema.global_variables
|
||||||
select * from information_schema.session_variables where variable_name='innodb_file_format_max';
|
WHERE variable_name='innodb_file_format_check';
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_file_format_check';
|
||||||
|
|
||||||
#
|
#
|
||||||
# show that it's writable
|
# show that it's read only
|
||||||
#
|
#
|
||||||
set global innodb_file_format_max='Antelope';
|
|
||||||
select @@global.innodb_file_format_max;
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
select * from information_schema.global_variables where variable_name='innodb_file_format_max';
|
SET @@global.innodb_file_format_check='Off';
|
||||||
select * from information_schema.session_variables where variable_name='innodb_file_format_max';
|
--echo Expected error 'Read only variable'
|
||||||
set @@global.innodb_file_format_max='Barracuda';
|
|
||||||
select @@global.innodb_file_format_max;
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
select * from information_schema.global_variables where variable_name='innodb_file_format_max';
|
SET @@global.innodb_file_format_check=1;
|
||||||
select * from information_schema.session_variables where variable_name='innodb_file_format_max';
|
--echo Expected error 'Read only variable'
|
||||||
|
|
||||||
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
|
SET @@global.innodb_file_format_check=0;
|
||||||
|
--echo Expected error 'Read only variable'
|
||||||
|
|
||||||
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
|
SET @@global.innodb_file_format_check='On';
|
||||||
|
--echo Expected error 'Read only variable'
|
||||||
|
|
||||||
--error ER_GLOBAL_VARIABLE
|
--error ER_GLOBAL_VARIABLE
|
||||||
set session innodb_file_format_max='Salmon';
|
SET session innodb_large_prefix='OFF';
|
||||||
--error ER_GLOBAL_VARIABLE
|
--error ER_GLOBAL_VARIABLE
|
||||||
set @@session.innodb_file_format_max='Salmon';
|
SET @@session.innodb_stats_on_metadata='ON';
|
||||||
|
|
||||||
#
|
#
|
||||||
# incorrect types
|
# Check if the value in GLOBAL Table matches value in variable
|
||||||
#
|
|
||||||
--error ER_WRONG_TYPE_FOR_VAR
|
|
||||||
set global innodb_file_format_max=1.1;
|
|
||||||
--error ER_WRONG_TYPE_FOR_VAR
|
|
||||||
set global innodb_file_format_max=1e1;
|
|
||||||
--error ER_WRONG_VALUE_FOR_VAR
|
|
||||||
set global innodb_file_format_max='Salmon';
|
|
||||||
|
|
||||||
#
|
|
||||||
# Cleanup
|
|
||||||
#
|
#
|
||||||
|
|
||||||
SET @@global.innodb_file_format_max = @start_global_value;
|
SELECT IF(@@GLOBAL.innodb_file_format_check, "ON", "OFF") = VARIABLE_VALUE
|
||||||
SELECT @@global.innodb_file_format_max;
|
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
||||||
|
WHERE VARIABLE_NAME='innodb_file_format_check';
|
||||||
|
--echo 1 Expected
|
||||||
|
|
||||||
|
SELECT COUNT(@@GLOBAL.innodb_file_format_check);
|
||||||
|
--echo 1 Expected
|
||||||
|
|
||||||
|
SELECT COUNT(VARIABLE_VALUE)
|
||||||
|
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
||||||
|
WHERE VARIABLE_NAME='innodb_file_format_check';
|
||||||
|
--echo 1 Expected
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check if accessing variable with and without GLOBAL point to same variable
|
||||||
|
#
|
||||||
|
SELECT @@innodb_file_format_check = @@GLOBAL.innodb_file_format_check;
|
||||||
|
--echo 1 Expected
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check if innodb_doublewrite can be accessed with and without @@ sign
|
||||||
|
#
|
||||||
|
|
||||||
|
SELECT COUNT(@@innodb_file_format_check);
|
||||||
|
--echo 1 Expected
|
||||||
|
|
||||||
|
--Error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
|
SELECT COUNT(@@local.innodb_file_format_check);
|
||||||
|
--echo Expected error 'Variable is a GLOBAL variable'
|
||||||
|
|
||||||
|
--Error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
|
SELECT COUNT(@@SESSION.innodb_file_format_check);
|
||||||
|
--echo Expected error 'Variable is a GLOBAL variable'
|
||||||
|
|
||||||
|
SELECT COUNT(@@GLOBAL.innodb_file_format_check);
|
||||||
|
--echo 1 Expected
|
||||||
|
|
||||||
|
--Error ER_BAD_FIELD_ERROR
|
||||||
|
SELECT innodb_file_format_check = @@SESSION.innodb_file_format_check;
|
||||||
|
--echo Expected error 'Readonly variable'
|
||||||
|
@ -0,0 +1,60 @@
|
|||||||
|
#
|
||||||
|
# 2011-08-02 - Added
|
||||||
|
#
|
||||||
|
--source include/not_embedded.inc
|
||||||
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
SET @start_global_value = @@global.innodb_file_format_max;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
|
||||||
|
#
|
||||||
|
# exists as global only
|
||||||
|
#
|
||||||
|
--echo Valid values are 'Antelope' and 'Barracuda'
|
||||||
|
SELECT @@global.innodb_file_format_max in ('Antelope', 'Barracuda');
|
||||||
|
SELECT @@global.innodb_file_format_max;
|
||||||
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
|
SELECT @@session.innodb_file_format_max;
|
||||||
|
SHOW global variables LIKE 'innodb_file_format_max';
|
||||||
|
SHOW session variables LIKE 'innodb_file_format_max';
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_file_format_max';
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_file_format_max';
|
||||||
|
|
||||||
|
#
|
||||||
|
# show that it's writable
|
||||||
|
#
|
||||||
|
SET global innodb_file_format_max='Antelope';
|
||||||
|
SELECT @@global.innodb_file_format_max;
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_file_format_max';
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_file_format_max';
|
||||||
|
SET @@global.innodb_file_format_max='Barracuda';
|
||||||
|
SELECT @@global.innodb_file_format_max;
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_file_format_max';
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_file_format_max';
|
||||||
|
--error ER_GLOBAL_VARIABLE
|
||||||
|
SET session innodb_file_format_max='Salmon';
|
||||||
|
--error ER_GLOBAL_VARIABLE
|
||||||
|
SET @@session.innodb_file_format_max='Salmon';
|
||||||
|
|
||||||
|
#
|
||||||
|
# incorrect types
|
||||||
|
#
|
||||||
|
--error ER_WRONG_TYPE_FOR_VAR
|
||||||
|
SET global innodb_file_format_max=1.1;
|
||||||
|
--error ER_WRONG_TYPE_FOR_VAR
|
||||||
|
SET global innodb_file_format_max=1e1;
|
||||||
|
--error ER_WRONG_VALUE_FOR_VAR
|
||||||
|
SET global innodb_file_format_max='Salmon';
|
||||||
|
|
||||||
|
#
|
||||||
|
# Cleanup
|
||||||
|
#
|
||||||
|
|
||||||
|
SET @@global.innodb_file_format_max = @start_global_value;
|
||||||
|
SELECT @@global.innodb_file_format_max;
|
@ -0,0 +1,58 @@
|
|||||||
|
#
|
||||||
|
# 2011-08-01 Added
|
||||||
|
#
|
||||||
|
|
||||||
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
SET @start_global_value = @@global.innodb_rollback_segments;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
|
||||||
|
#
|
||||||
|
# exists as global only
|
||||||
|
#
|
||||||
|
--echo Valid values are zero or above
|
||||||
|
SELECT @@global.innodb_rollback_segments >=0;
|
||||||
|
SELECT @@global.innodb_rollback_segments <=128;
|
||||||
|
SELECT @@global.innodb_rollback_segments;
|
||||||
|
|
||||||
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
|
SELECT @@session.innodb_rollback_segments;
|
||||||
|
SHOW global variables LIKE 'innodb_rollback_segments';
|
||||||
|
SHOW session variables LIKE 'innodb_rollback_segments';
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_rollback_segments';
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_rollback_segments';
|
||||||
|
|
||||||
|
#
|
||||||
|
# show that it's writable
|
||||||
|
#
|
||||||
|
SET global innodb_rollback_segments=100;
|
||||||
|
SELECT @@global.innodb_rollback_segments;
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_rollback_segments';
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_rollback_segments';
|
||||||
|
--error ER_GLOBAL_VARIABLE
|
||||||
|
SET session innodb_rollback_segments=1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# incorrect types
|
||||||
|
#
|
||||||
|
--error ER_WRONG_TYPE_FOR_VAR
|
||||||
|
SET global innodb_rollback_segments=1.1;
|
||||||
|
--error ER_WRONG_TYPE_FOR_VAR
|
||||||
|
SET global innodb_rollback_segments=1e1;
|
||||||
|
--error ER_WRONG_TYPE_FOR_VAR
|
||||||
|
SET global innodb_rollback_segments="foo";
|
||||||
|
SET global innodb_rollback_segments=-7;
|
||||||
|
SELECT @@global.innodb_rollback_segments;
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_rollback_segments';
|
||||||
|
|
||||||
|
#
|
||||||
|
# cleanup
|
||||||
|
#
|
||||||
|
|
||||||
|
SET @@global.innodb_rollback_segments = @start_global_value;
|
||||||
|
SELECT @@global.innodb_rollback_segments;
|
72
mysql-test/suite/sys_vars/t/innodb_stats_method_basic.test
Normal file
72
mysql-test/suite/sys_vars/t/innodb_stats_method_basic.test
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#
|
||||||
|
# 2011-08-05 - Added
|
||||||
|
#
|
||||||
|
|
||||||
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
SET @start_global_value = @@global.innodb_stats_method;
|
||||||
|
SELECT @start_global_value;
|
||||||
|
|
||||||
|
#
|
||||||
|
# exists as global only
|
||||||
|
#
|
||||||
|
--echo Valid values are 'nulls_equal', 'nulls_unequal', 'nulls_ignored'
|
||||||
|
SELECT @@global.innodb_stats_method in ('nulls_equal', 'nulls_unequal',
|
||||||
|
'nulls_ignored');
|
||||||
|
SELECT @@global.innodb_stats_method;
|
||||||
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
|
SELECT @@session.innodb_stats_method;
|
||||||
|
SHOW global variables LIKE 'innodb_stats_method';
|
||||||
|
SHOW session variables LIKE 'innodb_stats_method';
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_stats_method';
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_stats_method';
|
||||||
|
|
||||||
|
#
|
||||||
|
# show that it's writable
|
||||||
|
#
|
||||||
|
SET global innodb_stats_method='nulls_equal';
|
||||||
|
SELECT @@global.innodb_stats_method;
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_stats_method';
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_stats_method';
|
||||||
|
SET @@global.innodb_stats_method='nulls_unequal';
|
||||||
|
SELECT @@global.innodb_stats_method;
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_stats_method';
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_stats_method';
|
||||||
|
SET global innodb_stats_method=2;
|
||||||
|
SELECT @@global.innodb_stats_method;
|
||||||
|
SELECT * FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='innodb_stats_method';
|
||||||
|
SELECT * FROM information_schema.session_variables
|
||||||
|
WHERE variable_name='innodb_stats_method';
|
||||||
|
|
||||||
|
--error ER_GLOBAL_VARIABLE
|
||||||
|
SET session innodb_stats_method='nulls_equal';
|
||||||
|
--error ER_GLOBAL_VARIABLE
|
||||||
|
SET @@session.innodb_stats_method='nulls_ignored';
|
||||||
|
|
||||||
|
#
|
||||||
|
# incorrect types
|
||||||
|
#
|
||||||
|
--error ER_WRONG_TYPE_FOR_VAR
|
||||||
|
SET global innodb_stats_method=1.1;
|
||||||
|
--error ER_WRONG_VALUE_FOR_VAR
|
||||||
|
SET global innodb_stats_method=4;
|
||||||
|
--error ER_WRONG_VALUE_FOR_VAR
|
||||||
|
SET global innodb_stats_method=-2;
|
||||||
|
--error ER_WRONG_TYPE_FOR_VAR
|
||||||
|
SET global innodb_stats_method=1e1;
|
||||||
|
--error ER_WRONG_VALUE_FOR_VAR
|
||||||
|
SET global innodb_stats_method='some';
|
||||||
|
|
||||||
|
#
|
||||||
|
# Cleanup
|
||||||
|
#
|
||||||
|
|
||||||
|
SET @@global.innodb_stats_method = @start_global_value;
|
||||||
|
SELECT @@global.innodb_stats_method;
|
@ -909,6 +909,12 @@ SELECT DATE_FORMAT('0000-00-11', '%w');
|
|||||||
SELECT MAKEDATE(11111111,1);
|
SELECT MAKEDATE(11111111,1);
|
||||||
SELECT WEEK(DATE_ADD(FROM_DAYS(1),INTERVAL 1 MONTH), 1);
|
SELECT WEEK(DATE_ADD(FROM_DAYS(1),INTERVAL 1 MONTH), 1);
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#12584302 AFTER FIX FOR #12403504: ASSERTION FAILED: DELSUM+(INT) Y/4-TEMP > 0,
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
DO WEEK((DATE_ADD((CAST(0 AS DATE)), INTERVAL 1 YEAR_MONTH)), 5);
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -1543,8 +1543,6 @@ DROP TABLE t1, information_schema.tables;
|
|||||||
LOCK TABLES t1 READ, information_schema.tables READ;
|
LOCK TABLES t1 READ, information_schema.tables READ;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
# Wait till all disconnects are completed
|
|
||||||
--source include/wait_until_count_sessions.inc
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug #43834 Assertion in Natural_join_column::db_name() on an I_S query
|
# Bug #43834 Assertion in Natural_join_column::db_name() on an I_S query
|
||||||
@ -1608,6 +1606,186 @@ drop table t1;
|
|||||||
drop view v1;
|
drop view v1;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Test for bug #12828477 - "MDL SUBSYSTEM CREATES BIG OVERHEAD FOR
|
||||||
|
--echo # CERTAIN QUERIES TO INFORMATION_SCHEMA".
|
||||||
|
--echo #
|
||||||
|
--echo # Check that metadata locks which are acquired during the process
|
||||||
|
--echo # of opening tables/.FRMs/.TRG files while filling I_S table are
|
||||||
|
--echo # not kept to the end of statement. Keeping the locks has caused
|
||||||
|
--echo # performance problems in cases when big number of tables (.FRMs
|
||||||
|
--echo # or .TRG files) were scanned as cost of new lock acquisition has
|
||||||
|
--echo # increased linearly.
|
||||||
|
--disable_warnings
|
||||||
|
drop database if exists mysqltest;
|
||||||
|
--enable_warnings
|
||||||
|
create database mysqltest;
|
||||||
|
use mysqltest;
|
||||||
|
create table t0 (i int);
|
||||||
|
create table t1 (j int);
|
||||||
|
create table t2 (k int);
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Test that we don't keep locks in case when we to fill
|
||||||
|
--echo # I_S table we perform full-blown table open.
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo # Acquire lock on 't2' so upcoming RENAME is
|
||||||
|
--echo # blocked.
|
||||||
|
lock tables t2 read;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Switching to connection 'con12828477_1'.
|
||||||
|
--echo #
|
||||||
|
connect (con12828477_1, localhost, root,,mysqltest);
|
||||||
|
--echo # The below RENAME should wait on 't2' while
|
||||||
|
--echo # keeping X lock on 't1'.
|
||||||
|
--send rename table t1 to t3, t2 to t1, t3 to t2
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Switching to connection 'con12828477_2'.
|
||||||
|
--echo #
|
||||||
|
connect (con12828477_2, localhost, root,,mysqltest);
|
||||||
|
--echo # Wait while the above RENAME is blocked.
|
||||||
|
let $wait_condition=
|
||||||
|
select count(*) = 1 from information_schema.processlist
|
||||||
|
where state = "Waiting for table metadata lock" and
|
||||||
|
info = "rename table t1 to t3, t2 to t1, t3 to t2";
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
|
--echo # Issue query to I_S which will open 't0' and get
|
||||||
|
--echo # blocked on 't1' because of RENAME.
|
||||||
|
--send select table_name, auto_increment from information_schema.tables where table_schema='mysqltest'
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Switching to connection 'con12828477_3'.
|
||||||
|
--echo #
|
||||||
|
connect (con12828477_3, localhost, root,,mysqltest);
|
||||||
|
--echo # Wait while the above SELECT is blocked.
|
||||||
|
let $wait_condition=
|
||||||
|
select count(*) = 1 from information_schema.processlist
|
||||||
|
where state = "Waiting for table metadata lock" and
|
||||||
|
info = "select table_name, auto_increment from information_schema.tables where table_schema='mysqltest'";
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Check that it holds no lock on 't0' so it can be renamed.
|
||||||
|
rename table t0 to t4;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Switching to connection 'default'.
|
||||||
|
--echo #
|
||||||
|
connection default;
|
||||||
|
--echo #
|
||||||
|
--echo # Unblock the first RENAME.
|
||||||
|
unlock tables;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Switching to connection 'con12828477_1'.
|
||||||
|
--echo #
|
||||||
|
connection con12828477_1;
|
||||||
|
--echo # Reap the first RENAME
|
||||||
|
--reap
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Switching to connection 'con12828477_2'.
|
||||||
|
--echo #
|
||||||
|
connection con12828477_2;
|
||||||
|
--echo # Reap SELECT to I_S.
|
||||||
|
--reap
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Switching to connection 'default'.
|
||||||
|
--echo #
|
||||||
|
connection default;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Now test that we don't keep locks in case when we to fill
|
||||||
|
--echo # I_S table we read .FRM or .TRG file only (this was the case
|
||||||
|
--echo # for which problem existed).
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
rename table t4 to t0;
|
||||||
|
--echo # Acquire lock on 't2' so upcoming RENAME is
|
||||||
|
--echo # blocked.
|
||||||
|
lock tables t2 read;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Switching to connection 'con12828477_1'.
|
||||||
|
--echo #
|
||||||
|
connection con12828477_1;
|
||||||
|
--echo # The below RENAME should wait on 't2' while
|
||||||
|
--echo # keeping X lock on 't1'.
|
||||||
|
--send rename table t1 to t3, t2 to t1, t3 to t2
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Switching to connection 'con12828477_2'.
|
||||||
|
--echo #
|
||||||
|
connection con12828477_2;
|
||||||
|
--echo # Wait while the above RENAME is blocked.
|
||||||
|
let $wait_condition=
|
||||||
|
select count(*) = 1 from information_schema.processlist
|
||||||
|
where state = "Waiting for table metadata lock" and
|
||||||
|
info = "rename table t1 to t3, t2 to t1, t3 to t2";
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
|
--echo # Issue query to I_S which will open 't0' and get
|
||||||
|
--echo # blocked on 't1' because of RENAME.
|
||||||
|
--send select event_object_table, trigger_name from information_schema.triggers where event_object_schema='mysqltest'
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Switching to connection 'con12828477_3'.
|
||||||
|
--echo #
|
||||||
|
connection con12828477_3;
|
||||||
|
--echo # Wait while the above SELECT is blocked.
|
||||||
|
let $wait_condition=
|
||||||
|
select count(*) = 1 from information_schema.processlist
|
||||||
|
where state = "Waiting for table metadata lock" and
|
||||||
|
info = "select event_object_table, trigger_name from information_schema.triggers where event_object_schema='mysqltest'";
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Check that it holds no lock on 't0' so it can be renamed.
|
||||||
|
rename table t0 to t4;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Switching to connection 'default'.
|
||||||
|
--echo #
|
||||||
|
connection default;
|
||||||
|
--echo #
|
||||||
|
--echo # Unblock the first RENAME.
|
||||||
|
unlock tables;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Switching to connection 'con12828477_1'.
|
||||||
|
--echo #
|
||||||
|
connection con12828477_1;
|
||||||
|
--echo # Reap the first RENAME
|
||||||
|
--reap
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Switching to connection 'con12828477_2'.
|
||||||
|
--echo #
|
||||||
|
connection con12828477_2;
|
||||||
|
--echo # Reap SELECT to I_S.
|
||||||
|
--reap
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Switching to connection 'default'.
|
||||||
|
--echo #
|
||||||
|
connection default;
|
||||||
|
disconnect con12828477_1;
|
||||||
|
disconnect con12828477_2;
|
||||||
|
disconnect con12828477_3;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Clean-up.
|
||||||
|
drop database mysqltest;
|
||||||
|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 5.5 tests
|
--echo # End of 5.5 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
|
# Wait till all disconnects are completed
|
||||||
|
--source include/wait_until_count_sessions.inc
|
||||||
|
@ -2798,7 +2798,32 @@ UNLOCK TABLES;
|
|||||||
DROP TABLE m1, t1;
|
DROP TABLE m1, t1;
|
||||||
|
|
||||||
|
|
||||||
--echo End of 6.0 tests
|
--echo #
|
||||||
|
--echo # Test for bug #11754210 - "45777: CHECK TABLE DOESN'T SHOW ALL
|
||||||
|
--echo # PROBLEMS FOR MERGE TABLE COMPLIANCE IN 5.1"
|
||||||
|
--echo #
|
||||||
|
--disable_warnings
|
||||||
|
drop tables if exists t1, t2, t3, t4, m1;
|
||||||
|
--enable_warnings
|
||||||
|
create table t1(id int) engine=myisam;
|
||||||
|
create view t3 as select 1 as id;
|
||||||
|
create table t4(id int) engine=memory;
|
||||||
|
create table m1(id int) engine=merge union=(t1,t2,t3,t4);
|
||||||
|
--error ER_WRONG_MRG_TABLE
|
||||||
|
select * from m1;
|
||||||
|
--echo # The below CHECK and REPAIR TABLE statements should
|
||||||
|
--echo # report all problems with underlying tables:
|
||||||
|
--echo # - absence of 't2',
|
||||||
|
--echo # - missing base table for 't3',
|
||||||
|
--echo # - wrong engine of 't4'.
|
||||||
|
check table m1;
|
||||||
|
repair table m1;
|
||||||
|
--echo # Clean-up.
|
||||||
|
drop tables m1, t1, t4;
|
||||||
|
drop view t3;
|
||||||
|
|
||||||
|
|
||||||
|
--echo End of 5.5 tests
|
||||||
|
|
||||||
--disable_result_log
|
--disable_result_log
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
|
1
mysql-test/t/mysql_plugin-master.opt
Normal file
1
mysql-test/t/mysql_plugin-master.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--plugin-dir=$DAEMONEXAMPLE_DIR
|
318
mysql-test/t/mysql_plugin.test
Normal file
318
mysql-test/t/mysql_plugin.test
Normal file
@ -0,0 +1,318 @@
|
|||||||
|
#
|
||||||
|
# Test mysql_plugin tool
|
||||||
|
#
|
||||||
|
# This test contains test cases for testing the mysql_plugin client with
|
||||||
|
# the daemon_example plugin. Test cases include tests for:
|
||||||
|
#
|
||||||
|
# - successful enable/disable
|
||||||
|
# - incorrect paths
|
||||||
|
# - missing paths/options
|
||||||
|
#
|
||||||
|
# Implementation Notes
|
||||||
|
#
|
||||||
|
# The mysql_plugin tool now accepts --mysqld the path to mysqld server. The
|
||||||
|
# mysqld path is extracted from MYSQLD_BOOTSTRAP_CMD line. We also extract
|
||||||
|
# the path of MYSQLD_BASEDIR (where mysql exists) and use it for the errmsg
|
||||||
|
# file. The directories differ between Windows and Unix but the Perl script
|
||||||
|
# included below will pick as per platform.
|
||||||
|
#
|
||||||
|
# The test is also designed to issue the --skip directive if the location of
|
||||||
|
# the mysqld, my_print_defaults, or daemon_example.ini files cannot be found.
|
||||||
|
#
|
||||||
|
|
||||||
|
--source include/not_embedded.inc
|
||||||
|
|
||||||
|
# Add the datadir, basedir, plugin_dir to the bootstrap command
|
||||||
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||||
|
let $MYSQL_BASEDIR= `select @@basedir`;
|
||||||
|
let $MYSQL_ERRMSG_BASEDIR=`select @@lc_messages_dir`;
|
||||||
|
let $PLUGIN_DIR=`select @@plugin_dir`;
|
||||||
|
|
||||||
|
--disable_abort_on_error
|
||||||
|
|
||||||
|
# Perl script to extract the location of the basedir from environment
|
||||||
|
# variables. This is needed to ensure the test will run on the PB machines
|
||||||
|
# designed to test release as well as debug builds. It also checks for the
|
||||||
|
# location of the my_print_defaults and daemon_example.ini files.
|
||||||
|
|
||||||
|
perl;
|
||||||
|
use File::Basename;
|
||||||
|
my ($mysqld)= split " ", $ENV{MYSQLD_BOOTSTRAP_CMD};
|
||||||
|
my $mysqld_basedir=dirname($mysqld);
|
||||||
|
my $my_print_defaults= $ENV{MYSQL_MY_PRINT_DEFAULTS};
|
||||||
|
my $my_print_defaults_basedir=dirname($my_print_defaults);
|
||||||
|
my $daemonexample_ini= "$ENV{DAEMONEXAMPLE_DIR}/daemon_example.ini";
|
||||||
|
my $plugindir_ini= "$ENV{PLUGIN_DIR}/daemon_example.ini";
|
||||||
|
my $notfound= "";
|
||||||
|
open(FILE, ">", "$ENV{MYSQL_TMP_DIR}/mysqld.inc") or die;
|
||||||
|
print FILE "let \$MYSQLD= $mysqld;\n";
|
||||||
|
print FILE "let \$MYSQLD_BASEDIR= $mysqld_basedir;\n";
|
||||||
|
print FILE "let \$MYSQL_MY_PRINT_DEFAULTS_BASEDIR= $my_print_defaults_basedir;\n";
|
||||||
|
if ((!-e $daemonexample_ini) || (!-r $daemonexample_ini))
|
||||||
|
{
|
||||||
|
print FILE "let \$DAEMONEXAMPLE_DIR= $not_found;\n";
|
||||||
|
}
|
||||||
|
if ((!-e $plugindir_ini) || (!-r $plugindir_ini))
|
||||||
|
{
|
||||||
|
print FILE "let \$PLUGIN_DIR= $not_found;\n";
|
||||||
|
}
|
||||||
|
close FILE;
|
||||||
|
EOF
|
||||||
|
|
||||||
|
|
||||||
|
source $MYSQL_TMP_DIR/mysqld.inc;
|
||||||
|
remove_file $MYSQL_TMP_DIR/mysqld.inc;
|
||||||
|
|
||||||
|
# The mysql_plugin tool expects a directory structure like in the installed
|
||||||
|
# mysql version, so errmsg.sys will be copied to "basedir/share", we create
|
||||||
|
# and remove this structure.
|
||||||
|
|
||||||
|
--mkdir $MYSQLD_BASEDIR/share
|
||||||
|
--mkdir $MYSQLD_BASEDIR/share/mysql
|
||||||
|
--copy_file $MYSQL_ERRMSG_BASEDIR/english/errmsg.sys $MYSQLD_BASEDIR/share/errmsg.sys
|
||||||
|
--copy_file $MYSQL_ERRMSG_BASEDIR/english/errmsg.sys $MYSQLD_BASEDIR/share/mysql/errmsg.sys
|
||||||
|
|
||||||
|
# The mysql_plugin tool now accepts --my-print-defaults which points to the
|
||||||
|
# executable my_print_defaults.exe we can get this path from the variable
|
||||||
|
# $MYSQL_MY_PRINT_DEFAULTS.
|
||||||
|
|
||||||
|
# Check for my_print_defaults location. Skip if not found.
|
||||||
|
if ($MYSQL_MY_PRINT_DEFAULTS_BASEDIR == '')
|
||||||
|
{
|
||||||
|
--skip Test requires known location of my_print_defaults executable.
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check for mysqld location. Skip if not found.
|
||||||
|
if ($MYSQLD == '')
|
||||||
|
{
|
||||||
|
--skip Test requires known location of mysqld executable.
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check for daemon_example.ini location. Skip if not found in either
|
||||||
|
# the plugin_dir path or the daemon_example_dir path.
|
||||||
|
if ($PLUGIN_DIR == '')
|
||||||
|
{
|
||||||
|
if ($DAEMONEXAMPLE_DIR == '')
|
||||||
|
{
|
||||||
|
--skip Test requires known location of daemon_example.ini file.
|
||||||
|
}
|
||||||
|
let $PLUGIN_DIR = $DAEMONEXAMPLE_DIR;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Build client command for reuse.
|
||||||
|
|
||||||
|
let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN --datadir=$MYSQLD_DATADIR --basedir=$MYSQLD_BASEDIR --plugin-dir=$PLUGIN_DIR --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Ensure the plugin isn't loaded.
|
||||||
|
--echo #
|
||||||
|
SELECT * FROM mysql.plugin WHERE name = 'daemon_example' ORDER BY name;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Enable the plugin...
|
||||||
|
--echo #
|
||||||
|
let $expect_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect;
|
||||||
|
# MTR will remove this file later, but this might be too late.
|
||||||
|
--error 0,1
|
||||||
|
--remove_file $expect_file
|
||||||
|
--write_file $expect_file
|
||||||
|
wait
|
||||||
|
EOF
|
||||||
|
--shutdown_server 10
|
||||||
|
--source include/wait_until_disconnected.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# Enable the plugin
|
||||||
|
#
|
||||||
|
--exec $MYSQL_PLUGIN_CMD ENABLE daemon_example
|
||||||
|
|
||||||
|
#
|
||||||
|
# Ensure enabling an enabled plugin doesn't fail
|
||||||
|
--exec $MYSQL_PLUGIN_CMD ENABLE daemon_example
|
||||||
|
|
||||||
|
#
|
||||||
|
# Restart the server
|
||||||
|
#
|
||||||
|
--append_file $expect_file
|
||||||
|
restart
|
||||||
|
EOF
|
||||||
|
--enable_reconnect
|
||||||
|
--source include/wait_until_connected_again.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Ensure the plugin is now loaded.
|
||||||
|
--echo #
|
||||||
|
--replace_regex /\.dll/.so/
|
||||||
|
SELECT * FROM mysql.plugin WHERE name = 'daemon_example' ORDER BY name;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Disable the plugin...
|
||||||
|
--echo #
|
||||||
|
# MTR will remove this file later, but this might be too late.
|
||||||
|
--error 0,1
|
||||||
|
--remove_file $expect_file
|
||||||
|
--write_file $expect_file
|
||||||
|
wait
|
||||||
|
EOF
|
||||||
|
--shutdown_server 10
|
||||||
|
--source include/wait_until_disconnected.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# Disable the plugin
|
||||||
|
#
|
||||||
|
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example
|
||||||
|
|
||||||
|
#
|
||||||
|
# Restart the server
|
||||||
|
#
|
||||||
|
--append_file $expect_file
|
||||||
|
restart
|
||||||
|
EOF
|
||||||
|
--enable_reconnect
|
||||||
|
--source include/wait_until_connected_again.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Ensure the plugin isn't loaded.
|
||||||
|
--echo #
|
||||||
|
SELECT * FROM mysql.plugin WHERE name = 'daemon_example' ORDER BY name;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Stop the server for error conditions
|
||||||
|
#
|
||||||
|
let $expect_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect;
|
||||||
|
# MTR will remove this file later, but this might be too late.
|
||||||
|
--error 0,1
|
||||||
|
--remove_file $expect_file
|
||||||
|
--write_file $expect_file
|
||||||
|
wait
|
||||||
|
EOF
|
||||||
|
--shutdown_server 10
|
||||||
|
--source include/wait_until_disconnected.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Attempt to load non-existant plugin
|
||||||
|
--echo #
|
||||||
|
--error 1,2,256
|
||||||
|
--exec $MYSQL_PLUGIN_CMD DISABLE NOT_THERE_AT_ALL 2>&1
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Attempt to use non-existant plugin.ini file
|
||||||
|
--echo #
|
||||||
|
--error 1,2,7,256
|
||||||
|
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example --plugin-ini=/NOT/THERE/pi.ini 2>&1
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Attempt to omit the plugin
|
||||||
|
--echo #
|
||||||
|
--error 1,2,256
|
||||||
|
--exec $MYSQL_PLUGIN_CMD DISABLE 2>&1
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Attempt to omit DISABLE|ENABLE
|
||||||
|
--echo #
|
||||||
|
--error 1,2,256
|
||||||
|
--exec $MYSQL_PLUGIN_CMD daemon_example 2>&1
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Attempt to use bad paths - datadir
|
||||||
|
--echo #
|
||||||
|
let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=/data_not_there/ --basedir=$MYSQL_BASEDIR --plugin-dir=$PLUGIN_DIR --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
|
||||||
|
--error 1,2,256
|
||||||
|
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Attempt to use bad paths - basedir
|
||||||
|
--echo #
|
||||||
|
let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=/basedir_not_there/ --plugin-dir=$PLUGIN_DIR --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
|
||||||
|
--error 1,2,256
|
||||||
|
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Attempt to use bad paths - plugin_dir
|
||||||
|
--echo #
|
||||||
|
let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=$MYSQL_BASEDIR --plugin-dir=/plugin_not_there/ --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
|
||||||
|
--error 1,2,256
|
||||||
|
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Attempt to use bad paths - mysqld
|
||||||
|
--echo #
|
||||||
|
let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=$MYSQL_BASEDIR --plugin-dir=$PLUGIN_DIR --mysqld=/mysqld_not_there/ --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
|
||||||
|
--error 1,2,256
|
||||||
|
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Attempt to use bad paths - my_print_defaults
|
||||||
|
--echo #
|
||||||
|
let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=$MYSQL_BASEDIR --plugin-dir=$PLUGIN_DIR --mysqld=$MYSQLD_BASEDIR --my-print-defaults=/my_print_defaults_not_there/;
|
||||||
|
--error 1,2,256
|
||||||
|
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Missing library
|
||||||
|
--echo #
|
||||||
|
let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=$MYSQL_BASEDIR --plugin-dir=$PLUGIN_DIR --plugin-ini=$MYSQL_TEST_DIR/include/daemon_example_bad_soname.ini --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
|
||||||
|
--error 1,2,256
|
||||||
|
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bad format for config file
|
||||||
|
--echo #
|
||||||
|
let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=$MYSQL_BASEDIR --plugin-dir=$PLUGIN_DIR --plugin-ini=$MYSQL_TEST_DIR/include/daemon_example_bad_format.ini --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
|
||||||
|
--error 1,2,256
|
||||||
|
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Missing base_dir option
|
||||||
|
--echo #
|
||||||
|
let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --plugin-dir=$PLUGIN_DIR --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
|
||||||
|
--error 1,2,139,256
|
||||||
|
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Missing data_dir option
|
||||||
|
--echo #
|
||||||
|
let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --basedir=$MYSQL_BASEDIR --plugin-dir=$PLUGIN_DIR --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
|
||||||
|
--error 1,2,139,256
|
||||||
|
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Missing plugin_dir option
|
||||||
|
--echo #
|
||||||
|
let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQL_DATADIR --basedir=$MYSQL_BASEDIR --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
|
||||||
|
--error 1,2,139,256
|
||||||
|
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Show the help.
|
||||||
|
--echo #
|
||||||
|
replace_result $MYSQL_PLUGIN mysql_plugin;
|
||||||
|
--replace_regex /Ver [0-9.]+ Distrib [0-9.]+/Ver V.V.VV Distrib XX.XX.XX/ /XX-m[0-9]+/XX/
|
||||||
|
--exec $MYSQL_PLUGIN --help
|
||||||
|
|
||||||
|
replace_result $MYSQL_PLUGIN mysql_plugin;
|
||||||
|
--replace_regex /Ver [0-9.]+ Distrib [0-9.]+/Ver V.V.VV Distrib XX.XX.XX/ /XX-m[0-9]+/XX/
|
||||||
|
--exec $MYSQL_PLUGIN --version
|
||||||
|
|
||||||
|
#
|
||||||
|
# Restart the server
|
||||||
|
#
|
||||||
|
--append_file $expect_file
|
||||||
|
restart
|
||||||
|
EOF
|
||||||
|
--enable_reconnect
|
||||||
|
--source include/wait_until_connected_again.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# Cleanup
|
||||||
|
# MTR will remove this file later, but this might be too late.
|
||||||
|
--error 0,1
|
||||||
|
--remove_file $expect_file
|
||||||
|
|
||||||
|
# Cleanup the share folder in the binary path.
|
||||||
|
--remove_file $MYSQLD_BASEDIR/share/errmsg.sys
|
||||||
|
--rmdir $MYSQLD_BASEDIR/share/mysql
|
||||||
|
--rmdir $MYSQLD_BASEDIR/share
|
||||||
|
|
||||||
|
--enable_abort_on_error
|
@ -8376,6 +8376,33 @@ SET @@GLOBAL.init_connect= @old_init_connect;
|
|||||||
DROP PROCEDURE p2;
|
DROP PROCEDURE p2;
|
||||||
DROP PROCEDURE p5;
|
DROP PROCEDURE p5;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#11766594 59736: SELECT DISTINCT.. INCORRECT RESULT WITH DETERMINISTIC FUNCTION IN WHERE C
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a INT, b INT, KEY(b));
|
||||||
|
CREATE TABLE t2 (c INT, d INT, KEY(c));
|
||||||
|
INSERT INTO t1 VALUES (1,1),(1,1),(1,2);
|
||||||
|
INSERT INTO t2 VALUES (1,1),(1,2);
|
||||||
|
|
||||||
|
DELIMITER $;
|
||||||
|
|
||||||
|
CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
|
||||||
|
BEGIN
|
||||||
|
DECLARE a int;
|
||||||
|
-- SQL statement inside
|
||||||
|
SELECT 1 INTO a;
|
||||||
|
RETURN a;
|
||||||
|
END $
|
||||||
|
|
||||||
|
DELIMITER ;$
|
||||||
|
|
||||||
|
SELECT COUNT(DISTINCT d) FROM t1, t2 WHERE a = c AND b = f1();
|
||||||
|
|
||||||
|
DROP FUNCTION f1;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
|
||||||
--echo # ------------------------------------------------------------------
|
--echo # ------------------------------------------------------------------
|
||||||
--echo # -- End of 5.1 tests
|
--echo # -- End of 5.1 tests
|
||||||
--echo # ------------------------------------------------------------------
|
--echo # ------------------------------------------------------------------
|
||||||
|
@ -598,6 +598,39 @@ select distinct f1, bug13575(f1) from t3 order by f1|
|
|||||||
drop function bug13575|
|
drop function bug13575|
|
||||||
drop table t3|
|
drop table t3|
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#11758414: Default storage_engine not honored when set
|
||||||
|
# from within a stored procedure
|
||||||
|
#
|
||||||
|
SELECT @@GLOBAL.storage_engine INTO @old_engine|
|
||||||
|
SET @@GLOBAL.storage_engine=InnoDB|
|
||||||
|
SET @@SESSION.storage_engine=InnoDB|
|
||||||
|
# show defaults at define-time
|
||||||
|
SHOW GLOBAL VARIABLES LIKE 'storage_engine'|
|
||||||
|
SHOW SESSION VARIABLES LIKE 'storage_engine'|
|
||||||
|
CREATE PROCEDURE bug11758414()
|
||||||
|
BEGIN
|
||||||
|
SET @@GLOBAL.storage_engine="MyISAM";
|
||||||
|
SET @@SESSION.storage_engine="MyISAM";
|
||||||
|
# show defaults at execution time / that setting them worked
|
||||||
|
SHOW GLOBAL VARIABLES LIKE 'storage_engine';
|
||||||
|
SHOW SESSION VARIABLES LIKE 'storage_engine';
|
||||||
|
CREATE TABLE t1 (id int);
|
||||||
|
CREATE TABLE t2 (id int) ENGINE=InnoDB;
|
||||||
|
# show we're heeding the default (at run-time, not parse-time!)
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
# show that we didn't break explicit override with ENGINE=...
|
||||||
|
SHOW CREATE TABLE t2;
|
||||||
|
END;
|
||||||
|
|
|
||||||
|
CALL bug11758414|
|
||||||
|
# show that changing defaults within SP stuck
|
||||||
|
SHOW GLOBAL VARIABLES LIKE 'storage_engine'|
|
||||||
|
SHOW SESSION VARIABLES LIKE 'storage_engine'|
|
||||||
|
DROP PROCEDURE bug11758414|
|
||||||
|
DROP TABLE t1, t2|
|
||||||
|
SET @@GLOBAL.storage_engine=@old_engine|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 5.1 tests
|
--echo # End of 5.1 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -15,3 +15,5 @@
|
|||||||
|
|
||||||
MYSQL_ADD_PLUGIN(daemon_example daemon_example.cc
|
MYSQL_ADD_PLUGIN(daemon_example daemon_example.cc
|
||||||
MODULE_ONLY MODULE_OUTPUT_NAME "libdaemon_example")
|
MODULE_ONLY MODULE_OUTPUT_NAME "libdaemon_example")
|
||||||
|
|
||||||
|
INSTALL(FILES daemon_example.ini DESTINATION ${INSTALL_PLUGINDIR})
|
||||||
|
9
plugin/daemon_example/daemon_example.ini
Normal file
9
plugin/daemon_example/daemon_example.ini
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Plugin configuration file. Place the following on a separate line:
|
||||||
|
#
|
||||||
|
# library binary file name (without .so or .dll)
|
||||||
|
# component_name
|
||||||
|
# [component_name] - additional components in plugin
|
||||||
|
#
|
||||||
|
libdaemon_example
|
||||||
|
daemon_example
|
@ -2747,7 +2747,7 @@ String *Item_time_typecast::val_str(String *str)
|
|||||||
|
|
||||||
bool Item_date_typecast::get_date(MYSQL_TIME *ltime, uint fuzzy_date)
|
bool Item_date_typecast::get_date(MYSQL_TIME *ltime, uint fuzzy_date)
|
||||||
{
|
{
|
||||||
bool res= get_arg0_date(ltime, TIME_FUZZY_DATE);
|
bool res= get_arg0_date(ltime, fuzzy_date);
|
||||||
ltime->hour= ltime->minute= ltime->second= ltime->second_part= 0;
|
ltime->hour= ltime->minute= ltime->second= ltime->second_part= 0;
|
||||||
ltime->time_type= MYSQL_TIMESTAMP_DATE;
|
ltime->time_type= MYSQL_TIMESTAMP_DATE;
|
||||||
return res;
|
return res;
|
||||||
|
@ -89,6 +89,69 @@ bool No_such_table_error_handler::safely_trapped_errors()
|
|||||||
return ((m_handled_errors > 0) && (m_unhandled_errors == 0));
|
return ((m_handled_errors > 0) && (m_unhandled_errors == 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
This internal handler is used to trap ER_NO_SUCH_TABLE and
|
||||||
|
ER_WRONG_MRG_TABLE errors during CHECK/REPAIR TABLE for MERGE
|
||||||
|
tables.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Repair_mrg_table_error_handler : public Internal_error_handler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Repair_mrg_table_error_handler()
|
||||||
|
: m_handled_errors(false), m_unhandled_errors(false)
|
||||||
|
{}
|
||||||
|
|
||||||
|
bool handle_condition(THD *thd,
|
||||||
|
uint sql_errno,
|
||||||
|
const char* sqlstate,
|
||||||
|
MYSQL_ERROR::enum_warning_level level,
|
||||||
|
const char* msg,
|
||||||
|
MYSQL_ERROR ** cond_hdl);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns TRUE if there were ER_NO_SUCH_/WRONG_MRG_TABLE and there
|
||||||
|
were no unhandled errors. FALSE otherwise.
|
||||||
|
*/
|
||||||
|
bool safely_trapped_errors()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Check for m_handled_errors is here for extra safety.
|
||||||
|
It can be useful in situation when call to open_table()
|
||||||
|
fails because some error which was suppressed by another
|
||||||
|
error handler (e.g. in case of MDL deadlock which we
|
||||||
|
decided to solve by back-off and retry).
|
||||||
|
*/
|
||||||
|
return (m_handled_errors && (! m_unhandled_errors));
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_handled_errors;
|
||||||
|
bool m_unhandled_errors;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
Repair_mrg_table_error_handler::handle_condition(THD *,
|
||||||
|
uint sql_errno,
|
||||||
|
const char*,
|
||||||
|
MYSQL_ERROR::enum_warning_level level,
|
||||||
|
const char*,
|
||||||
|
MYSQL_ERROR ** cond_hdl)
|
||||||
|
{
|
||||||
|
*cond_hdl= NULL;
|
||||||
|
if (sql_errno == ER_NO_SUCH_TABLE || sql_errno == ER_WRONG_MRG_TABLE)
|
||||||
|
{
|
||||||
|
m_handled_errors= true;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_unhandled_errors= true;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@defgroup Data_Dictionary Data Dictionary
|
@defgroup Data_Dictionary Data Dictionary
|
||||||
@{
|
@{
|
||||||
@ -4377,6 +4440,20 @@ open_and_process_table(THD *thd, LEX *lex, TABLE_LIST *tables,
|
|||||||
thd->pop_internal_handler();
|
thd->pop_internal_handler();
|
||||||
safe_to_ignore_table= no_such_table_handler.safely_trapped_errors();
|
safe_to_ignore_table= no_such_table_handler.safely_trapped_errors();
|
||||||
}
|
}
|
||||||
|
else if (tables->parent_l && (thd->open_options & HA_OPEN_FOR_REPAIR))
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Also fail silently for underlying tables of a MERGE table if this
|
||||||
|
table is opened for CHECK/REPAIR TABLE statement. This is needed
|
||||||
|
to provide complete list of problematic underlying tables in
|
||||||
|
CHECK/REPAIR TABLE output.
|
||||||
|
*/
|
||||||
|
Repair_mrg_table_error_handler repair_mrg_table_handler;
|
||||||
|
thd->push_internal_handler(&repair_mrg_table_handler);
|
||||||
|
error= open_table(thd, tables, new_frm_mem, ot_ctx);
|
||||||
|
thd->pop_internal_handler();
|
||||||
|
safe_to_ignore_table= repair_mrg_table_handler.safely_trapped_errors();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
error= open_table(thd, tables, new_frm_mem, ot_ctx);
|
error= open_table(thd, tables, new_frm_mem, ot_ctx);
|
||||||
|
|
||||||
@ -7811,7 +7888,7 @@ bool setup_fields(THD *thd, Item **ref_pointer_array,
|
|||||||
if (item->with_sum_func && item->type() != Item::SUM_FUNC_ITEM &&
|
if (item->with_sum_func && item->type() != Item::SUM_FUNC_ITEM &&
|
||||||
sum_func_list)
|
sum_func_list)
|
||||||
item->split_sum_func(thd, ref_pointer_array, *sum_func_list);
|
item->split_sum_func(thd, ref_pointer_array, *sum_func_list);
|
||||||
thd->used_tables|= item->used_tables();
|
thd->lex->used_tables|= item->used_tables();
|
||||||
thd->lex->current_select->cur_pos_in_select_list++;
|
thd->lex->current_select->cur_pos_in_select_list++;
|
||||||
}
|
}
|
||||||
thd->lex->current_select->is_item_list_lookup= save_is_item_list_lookup;
|
thd->lex->current_select->is_item_list_lookup= save_is_item_list_lookup;
|
||||||
@ -8158,7 +8235,7 @@ insert_fields(THD *thd, Name_resolution_context *context, const char *db_name,
|
|||||||
views and natural joins this update is performed inside the loop below.
|
views and natural joins this update is performed inside the loop below.
|
||||||
*/
|
*/
|
||||||
if (table)
|
if (table)
|
||||||
thd->used_tables|= table->map;
|
thd->lex->used_tables|= table->map;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Initialize a generic field iterator for the current table reference.
|
Initialize a generic field iterator for the current table reference.
|
||||||
@ -8243,7 +8320,7 @@ insert_fields(THD *thd, Name_resolution_context *context, const char *db_name,
|
|||||||
field_table= nj_col->table_ref->table;
|
field_table= nj_col->table_ref->table;
|
||||||
if (field_table)
|
if (field_table)
|
||||||
{
|
{
|
||||||
thd->used_tables|= field_table->map;
|
thd->lex->used_tables|= field_table->map;
|
||||||
field_table->covering_keys.intersect(field->part_of_key);
|
field_table->covering_keys.intersect(field->part_of_key);
|
||||||
field_table->merge_keys.merge(field->part_of_key);
|
field_table->merge_keys.merge(field->part_of_key);
|
||||||
field_table->used_fields++;
|
field_table->used_fields++;
|
||||||
@ -8251,7 +8328,7 @@ insert_fields(THD *thd, Name_resolution_context *context, const char *db_name,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
thd->used_tables|= item->used_tables();
|
thd->lex->used_tables|= item->used_tables();
|
||||||
thd->lex->current_select->cur_pos_in_select_list++;
|
thd->lex->current_select->cur_pos_in_select_list++;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
@ -795,7 +795,6 @@ THD::THD()
|
|||||||
is_slave_error= thread_specific_used= FALSE;
|
is_slave_error= thread_specific_used= FALSE;
|
||||||
my_hash_clear(&handler_tables_hash);
|
my_hash_clear(&handler_tables_hash);
|
||||||
tmp_table=0;
|
tmp_table=0;
|
||||||
used_tables=0;
|
|
||||||
cuted_fields= 0L;
|
cuted_fields= 0L;
|
||||||
sent_row_count= 0L;
|
sent_row_count= 0L;
|
||||||
limit_found_rows= 0;
|
limit_found_rows= 0;
|
||||||
|
@ -1960,13 +1960,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
ha_rows examined_row_count;
|
ha_rows examined_row_count;
|
||||||
|
|
||||||
/*
|
|
||||||
The set of those tables whose fields are referenced in all subqueries
|
|
||||||
of the query.
|
|
||||||
TODO: possibly this it is incorrect to have used tables in THD because
|
|
||||||
with more than one subquery, it is not clear what does the field mean.
|
|
||||||
*/
|
|
||||||
table_map used_tables;
|
|
||||||
USER_CONN *user_connect;
|
USER_CONN *user_connect;
|
||||||
CHARSET_INFO *db_charset;
|
CHARSET_INFO *db_charset;
|
||||||
Warning_info *warning_info;
|
Warning_info *warning_info;
|
||||||
|
@ -717,7 +717,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
|
|||||||
lock_type= table_list->lock_type;
|
lock_type= table_list->lock_type;
|
||||||
|
|
||||||
thd_proc_info(thd, "init");
|
thd_proc_info(thd, "init");
|
||||||
thd->used_tables=0;
|
thd->lex->used_tables=0;
|
||||||
values= its++;
|
values= its++;
|
||||||
value_count= values->elements;
|
value_count= values->elements;
|
||||||
|
|
||||||
@ -872,7 +872,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (thd->used_tables) // Column used in values()
|
if (thd->lex->used_tables) // Column used in values()
|
||||||
restore_record(table,s->default_values); // Get empty record
|
restore_record(table,s->default_values); // Get empty record
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1610,9 +1610,6 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
|
|||||||
goto before_trg_err;
|
goto before_trg_err;
|
||||||
|
|
||||||
table->file->restore_auto_increment(prev_insert_id);
|
table->file->restore_auto_increment(prev_insert_id);
|
||||||
if (table->next_number_field)
|
|
||||||
table->file->adjust_next_insert_id_after_explicit_value(
|
|
||||||
table->next_number_field->val_int());
|
|
||||||
info->touched++;
|
info->touched++;
|
||||||
if (!records_are_comparable(table) || compare_records(table))
|
if (!records_are_comparable(table) || compare_records(table))
|
||||||
{
|
{
|
||||||
@ -1649,8 +1646,6 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
|
|||||||
if (table->next_number_field)
|
if (table->next_number_field)
|
||||||
table->file->adjust_next_insert_id_after_explicit_value(
|
table->file->adjust_next_insert_id_after_explicit_value(
|
||||||
table->next_number_field->val_int());
|
table->next_number_field->val_int());
|
||||||
info->touched++;
|
|
||||||
|
|
||||||
goto ok_or_after_trg_err;
|
goto ok_or_after_trg_err;
|
||||||
}
|
}
|
||||||
else /* DUP_REPLACE */
|
else /* DUP_REPLACE */
|
||||||
|
@ -434,6 +434,7 @@ void lex_start(THD *thd)
|
|||||||
lex->server_options.port= -1;
|
lex->server_options.port= -1;
|
||||||
|
|
||||||
lex->is_lex_started= TRUE;
|
lex->is_lex_started= TRUE;
|
||||||
|
lex->used_tables= 0;
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2396,6 +2396,16 @@ struct LEX: public Query_tables_list
|
|||||||
bool escape_used;
|
bool escape_used;
|
||||||
bool is_lex_started; /* If lex_start() did run. For debugging. */
|
bool is_lex_started; /* If lex_start() did run. For debugging. */
|
||||||
|
|
||||||
|
/*
|
||||||
|
The set of those tables whose fields are referenced in all subqueries
|
||||||
|
of the query.
|
||||||
|
TODO: possibly this it is incorrect to have used tables in LEX because
|
||||||
|
with subquery, it is not clear what does the field mean. To fix this
|
||||||
|
we should aggregate used tables information for selected expressions
|
||||||
|
into the select_lex.
|
||||||
|
*/
|
||||||
|
table_map used_tables;
|
||||||
|
|
||||||
LEX();
|
LEX();
|
||||||
|
|
||||||
virtual ~LEX()
|
virtual ~LEX()
|
||||||
|
@ -2347,6 +2347,12 @@ case SQLCOM_PREPARE:
|
|||||||
create_table->table_name))
|
create_table->table_name))
|
||||||
goto end_with_restore_list;
|
goto end_with_restore_list;
|
||||||
#endif
|
#endif
|
||||||
|
/*
|
||||||
|
If no engine type was given, work out the default now
|
||||||
|
rather than at parse-time.
|
||||||
|
*/
|
||||||
|
if (!(create_info.used_fields & HA_CREATE_USED_ENGINE))
|
||||||
|
create_info.db_type= ha_default_handlerton(thd);
|
||||||
/*
|
/*
|
||||||
If we are using SET CHARSET without DEFAULT, add an implicit
|
If we are using SET CHARSET without DEFAULT, add an implicit
|
||||||
DEFAULT to not confuse old users. (This may change).
|
DEFAULT to not confuse old users. (This may change).
|
||||||
|
@ -1474,7 +1474,7 @@ static int mysql_test_select(Prepared_statement *stmt,
|
|||||||
if (open_normal_and_derived_tables(thd, tables, MYSQL_OPEN_FORCE_SHARED_MDL))
|
if (open_normal_and_derived_tables(thd, tables, MYSQL_OPEN_FORCE_SHARED_MDL))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
thd->used_tables= 0; // Updated by setup_fields
|
thd->lex->used_tables= 0; // Updated by setup_fields
|
||||||
|
|
||||||
/*
|
/*
|
||||||
JOIN::prepare calls
|
JOIN::prepare calls
|
||||||
@ -1646,7 +1646,7 @@ static bool select_like_stmt_test(Prepared_statement *stmt,
|
|||||||
if (specific_prepare && (*specific_prepare)(thd))
|
if (specific_prepare && (*specific_prepare)(thd))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
|
|
||||||
thd->used_tables= 0; // Updated by setup_fields
|
thd->lex->used_tables= 0; // Updated by setup_fields
|
||||||
|
|
||||||
/* Calls JOIN::prepare */
|
/* Calls JOIN::prepare */
|
||||||
DBUG_RETURN(lex->unit.prepare(thd, 0, setup_tables_done_option));
|
DBUG_RETURN(lex->unit.prepare(thd, 0, setup_tables_done_option));
|
||||||
|
@ -435,7 +435,7 @@ fix_inner_refs(THD *thd, List<Item> &all_fields, SELECT_LEX *select,
|
|||||||
|
|
||||||
if (!ref->fixed && ref->fix_fields(thd, 0))
|
if (!ref->fixed && ref->fix_fields(thd, 0))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
thd->used_tables|= item->used_tables();
|
thd->lex->used_tables|= item->used_tables();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1675,7 +1675,7 @@ JOIN::optimize()
|
|||||||
|
|
||||||
if (exec_tmp_table1->distinct)
|
if (exec_tmp_table1->distinct)
|
||||||
{
|
{
|
||||||
table_map used_tables= thd->used_tables;
|
table_map used_tables= thd->lex->used_tables;
|
||||||
JOIN_TAB *last_join_tab= join_tab+tables-1;
|
JOIN_TAB *last_join_tab= join_tab+tables-1;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -2552,7 +2552,7 @@ mysql_select(THD *thd, Item ***rref_pointer_array,
|
|||||||
if (!(join= new JOIN(thd, fields, select_options, result)))
|
if (!(join= new JOIN(thd, fields, select_options, result)))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
thd_proc_info(thd, "init");
|
thd_proc_info(thd, "init");
|
||||||
thd->used_tables=0; // Updated by setup_fields
|
thd->lex->used_tables=0; // Updated by setup_fields
|
||||||
err= join->prepare(rref_pointer_array, tables, wild_num,
|
err= join->prepare(rref_pointer_array, tables, wild_num,
|
||||||
conds, og_num, order, group, having, proc_param,
|
conds, og_num, order, group, having, proc_param,
|
||||||
select_lex, unit);
|
select_lex, unit);
|
||||||
@ -17032,7 +17032,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
|
|||||||
need_order=0;
|
need_order=0;
|
||||||
extra.append(STRING_WITH_LEN("; Using filesort"));
|
extra.append(STRING_WITH_LEN("; Using filesort"));
|
||||||
}
|
}
|
||||||
if (distinct & test_all_bits(used_tables,thd->used_tables))
|
if (distinct & test_all_bits(used_tables, thd->lex->used_tables))
|
||||||
extra.append(STRING_WITH_LEN("; Distinct"));
|
extra.append(STRING_WITH_LEN("; Distinct"));
|
||||||
|
|
||||||
for (uint part= 0; part < tab->ref.key_parts; part++)
|
for (uint part= 0; part < tab->ref.key_parts; part++)
|
||||||
|
@ -3157,6 +3157,10 @@ end:
|
|||||||
*/
|
*/
|
||||||
thd->temporary_tables= NULL;
|
thd->temporary_tables= NULL;
|
||||||
close_thread_tables(thd);
|
close_thread_tables(thd);
|
||||||
|
/*
|
||||||
|
Release metadata lock we might have acquired.
|
||||||
|
See comment in fill_schema_table_from_frm() for details.
|
||||||
|
*/
|
||||||
thd->mdl_context.rollback_to_savepoint(open_tables_state_backup->mdl_system_tables_svp);
|
thd->mdl_context.rollback_to_savepoint(open_tables_state_backup->mdl_system_tables_svp);
|
||||||
|
|
||||||
thd->lex= old_lex;
|
thd->lex= old_lex;
|
||||||
@ -3339,6 +3343,9 @@ try_acquire_high_prio_shared_mdl_lock(THD *thd, TABLE_LIST *table,
|
|||||||
@param[in] db_name database name
|
@param[in] db_name database name
|
||||||
@param[in] table_name table name
|
@param[in] table_name table name
|
||||||
@param[in] schema_table_idx I_S table index
|
@param[in] schema_table_idx I_S table index
|
||||||
|
@param[in] open_tables_state_backup Open_tables_state object which is used
|
||||||
|
to save/restore original state of metadata
|
||||||
|
locks.
|
||||||
@param[in] can_deadlock Indicates that deadlocks are possible
|
@param[in] can_deadlock Indicates that deadlocks are possible
|
||||||
due to metadata locks, so to avoid
|
due to metadata locks, so to avoid
|
||||||
them we should not wait in case if
|
them we should not wait in case if
|
||||||
@ -3356,6 +3363,7 @@ static int fill_schema_table_from_frm(THD *thd, TABLE_LIST *tables,
|
|||||||
LEX_STRING *db_name,
|
LEX_STRING *db_name,
|
||||||
LEX_STRING *table_name,
|
LEX_STRING *table_name,
|
||||||
enum enum_schema_tables schema_table_idx,
|
enum enum_schema_tables schema_table_idx,
|
||||||
|
Open_tables_backup *open_tables_state_backup,
|
||||||
bool can_deadlock)
|
bool can_deadlock)
|
||||||
{
|
{
|
||||||
TABLE *table= tables->table;
|
TABLE *table= tables->table;
|
||||||
@ -3501,13 +3509,27 @@ end_share:
|
|||||||
|
|
||||||
end_unlock:
|
end_unlock:
|
||||||
mysql_mutex_unlock(&LOCK_open);
|
mysql_mutex_unlock(&LOCK_open);
|
||||||
/*
|
|
||||||
Don't release the MDL lock, it can be part of a transaction.
|
|
||||||
If it is not, it will be released by the call to
|
|
||||||
MDL_context::rollback_to_savepoint() in the caller.
|
|
||||||
*/
|
|
||||||
|
|
||||||
end:
|
end:
|
||||||
|
/*
|
||||||
|
Release metadata lock we might have acquired.
|
||||||
|
|
||||||
|
Without this step metadata locks acquired for each table processed
|
||||||
|
will be accumulated. In situation when a lot of tables are processed
|
||||||
|
by I_S query this will result in transaction with too many metadata
|
||||||
|
locks. As result performance of acquisition of new lock will suffer.
|
||||||
|
|
||||||
|
Of course, the fact that we don't hold metadata lock on tables which
|
||||||
|
were processed till the end of I_S query makes execution less isolated
|
||||||
|
from concurrent DDL. Consequently one might get 'dirty' results from
|
||||||
|
such a query. But we have never promised serializability of I_S queries
|
||||||
|
anyway.
|
||||||
|
|
||||||
|
We don't have any tables open since we took backup, so rolling back to
|
||||||
|
savepoint is safe.
|
||||||
|
*/
|
||||||
|
DBUG_ASSERT(thd->open_tables == NULL);
|
||||||
|
thd->mdl_context.rollback_to_savepoint(open_tables_state_backup->mdl_system_tables_svp);
|
||||||
thd->clear_error();
|
thd->clear_error();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -3758,6 +3780,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||||||
int res= fill_schema_table_from_frm(thd, tables, schema_table,
|
int res= fill_schema_table_from_frm(thd, tables, schema_table,
|
||||||
db_name, table_name,
|
db_name, table_name,
|
||||||
schema_table_idx,
|
schema_table_idx,
|
||||||
|
&open_tables_state_backup,
|
||||||
can_deadlock);
|
can_deadlock);
|
||||||
|
|
||||||
thd->pop_internal_handler();
|
thd->pop_internal_handler();
|
||||||
|
@ -2038,7 +2038,6 @@ create:
|
|||||||
lex->change=NullS;
|
lex->change=NullS;
|
||||||
bzero((char*) &lex->create_info,sizeof(lex->create_info));
|
bzero((char*) &lex->create_info,sizeof(lex->create_info));
|
||||||
lex->create_info.options=$2 | $4;
|
lex->create_info.options=$2 | $4;
|
||||||
lex->create_info.db_type= ha_default_handlerton(thd);
|
|
||||||
lex->create_info.default_table_charset= NULL;
|
lex->create_info.default_table_charset= NULL;
|
||||||
lex->name.str= 0;
|
lex->name.str= 0;
|
||||||
lex->name.length= 0;
|
lex->name.length= 0;
|
||||||
@ -2048,7 +2047,8 @@ create:
|
|||||||
{
|
{
|
||||||
LEX *lex= YYTHD->lex;
|
LEX *lex= YYTHD->lex;
|
||||||
lex->current_select= &lex->select_lex;
|
lex->current_select= &lex->select_lex;
|
||||||
if (!lex->create_info.db_type)
|
if ((lex->create_info.used_fields & HA_CREATE_USED_ENGINE) &&
|
||||||
|
!lex->create_info.db_type)
|
||||||
{
|
{
|
||||||
lex->create_info.db_type= ha_default_handlerton(YYTHD);
|
lex->create_info.db_type= ha_default_handlerton(YYTHD);
|
||||||
push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN,
|
push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||||
@ -5036,8 +5036,7 @@ create_table_option:
|
|||||||
ENGINE_SYM opt_equal storage_engines
|
ENGINE_SYM opt_equal storage_engines
|
||||||
{
|
{
|
||||||
Lex->create_info.db_type= $3;
|
Lex->create_info.db_type= $3;
|
||||||
if ($3)
|
Lex->create_info.used_fields|= HA_CREATE_USED_ENGINE;
|
||||||
Lex->create_info.used_fields|= HA_CREATE_USED_ENGINE;
|
|
||||||
}
|
}
|
||||||
| MAX_ROWS opt_equal ulonglong_num
|
| MAX_ROWS opt_equal ulonglong_num
|
||||||
{
|
{
|
||||||
@ -6748,6 +6747,11 @@ alter_list_item:
|
|||||||
{
|
{
|
||||||
LEX *lex=Lex;
|
LEX *lex=Lex;
|
||||||
lex->alter_info.flags|= ALTER_OPTIONS;
|
lex->alter_info.flags|= ALTER_OPTIONS;
|
||||||
|
if ((lex->create_info.used_fields & HA_CREATE_USED_ENGINE) &&
|
||||||
|
!lex->create_info.db_type)
|
||||||
|
{
|
||||||
|
lex->create_info.used_fields&= ~HA_CREATE_USED_ENGINE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
| FORCE_SYM
|
| FORCE_SYM
|
||||||
{
|
{
|
||||||
@ -11306,7 +11310,10 @@ flush_option:
|
|||||||
| STATUS_SYM
|
| STATUS_SYM
|
||||||
{ Lex->type|= REFRESH_STATUS; }
|
{ Lex->type|= REFRESH_STATUS; }
|
||||||
| SLAVE
|
| SLAVE
|
||||||
{ Lex->type|= REFRESH_SLAVE; }
|
{
|
||||||
|
Lex->type|= REFRESH_SLAVE;
|
||||||
|
Lex->reset_slave_info.all= false;
|
||||||
|
}
|
||||||
| MASTER_SYM
|
| MASTER_SYM
|
||||||
{ Lex->type|= REFRESH_MASTER; }
|
{ Lex->type|= REFRESH_MASTER; }
|
||||||
| DES_KEY_FILE
|
| DES_KEY_FILE
|
||||||
|
@ -7898,6 +7898,8 @@ ha_innobase::info_low(
|
|||||||
|
|
||||||
if (flag & HA_STATUS_VARIABLE) {
|
if (flag & HA_STATUS_VARIABLE) {
|
||||||
|
|
||||||
|
ulint page_size;
|
||||||
|
|
||||||
dict_table_stats_lock(ib_table, RW_S_LATCH);
|
dict_table_stats_lock(ib_table, RW_S_LATCH);
|
||||||
|
|
||||||
n_rows = ib_table->stat_n_rows;
|
n_rows = ib_table->stat_n_rows;
|
||||||
@ -7940,14 +7942,19 @@ ha_innobase::info_low(
|
|||||||
prebuilt->autoinc_last_value = 0;
|
prebuilt->autoinc_last_value = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
page_size = dict_table_zip_size(ib_table);
|
||||||
|
if (page_size == 0) {
|
||||||
|
page_size = UNIV_PAGE_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
stats.records = (ha_rows)n_rows;
|
stats.records = (ha_rows)n_rows;
|
||||||
stats.deleted = 0;
|
stats.deleted = 0;
|
||||||
stats.data_file_length = ((ulonglong)
|
stats.data_file_length
|
||||||
ib_table->stat_clustered_index_size)
|
= ((ulonglong) ib_table->stat_clustered_index_size)
|
||||||
* UNIV_PAGE_SIZE;
|
* page_size;
|
||||||
stats.index_file_length = ((ulonglong)
|
stats.index_file_length =
|
||||||
ib_table->stat_sum_of_other_index_sizes)
|
((ulonglong) ib_table->stat_sum_of_other_index_sizes)
|
||||||
* UNIV_PAGE_SIZE;
|
* page_size;
|
||||||
|
|
||||||
dict_table_stats_unlock(ib_table, RW_S_LATCH);
|
dict_table_stats_unlock(ib_table, RW_S_LATCH);
|
||||||
|
|
||||||
|
@ -2541,6 +2541,8 @@ row_sel_field_store_in_mysql_format(
|
|||||||
|
|
||||||
ut_ad(len != UNIV_SQL_NULL);
|
ut_ad(len != UNIV_SQL_NULL);
|
||||||
UNIV_MEM_ASSERT_RW(data, len);
|
UNIV_MEM_ASSERT_RW(data, len);
|
||||||
|
UNIV_MEM_ASSERT_W(dest, templ->mysql_col_len);
|
||||||
|
UNIV_MEM_INVALID(dest, templ->mysql_col_len);
|
||||||
|
|
||||||
switch (templ->type) {
|
switch (templ->type) {
|
||||||
const byte* field_end;
|
const byte* field_end;
|
||||||
@ -2579,14 +2581,16 @@ row_sel_field_store_in_mysql_format(
|
|||||||
|
|
||||||
dest = row_mysql_store_true_var_len(
|
dest = row_mysql_store_true_var_len(
|
||||||
dest, len, templ->mysql_length_bytes);
|
dest, len, templ->mysql_length_bytes);
|
||||||
|
/* Copy the actual data. Leave the rest of the
|
||||||
|
buffer uninitialized. */
|
||||||
|
memcpy(dest, data, len);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy the actual data */
|
/* Copy the actual data */
|
||||||
ut_memcpy(dest, data, len);
|
ut_memcpy(dest, data, len);
|
||||||
|
|
||||||
/* Pad with trailing spaces. We pad with spaces also the
|
/* Pad with trailing spaces. */
|
||||||
unused end of a >= 5.0.3 true VARCHAR column, just in case
|
|
||||||
MySQL expects its contents to be deterministic. */
|
|
||||||
|
|
||||||
pad = dest + len;
|
pad = dest + len;
|
||||||
|
|
||||||
@ -3112,6 +3116,39 @@ sel_restore_position_for_mysql(
|
|||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/********************************************************************//**
|
||||||
|
Copies a cached field for MySQL from the fetch cache. */
|
||||||
|
static
|
||||||
|
void
|
||||||
|
row_sel_copy_cached_field_for_mysql(
|
||||||
|
/*================================*/
|
||||||
|
byte* buf, /*!< in/out: row buffer */
|
||||||
|
const byte* cache, /*!< in: cached row */
|
||||||
|
const mysql_row_templ_t*templ) /*!< in: column template */
|
||||||
|
{
|
||||||
|
ulint len;
|
||||||
|
|
||||||
|
buf += templ->mysql_col_offset;
|
||||||
|
cache += templ->mysql_col_offset;
|
||||||
|
|
||||||
|
UNIV_MEM_ASSERT_W(buf, templ->mysql_col_len);
|
||||||
|
|
||||||
|
if (templ->mysql_type == DATA_MYSQL_TRUE_VARCHAR
|
||||||
|
&& templ->type != DATA_INT) {
|
||||||
|
/* Check for != DATA_INT to make sure we do
|
||||||
|
not treat MySQL ENUM or SET as a true VARCHAR!
|
||||||
|
Find the actual length of the true VARCHAR field. */
|
||||||
|
row_mysql_read_true_varchar(
|
||||||
|
&len, cache, templ->mysql_length_bytes);
|
||||||
|
len += templ->mysql_length_bytes;
|
||||||
|
UNIV_MEM_INVALID(buf, templ->mysql_col_len);
|
||||||
|
} else {
|
||||||
|
len = templ->mysql_col_len;
|
||||||
|
}
|
||||||
|
|
||||||
|
ut_memcpy(buf, cache, len);
|
||||||
|
}
|
||||||
|
|
||||||
/********************************************************************//**
|
/********************************************************************//**
|
||||||
Pops a cached row for MySQL from the fetch cache. */
|
Pops a cached row for MySQL from the fetch cache. */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
@ -3124,26 +3161,22 @@ row_sel_pop_cached_row_for_mysql(
|
|||||||
{
|
{
|
||||||
ulint i;
|
ulint i;
|
||||||
const mysql_row_templ_t*templ;
|
const mysql_row_templ_t*templ;
|
||||||
byte* cached_rec;
|
const byte* cached_rec;
|
||||||
ut_ad(prebuilt->n_fetch_cached > 0);
|
ut_ad(prebuilt->n_fetch_cached > 0);
|
||||||
ut_ad(prebuilt->mysql_prefix_len <= prebuilt->mysql_row_len);
|
ut_ad(prebuilt->mysql_prefix_len <= prebuilt->mysql_row_len);
|
||||||
|
|
||||||
|
UNIV_MEM_ASSERT_W(buf, prebuilt->mysql_row_len);
|
||||||
|
|
||||||
|
cached_rec = prebuilt->fetch_cache[prebuilt->fetch_cache_first];
|
||||||
|
|
||||||
if (UNIV_UNLIKELY(prebuilt->keep_other_fields_on_keyread)) {
|
if (UNIV_UNLIKELY(prebuilt->keep_other_fields_on_keyread)) {
|
||||||
/* Copy cache record field by field, don't touch fields that
|
/* Copy cache record field by field, don't touch fields that
|
||||||
are not covered by current key */
|
are not covered by current key */
|
||||||
cached_rec = prebuilt->fetch_cache[
|
|
||||||
prebuilt->fetch_cache_first];
|
|
||||||
|
|
||||||
for (i = 0; i < prebuilt->n_template; i++) {
|
for (i = 0; i < prebuilt->n_template; i++) {
|
||||||
templ = prebuilt->mysql_template + i;
|
templ = prebuilt->mysql_template + i;
|
||||||
#if 0 /* Some of the cached_rec may legitimately be uninitialized. */
|
row_sel_copy_cached_field_for_mysql(
|
||||||
UNIV_MEM_ASSERT_RW(cached_rec
|
buf, cached_rec, templ);
|
||||||
+ templ->mysql_col_offset,
|
|
||||||
templ->mysql_col_len);
|
|
||||||
#endif
|
|
||||||
ut_memcpy(buf + templ->mysql_col_offset,
|
|
||||||
cached_rec + templ->mysql_col_offset,
|
|
||||||
templ->mysql_col_len);
|
|
||||||
/* Copy NULL bit of the current field from cached_rec
|
/* Copy NULL bit of the current field from cached_rec
|
||||||
to buf */
|
to buf */
|
||||||
if (templ->mysql_null_bit_mask) {
|
if (templ->mysql_null_bit_mask) {
|
||||||
@ -3153,17 +3186,24 @@ row_sel_pop_cached_row_for_mysql(
|
|||||||
& (byte)templ->mysql_null_bit_mask;
|
& (byte)templ->mysql_null_bit_mask;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (prebuilt->mysql_prefix_len > 63) {
|
||||||
|
/* The record is long. Copy it field by field, in case
|
||||||
|
there are some long VARCHAR column of which only a
|
||||||
|
small length is being used. */
|
||||||
|
UNIV_MEM_INVALID(buf, prebuilt->mysql_prefix_len);
|
||||||
|
|
||||||
|
/* First copy the NULL bits. */
|
||||||
|
ut_memcpy(buf, cached_rec, prebuilt->null_bitmap_len);
|
||||||
|
/* Then copy the requested fields. */
|
||||||
|
|
||||||
|
for (i = 0; i < prebuilt->n_template; i++) {
|
||||||
|
row_sel_copy_cached_field_for_mysql(
|
||||||
|
buf, cached_rec, prebuilt->mysql_template + i);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ut_memcpy(buf, cached_rec, prebuilt->mysql_prefix_len);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
#if 0 /* Some of the cached_rec may legitimately be uninitialized. */
|
|
||||||
UNIV_MEM_ASSERT_RW(prebuilt->fetch_cache
|
|
||||||
[prebuilt->fetch_cache_first],
|
|
||||||
prebuilt->mysql_prefix_len);
|
|
||||||
#endif
|
|
||||||
ut_memcpy(buf,
|
|
||||||
prebuilt->fetch_cache[prebuilt->fetch_cache_first],
|
|
||||||
prebuilt->mysql_prefix_len);
|
|
||||||
}
|
|
||||||
prebuilt->n_fetch_cached--;
|
prebuilt->n_fetch_cached--;
|
||||||
prebuilt->fetch_cache_first++;
|
prebuilt->fetch_cache_first++;
|
||||||
|
|
||||||
|
@ -159,9 +159,14 @@ extern "C" void myrg_print_wrong_table(const char *table_name)
|
|||||||
buf[db.length]= '.';
|
buf[db.length]= '.';
|
||||||
memcpy(buf + db.length + 1, name.str, name.length);
|
memcpy(buf + db.length + 1, name.str, name.length);
|
||||||
buf[db.length + name.length + 1]= 0;
|
buf[db.length + name.length + 1]= 0;
|
||||||
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
/*
|
||||||
ER_ADMIN_WRONG_MRG_TABLE, ER(ER_ADMIN_WRONG_MRG_TABLE),
|
Push an error to be reported as part of CHECK/REPAIR result-set.
|
||||||
buf);
|
Note that calling my_error() from handler is a hack which is kept
|
||||||
|
here to avoid refactoring. Normally engines should report errors
|
||||||
|
through return value which will be interpreted by caller using
|
||||||
|
handler::print_error() call.
|
||||||
|
*/
|
||||||
|
my_error(ER_ADMIN_WRONG_MRG_TABLE, MYF(0), buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -593,8 +598,7 @@ public:
|
|||||||
|
|
||||||
@return pointer to open MyISAM table structure
|
@return pointer to open MyISAM table structure
|
||||||
@retval !=NULL OK, returning pointer
|
@retval !=NULL OK, returning pointer
|
||||||
@retval NULL, my_errno == 0 Ok, no more child tables
|
@retval NULL, Error.
|
||||||
@retval NULL, my_errno != 0 error
|
|
||||||
|
|
||||||
@detail
|
@detail
|
||||||
This function retrieves the MyISAM table handle from the
|
This function retrieves the MyISAM table handle from the
|
||||||
@ -614,16 +618,32 @@ extern "C" MI_INFO *myisammrg_attach_children_callback(void *callback_param)
|
|||||||
MI_INFO *myisam= NULL;
|
MI_INFO *myisam= NULL;
|
||||||
DBUG_ENTER("myisammrg_attach_children_callback");
|
DBUG_ENTER("myisammrg_attach_children_callback");
|
||||||
|
|
||||||
if (!child_l)
|
/*
|
||||||
{
|
Number of children in the list and MYRG_INFO::tables_count,
|
||||||
DBUG_PRINT("myrg", ("No more children to attach"));
|
which is used by caller of this function, should always match.
|
||||||
my_errno= 0; /* Ok, no more child tables. */
|
*/
|
||||||
goto end;
|
DBUG_ASSERT(child_l);
|
||||||
}
|
|
||||||
child= child_l->table;
|
child= child_l->table;
|
||||||
/* Prepare for next child. */
|
/* Prepare for next child. */
|
||||||
param->next();
|
param->next();
|
||||||
|
|
||||||
|
/*
|
||||||
|
When MERGE table is opened for CHECK or REPAIR TABLE statements,
|
||||||
|
failure to open any of underlying tables is ignored until this moment
|
||||||
|
(this is needed to provide complete list of the problematic underlying
|
||||||
|
tables in CHECK/REPAIR TABLE output).
|
||||||
|
Here we detect such a situation and report an appropriate error.
|
||||||
|
*/
|
||||||
|
if (! child)
|
||||||
|
{
|
||||||
|
DBUG_PRINT("error", ("failed to open underlying table '%s'.'%s'",
|
||||||
|
child_l->db, child_l->table_name));
|
||||||
|
/* This should only happen inside of CHECK/REPAIR TABLE. */
|
||||||
|
DBUG_ASSERT(current_thd->open_options & HA_OPEN_FOR_REPAIR);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Do a quick compatibility check. The table def version is set when
|
Do a quick compatibility check. The table def version is set when
|
||||||
the table share is created. The child def version is copied
|
the table share is created. The child def version is copied
|
||||||
@ -653,7 +673,6 @@ extern "C" MI_INFO *myisammrg_attach_children_callback(void *callback_param)
|
|||||||
{
|
{
|
||||||
DBUG_PRINT("error", ("temporary table mismatch parent: %d child: %d",
|
DBUG_PRINT("error", ("temporary table mismatch parent: %d child: %d",
|
||||||
parent->s->tmp_table, child->s->tmp_table));
|
parent->s->tmp_table, child->s->tmp_table));
|
||||||
my_errno= HA_ERR_WRONG_MRG_TABLE_DEF;
|
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -664,12 +683,27 @@ extern "C" MI_INFO *myisammrg_attach_children_callback(void *callback_param)
|
|||||||
DBUG_PRINT("error", ("no MyISAM handle for child table: '%s'.'%s' 0x%lx",
|
DBUG_PRINT("error", ("no MyISAM handle for child table: '%s'.'%s' 0x%lx",
|
||||||
child->s->db.str, child->s->table_name.str,
|
child->s->db.str, child->s->table_name.str,
|
||||||
(long) child));
|
(long) child));
|
||||||
my_errno= HA_ERR_WRONG_MRG_TABLE_DEF;
|
|
||||||
}
|
}
|
||||||
DBUG_PRINT("myrg", ("MyISAM handle: 0x%lx my_errno: %d",
|
|
||||||
my_errno ? 0L : (long) myisam, my_errno));
|
DBUG_PRINT("myrg", ("MyISAM handle: 0x%lx", (long) myisam));
|
||||||
|
|
||||||
end:
|
end:
|
||||||
|
|
||||||
|
if (!myisam &&
|
||||||
|
(current_thd->open_options & HA_OPEN_FOR_REPAIR))
|
||||||
|
{
|
||||||
|
char buf[2*NAME_LEN + 1 + 1];
|
||||||
|
strxnmov(buf, sizeof(buf) - 1, child_l->db, ".", child_l->table_name, NULL);
|
||||||
|
/*
|
||||||
|
Push an error to be reported as part of CHECK/REPAIR result-set.
|
||||||
|
Note that calling my_error() from handler is a hack which is kept
|
||||||
|
here to avoid refactoring. Normally engines should report errors
|
||||||
|
through return value which will be interpreted by caller using
|
||||||
|
handler::print_error() call.
|
||||||
|
*/
|
||||||
|
my_error(ER_ADMIN_WRONG_MRG_TABLE, MYF(0), buf);
|
||||||
|
}
|
||||||
|
|
||||||
DBUG_RETURN(myisam);
|
DBUG_RETURN(myisam);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -783,12 +817,6 @@ int ha_myisammrg::attach_children(void)
|
|||||||
/* Must call this with children list in place. */
|
/* Must call this with children list in place. */
|
||||||
DBUG_ASSERT(this->table->pos_in_table_list->next_global == this->children_l);
|
DBUG_ASSERT(this->table->pos_in_table_list->next_global == this->children_l);
|
||||||
|
|
||||||
/*
|
|
||||||
'my_errno' is set by myisammrg_attach_children_callback() in
|
|
||||||
case of an error.
|
|
||||||
*/
|
|
||||||
my_errno= 0;
|
|
||||||
|
|
||||||
if (myrg_attach_children(this->file, this->test_if_locked |
|
if (myrg_attach_children(this->file, this->test_if_locked |
|
||||||
current_thd->open_options,
|
current_thd->open_options,
|
||||||
myisammrg_attach_children_callback, ¶m,
|
myisammrg_attach_children_callback, ¶m,
|
||||||
|
@ -385,6 +385,7 @@ int myrg_attach_children(MYRG_INFO *m_info, int handle_locking,
|
|||||||
uint UNINIT_VAR(key_parts);
|
uint UNINIT_VAR(key_parts);
|
||||||
uint min_keys;
|
uint min_keys;
|
||||||
my_bool bad_children= FALSE;
|
my_bool bad_children= FALSE;
|
||||||
|
my_bool first_child= TRUE;
|
||||||
DBUG_ENTER("myrg_attach_children");
|
DBUG_ENTER("myrg_attach_children");
|
||||||
DBUG_PRINT("myrg", ("handle_locking: %d", handle_locking));
|
DBUG_PRINT("myrg", ("handle_locking: %d", handle_locking));
|
||||||
|
|
||||||
@ -399,16 +400,26 @@ int myrg_attach_children(MYRG_INFO *m_info, int handle_locking,
|
|||||||
errpos= 0;
|
errpos= 0;
|
||||||
file_offset= 0;
|
file_offset= 0;
|
||||||
min_keys= 0;
|
min_keys= 0;
|
||||||
child_nr= 0;
|
for (child_nr= 0; child_nr < m_info->tables; child_nr++)
|
||||||
while ((myisam= (*callback)(callback_param)))
|
|
||||||
{
|
{
|
||||||
|
if (! (myisam= (*callback)(callback_param)))
|
||||||
|
{
|
||||||
|
if (handle_locking & HA_OPEN_FOR_REPAIR)
|
||||||
|
{
|
||||||
|
/* An appropriate error should've been already pushed by callback. */
|
||||||
|
bad_children= TRUE;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
goto bad_children;
|
||||||
|
}
|
||||||
|
|
||||||
DBUG_PRINT("myrg", ("child_nr: %u table: '%s'",
|
DBUG_PRINT("myrg", ("child_nr: %u table: '%s'",
|
||||||
child_nr, myisam->filename));
|
child_nr, myisam->filename));
|
||||||
DBUG_ASSERT(child_nr < m_info->tables);
|
|
||||||
|
|
||||||
/* Special handling when the first child is attached. */
|
/* Special handling when the first child is attached. */
|
||||||
if (!child_nr)
|
if (first_child)
|
||||||
{
|
{
|
||||||
|
first_child= FALSE;
|
||||||
m_info->reclength= myisam->s->base.reclength;
|
m_info->reclength= myisam->s->base.reclength;
|
||||||
min_keys= myisam->s->base.keys;
|
min_keys= myisam->s->base.keys;
|
||||||
key_parts= myisam->s->base.key_parts;
|
key_parts= myisam->s->base.key_parts;
|
||||||
@ -456,14 +467,11 @@ int myrg_attach_children(MYRG_INFO *m_info, int handle_locking,
|
|||||||
for (idx= 0; idx < key_parts; idx++)
|
for (idx= 0; idx < key_parts; idx++)
|
||||||
m_info->rec_per_key_part[idx]+= (myisam->s->state.rec_per_key_part[idx] /
|
m_info->rec_per_key_part[idx]+= (myisam->s->state.rec_per_key_part[idx] /
|
||||||
m_info->tables);
|
m_info->tables);
|
||||||
child_nr++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bad_children)
|
if (bad_children)
|
||||||
goto bad_children;
|
goto bad_children;
|
||||||
/* Note: callback() resets my_errno, so it is safe to check it here */
|
|
||||||
if (my_errno == HA_ERR_WRONG_MRG_TABLE_DEF)
|
|
||||||
goto err;
|
|
||||||
if (sizeof(my_off_t) == 4 && file_offset > (ulonglong) (ulong) ~0L)
|
if (sizeof(my_off_t) == 4 && file_offset > (ulonglong) (ulong) ~0L)
|
||||||
{
|
{
|
||||||
my_errno= HA_ERR_RECORD_FILE_FULL;
|
my_errno= HA_ERR_RECORD_FILE_FULL;
|
||||||
|
@ -127,13 +127,13 @@
|
|||||||
%define distro_description Oracle Enterprise Linux 4
|
%define distro_description Oracle Enterprise Linux 4
|
||||||
%define distro_releasetag oel4
|
%define distro_releasetag oel4
|
||||||
%define distro_buildreq gcc-c++ gperf ncurses-devel perl readline-devel time zlib-devel
|
%define distro_buildreq gcc-c++ gperf ncurses-devel perl readline-devel time zlib-devel
|
||||||
%define distro_requires chkconfig coreutils grep procps shadow-utils
|
%define distro_requires chkconfig coreutils grep procps shadow-utils net-tools
|
||||||
%else
|
%else
|
||||||
%if "%oelver" == "5"
|
%if "%oelver" == "5"
|
||||||
%define distro_description Oracle Enterprise Linux 5
|
%define distro_description Oracle Enterprise Linux 5
|
||||||
%define distro_releasetag oel5
|
%define distro_releasetag oel5
|
||||||
%define distro_buildreq gcc-c++ gperf ncurses-devel perl readline-devel time zlib-devel
|
%define distro_buildreq gcc-c++ gperf ncurses-devel perl readline-devel time zlib-devel
|
||||||
%define distro_requires chkconfig coreutils grep procps shadow-utils
|
%define distro_requires chkconfig coreutils grep procps shadow-utils net-tools
|
||||||
%else
|
%else
|
||||||
%{error:Oracle Enterprise Linux %{oelver} is unsupported}
|
%{error:Oracle Enterprise Linux %{oelver} is unsupported}
|
||||||
%endif
|
%endif
|
||||||
@ -145,13 +145,13 @@
|
|||||||
%define distro_description Red Hat Enterprise Linux 4
|
%define distro_description Red Hat Enterprise Linux 4
|
||||||
%define distro_releasetag rhel4
|
%define distro_releasetag rhel4
|
||||||
%define distro_buildreq gcc-c++ gperf ncurses-devel perl readline-devel time zlib-devel
|
%define distro_buildreq gcc-c++ gperf ncurses-devel perl readline-devel time zlib-devel
|
||||||
%define distro_requires chkconfig coreutils grep procps shadow-utils
|
%define distro_requires chkconfig coreutils grep procps shadow-utils net-tools
|
||||||
%else
|
%else
|
||||||
%if "%rhelver" == "5"
|
%if "%rhelver" == "5"
|
||||||
%define distro_description Red Hat Enterprise Linux 5
|
%define distro_description Red Hat Enterprise Linux 5
|
||||||
%define distro_releasetag rhel5
|
%define distro_releasetag rhel5
|
||||||
%define distro_buildreq gcc-c++ gperf ncurses-devel perl readline-devel time zlib-devel
|
%define distro_buildreq gcc-c++ gperf ncurses-devel perl readline-devel time zlib-devel
|
||||||
%define distro_requires chkconfig coreutils grep procps shadow-utils
|
%define distro_requires chkconfig coreutils grep procps shadow-utils net-tools
|
||||||
%else
|
%else
|
||||||
%{error:Red Hat Enterprise Linux %{rhelver} is unsupported}
|
%{error:Red Hat Enterprise Linux %{rhelver} is unsupported}
|
||||||
%endif
|
%endif
|
||||||
@ -1000,6 +1000,7 @@ echo "=====" >> $STATUS_HISTORY
|
|||||||
%attr(755, root, root) %{_bindir}/mysql_setpermission
|
%attr(755, root, root) %{_bindir}/mysql_setpermission
|
||||||
%attr(755, root, root) %{_bindir}/mysql_tzinfo_to_sql
|
%attr(755, root, root) %{_bindir}/mysql_tzinfo_to_sql
|
||||||
%attr(755, root, root) %{_bindir}/mysql_upgrade
|
%attr(755, root, root) %{_bindir}/mysql_upgrade
|
||||||
|
%attr(755, root, root) %{_bindir}/mysql_plugin
|
||||||
%attr(755, root, root) %{_bindir}/mysql_zap
|
%attr(755, root, root) %{_bindir}/mysql_zap
|
||||||
%attr(755, root, root) %{_bindir}/mysqlbug
|
%attr(755, root, root) %{_bindir}/mysqlbug
|
||||||
%attr(755, root, root) %{_bindir}/mysqld_multi
|
%attr(755, root, root) %{_bindir}/mysqld_multi
|
||||||
@ -1017,6 +1018,7 @@ echo "=====" >> $STATUS_HISTORY
|
|||||||
%attr(755, root, root) %{_sbindir}/rcmysql
|
%attr(755, root, root) %{_sbindir}/rcmysql
|
||||||
%attr(755, root, root) %{_libdir}/mysql/plugin/adt_null.so
|
%attr(755, root, root) %{_libdir}/mysql/plugin/adt_null.so
|
||||||
%attr(755, root, root) %{_libdir}/mysql/plugin/libdaemon_example.so
|
%attr(755, root, root) %{_libdir}/mysql/plugin/libdaemon_example.so
|
||||||
|
%attr(755, root, root) %{_libdir}/mysql/plugin/daemon_example.ini
|
||||||
%attr(755, root, root) %{_libdir}/mysql/plugin/mypluglib.so
|
%attr(755, root, root) %{_libdir}/mysql/plugin/mypluglib.so
|
||||||
%attr(755, root, root) %{_libdir}/mysql/plugin/semisync_master.so
|
%attr(755, root, root) %{_libdir}/mysql/plugin/semisync_master.so
|
||||||
%attr(755, root, root) %{_libdir}/mysql/plugin/semisync_slave.so
|
%attr(755, root, root) %{_libdir}/mysql/plugin/semisync_slave.so
|
||||||
@ -1131,6 +1133,10 @@ echo "=====" >> $STATUS_HISTORY
|
|||||||
# merging BK trees)
|
# merging BK trees)
|
||||||
##############################################################################
|
##############################################################################
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Jul 25 2011 Chuck Bell <chuck.bell@oracle.com>
|
||||||
|
|
||||||
|
- Added the mysql_plugin client - enables or disables plugins.
|
||||||
|
|
||||||
* Thu Jul 21 2011 Sunanda Menon <sunanda.menon@oracle.com>
|
* Thu Jul 21 2011 Sunanda Menon <sunanda.menon@oracle.com>
|
||||||
|
|
||||||
- Fix bug#12561297: Added the MySQL embedded binary
|
- Fix bug#12561297: Added the MySQL embedded binary
|
||||||
|
@ -19660,6 +19660,34 @@ static void test_bug12337762()
|
|||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
BUG 11754979 - 46675: ON DUPLICATE KEY UPDATE AND UPDATECOUNT() POSSIBLY WRONG
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void test_bug11754979()
|
||||||
|
{
|
||||||
|
MYSQL* conn;
|
||||||
|
DBUG_ENTER("test_bug11754979");
|
||||||
|
|
||||||
|
myheader("test_bug11754979");
|
||||||
|
DIE_UNLESS((conn= mysql_client_init(NULL)));
|
||||||
|
DIE_UNLESS(mysql_real_connect(conn, opt_host, opt_user,
|
||||||
|
opt_password, opt_db ? opt_db:"test", opt_port,
|
||||||
|
opt_unix_socket, CLIENT_FOUND_ROWS));
|
||||||
|
myquery(mysql_query(conn, "DROP TABLE IF EXISTS t1"));
|
||||||
|
myquery(mysql_query(conn, "CREATE TABLE t1(id INT, label CHAR(1), PRIMARY KEY(id))"));
|
||||||
|
myquery(mysql_query(conn, "INSERT INTO t1(id, label) VALUES (1, 'a')"));
|
||||||
|
myquery(mysql_query(conn, "INSERT INTO t1(id, label) VALUES (1, 'a') "
|
||||||
|
"ON DUPLICATE KEY UPDATE id = 4"));
|
||||||
|
DIE_UNLESS(mysql_affected_rows(conn) == 2);
|
||||||
|
myquery(mysql_query(conn, "DROP TABLE t1"));
|
||||||
|
mysql_close(conn);
|
||||||
|
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Read and parse arguments and MySQL options from my.cnf
|
Read and parse arguments and MySQL options from my.cnf
|
||||||
*/
|
*/
|
||||||
@ -20005,6 +20033,7 @@ static struct my_tests_st my_tests[]= {
|
|||||||
{ "test_bug56976", test_bug56976 },
|
{ "test_bug56976", test_bug56976 },
|
||||||
{ "test_bug11766854", test_bug11766854 },
|
{ "test_bug11766854", test_bug11766854 },
|
||||||
{ "test_bug12337762", test_bug12337762 },
|
{ "test_bug12337762", test_bug12337762 },
|
||||||
|
{ "test_bug11754979", test_bug11754979 },
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user