summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <kostja@dipika.(none)>2008-02-08 18:55:07 +0300
committerunknown <kostja@dipika.(none)>2008-02-08 18:55:07 +0300
commit81ac684b0677a8116db8bfef719b0e8ae8b7f394 (patch)
tree3a57c4b096fb93cacd1a7a226b7cf5ffc4d1c8fc
parentdf2cf8c78dc022472dd22584a140f579ad8cfe03 (diff)
parentd157f5fd43949d9927ec4683b5e66e32a945e13d (diff)
downloadmariadb-git-81ac684b0677a8116db8bfef719b0e8ae8b7f394.tar.gz
Merge bk-internal.mysql.com:/home/bk/mysql-5.1
into dipika.(none):/opt/local/work/mysql-5.1-runtime include/my_sys.h: Auto merged mysql-test/mysql-test-run.pl: Auto merged mysql-test/suite/binlog/r/binlog_row_binlog.result: Auto merged sql/item_cmpfunc.cc: Auto merged sql/log.cc: Auto merged sql/mysql_priv.h: Auto merged sql/mysqld.cc: Auto merged sql/set_var.cc: Auto merged sql/set_var.h: Auto merged sql/sql_acl.cc: Auto merged sql-common/client.c: Auto merged sql/sql_parse.cc: Auto merged sql/sql_view.cc: Auto merged
-rwxr-xr-xclient/CMakeLists.txt3
-rw-r--r--client/Makefile.am3
-rw-r--r--client/mysqltest.c72
-rw-r--r--configure.in21
-rw-r--r--mysql-test/extra/binlog_tests/binlog.test17
-rw-r--r--mysql-test/r/create.result46
-rw-r--r--mysql-test/r/events_bugs.result13
-rw-r--r--mysql-test/r/grant.result23
-rw-r--r--mysql-test/r/information_schema.result17
-rw-r--r--mysql-test/r/lock_multi.result10
-rw-r--r--mysql-test/r/ps.result16
-rw-r--r--mysql-test/r/ps_ddl.result3304
-rw-r--r--mysql-test/r/show_check.result5
-rw-r--r--mysql-test/r/sp-error.result11
-rw-r--r--mysql-test/r/sp.result16
-rw-r--r--mysql-test/r/system_mysql_db.result4
-rw-r--r--mysql-test/suite/binlog/r/binlog_row_binlog.result16
-rw-r--r--mysql-test/suite/binlog/r/binlog_stm_binlog.result15
-rw-r--r--mysql-test/t/create.test44
-rw-r--r--mysql-test/t/events_bugs.test20
-rw-r--r--mysql-test/t/grant.test23
-rw-r--r--mysql-test/t/information_schema.test22
-rw-r--r--mysql-test/t/lock_multi.test30
-rw-r--r--mysql-test/t/mysqltest.test23
-rw-r--r--mysql-test/t/ps.test17
-rw-r--r--mysql-test/t/ps_ddl.test618
-rw-r--r--mysql-test/t/show_check.test19
-rw-r--r--mysql-test/t/sp-error.test18
-rw-r--r--mysql-test/t/sp.test23
-rw-r--r--mysql-test/t/system_mysql_db_fix50117.test2
-rw-r--r--mysql-test/t/upgrade.test7
-rw-r--r--mysys/thr_lock.c3
-rw-r--r--scripts/mysql_system_tables.sql4
-rw-r--r--scripts/mysql_system_tables_fix.sql8
-rw-r--r--sql-common/my_user.c8
-rw-r--r--sql/event_db_repository.cc69
-rw-r--r--sql/item.cc3
-rw-r--r--sql/log.cc23
-rw-r--r--sql/mysql_priv.h4
-rw-r--r--sql/mysqld.cc34
-rw-r--r--sql/sp.cc43
-rw-r--r--sql/sp_head.cc4
-rw-r--r--sql/sql_acl.cc9
-rw-r--r--sql/sql_base.cc2
-rw-r--r--sql/sql_bitmap.h2
-rw-r--r--sql/sql_cache.cc2
-rw-r--r--sql/sql_parse.cc75
-rw-r--r--sql/sql_plugin.cc2
-rw-r--r--sql/sql_prepare.cc6
-rw-r--r--sql/sql_show.cc8
-rw-r--r--sql/sql_trigger.cc2
-rw-r--r--sql/sql_view.cc6
-rw-r--r--sql/stacktrace.c64
-rw-r--r--sql/stacktrace.h8
54 files changed, 3427 insertions, 1440 deletions
diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt
index 2ef55c23c90..a20db4134c2 100755
--- a/client/CMakeLists.txt
+++ b/client/CMakeLists.txt
@@ -32,7 +32,8 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
ADD_EXECUTABLE(mysql completion_hash.cc mysql.cc readline.cc sql_string.cc ../mysys/my_conio.c)
TARGET_LINK_LIBRARIES(mysql mysqlclient_notls wsock32)
-ADD_EXECUTABLE(mysqltest mysqltest.c ../mysys/my_getsystime.c ../mysys/my_copy.c)
+ADD_EXECUTABLE(mysqltest mysqltest.c ../mysys/my_getsystime.c
+ ../mysys/my_copy.c ../mysys/my_mkdir.c)
TARGET_LINK_LIBRARIES(mysqltest mysqlclient_notls regex wsock32)
ADD_EXECUTABLE(mysqlcheck mysqlcheck.c)
diff --git a/client/Makefile.am b/client/Makefile.am
index 2d8bd918734..c57a5673367 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -88,7 +88,8 @@ mysqlslap_LDADD = $(CXXLDFLAGS) $(CLIENT_THREAD_LIBS) \
mysqltest_SOURCES= mysqltest.c \
$(top_srcdir)/mysys/my_getsystime.c \
- $(top_srcdir)/mysys/my_copy.c
+ $(top_srcdir)/mysys/my_copy.c \
+ $(top_srcdir)/mysys/my_mkdir.c
mysqltest_LDADD = $(top_builddir)/regex/libregex.a $(LDADD)
mysql_upgrade_SOURCES= mysql_upgrade.c \
diff --git a/client/mysqltest.c b/client/mysqltest.c
index 31e419244e6..fdbd31fab36 100644
--- a/client/mysqltest.c
+++ b/client/mysqltest.c
@@ -45,6 +45,10 @@
#ifdef HAVE_SYS_WAIT_H
#include <sys/wait.h>
#endif
+#ifdef __WIN__
+#include <direct.h>
+#endif
+
/* Use cygwin for --exec and --system before 5.0 */
#if MYSQL_VERSION_ID < 50000
@@ -263,7 +267,7 @@ enum enum_commands {
Q_REPLACE_REGEX, Q_REMOVE_FILE, Q_FILE_EXIST,
Q_WRITE_FILE, Q_COPY_FILE, Q_PERL, Q_DIE, Q_EXIT, Q_SKIP,
Q_CHMOD_FILE, Q_APPEND_FILE, Q_CAT_FILE, Q_DIFF_FILES,
- Q_SEND_QUIT, Q_CHANGE_USER,
+ Q_SEND_QUIT, Q_CHANGE_USER, Q_MKDIR, Q_RMDIR,
Q_UNKNOWN, /* Unknown command. */
Q_COMMENT, /* Comments, ignored. */
@@ -353,6 +357,9 @@ const char *command_names[]=
"diff_files",
"send_quit",
"change_user",
+ "mkdir",
+ "rmdir",
+
0
};
@@ -2737,6 +2744,67 @@ void do_file_exist(struct st_command *command)
/*
+ SYNOPSIS
+ do_mkdir
+ command called command
+
+ DESCRIPTION
+ mkdir <dir_name>
+ Create the directory <dir_name>
+*/
+
+void do_mkdir(struct st_command *command)
+{
+ int error;
+ static DYNAMIC_STRING ds_dirname;
+ const struct command_arg mkdir_args[] = {
+ "dirname", ARG_STRING, TRUE, &ds_dirname, "Directory to create"
+ };
+ DBUG_ENTER("do_mkdir");
+
+ check_command_args(command, command->first_argument,
+ mkdir_args, sizeof(mkdir_args)/sizeof(struct command_arg),
+ ' ');
+
+ DBUG_PRINT("info", ("creating directory: %s", ds_dirname.str));
+ error= my_mkdir(ds_dirname.str, 0777, MYF(0)) != 0;
+ handle_command_error(command, error);
+ dynstr_free(&ds_dirname);
+ DBUG_VOID_RETURN;
+}
+
+/*
+ SYNOPSIS
+ do_rmdir
+ command called command
+
+ DESCRIPTION
+ rmdir <dir_name>
+ Remove the empty directory <dir_name>
+*/
+
+void do_rmdir(struct st_command *command)
+{
+ int error;
+ static DYNAMIC_STRING ds_dirname;
+ const struct command_arg rmdir_args[] = {
+ "dirname", ARG_STRING, TRUE, &ds_dirname, "Directory to remove"
+ };
+ DBUG_ENTER("do_rmdir");
+
+ check_command_args(command, command->first_argument,
+ rmdir_args, sizeof(rmdir_args)/sizeof(struct command_arg),
+ ' ');
+
+ DBUG_PRINT("info", ("removing directory: %s", ds_dirname.str));
+ error= rmdir(ds_dirname.str) != 0;
+ handle_command_error(command, error);
+ dynstr_free(&ds_dirname);
+ DBUG_VOID_RETURN;
+}
+
+
+/*
Read characters from line buffer or file. This is needed to allow
my_ungetc() to buffer MAX_DELIMITER_LENGTH characters for a file
@@ -6913,6 +6981,8 @@ int main(int argc, char **argv)
case Q_ECHO: do_echo(command); command_executed++; break;
case Q_SYSTEM: do_system(command); break;
case Q_REMOVE_FILE: do_remove_file(command); break;
+ case Q_MKDIR: do_mkdir(command); break;
+ case Q_RMDIR: do_rmdir(command); break;
case Q_FILE_EXIST: do_file_exist(command); break;
case Q_WRITE_FILE: do_write_file(command); break;
case Q_APPEND_FILE: do_append_file(command); break;
diff --git a/configure.in b/configure.in
index 1346a87c35a..2e623aacaf7 100644
--- a/configure.in
+++ b/configure.in
@@ -813,8 +813,8 @@ AC_CHECK_HEADERS(fcntl.h float.h floatingpoint.h ieeefp.h limits.h \
sys/timeb.h sys/types.h sys/un.h sys/vadvise.h sys/wait.h term.h \
unistd.h utime.h sys/utime.h termio.h termios.h sched.h crypt.h alloca.h \
sys/ioctl.h malloc.h sys/malloc.h sys/ipc.h sys/shm.h linux/config.h \
- sys/prctl.h \
- sys/resource.h sys/param.h port.h ieeefp.h)
+ sys/prctl.h sys/resource.h sys/param.h port.h ieeefp.h \
+ execinfo.h)
AC_CHECK_HEADERS([xfs/xfs.h])
@@ -2041,7 +2041,7 @@ AC_CHECK_FUNCS(alarm bcmp bfill bmove bsearch bzero \
sighold sigset sigthreadmask port_create sleep \
snprintf socket stpcpy strcasecmp strerror strsignal strnlen strpbrk strstr \
strtol strtoll strtoul strtoull tell tempnam thr_setconcurrency vidattr \
- posix_fallocate)
+ posix_fallocate backtrace backtrace_symbols backtrace_symbols_fd)
#
#
@@ -2331,6 +2331,21 @@ then
fi
AC_MSG_RESULT("$netinet_inc")
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+AC_CHECK_HEADERS(cxxabi.h)
+AC_CACHE_CHECK([checking for abi::__cxa_demangle], mysql_cv_cxa_demangle,
+[AC_TRY_LINK([#include <cxxabi.h>], [
+ char *foo= 0; int bar= 0;
+ foo= abi::__cxa_demangle(foo, foo, 0, &bar);
+], [mysql_cv_cxa_demangle=yes], [mysql_cv_cxa_demangle=no])])
+AC_LANG_RESTORE
+
+if test "x$mysql_cv_cxa_demangle" = xyes; then
+ AC_DEFINE(HAVE_ABI_CXA_DEMANGLE, 1,
+ [Define to 1 if you have the `abi::__cxa_demangle' function.])
+fi
+
#--------------------------------------------------------------------
# Check for requested features
#--------------------------------------------------------------------
diff --git a/mysql-test/extra/binlog_tests/binlog.test b/mysql-test/extra/binlog_tests/binlog.test
index 0d2ed7ad509..48fc5a81c7b 100644
--- a/mysql-test/extra/binlog_tests/binlog.test
+++ b/mysql-test/extra/binlog_tests/binlog.test
@@ -108,6 +108,23 @@ drop table t1;
set global binlog_cache_size=@bcs;
set session autocommit = @ac;
+#
+# Bug#33798: prepared statements improperly handle large unsigned ints
+#
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+reset master;
+create table t1 (a bigint unsigned, b bigint(20) unsigned);
+prepare stmt from "insert into t1 values (?,?)";
+set @a= 9999999999999999;
+set @b= 14632475938453979136;
+execute stmt using @a, @b;
+deallocate prepare stmt;
+drop table t1;
+--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /Server ver: [^,]*,/Server version,/
+show binlog events from 0;
+
--echo End of 5.0 tests
# Test of a too big SET INSERT_ID: see if the truncated value goes
diff --git a/mysql-test/r/create.result b/mysql-test/r/create.result
index 0613c9ba488..13192dca969 100644
--- a/mysql-test/r/create.result
+++ b/mysql-test/r/create.result
@@ -1743,4 +1743,50 @@ t1 CREATE TABLE `t1` (
`MAXLEN` bigint(3) NOT NULL DEFAULT '0'
) ENGINE=MEMORY DEFAULT CHARSET=utf8
drop table t1;
+
+# --
+# -- Bug#21380: DEFAULT definition not always transfered by CREATE
+# -- TABLE/SELECT to the new table.
+# --
+
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t2;
+
+CREATE TABLE t1(
+c1 INT DEFAULT 12 COMMENT 'column1',
+c2 INT NULL COMMENT 'column2',
+c3 INT NOT NULL COMMENT 'column3',
+c4 VARCHAR(255) CHARACTER SET utf8 NOT NULL DEFAULT 'a',
+c5 VARCHAR(255) COLLATE utf8_unicode_ci NULL DEFAULT 'b',
+c6 VARCHAR(255))
+COLLATE ucs2_unicode_ci;
+
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(11) DEFAULT '12' COMMENT 'column1',
+ `c2` int(11) DEFAULT NULL COMMENT 'column2',
+ `c3` int(11) NOT NULL COMMENT 'column3',
+ `c4` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT 'a',
+ `c5` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT 'b',
+ `c6` varchar(255) COLLATE ucs2_unicode_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=ucs2 COLLATE=ucs2_unicode_ci
+
+CREATE TABLE t2 AS SELECT * FROM t1;
+
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `c1` int(11) DEFAULT '12' COMMENT 'column1',
+ `c2` int(11) DEFAULT NULL COMMENT 'column2',
+ `c3` int(11) NOT NULL COMMENT 'column3',
+ `c4` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT 'a',
+ `c5` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT 'b',
+ `c6` varchar(255) CHARACTER SET ucs2 COLLATE ucs2_unicode_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+
+DROP TABLE t2;
+
+# -- End of test case for Bug#21380.
+
End of 5.1 tests
diff --git a/mysql-test/r/events_bugs.result b/mysql-test/r/events_bugs.result
index b91e7e88d64..814cf42d16c 100644
--- a/mysql-test/r/events_bugs.result
+++ b/mysql-test/r/events_bugs.result
@@ -722,4 +722,17 @@ DROP USER mysqltest_u1@localhost;
#
#####################################################################
+drop procedure if exists p;
+set @old_mode= @@sql_mode;
+set @@sql_mode= pow(2,32)-1;
+create event e1 on schedule every 1 day do select 1;
+select @@sql_mode;
+@@sql_mode
+REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,?,ONLY_FULL_GROUP_BY,NO_UNSIGNED_SUBTRACTION,NO_DIR_IN_CREATE,POSTGRESQL,ORACLE,MSSQL,DB2,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,MYSQL323,MYSQL40,ANSI,NO_AUTO_VALUE_ON_ZERO,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,HIGH_NOT_PRECEDENCE,NO_ENGINE_SUBSTITUTION,PAD_CHAR_TO_FULL_LENGTH
+set @@sql_mode= @old_mode;
+select replace(@full_mode, '?', 'NOT_USED') into @full_mode;
+select replace(@full_mode, 'ALLOW_INVALID_DATES', 'INVALID_DATES') into @full_mode;
+select name from mysql.event where name = 'p' and sql_mode = @full_mode;
+name
+drop event e1;
DROP DATABASE events_test;
diff --git a/mysql-test/r/grant.result b/mysql-test/r/grant.result
index 0df3ac6de8a..c157e1d4706 100644
--- a/mysql-test/r/grant.result
+++ b/mysql-test/r/grant.result
@@ -1218,6 +1218,28 @@ DROP USER mysqltest_1@localhost;
DROP DATABASE db27878;
use test;
DROP TABLE t1;
+drop table if exists test;
+Warnings:
+Note 1051 Unknown table 'test'
+drop function if exists test_function;
+Warnings:
+Note 1305 FUNCTION test_function does not exist
+drop view if exists v1;
+Warnings:
+Note 1051 Unknown table 'test.v1'
+create table test (col1 varchar(30));
+create function test_function() returns varchar(30)
+begin
+declare tmp varchar(30);
+select col1 from test limit 1 into tmp;
+return '1';
+end|
+create view v1 as select test.* from test where test.col1=test_function();
+grant update (col1) on v1 to 'greg'@'localhost';
+drop user 'greg'@'localhost';
+drop view v1;
+drop table test;
+drop function test_function;
End of 5.0 tests
set names utf8;
grant select on test.* to юзер_юзер@localhost;
@@ -1282,5 +1304,6 @@ CALL mysqltest1.test();
1
DROP DATABASE mysqltest1;
RENAME TABLE mysql.procs_gone TO mysql.procs_priv;
+DROP USER mysqltest_1@localhost;
FLUSH PRIVILEGES;
End of 5.1 tests
diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result
index ddc0e189cd2..708d8ab027d 100644
--- a/mysql-test/r/information_schema.result
+++ b/mysql-test/r/information_schema.result
@@ -588,7 +588,7 @@ proc body longblob
proc definer char(77)
proc created timestamp
proc modified timestamp
-proc sql_mode set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE')
+proc sql_mode set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH')
proc comment char(64)
proc character_set_client char(32)
proc collation_connection char(32)
@@ -1623,4 +1623,19 @@ Db Name Definer Time zone Type Execute at Interval value Interval field Starts E
show events where Db= 'information_schema';
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
use test;
+#
+# Bug#34166: Server crash in SHOW OPEN TABLES and prelocking
+#
+drop table if exists t1;
+drop function if exists f1;
+create table t1 (a int);
+create function f1() returns int
+begin
+insert into t1 (a) values (1);
+return 0;
+end|
+show open tables where f1()=0;
+show open tables where f1()=0;
+drop table t1;
+drop function f1;
End of 5.1 tests.
diff --git a/mysql-test/r/lock_multi.result b/mysql-test/r/lock_multi.result
index 9c4f1b17dcc..cd05fc1473f 100644
--- a/mysql-test/r/lock_multi.result
+++ b/mysql-test/r/lock_multi.result
@@ -143,4 +143,14 @@ connection: default
flush tables;
unlock tables;
drop table t1;
+drop table if exists t1,t2;
+create table t1 (a int);
+flush status;
+lock tables t1 read;
+insert into t1 values(1);;
+unlock tables;
+drop table t1;
+select @tlwa < @tlwb;
+@tlwa < @tlwb
+1
End of 5.1 tests
diff --git a/mysql-test/r/ps.result b/mysql-test/r/ps.result
index a6b07bfc127..75d3f79f4b0 100644
--- a/mysql-test/r/ps.result
+++ b/mysql-test/r/ps.result
@@ -1717,6 +1717,22 @@ t1 CREATE TABLE `t1` (
`?` decimal(2,1) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
+drop table if exists t1;
+create table t1 (a bigint unsigned, b bigint(20) unsigned);
+prepare stmt from "insert into t1 values (?,?)";
+set @a= 9999999999999999;
+set @b= 14632475938453979136;
+insert into t1 values (@a, @b);
+select * from t1 where a = @a and b = @b;
+a b
+9999999999999999 14632475938453979136
+execute stmt using @a, @b;
+select * from t1 where a = @a and b = @b;
+a b
+9999999999999999 14632475938453979136
+9999999999999999 14632475938453979136
+deallocate prepare stmt;
+drop table t1;
End of 5.0 tests.
create procedure proc_1() reset query cache;
call proc_1();
diff --git a/mysql-test/r/ps_ddl.result b/mysql-test/r/ps_ddl.result
index 0987e765265..531d29d219e 100644
--- a/mysql-test/r/ps_ddl.result
+++ b/mysql-test/r/ps_ddl.result
@@ -1,10 +1,11 @@
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+set @expected = 0;
=====================================================================
Testing 1: NOTHING -> TABLE transitions
=====================================================================
drop table if exists t1;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
prepare stmt from 'select * from t1';
ERROR 42S02: Table 'test.t1' doesn't exist
=====================================================================
@@ -17,92 +18,144 @@ Testing 3: NOTHING -> VIEW transitions
Testing 4: TABLE -> NOTHING transitions
=====================================================================
drop table if exists t4;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t4(a int);
prepare stmt from 'select * from t4';
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t4;
execute stmt;
ERROR 42S02: Table 'test.t4' doesn't exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
ERROR 42S02: Table 'test.t4' doesn't exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
=====================================================================
Testing 5: TABLE -> TABLE (DDL) transitions
=====================================================================
drop table if exists t5;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t5(a int);
-prepare stmt from 'select * from t5';
+prepare stmt from 'select a from t5';
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t5 add column (b int);
+set @expected = @expected + 1;
execute stmt;
-a b
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+a
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
-a b
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+a
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t5;
=====================================================================
Testing 6: TABLE -> TABLE (TRIGGER) transitions
=====================================================================
drop table if exists t6;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t6(a int);
prepare stmt from 'insert into t6(a) value (?)';
set @val=1;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
set @val=2;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
create trigger t6_bi before insert on t6 for each row
begin
set @message= "t6_bi";
@@ -110,20 +163,33 @@ end
$$
set @message="none";
set @val=3;
+set @expected = @expected + 1;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
t6_bi
set @val=4;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
t6_bi
@@ -131,20 +197,32 @@ prepare stmt from 'insert into t6(a) value (?)';
set @message="none";
set @val=5;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
t6_bi
set @message="none";
set @val=6;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
t6_bi
@@ -155,21 +233,34 @@ end
$$
set @message="none";
set @val=7;
+set @expected = @expected + 1;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
t6_bi
set @message="none";
set @val=8;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
t6_bi
@@ -177,20 +268,32 @@ prepare stmt from 'insert into t6(a) value (?)';
set @message="none";
set @val=9;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
t6_bi
set @message="none";
set @val=10;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
t6_bi
@@ -202,20 +305,33 @@ end
$$
set @message="none";
set @val=11;
+set @expected = @expected + 1;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
t6_bi (2)
set @val=12;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
t6_bi (2)
@@ -223,20 +339,32 @@ prepare stmt from 'insert into t6(a) value (?)';
set @message="none";
set @val=13;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
t6_bi (2)
set @message="none";
set @val=14;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
t6_bi (2)
@@ -248,21 +376,34 @@ end
$$
set @message="none";
set @val=15;
+set @expected = @expected + 1;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
t6_bi (2)
set @message="none";
set @val=16;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
t6_bi (2)
@@ -270,40 +411,65 @@ prepare stmt from 'insert into t6(a) value (?)';
set @message="none";
set @val=17;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
t6_bi (2)
set @message="none";
set @val=18;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
t6_bi (2)
drop trigger t6_bi;
set @message="none";
set @val=19;
+set @expected = @expected + 1;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
none
set @val=20;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
none
@@ -311,38 +477,63 @@ prepare stmt from 'insert into t6(a) value (?)';
set @message="none";
set @val=21;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
none
set @val=22;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
none
drop trigger t6_bd;
set @val=23;
+set @expected = @expected + 1;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
none
set @val=24;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select @message;
@message
none
@@ -386,9 +577,6 @@ drop table if exists t7_audit;
drop procedure if exists audit_proc;
drop function if exists audit_func;
drop view if exists audit_view;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t7_proc(a int);
create table t7_func(a int);
create table t7_view(a int);
@@ -414,155 +602,294 @@ for each row set NEW.reason="trigger v1";
prepare stmt_proc from 'insert into t7_proc(a) value (?)';
set @val=101;
execute stmt_proc using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
set @val=102;
execute stmt_proc using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop procedure audit_proc;
create procedure audit_proc(a int)
insert into t7_audit values (NULL, a, "proc v2");
set @val=103;
+set @expected = @expected + 1;
execute stmt_proc using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
set @val=104;
execute stmt_proc using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
prepare stmt_func from 'insert into t7_func(a) value (?)';
set @val=201;
execute stmt_func using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
set @val=202;
execute stmt_func using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop function audit_func;
create function audit_func() returns varchar(50)
return "func v2";
set @val=203;
+set @expected = @expected + 1;
execute stmt_func using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
set @val=204;
execute stmt_func using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
prepare stmt_view from 'insert into t7_view(a) value (?)';
set @val=301;
execute stmt_view using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
set @val=302;
execute stmt_view using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop view audit_view;
create view audit_view as select "view v2" as reason from dual;
set @val=303;
+set @expected = @expected + 1;
execute stmt_view using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
set @val=304;
execute stmt_view using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
prepare stmt_table from 'insert into t7_table(a) value (?)';
set @val=401;
execute stmt_table using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
set @val=402;
execute stmt_table using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t7_dependent_table add column comments varchar(100) default NULL;
set @val=403;
+set @expected = @expected + 1;
execute stmt_table using @val;
ERROR 21S01: Column count doesn't match value count at row 1
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
set @val=404;
+set @expected = @expected + 1;
execute stmt_table using @val;
ERROR 21S01: Column count doesn't match value count at row 1
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t7_dependent_table drop column comments;
set @val=405;
+set @expected = @expected + 1;
execute stmt_table using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-3
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
set @val=406;
execute stmt_table using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-3
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
prepare stmt_table_trigger from 'insert into t7_table(a) value (?)';
set @val=501;
execute stmt_table_trigger using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-3
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
set @val=502;
execute stmt_table_trigger using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-3
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop trigger t7_table_trigger_bi;
create trigger t7_table_trigger_bi before insert on t7_dependent_table
for each row set NEW.reason="trigger v2";
set @val=503;
+set @expected = @expected + 1;
execute stmt_table_trigger using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-4
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
set @val=504;
execute stmt_table_trigger using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-4
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select * from t7_audit order by new_a;
old_a new_a reason
NULL 101 proc v1
@@ -601,150 +928,237 @@ drop view audit_view;
Testing 8: TABLE -> TEMPORARY TABLE transitions
=====================================================================
drop table if exists t8;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t8(a int);
prepare stmt from 'select * from t8';
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t8;
create temporary table t8(a int);
+set @expected = @expected + 1;
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t8;
=====================================================================
Testing 9: TABLE -> VIEW transitions
=====================================================================
drop table if exists t9;
drop table if exists t9_b;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t9(a int);
create table t9_b(a int);
prepare stmt from 'select * from t9';
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t9;
create view t9 as select * from t9_b;
+set @expected = @expected + 1;
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop view t9;
drop table t9_b;
=====================================================================
Testing 10: TEMPORARY TABLE -> NOTHING transitions
=====================================================================
drop temporary table if exists t10;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create temporary table t10(a int);
prepare stmt from 'select * from t10';
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop temporary table t10;
execute stmt;
ERROR 42S02: Table 'test.t10' doesn't exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
ERROR 42S02: Table 'test.t10' doesn't exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
=====================================================================
Testing 11: TEMPORARY TABLE -> TABLE transitions
=====================================================================
drop table if exists t11;
drop temporary table if exists t11;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t11(a int);
insert into t11(a) value (1);
create temporary table t11(a int);
prepare stmt from 'select * from t11';
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop temporary table t11;
+set @expected = @expected + 1;
execute stmt;
a
1
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
1
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select * from t11;
a
1
@@ -753,37 +1167,59 @@ drop table t11;
Testing 12: TEMPORARY TABLE -> TEMPORARY TABLE (DDL) transitions
=====================================================================
drop temporary table if exists t12;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create temporary table t12(a int);
-prepare stmt from 'select * from t12';
+prepare stmt from 'select a from t12';
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop temporary table t12;
create temporary table t12(a int, b int);
+set @expected = @expected + 1;
execute stmt;
-a b
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+a
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
-a b
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+a
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select * from t12;
a b
drop table t12;
@@ -792,38 +1228,60 @@ Testing 13: TEMPORARY TABLE -> VIEW transitions
=====================================================================
drop temporary table if exists t13;
drop table if exists t13_b;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create temporary table t13(a int);
create table t13_b(a int);
prepare stmt from 'select * from t13';
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop temporary table t13;
create view t13 as select * from t13_b;
+set @expected = @expected + 1;
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop view t13;
drop table t13_b;
=====================================================================
@@ -831,75 +1289,120 @@ Testing 14: VIEW -> NOTHING transitions
=====================================================================
drop view if exists t14;
drop table if exists t14_b;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t14_b(a int);
create view t14 as select * from t14_b;
prepare stmt from 'select * from t14';
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop view t14;
+set @expected = @expected + 1;
execute stmt;
ERROR 42S02: Table 'test.t14' doesn't exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
+set @expected = @expected + 1;
execute stmt;
ERROR 42S02: Table 'test.t14' doesn't exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t14_b;
=====================================================================
Testing 15: VIEW -> TABLE transitions
=====================================================================
drop view if exists t15;
drop table if exists t15_b;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t15_b(a int);
create view t15 as select * from t15_b;
prepare stmt from 'select * from t15';
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop view t15;
create table t15(a int);
+set @expected = @expected + 1;
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t15_b;
drop table t15;
=====================================================================
@@ -907,38 +1410,60 @@ Testing 16: VIEW -> TEMPORARY TABLE transitions
=====================================================================
drop view if exists t16;
drop table if exists t16_b;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t16_b(a int);
create view t16 as select * from t16_b;
prepare stmt from 'select * from t16';
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop view t16;
create temporary table t16(a int);
+set @expected = @expected + 1;
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t16_b;
drop temporary table t16;
=====================================================================
@@ -946,9 +1471,6 @@ Testing 17: VIEW -> VIEW (DDL) transitions
=====================================================================
drop view if exists t17;
drop table if exists t17_b;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t17_b(a int);
insert into t17_b values (10), (20), (30);
create view t17 as select a, 2*a as b, 3*a as c from t17_b;
@@ -963,44 +1485,69 @@ a b c
10 20 30
20 40 60
30 60 90
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a b c
10 20 30
20 40 60
30 60 90
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop view t17;
-create view t17 as select a, 2*a as b, 10*a as c from t17_b;
+create view t17 as select a, 2*a as b, 5*a as c from t17_b;
select * from t17;
a b c
-10 20 100
-20 40 200
-30 60 300
+10 20 50
+20 40 100
+30 60 150
+set @expected = @expected + 1;
execute stmt;
a b c
-10 20 100
-20 40 200
-30 60 300
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+10 20 50
+20 40 100
+30 60 150
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a b c
-10 20 100
-20 40 200
-30 60 300
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+10 20 50
+20 40 100
+30 60 150
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t17_b;
drop view t17;
=====================================================================
@@ -1013,9 +1560,6 @@ drop view if exists t18_view;
drop view if exists t18_table;
drop function if exists view_func;
drop view if exists view_view;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t18(a int);
insert into t18 values (1), (2), (3);
create function view_func(x int) returns int
@@ -1031,117 +1575,192 @@ a b
1 2
2 3
3 4
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt_func;
a b
1 2
2 3
3 4
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop function view_func;
create function view_func(x int) returns int
return x*x;
+set @expected = @expected + 1;
execute stmt_func;
a b
1 1
2 4
3 9
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt_func;
a b
1 1
2 4
3 9
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
prepare stmt_view from 'select * from t18_view';
execute stmt_view;
a b
1 view v1
2 view v1
3 view v1
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt_view;
a b
1 view v1
2 view v1
3 view v1
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop view view_view;
create view view_view as select "view v2" as reason from dual;
+set @expected = @expected + 1;
execute stmt_view;
a b
1 view v2
2 view v2
3 view v2
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt_view;
a b
1 view v2
2 view v2
3 view v2
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
prepare stmt_table from 'select * from t18_table';
execute stmt_table;
a
1
2
3
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt_table;
a
1
2
3
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t18 add column comments varchar(50) default NULL;
+set @expected = @expected + 1;
execute stmt_table;
a
1
2
3
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt_table;
a
1
2
3
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t18;
drop table t18_dependent_table;
drop view t18_func;
@@ -1153,9 +1772,6 @@ drop view view_view;
Testing 19: Special tables (INFORMATION_SCHEMA)
=====================================================================
drop procedure if exists proc_19;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
prepare stmt from
'select ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE
from INFORMATION_SCHEMA.ROUTINES where
@@ -1164,115 +1780,178 @@ create procedure proc_19() select "hi there";
execute stmt;
ROUTINE_SCHEMA ROUTINE_NAME ROUTINE_TYPE
test proc_19 PROCEDURE
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
ROUTINE_SCHEMA ROUTINE_NAME ROUTINE_TYPE
test proc_19 PROCEDURE
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop procedure proc_19;
create procedure proc_19() select "hi there, again";
execute stmt;
ROUTINE_SCHEMA ROUTINE_NAME ROUTINE_TYPE
test proc_19 PROCEDURE
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
ROUTINE_SCHEMA ROUTINE_NAME ROUTINE_TYPE
test proc_19 PROCEDURE
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop procedure proc_19;
=====================================================================
Testing 20: Special tables (log tables)
=====================================================================
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
prepare stmt from
'select * from mysql.general_log where argument=\'IMPOSSIBLE QUERY STRING\'';
execute stmt;
event_time user_host thread_id server_id command_type argument
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
event_time user_host thread_id server_id command_type argument
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
event_time user_host thread_id server_id command_type argument
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
event_time user_host thread_id server_id command_type argument
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
=====================================================================
Testing 21: Special tables (system tables)
=====================================================================
drop procedure if exists proc_21;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
prepare stmt from
'select type, db, name from mysql.proc where name=\'proc_21\'';
create procedure proc_21() select "hi there";
execute stmt;
type db name
PROCEDURE test proc_21
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
type db name
PROCEDURE test proc_21
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop procedure proc_21;
create procedure proc_21() select "hi there, again";
execute stmt;
type db name
PROCEDURE test proc_21
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
type db name
PROCEDURE test proc_21
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop procedure proc_21;
=====================================================================
Testing 22: Special tables (views temp tables)
=====================================================================
drop table if exists t22_b;
drop view if exists t22;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t22_b(a int);
create algorithm=temptable view t22 as select a*a as a2 from t22_b;
show create view t22;
@@ -1285,19 +1964,31 @@ a2
1
4
9
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a2
1
4
9
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
insert into t22_b values (4), (5), (6);
execute stmt;
a2
@@ -1307,10 +1998,16 @@ a2
16
25
36
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a2
1
@@ -1319,10 +2016,16 @@ a2
16
25
36
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t22_b;
drop view t22;
=====================================================================
@@ -1330,9 +2033,6 @@ Testing 23: Special tables (internal join tables)
=====================================================================
drop table if exists t23_a;
drop table if exists t23_b;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t23_a(a int);
create table t23_b(b int);
prepare stmt from 'select * from t23_a join t23_b';
@@ -1349,10 +2049,16 @@ a b
1 30
2 30
3 30
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a b
1 10
@@ -1364,10 +2070,16 @@ a b
1 30
2 30
3 30
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
insert into t23_a values (4);
insert into t23_b values (40);
execute stmt;
@@ -1388,10 +2100,16 @@ a b
2 40
3 40
4 40
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a b
1 10
@@ -1410,45 +2128,72 @@ a b
2 40
3 40
4 40
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t23_a;
drop table t23_b;
=====================================================================
Testing 24: Special statements
=====================================================================
drop table if exists t24_alter;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t24_alter(a int);
prepare stmt from 'alter table t24_alter add column b int';
execute stmt;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t24_alter;
create table t24_alter(a1 int, a2 int);
execute stmt;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t24_alter drop column b;
execute stmt;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t24_alter drop column b;
execute stmt;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t24_alter;
drop table if exists t24_repair;
create table t24_repair(a int);
@@ -1457,36 +2202,60 @@ prepare stmt from 'repair table t24_repair';
execute stmt;
Table Op Msg_type Msg_text
test.t24_repair repair status OK
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t24_repair;
create table t24_repair(a1 int, a2 int);
insert into t24_repair values (1, 10), (2, 20), (3, 30);
execute stmt;
Table Op Msg_type Msg_text
test.t24_repair repair status OK
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t24_repair add column b varchar(50) default NULL;
execute stmt;
Table Op Msg_type Msg_text
test.t24_repair repair status OK
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t24_repair drop column b;
execute stmt;
Table Op Msg_type Msg_text
test.t24_repair repair status OK
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t24_repair;
drop table if exists t24_analyze;
create table t24_analyze(a int);
@@ -1495,36 +2264,60 @@ prepare stmt from 'analyze table t24_analyze';
execute stmt;
Table Op Msg_type Msg_text
test.t24_analyze analyze status OK
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t24_analyze;
create table t24_analyze(a1 int, a2 int);
insert into t24_analyze values (1, 10), (2, 20), (3, 30);
execute stmt;
Table Op Msg_type Msg_text
test.t24_analyze analyze status OK
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t24_analyze add column b varchar(50) default NULL;
execute stmt;
Table Op Msg_type Msg_text
test.t24_analyze analyze status OK
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t24_analyze drop column b;
execute stmt;
Table Op Msg_type Msg_text
test.t24_analyze analyze status OK
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t24_analyze;
drop table if exists t24_optimize;
create table t24_optimize(a int);
@@ -1533,176 +2326,308 @@ prepare stmt from 'optimize table t24_optimize';
execute stmt;
Table Op Msg_type Msg_text
test.t24_optimize optimize status OK
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t24_optimize;
create table t24_optimize(a1 int, a2 int);
insert into t24_optimize values (1, 10), (2, 20), (3, 30);
execute stmt;
Table Op Msg_type Msg_text
test.t24_optimize optimize status OK
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t24_optimize add column b varchar(50) default NULL;
execute stmt;
Table Op Msg_type Msg_text
test.t24_optimize optimize status OK
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t24_optimize drop column b;
execute stmt;
Table Op Msg_type Msg_text
test.t24_optimize optimize status OK
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t24_optimize;
drop procedure if exists changing_proc;
prepare stmt from 'show create procedure changing_proc';
execute stmt;
ERROR 42000: PROCEDURE changing_proc does not exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
ERROR 42000: PROCEDURE changing_proc does not exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
create procedure changing_proc() begin end;
execute stmt;
Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
changing_proc CREATE DEFINER=`root`@`localhost` PROCEDURE `changing_proc`()
begin end latin1 latin1_swedish_ci latin1_swedish_ci
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
changing_proc CREATE DEFINER=`root`@`localhost` PROCEDURE `changing_proc`()
begin end latin1 latin1_swedish_ci latin1_swedish_ci
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop procedure changing_proc;
create procedure changing_proc(x int, y int) begin end;
execute stmt;
Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
changing_proc CREATE DEFINER=`root`@`localhost` PROCEDURE `changing_proc`(x int, y int)
begin end latin1 latin1_swedish_ci latin1_swedish_ci
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
changing_proc CREATE DEFINER=`root`@`localhost` PROCEDURE `changing_proc`(x int, y int)
begin end latin1 latin1_swedish_ci latin1_swedish_ci
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop procedure changing_proc;
execute stmt;
ERROR 42000: PROCEDURE changing_proc does not exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
ERROR 42000: PROCEDURE changing_proc does not exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop function if exists changing_func;
prepare stmt from 'show create function changing_func';
execute stmt;
ERROR 42000: FUNCTION changing_func does not exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
ERROR 42000: FUNCTION changing_func does not exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
create function changing_func() returns int return 0;
execute stmt;
Function sql_mode Create Function character_set_client collation_connection Database Collation
changing_func CREATE DEFINER=`root`@`localhost` FUNCTION `changing_func`() RETURNS int(11)
return 0 latin1 latin1_swedish_ci latin1_swedish_ci
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
Function sql_mode Create Function character_set_client collation_connection Database Collation
changing_func CREATE DEFINER=`root`@`localhost` FUNCTION `changing_func`() RETURNS int(11)
return 0 latin1 latin1_swedish_ci latin1_swedish_ci
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop function changing_func;
create function changing_func(x int, y int) returns int return x+y;
execute stmt;
Function sql_mode Create Function character_set_client collation_connection Database Collation
changing_func CREATE DEFINER=`root`@`localhost` FUNCTION `changing_func`(x int, y int) RETURNS int(11)
return x+y latin1 latin1_swedish_ci latin1_swedish_ci
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
Function sql_mode Create Function character_set_client collation_connection Database Collation
changing_func CREATE DEFINER=`root`@`localhost` FUNCTION `changing_func`(x int, y int) RETURNS int(11)
return x+y latin1 latin1_swedish_ci latin1_swedish_ci
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop function changing_func;
execute stmt;
ERROR 42000: FUNCTION changing_func does not exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
ERROR 42000: FUNCTION changing_func does not exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table if exists t24_trigger;
create table t24_trigger(a int);
prepare stmt from 'show create trigger t24_bi;';
execute stmt;
ERROR HY000: Trigger does not exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
ERROR HY000: Trigger does not exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
create trigger t24_bi before insert on t24_trigger for each row
begin
set @message= "t24_bi";
@@ -1714,239 +2639,427 @@ t24_bi CREATE DEFINER=`root`@`localhost` trigger t24_bi before insert on t24_tr
begin
set @message= "t24_bi";
end latin1 latin1_swedish_ci latin1_swedish_ci
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation
t24_bi CREATE DEFINER=`root`@`localhost` trigger t24_bi before insert on t24_trigger for each row
begin
set @message= "t24_bi";
end latin1 latin1_swedish_ci latin1_swedish_ci
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop trigger t24_bi;
create trigger t24_bi before insert on t24_trigger for each row
begin
set @message= "t24_bi (2)";
end
$$
+set @expected = @expected + 1;
execute stmt;
Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation
t24_bi CREATE DEFINER=`root`@`localhost` trigger t24_bi before insert on t24_trigger for each row
begin
set @message= "t24_bi (2)";
end latin1 latin1_swedish_ci latin1_swedish_ci
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation
t24_bi CREATE DEFINER=`root`@`localhost` trigger t24_bi before insert on t24_trigger for each row
begin
set @message= "t24_bi (2)";
end latin1 latin1_swedish_ci latin1_swedish_ci
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop trigger t24_bi;
execute stmt;
ERROR HY000: Trigger does not exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
ERROR HY000: Trigger does not exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t24_trigger;
=====================================================================
Testing 25: Testing the strength of TABLE_SHARE version
=====================================================================
drop table if exists t25_num_col;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t25_num_col(a int);
-prepare stmt from 'select * from t25_num_col';
+prepare stmt from 'select a from t25_num_col';
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t25_num_col add column b varchar(50) default NULL;
+set @expected = @expected + 1;
execute stmt;
-a b
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+a
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
-a b
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+a
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t25_num_col;
drop table if exists t25_col_name;
create table t25_col_name(a int);
prepare stmt from 'select * from t25_col_name';
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t25_col_name change a b int;
-execute stmt;
-b
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
-execute stmt;
-b
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+set @expected = @expected + 1;
+execute stmt;
+ERROR HY000: Prepared statement result set has changed, rebind needed
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
+set @expected = @expected + 1;
+execute stmt;
+ERROR HY000: Prepared statement result set has changed, rebind needed
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t25_col_name;
drop table if exists t25_col_type;
create table t25_col_type(a int);
prepare stmt from 'select * from t25_col_type';
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t25_col_type change a a varchar(10);
-execute stmt;
-a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-3
-execute stmt;
-a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-3
+set @expected = @expected + 1;
+execute stmt;
+ERROR HY000: Prepared statement result set has changed, rebind needed
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
+set @expected = @expected + 1;
+execute stmt;
+ERROR HY000: Prepared statement result set has changed, rebind needed
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t25_col_type;
drop table if exists t25_col_type_length;
create table t25_col_type_length(a varchar(10));
prepare stmt from 'select * from t25_col_type_length';
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-3
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-3
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t25_col_type_length change a a varchar(20);
-execute stmt;
-a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-4
-execute stmt;
-a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-4
+set @expected = @expected + 1;
+execute stmt;
+ERROR HY000: Prepared statement result set has changed, rebind needed
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
+set @expected = @expected + 1;
+execute stmt;
+ERROR HY000: Prepared statement result set has changed, rebind needed
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t25_col_type_length;
drop table if exists t25_col_null;
create table t25_col_null(a varchar(10));
prepare stmt from 'select * from t25_col_null';
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-4
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-4
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t25_col_null change a a varchar(10) NOT NULL;
-execute stmt;
-a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-5
-execute stmt;
-a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-5
+set @expected = @expected + 1;
+execute stmt;
+ERROR HY000: Prepared statement result set has changed, rebind needed
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
+set @expected = @expected + 1;
+execute stmt;
+ERROR HY000: Prepared statement result set has changed, rebind needed
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t25_col_null;
drop table if exists t25_col_default;
create table t25_col_default(a int, b int DEFAULT 10);
prepare stmt from 'insert into t25_col_default(a) values (?)';
set @val=1;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-5
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
set @val=2;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-5
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t25_col_default change b b int DEFAULT 20;
set @val=3;
+set @expected = @expected + 1;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-5
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
set @val=4;
execute stmt using @val;
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-5
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
select * from t25_col_default;
a b
1 10
@@ -1959,29 +3072,54 @@ create table t25_index(a varchar(10));
prepare stmt from 'select * from t25_index';
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-5
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-5
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
create index i1 on t25_index(a);
+set @expected = @expected + 1;
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-6
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-6
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t25_index;
drop table if exists t25_index_unique;
create table t25_index_unique(a varchar(10), b varchar(10));
@@ -1996,16 +3134,28 @@ t25_index_unique CREATE TABLE `t25_index_unique` (
prepare stmt from 'select * from t25_index_unique';
execute stmt;
a b
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-6
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a b
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-6
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
alter table t25_index_unique drop index i1;
create unique index i1 on t25_index_unique(a, b);
show create table t25_index_unique;
@@ -2015,18 +3165,31 @@ t25_index_unique CREATE TABLE `t25_index_unique` (
`b` varchar(10) DEFAULT NULL,
UNIQUE KEY `i1` (`a`,`b`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
+set @expected = @expected + 1;
execute stmt;
a b
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-7
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a b
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-7
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t25_index_unique;
=====================================================================
Testing reported bugs
@@ -2035,9 +3198,6 @@ drop table if exists table_12093;
drop function if exists func_12093;
drop function if exists func_12093_unrelated;
drop procedure if exists proc_12093;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table table_12093(a int);
create function func_12093()
returns int
@@ -2055,88 +3215,137 @@ prepare stmt_sp from 'call proc_12093(func_12093())';
execute stmt_sf;
func_12093()
0
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt_sp;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop function func_12093_unrelated;
drop procedure proc_12093_unrelated;
execute stmt_sf;
func_12093()
0
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt_sp;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt_sf;
func_12093()
0
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt_sp;
a
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
deallocate prepare stmt_sf;
deallocate prepare stmt_sp;
drop table table_12093;
drop function func_12093;
drop procedure proc_12093;
drop function if exists func_21294;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create function func_21294() returns int return 10;
prepare stmt from "select func_21294()";
execute stmt;
func_21294()
10
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop function func_21294;
create function func_21294() returns int return 10;
execute stmt;
func_21294()
10
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop function func_21294;
create function func_21294() returns int return 20;
+set @expected = @expected + 1;
execute stmt;
func_21294()
20
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
deallocate prepare stmt;
drop function func_21294;
drop table if exists t_27420_100;
drop table if exists t_27420_101;
drop view if exists v_27420;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t_27420_100(a int);
insert into t_27420_100 values (1), (2);
create table t_27420_101(a int);
@@ -2149,35 +3358,52 @@ execute stmt;
X Y
1 1
2 2
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop view v_27420;
create table v_27420(X int, Y int);
+set @expected = @expected + 1;
execute stmt;
X Y
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table v_27420;
create table v_27420 (a int, b int, filler char(200));
-execute stmt;
-a b filler
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-2
+set @expected = @expected + 1;
+execute stmt;
+ERROR HY000: Prepared statement result set has changed, rebind needed
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
deallocate prepare stmt;
drop table t_27420_100;
drop table t_27420_101;
drop table v_27420;
drop table if exists t_27430_1;
drop table if exists t_27430_2;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t_27430_1 (a int not null, oref int not null, key(a));
insert into t_27430_1 values
(1, 1),
@@ -2199,20 +3425,32 @@ oref a Z
2 2 0
3 1234 0
4 1234 0
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
oref a Z
1 1 1
2 2 0
3 1234 0
4 1234 0
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table t_27430_1, t_27430_2;
create table t_27430_1 (a int, oref int, key(a));
insert into t_27430_1 values
@@ -2227,35 +3465,38 @@ insert into t_27430_2 values
(2,2),
(NULL, 3),
(NULL, 4);
-execute stmt;
-oref a Z
-1 1 1
-2 2 0
-3 NULL NULL
-4 NULL 0
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
-execute stmt;
-oref a Z
-1 1 1
-2 2 0
-3 NULL NULL
-4 NULL 0
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+set @expected = @expected + 1;
+execute stmt;
+ERROR HY000: Prepared statement result set has changed, rebind needed
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
+set @expected = @expected + 1;
+execute stmt;
+ERROR HY000: Prepared statement result set has changed, rebind needed
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
deallocate prepare stmt;
drop table t_27430_1;
drop table t_27430_2;
drop table if exists t_27690_1;
drop view if exists v_27690_1;
drop table if exists v_27690_2;
-SELECT VARIABLE_VALUE from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
-into @base_count ;
create table t_27690_1 (a int, b int);
insert into t_27690_1 values (1,1),(2,2);
create table v_27690_1 as select * from t_27690_1;
@@ -2267,34 +3508,59 @@ a b a b
2 2 1 1
1 1 2 2
2 2 2 2
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a b a b
1 1 1 1
2 2 1 1
1 1 2 2
2 2 2 2
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
drop table v_27690_1;
execute stmt;
ERROR 42S02: Table 'test.v_27690_1' doesn't exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
ERROR 42S02: Table 'test.v_27690_1' doesn't exist
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-0
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
create view v_27690_1 as select A.a, A.b from t_27690_1 A, t_27690_1 B;
+set @expected = @expected + 1;
execute stmt;
a b a b
1 1 1 1
@@ -2305,10 +3571,16 @@ a b a b
2 2 2 2
1 1 2 2
2 2 2 2
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
execute stmt;
a b a b
1 1 1 1
@@ -2319,10 +3591,16 @@ a b a b
2 2 2 2
1 1 2 2
2 2 2 2
-SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
-REPREPARED
-1
+SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+AS `CHECK`,
+(VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+where variable_name='COM_STMT_REPREPARE' ;
+CHECK OFFSET
+PASSED 0
deallocate prepare stmt;
drop table t_27690_1;
drop view v_27690_1;
diff --git a/mysql-test/r/show_check.result b/mysql-test/r/show_check.result
index ff32d2a1512..c5fcb833933 100644
--- a/mysql-test/r/show_check.result
+++ b/mysql-test/r/show_check.result
@@ -1427,4 +1427,9 @@ DROP FUNCTION f1;
DROP TABLE t1;
DROP EVENT ev1;
SHOW TABLE TYPES;
+CREATE USER test_u@localhost;
+GRANT PROCESS ON *.* TO test_u@localhost;
+SHOW ENGINE MYISAM MUTEX;
+SHOW ENGINE MYISAM STATUS;
+DROP USER test_u@localhost;
End of 5.1 tests
diff --git a/mysql-test/r/sp-error.result b/mysql-test/r/sp-error.result
index c33c378340e..bc2ab13fe5f 100644
--- a/mysql-test/r/sp-error.result
+++ b/mysql-test/r/sp-error.result
@@ -1627,3 +1627,14 @@ end loop label1;
end loop;
end|
ERROR 42000: End-label label1 without match
+drop procedure if exists p1;
+create procedure p1()
+begin
+create table t1 (a int) type=MyISAM;
+drop table t1;
+end|
+Warnings:
+Warning 1287 The syntax 'TYPE=storage_engine' is deprecated and will be removed in MySQL 5.2. Please use 'ENGINE=storage_engine' instead
+call p1();
+call p1();
+drop procedure p1;
diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result
index 50ece83b258..a68be67a8e0 100644
--- a/mysql-test/r/sp.result
+++ b/mysql-test/r/sp.result
@@ -6963,6 +6963,22 @@ END latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION f1;
+drop procedure if exists p;
+set @old_mode= @@sql_mode;
+set @@sql_mode= pow(2,32)-1;
+select @@sql_mode into @full_mode;
+create procedure p() begin end;
+call p();
+select @@sql_mode;
+@@sql_mode
+REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,?,ONLY_FULL_GROUP_BY,NO_UNSIGNED_SUBTRACTION,NO_DIR_IN_CREATE,POSTGRESQL,ORACLE,MSSQL,DB2,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,MYSQL323,MYSQL40,ANSI,NO_AUTO_VALUE_ON_ZERO,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,HIGH_NOT_PRECEDENCE,NO_ENGINE_SUBSTITUTION,PAD_CHAR_TO_FULL_LENGTH
+set @@sql_mode= @old_mode;
+select replace(@full_mode, '?', 'NOT_USED') into @full_mode;
+select replace(@full_mode, 'ALLOW_INVALID_DATES', 'INVALID_DATES') into @full_mode;
+select name from mysql.proc where name = 'p' and sql_mode = @full_mode;
+name
+p
+drop procedure p;
# ------------------------------------------------------------------
# -- End of 5.1 tests
# ------------------------------------------------------------------
diff --git a/mysql-test/r/system_mysql_db.result b/mysql-test/r/system_mysql_db.result
index d1aff0fa657..171b53ebf09 100644
--- a/mysql-test/r/system_mysql_db.result
+++ b/mysql-test/r/system_mysql_db.result
@@ -201,7 +201,7 @@ proc CREATE TABLE `proc` (
`definer` char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
- `sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE') NOT NULL DEFAULT '',
+ `sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH') NOT NULL DEFAULT '',
`comment` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
`character_set_client` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`collation_connection` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
@@ -226,7 +226,7 @@ event CREATE TABLE `event` (
`ends` datetime DEFAULT NULL,
`status` enum('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL DEFAULT 'ENABLED',
`on_completion` enum('DROP','PRESERVE') NOT NULL DEFAULT 'DROP',
- `sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE') NOT NULL DEFAULT '',
+ `sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH') NOT NULL DEFAULT '',
`comment` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
`originator` int(10) NOT NULL,
`time_zone` char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM',
diff --git a/mysql-test/suite/binlog/r/binlog_row_binlog.result b/mysql-test/suite/binlog/r/binlog_row_binlog.result
index 6c5c149d48e..8da441d5865 100644
--- a/mysql-test/suite/binlog/r/binlog_row_binlog.result
+++ b/mysql-test/suite/binlog/r/binlog_row_binlog.result
@@ -1072,6 +1072,22 @@ master-bin.000001 30301 Rotate 1 30345 master-bin.000002;pos=4
drop table t1;
set global binlog_cache_size=@bcs;
set session autocommit = @ac;
+drop table if exists t1;
+reset master;
+create table t1 (a bigint unsigned, b bigint(20) unsigned);
+prepare stmt from "insert into t1 values (?,?)";
+set @a= 9999999999999999;
+set @b= 14632475938453979136;
+execute stmt using @a, @b;
+deallocate prepare stmt;
+drop table t1;
+show binlog events from 0;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 4 Format_desc 1 106 Server version, Binlog ver: 4
+master-bin.000001 106 Query 1 227 use `test`; create table t1 (a bigint unsigned, b bigint(20) unsigned)
+master-bin.000001 227 Table_map 1 269 table_id: # (test.t1)
+master-bin.000001 269 Write_rows 1 315 table_id: # flags: STMT_END_F
+master-bin.000001 315 Query 1 391 use `test`; drop table t1
End of 5.0 tests
reset master;
create table t1 (id tinyint auto_increment primary key);
diff --git a/mysql-test/suite/binlog/r/binlog_stm_binlog.result b/mysql-test/suite/binlog/r/binlog_stm_binlog.result
index 80908e6b450..54a2ceda9b3 100644
--- a/mysql-test/suite/binlog/r/binlog_stm_binlog.result
+++ b/mysql-test/suite/binlog/r/binlog_stm_binlog.result
@@ -579,6 +579,21 @@ master-bin.000001 36593 Rotate 1 36637 master-bin.000002;pos=4
drop table t1;
set global binlog_cache_size=@bcs;
set session autocommit = @ac;
+drop table if exists t1;
+reset master;
+create table t1 (a bigint unsigned, b bigint(20) unsigned);
+prepare stmt from "insert into t1 values (?,?)";
+set @a= 9999999999999999;
+set @b= 14632475938453979136;
+execute stmt using @a, @b;
+deallocate prepare stmt;
+drop table t1;
+show binlog events from 0;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 4 Format_desc 1 106 Server version, Binlog ver: 4
+master-bin.000001 106 Query 1 227 use `test`; create table t1 (a bigint unsigned, b bigint(20) unsigned)
+master-bin.000001 227 Query 1 351 use `test`; insert into t1 values (9999999999999999,14632475938453979136)
+master-bin.000001 351 Query 1 427 use `test`; drop table t1
End of 5.0 tests
reset master;
create table t1 (id tinyint auto_increment primary key);
diff --git a/mysql-test/t/create.test b/mysql-test/t/create.test
index dff6bf3fcff..1fc61010b8b 100644
--- a/mysql-test/t/create.test
+++ b/mysql-test/t/create.test
@@ -1341,4 +1341,48 @@ create table t1 like information_schema.character_sets;
show create table t1;
drop table t1;
+--echo
+--echo # --
+--echo # -- Bug#21380: DEFAULT definition not always transfered by CREATE
+--echo # -- TABLE/SELECT to the new table.
+--echo # --
+--echo
+
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t2;
+--enable_warnings
+
+--echo
+
+CREATE TABLE t1(
+ c1 INT DEFAULT 12 COMMENT 'column1',
+ c2 INT NULL COMMENT 'column2',
+ c3 INT NOT NULL COMMENT 'column3',
+ c4 VARCHAR(255) CHARACTER SET utf8 NOT NULL DEFAULT 'a',
+ c5 VARCHAR(255) COLLATE utf8_unicode_ci NULL DEFAULT 'b',
+ c6 VARCHAR(255))
+ COLLATE ucs2_unicode_ci;
+
+--echo
+
+SHOW CREATE TABLE t1;
+
+--echo
+
+CREATE TABLE t2 AS SELECT * FROM t1;
+
+--echo
+
+SHOW CREATE TABLE t2;
+
+--echo
+
+DROP TABLE t2;
+
+--echo
+--echo # -- End of test case for Bug#21380.
+--echo
+
--echo End of 5.1 tests
diff --git a/mysql-test/t/events_bugs.test b/mysql-test/t/events_bugs.test
index efdb67349ec..b3b2f37e36f 100644
--- a/mysql-test/t/events_bugs.test
+++ b/mysql-test/t/events_bugs.test
@@ -935,6 +935,26 @@ DROP USER mysqltest_u1@localhost;
--echo #####################################################################
--echo
+#
+# Bug#32633 Can not create any routine if SQL_MODE=no_engine_substitution
+#
+# Ensure that when new SQL modes are introduced, they are also added to
+# the mysql.event table.
+#
+
+--disable_warnings
+drop procedure if exists p;
+--enable_warnings
+set @old_mode= @@sql_mode;
+set @@sql_mode= pow(2,32)-1;
+create event e1 on schedule every 1 day do select 1;
+select @@sql_mode;
+set @@sql_mode= @old_mode;
+# Rename SQL modes that differ in name between the server and the table definition.
+select replace(@full_mode, '?', 'NOT_USED') into @full_mode;
+select replace(@full_mode, 'ALLOW_INVALID_DATES', 'INVALID_DATES') into @full_mode;
+select name from mysql.event where name = 'p' and sql_mode = @full_mode;
+drop event e1;
###########################################################################
#
diff --git a/mysql-test/t/grant.test b/mysql-test/t/grant.test
index 16cccd1a1f4..e540ce703a1 100644
--- a/mysql-test/t/grant.test
+++ b/mysql-test/t/grant.test
@@ -1266,6 +1266,28 @@ DROP DATABASE db27878;
use test;
DROP TABLE t1;
+#
+# Bug #33201 Crash occurs when granting update privilege on one column of a view
+#
+drop table if exists test;
+drop function if exists test_function;
+drop view if exists v1;
+create table test (col1 varchar(30));
+delimiter |;
+create function test_function() returns varchar(30)
+begin
+ declare tmp varchar(30);
+ select col1 from test limit 1 into tmp;
+ return '1';
+end|
+delimiter ;|
+create view v1 as select test.* from test where test.col1=test_function();
+grant update (col1) on v1 to 'greg'@'localhost';
+drop user 'greg'@'localhost';
+drop view v1;
+drop table test;
+drop function test_function;
+
--echo End of 5.0 tests
#
@@ -1374,6 +1396,7 @@ GRANT ALL PRIVILEGES ON test.* TO mysqltest_1@localhost;
CALL mysqltest1.test();
DROP DATABASE mysqltest1;
RENAME TABLE mysql.procs_gone TO mysql.procs_priv;
+DROP USER mysqltest_1@localhost;
FLUSH PRIVILEGES;
diff --git a/mysql-test/t/information_schema.test b/mysql-test/t/information_schema.test
index 2a9319fe010..6e76a043645 100644
--- a/mysql-test/t/information_schema.test
+++ b/mysql-test/t/information_schema.test
@@ -1248,4 +1248,26 @@ show events from information_schema;
show events where Db= 'information_schema';
use test;
+--echo #
+--echo # Bug#34166: Server crash in SHOW OPEN TABLES and prelocking
+--echo #
+--disable_warnings
+drop table if exists t1;
+drop function if exists f1;
+--enable_warnings
+create table t1 (a int);
+delimiter |;
+create function f1() returns int
+begin
+ insert into t1 (a) values (1);
+ return 0;
+end|
+delimiter ;|
+--disable_result_log
+show open tables where f1()=0;
+show open tables where f1()=0;
+--enable_result_log
+drop table t1;
+drop function f1;
+
--echo End of 5.1 tests.
diff --git a/mysql-test/t/lock_multi.test b/mysql-test/t/lock_multi.test
index 0d36b79df78..06488abb1ae 100644
--- a/mysql-test/t/lock_multi.test
+++ b/mysql-test/t/lock_multi.test
@@ -439,4 +439,34 @@ connection default;
disconnect flush;
drop table t1;
+#
+# Bug#30331: Table_locks_waited shows inaccurate values
+#
+
+--disable_warnings
+drop table if exists t1,t2;
+--enable_warnings
+create table t1 (a int);
+flush status;
+lock tables t1 read;
+let $tlwa= `show status like 'Table_locks_waited'`;
+connect (waiter,localhost,root,,);
+connection waiter;
+--send insert into t1 values(1);
+connection default;
+let $wait_condition=
+ select count(*) = 1 from information_schema.processlist
+ where state = "Locked" and info = "insert into t1 values(1)";
+--source include/wait_condition.inc
+let $tlwb= `show status like 'Table_locks_waited'`;
+unlock tables;
+drop table t1;
+disconnect waiter;
+connection default;
+--disable_query_log
+eval SET @tlwa= SUBSTRING_INDEX('$tlwa', ' ', -1);
+eval SET @tlwb= SUBSTRING_INDEX('$tlwb', ' ', -1);
+--enable_query_log
+select @tlwa < @tlwb;
+
--echo End of 5.1 tests
diff --git a/mysql-test/t/mysqltest.test b/mysql-test/t/mysqltest.test
index d0c8c0b4e38..5856bfff036 100644
--- a/mysql-test/t/mysqltest.test
+++ b/mysql-test/t/mysqltest.test
@@ -2101,5 +2101,28 @@ drop table t1;
--change_user root,,
--change_user root,,test
+# ----------------------------------------------------------------------------
+# Test mkdir and rmdir command
+# ----------------------------------------------------------------------------
+
+mkdir $MYSQLTEST_VARDIR/tmp/testdir;
+rmdir $MYSQLTEST_VARDIR/tmp/testdir;
+
+# Directory already exist
+mkdir $MYSQLTEST_VARDIR/tmp/testdir;
+--error 1
+mkdir $MYSQLTEST_VARDIR/tmp/testdir;
+
+# Remove dir with file inside
+write_file $MYSQLTEST_VARDIR/tmp/testdir/file1.txt;
+hello
+EOF
+--error 1
+rmdir $MYSQLTEST_VARDIR/tmp/testdir;
+
+remove_file $MYSQLTEST_VARDIR/tmp/testdir/file1.txt;
+rmdir $MYSQLTEST_VARDIR/tmp/testdir;
+
+
--echo End of tests
diff --git a/mysql-test/t/ps.test b/mysql-test/t/ps.test
index b45d67d8485..a34d41a6dfb 100644
--- a/mysql-test/t/ps.test
+++ b/mysql-test/t/ps.test
@@ -1821,6 +1821,23 @@ execute stmt using @a;
show create table t1;
drop table t1;
+#
+# Bug#33798: prepared statements improperly handle large unsigned ints
+#
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+create table t1 (a bigint unsigned, b bigint(20) unsigned);
+prepare stmt from "insert into t1 values (?,?)";
+set @a= 9999999999999999;
+set @b= 14632475938453979136;
+insert into t1 values (@a, @b);
+select * from t1 where a = @a and b = @b;
+execute stmt using @a, @b;
+select * from t1 where a = @a and b = @b;
+deallocate prepare stmt;
+drop table t1;
+
--echo End of 5.0 tests.
#
diff --git a/mysql-test/t/ps_ddl.test b/mysql-test/t/ps_ddl.test
index abb6563f052..c824d17063b 100644
--- a/mysql-test/t/ps_ddl.test
+++ b/mysql-test/t/ps_ddl.test
@@ -55,8 +55,28 @@ let $base_count = SELECT VARIABLE_VALUE from
INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
into @base_count ;
-let $reprepared = SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
-INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+let $check = SELECT CASE (VARIABLE_VALUE - @base_count - @expected)
+ WHEN 0 THEN "PASSED"
+ ELSE "FAILED"
+ END
+ AS `CHECK`,
+ (VARIABLE_VALUE - @base_count - @expected) AS `OFFSET`
+ from INFORMATION_SCHEMA.SESSION_STATUS
+ where variable_name='COM_STMT_REPREPARE' ;
+
+eval $base_count;
+set @expected = 0;
+
+# Maintainer:
+# When not expecting a re-prepare, write the test like this:
+# execute stmt;
+# eval $check;
+#
+# When expecting a re-prepare, write the test like this:
+# set @expected = @expected + 1;
+# execute stmt;
+# eval $check;
+#
--echo =====================================================================
--echo Testing 1: NOTHING -> TABLE transitions
@@ -66,8 +86,6 @@ INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
drop table if exists t1;
--enable_warnings
-eval $base_count;
-
# can not be tested since prepare failed
--error ER_NO_SUCH_TABLE
prepare stmt from 'select * from t1';
@@ -92,23 +110,21 @@ prepare stmt from 'select * from t1';
drop table if exists t4;
--enable_warnings
-eval $base_count;
-
create table t4(a int);
prepare stmt from 'select * from t4';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t4;
--error ER_NO_SUCH_TABLE
execute stmt;
-eval $reprepared;
+eval $check;
--error ER_NO_SUCH_TABLE
execute stmt;
-eval $reprepared;
+eval $check;
--echo =====================================================================
--echo Testing 5: TABLE -> TABLE (DDL) transitions
@@ -118,23 +134,21 @@ eval $reprepared;
drop table if exists t5;
--enable_warnings
-eval $base_count;
-
create table t5(a int);
-prepare stmt from 'select * from t5';
+prepare stmt from 'select a from t5';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
alter table t5 add column (b int);
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t5;
@@ -155,17 +169,15 @@ drop table t5;
drop table if exists t6;
--enable_warnings
-eval $base_count;
-
create table t6(a int);
prepare stmt from 'insert into t6(a) value (?)';
set @val=1;
execute stmt using @val;
-eval $reprepared;
+eval $check;
set @val=2;
execute stmt using @val;
-eval $reprepared;
+eval $check;
# Relevant trigger: execute should reprepare
delimiter $$;
@@ -178,25 +190,25 @@ delimiter ;$$
set @message="none";
set @val=3;
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
set @val=4;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
prepare stmt from 'insert into t6(a) value (?)';
set @message="none";
set @val=5;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
set @message="none";
set @val=6;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
# Unrelated trigger: execute can pass of fail, implementation dependent
@@ -210,25 +222,26 @@ delimiter ;$$
set @message="none";
set @val=7;
+set @expected = @expected + 1;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
set @message="none";
set @val=8;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
prepare stmt from 'insert into t6(a) value (?)';
set @message="none";
set @val=9;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
set @message="none";
set @val=10;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
# Relevant trigger: execute should reprepare
@@ -243,25 +256,25 @@ delimiter ;$$
set @message="none";
set @val=11;
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
set @val=12;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
prepare stmt from 'insert into t6(a) value (?)';
set @message="none";
set @val=13;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
set @message="none";
set @val=14;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
# Unrelated trigger: execute can pass of fail, implementation dependent
@@ -276,63 +289,62 @@ delimiter ;$$
set @message="none";
set @val=15;
+set @expected = @expected + 1;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
set @message="none";
set @val=16;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
prepare stmt from 'insert into t6(a) value (?)';
set @message="none";
set @val=17;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
set @message="none";
set @val=18;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
drop trigger t6_bi;
set @message="none";
set @val=19;
-# safe to re-execute
+set @expected = @expected + 1;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
set @val=20;
-# safe to re-execute
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
prepare stmt from 'insert into t6(a) value (?)';
set @message="none";
set @val=21;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
set @val=22;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
drop trigger t6_bd;
set @val=23;
-# safe to re-execute
+set @expected = @expected + 1;
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
set @val=24;
-# safe to re-execute
execute stmt using @val;
-eval $reprepared;
+eval $check;
select @message;
select * from t6 order by a;
@@ -363,8 +375,6 @@ drop function if exists audit_func;
drop view if exists audit_view;
--enable_warnings
-eval $base_count;
-
create table t7_proc(a int);
create table t7_func(a int);
create table t7_view(a int);
@@ -400,10 +410,10 @@ create trigger t7_table_trigger_bi before insert on t7_dependent_table
prepare stmt_proc from 'insert into t7_proc(a) value (?)';
set @val=101;
execute stmt_proc using @val;
-eval $reprepared;
+eval $check;
set @val=102;
execute stmt_proc using @val;
-eval $reprepared;
+eval $check;
drop procedure audit_proc;
@@ -411,20 +421,21 @@ create procedure audit_proc(a int)
insert into t7_audit values (NULL, a, "proc v2");
set @val=103;
+set @expected = @expected + 1;
execute stmt_proc using @val;
-eval $reprepared;
+eval $check;
set @val=104;
execute stmt_proc using @val;
-eval $reprepared;
+eval $check;
prepare stmt_func from 'insert into t7_func(a) value (?)';
set @val=201;
execute stmt_func using @val;
-eval $reprepared;
+eval $check;
set @val=202;
execute stmt_func using @val;
-eval $reprepared;
+eval $check;
drop function audit_func;
@@ -432,19 +443,20 @@ create function audit_func() returns varchar(50)
return "func v2";
set @val=203;
+set @expected = @expected + 1;
execute stmt_func using @val;
-eval $reprepared;
+eval $check;
set @val=204;
execute stmt_func using @val;
-eval $reprepared;
+eval $check;
prepare stmt_view from 'insert into t7_view(a) value (?)';
set @val=301;
execute stmt_view using @val;
-eval $reprepared;
+eval $check;
set @val=302;
execute stmt_view using @val;
-eval $reprepared;
+eval $check;
drop view audit_view;
@@ -455,52 +467,53 @@ create view audit_view as select "view v2" as reason from dual;
# This is because the table trigger is cached and is not invalidated.
set @val=303;
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt_view using @val;
-eval $reprepared;
+eval $check;
set @val=304;
execute stmt_view using @val;
-eval $reprepared;
+eval $check;
prepare stmt_table from 'insert into t7_table(a) value (?)';
set @val=401;
execute stmt_table using @val;
-eval $reprepared;
+eval $check;
set @val=402;
execute stmt_table using @val;
-eval $reprepared;
+eval $check;
alter table t7_dependent_table add column comments varchar(100) default NULL;
set @val=403;
-# REPREPARED +1
+set @expected = @expected + 1;
--error ER_WRONG_VALUE_COUNT_ON_ROW
execute stmt_table using @val;
-eval $reprepared;
+eval $check;
set @val=404;
+set @expected = @expected + 1;
--error ER_WRONG_VALUE_COUNT_ON_ROW
execute stmt_table using @val;
-eval $reprepared;
+eval $check;
alter table t7_dependent_table drop column comments;
set @val=405;
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt_table using @val;
-eval $reprepared;
+eval $check;
set @val=406;
execute stmt_table using @val;
-eval $reprepared;
+eval $check;
prepare stmt_table_trigger from 'insert into t7_table(a) value (?)';
set @val=501;
execute stmt_table_trigger using @val;
-eval $reprepared;
+eval $check;
set @val=502;
execute stmt_table_trigger using @val;
-eval $reprepared;
+eval $check;
drop trigger t7_table_trigger_bi;
@@ -508,12 +521,12 @@ create trigger t7_table_trigger_bi before insert on t7_dependent_table
for each row set NEW.reason="trigger v2";
set @val=503;
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt_table_trigger using @val;
-eval $reprepared;
+eval $check;
set @val=504;
execute stmt_table_trigger using @val;
-eval $reprepared;
+eval $check;
select * from t7_audit order by new_a;
@@ -538,24 +551,22 @@ drop view audit_view;
drop table if exists t8;
--enable_warnings
-eval $base_count;
-
create table t8(a int);
prepare stmt from 'select * from t8';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t8;
create temporary table t8(a int);
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t8;
@@ -568,25 +579,23 @@ drop table if exists t9;
drop table if exists t9_b;
--enable_warnings
-eval $base_count;
-
create table t9(a int);
create table t9_b(a int);
prepare stmt from 'select * from t9';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t9;
create view t9 as select * from t9_b;
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop view t9;
drop table t9_b;
@@ -599,23 +608,21 @@ drop table t9_b;
drop temporary table if exists t10;
--enable_warnings
-eval $base_count;
-
create temporary table t10(a int);
prepare stmt from 'select * from t10';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop temporary table t10;
--error ER_NO_SUCH_TABLE
execute stmt;
-eval $reprepared;
+eval $check;
--error ER_NO_SUCH_TABLE
execute stmt;
-eval $reprepared;
+eval $check;
--echo =====================================================================
--echo Testing 11: TEMPORARY TABLE -> TABLE transitions
@@ -626,25 +633,23 @@ drop table if exists t11;
drop temporary table if exists t11;
--enable_warnings
-eval $base_count;
-
create table t11(a int);
insert into t11(a) value (1);
create temporary table t11(a int);
prepare stmt from 'select * from t11';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop temporary table t11;
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
select * from t11;
drop table t11;
@@ -657,24 +662,22 @@ drop table t11;
drop temporary table if exists t12;
--enable_warnings
-eval $base_count;
-
create temporary table t12(a int);
-prepare stmt from 'select * from t12';
+prepare stmt from 'select a from t12';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop temporary table t12;
create temporary table t12(a int, b int);
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
select * from t12;
drop table t12;
@@ -688,25 +691,23 @@ drop temporary table if exists t13;
drop table if exists t13_b;
--enable_warnings
-eval $base_count;
-
create temporary table t13(a int);
create table t13_b(a int);
prepare stmt from 'select * from t13';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop temporary table t13;
create view t13 as select * from t13_b;
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop view t13;
drop table t13_b;
@@ -720,26 +721,25 @@ drop view if exists t14;
drop table if exists t14_b;
--enable_warnings
-eval $base_count;
-
create table t14_b(a int);
create view t14 as select * from t14_b;
prepare stmt from 'select * from t14';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop view t14;
-# REPREPARED +1
+set @expected = @expected + 1;
--error ER_NO_SUCH_TABLE
execute stmt;
-eval $reprepared;
+eval $check;
+set @expected = @expected + 1;
--error ER_NO_SUCH_TABLE
execute stmt;
-eval $reprepared;
+eval $check;
drop table t14_b;
@@ -752,25 +752,23 @@ drop view if exists t15;
drop table if exists t15_b;
--enable_warnings
-eval $base_count;
-
create table t15_b(a int);
create view t15 as select * from t15_b;
prepare stmt from 'select * from t15';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop view t15;
create table t15(a int);
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t15_b;
drop table t15;
@@ -784,25 +782,23 @@ drop view if exists t16;
drop table if exists t16_b;
--enable_warnings
-eval $base_count;
-
create table t16_b(a int);
create view t16 as select * from t16_b;
prepare stmt from 'select * from t16';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop view t16;
create temporary table t16(a int);
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t16_b;
drop temporary table t16;
@@ -816,8 +812,6 @@ drop view if exists t17;
drop table if exists t17_b;
--enable_warnings
-eval $base_count;
-
create table t17_b(a int);
insert into t17_b values (10), (20), (30);
@@ -826,19 +820,19 @@ select * from t17;
prepare stmt from 'select * from t17';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop view t17;
-create view t17 as select a, 2*a as b, 10*a as c from t17_b;
+create view t17 as select a, 2*a as b, 5*a as c from t17_b;
select * from t17;
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t17_b;
drop view t17;
@@ -865,8 +859,6 @@ drop function if exists view_func;
drop view if exists view_view;
--enable_warnings
-eval $base_count;
-
# TODO: insertable view -> trigger
# TODO: insertable view -> trigger -> proc ?
@@ -886,47 +878,48 @@ create view t18_table as select * from t18;
prepare stmt_func from 'select * from t18_func';
execute stmt_func;
-eval $reprepared;
+eval $check;
execute stmt_func;
-eval $reprepared;
+eval $check;
drop function view_func;
create function view_func(x int) returns int
return x*x;
+set @expected = @expected + 1;
execute stmt_func;
-eval $reprepared;
+eval $check;
execute stmt_func;
-eval $reprepared;
+eval $check;
prepare stmt_view from 'select * from t18_view';
execute stmt_view;
-eval $reprepared;
+eval $check;
execute stmt_view;
-eval $reprepared;
+eval $check;
drop view view_view;
create view view_view as select "view v2" as reason from dual;
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt_view;
-eval $reprepared;
+eval $check;
execute stmt_view;
-eval $reprepared;
+eval $check;
prepare stmt_table from 'select * from t18_table';
execute stmt_table;
-eval $reprepared;
+eval $check;
execute stmt_table;
-eval $reprepared;
+eval $check;
alter table t18 add column comments varchar(50) default NULL;
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt_table;
-eval $reprepared;
+eval $check;
execute stmt_table;
-eval $reprepared;
+eval $check;
drop table t18;
drop table t18_dependent_table;
@@ -944,8 +937,6 @@ drop view view_view;
drop procedure if exists proc_19;
--enable_warnings
-eval $base_count;
-
# Using a temporary table internally should not confuse the prepared
# statement code, and should not raise ER_PS_INVALIDATED errors
prepare stmt from
@@ -956,17 +947,17 @@ prepare stmt from
create procedure proc_19() select "hi there";
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop procedure proc_19;
create procedure proc_19() select "hi there, again";
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop procedure proc_19;
@@ -974,19 +965,17 @@ drop procedure proc_19;
--echo Testing 20: Special tables (log tables)
--echo =====================================================================
-eval $base_count;
-
prepare stmt from
'select * from mysql.general_log where argument=\'IMPOSSIBLE QUERY STRING\'';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
--echo =====================================================================
--echo Testing 21: Special tables (system tables)
@@ -996,25 +985,23 @@ eval $reprepared;
drop procedure if exists proc_21;
--enable_warnings
-eval $base_count;
-
prepare stmt from
'select type, db, name from mysql.proc where name=\'proc_21\'';
create procedure proc_21() select "hi there";
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop procedure proc_21;
create procedure proc_21() select "hi there, again";
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop procedure proc_21;
@@ -1027,8 +1014,6 @@ drop table if exists t22_b;
drop view if exists t22;
--enable_warnings
-eval $base_count;
-
create table t22_b(a int);
create algorithm=temptable view t22 as select a*a as a2 from t22_b;
@@ -1041,15 +1026,15 @@ prepare stmt from 'select * from t22';
insert into t22_b values (1), (2), (3);
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
insert into t22_b values (4), (5), (6);
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t22_b;
drop view t22;
@@ -1063,8 +1048,6 @@ drop table if exists t23_a;
drop table if exists t23_b;
--enable_warnings
-eval $base_count;
-
create table t23_a(a int);
create table t23_b(b int);
@@ -1075,16 +1058,16 @@ prepare stmt from 'select * from t23_a join t23_b';
insert into t23_a values (1), (2), (3);
insert into t23_b values (10), (20), (30);
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
insert into t23_a values (4);
insert into t23_b values (40);
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t23_a;
drop table t23_b;
@@ -1099,28 +1082,26 @@ drop table t23_b;
drop table if exists t24_alter;
--enable_warnings
-eval $base_count;
-
create table t24_alter(a int);
prepare stmt from 'alter table t24_alter add column b int';
execute stmt;
-eval $reprepared;
+eval $check;
drop table t24_alter;
create table t24_alter(a1 int, a2 int);
# t24_alter has changed, and it's not a problem
execute stmt;
-eval $reprepared;
+eval $check;
alter table t24_alter drop column b;
execute stmt;
-eval $reprepared;
+eval $check;
alter table t24_alter drop column b;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t24_alter;
@@ -1135,7 +1116,7 @@ insert into t24_repair values (1), (2), (3);
prepare stmt from 'repair table t24_repair';
execute stmt;
-eval $reprepared;
+eval $check;
drop table t24_repair;
create table t24_repair(a1 int, a2 int);
@@ -1143,15 +1124,15 @@ insert into t24_repair values (1, 10), (2, 20), (3, 30);
# t24_repair has changed, and it's not a problem
execute stmt;
-eval $reprepared;
+eval $check;
alter table t24_repair add column b varchar(50) default NULL;
execute stmt;
-eval $reprepared;
+eval $check;
alter table t24_repair drop column b;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t24_repair;
@@ -1166,7 +1147,7 @@ insert into t24_analyze values (1), (2), (3);
prepare stmt from 'analyze table t24_analyze';
execute stmt;
-eval $reprepared;
+eval $check;
drop table t24_analyze;
create table t24_analyze(a1 int, a2 int);
@@ -1174,15 +1155,15 @@ insert into t24_analyze values (1, 10), (2, 20), (3, 30);
# t24_analyze has changed, and it's not a problem
execute stmt;
-eval $reprepared;
+eval $check;
alter table t24_analyze add column b varchar(50) default NULL;
execute stmt;
-eval $reprepared;
+eval $check;
alter table t24_analyze drop column b;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t24_analyze;
@@ -1197,7 +1178,7 @@ insert into t24_optimize values (1), (2), (3);
prepare stmt from 'optimize table t24_optimize';
execute stmt;
-eval $reprepared;
+eval $check;
drop table t24_optimize;
create table t24_optimize(a1 int, a2 int);
@@ -1205,15 +1186,15 @@ insert into t24_optimize values (1, 10), (2, 20), (3, 30);
# t24_optimize has changed, and it's not a problem
execute stmt;
-eval $reprepared;
+eval $check;
alter table t24_optimize add column b varchar(50) default NULL;
execute stmt;
-eval $reprepared;
+eval $check;
alter table t24_optimize drop column b;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t24_optimize;
@@ -1226,35 +1207,35 @@ drop procedure if exists changing_proc;
prepare stmt from 'show create procedure changing_proc';
--error ER_SP_DOES_NOT_EXIST
execute stmt;
-eval $reprepared;
+eval $check;
--error ER_SP_DOES_NOT_EXIST
execute stmt;
-eval $reprepared;
+eval $check;
create procedure changing_proc() begin end;
# changing_proc has changed, and it's not a problem
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop procedure changing_proc;
create procedure changing_proc(x int, y int) begin end;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop procedure changing_proc;
--error ER_SP_DOES_NOT_EXIST
execute stmt;
-eval $reprepared;
+eval $check;
--error ER_SP_DOES_NOT_EXIST
execute stmt;
-eval $reprepared;
+eval $check;
# SQLCOM_SHOW_CREATE_FUNC:
@@ -1265,35 +1246,35 @@ drop function if exists changing_func;
prepare stmt from 'show create function changing_func';
--error ER_SP_DOES_NOT_EXIST
execute stmt;
-eval $reprepared;
+eval $check;
--error ER_SP_DOES_NOT_EXIST
execute stmt;
-eval $reprepared;
+eval $check;
create function changing_func() returns int return 0;
# changing_proc has changed, and it's not a problem
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop function changing_func;
create function changing_func(x int, y int) returns int return x+y;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop function changing_func;
--error ER_SP_DOES_NOT_EXIST
execute stmt;
-eval $reprepared;
+eval $check;
--error ER_SP_DOES_NOT_EXIST
execute stmt;
-eval $reprepared;
+eval $check;
# SQLCOM_SHOW_CREATE_TRIGGER:
@@ -1306,10 +1287,10 @@ create table t24_trigger(a int);
prepare stmt from 'show create trigger t24_bi;';
--error ER_TRG_DOES_NOT_EXIST
execute stmt;
-eval $reprepared;
+eval $check;
--error ER_TRG_DOES_NOT_EXIST
execute stmt;
-eval $reprepared;
+eval $check;
delimiter $$;
create trigger t24_bi before insert on t24_trigger for each row
@@ -1321,9 +1302,9 @@ delimiter ;$$
# t24_bi has changed, and it's not a problem
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop trigger t24_bi;
delimiter $$;
@@ -1335,19 +1316,20 @@ $$
delimiter ;$$
# t24_bi has changed, and it's not a problem
+set @expected = @expected + 1;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop trigger t24_bi;
--error ER_TRG_DOES_NOT_EXIST
execute stmt;
-eval $reprepared;
+eval $check;
--error ER_TRG_DOES_NOT_EXIST
execute stmt;
-eval $reprepared;
+eval $check;
drop table t24_trigger;
@@ -1361,23 +1343,21 @@ drop table t24_trigger;
drop table if exists t25_num_col;
--enable_warnings
-eval $base_count;
-
create table t25_num_col(a int);
-prepare stmt from 'select * from t25_num_col';
+prepare stmt from 'select a from t25_num_col';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
alter table t25_num_col add column b varchar(50) default NULL;
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t25_num_col;
@@ -1391,17 +1371,20 @@ create table t25_col_name(a int);
prepare stmt from 'select * from t25_col_name';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
alter table t25_col_name change a b int;
-# REPREPARED +1
+set @expected = @expected + 1;
+--error ER_PS_REBIND
execute stmt;
-eval $reprepared;
+eval $check;
+set @expected = @expected + 1;
+--error ER_PS_REBIND
execute stmt;
-eval $reprepared;
+eval $check;
drop table t25_col_name;
@@ -1415,17 +1398,20 @@ create table t25_col_type(a int);
prepare stmt from 'select * from t25_col_type';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
alter table t25_col_type change a a varchar(10);
-# REPREPARED +1
+set @expected = @expected + 1;
+--error ER_PS_REBIND
execute stmt;
-eval $reprepared;
+eval $check;
+set @expected = @expected + 1;
+--error ER_PS_REBIND
execute stmt;
-eval $reprepared;
+eval $check;
drop table t25_col_type;
@@ -1439,17 +1425,20 @@ create table t25_col_type_length(a varchar(10));
prepare stmt from 'select * from t25_col_type_length';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
alter table t25_col_type_length change a a varchar(20);
-# REPREPARED +1
+set @expected = @expected + 1;
+--error ER_PS_REBIND
execute stmt;
-eval $reprepared;
+eval $check;
+set @expected = @expected + 1;
+--error ER_PS_REBIND
execute stmt;
-eval $reprepared;
+eval $check;
drop table t25_col_type_length;
@@ -1463,17 +1452,20 @@ create table t25_col_null(a varchar(10));
prepare stmt from 'select * from t25_col_null';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
alter table t25_col_null change a a varchar(10) NOT NULL;
-# REPREPARED +1
+set @expected = @expected + 1;
+--error ER_PS_REBIND
execute stmt;
-eval $reprepared;
+eval $check;
+set @expected = @expected + 1;
+--error ER_PS_REBIND
execute stmt;
-eval $reprepared;
+eval $check;
drop table t25_col_null;
@@ -1488,22 +1480,23 @@ create table t25_col_default(a int, b int DEFAULT 10);
prepare stmt from 'insert into t25_col_default(a) values (?)';
set @val=1;
execute stmt using @val;
-eval $reprepared;
+eval $check;
set @val=2;
execute stmt using @val;
-eval $reprepared;
+eval $check;
alter table t25_col_default change b b int DEFAULT 20;
set @val=3;
# Must insert the correct default value for b
+set @expected = @expected + 1;
execute stmt using @val;
-eval $reprepared;
+eval $check;
set @val=4;
# Must insert the correct default value for b
execute stmt using @val;
-eval $reprepared;
+eval $check;
select * from t25_col_default;
@@ -1519,17 +1512,17 @@ create table t25_index(a varchar(10));
prepare stmt from 'select * from t25_index';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
create index i1 on t25_index(a);
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t25_index;
@@ -1546,20 +1539,20 @@ show create table t25_index_unique;
prepare stmt from 'select * from t25_index_unique';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
alter table t25_index_unique drop index i1;
create unique index i1 on t25_index_unique(a, b);
show create table t25_index_unique;
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t25_index_unique;
@@ -1579,8 +1572,6 @@ drop function if exists func_12093_unrelated;
drop procedure if exists proc_12093;
--enable_warnings
-eval $base_count;
-
connect (con1,localhost,root,,);
connection default;
@@ -1609,9 +1600,9 @@ prepare stmt_sf from 'select func_12093();';
prepare stmt_sp from 'call proc_12093(func_12093())';
execute stmt_sf;
-eval $reprepared;
+eval $check;
execute stmt_sp;
-eval $reprepared;
+eval $check;
connection con1;
@@ -1622,17 +1613,17 @@ connection default;
# previously, failed with --error 1305
execute stmt_sf;
-eval $reprepared;
+eval $check;
# previously, failed with --error 1305
execute stmt_sp;
-eval $reprepared;
+eval $check;
# previously, failed with --error 1305
execute stmt_sf;
-eval $reprepared;
+eval $check;
# previously, failed with --error 1305
execute stmt_sp;
-eval $reprepared;
+eval $check;
deallocate prepare stmt_sf;
deallocate prepare stmt_sp;
@@ -1652,26 +1643,25 @@ drop procedure proc_12093;
drop function if exists func_21294;
--enable_warnings
-eval $base_count;
-
create function func_21294() returns int return 10;
prepare stmt from "select func_21294()";
execute stmt;
-eval $reprepared;
+eval $check;
drop function func_21294;
create function func_21294() returns int return 10;
# might pass or fail, implementation dependent
execute stmt;
-eval $reprepared;
+eval $check;
drop function func_21294;
create function func_21294() returns int return 20;
+set @expected = @expected + 1;
execute stmt;
-eval $reprepared;
+eval $check;
deallocate prepare stmt;
drop function func_21294;
@@ -1687,8 +1677,6 @@ drop table if exists t_27420_101;
drop view if exists v_27420;
--enable_warnings
-eval $base_count;
-
connect (con1,localhost,root,,);
connection default;
@@ -1706,7 +1694,7 @@ create view v_27420 as select t_27420_100.a X, t_27420_101.a Y
prepare stmt from 'select * from v_27420';
execute stmt;
-eval $reprepared;
+eval $check;
connection con1;
@@ -1715,9 +1703,9 @@ create table v_27420(X int, Y int);
connection default;
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt;
-eval $reprepared;
+eval $check;
connection con1;
@@ -1727,9 +1715,10 @@ create table v_27420 (a int, b int, filler char(200));
connection default;
-# REPREPARED +1
+set @expected = @expected + 1;
+--error ER_PS_REBIND
execute stmt;
-eval $reprepared;
+eval $check;
disconnect con1;
@@ -1748,8 +1737,6 @@ drop table if exists t_27430_1;
drop table if exists t_27430_2;
--enable_warnings
-eval $base_count;
-
create table t_27430_1 (a int not null, oref int not null, key(a));
insert into t_27430_1 values
(1, 1),
@@ -1769,9 +1756,9 @@ prepare stmt from
'select oref, a, a in (select a from t_27430_1 where oref=t_27430_2.oref) Z from t_27430_2';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop table t_27430_1, t_27430_2;
@@ -1790,11 +1777,14 @@ insert into t_27430_2 values
(NULL, 3),
(NULL, 4);
-# REPREPARED +1
+set @expected = @expected + 1;
+--error ER_PS_REBIND
execute stmt;
-eval $reprepared;
+eval $check;
+set @expected = @expected + 1;
+--error ER_PS_REBIND
execute stmt;
-eval $reprepared;
+eval $check;
deallocate prepare stmt;
drop table t_27430_1;
@@ -1811,8 +1801,6 @@ drop view if exists v_27690_1;
drop table if exists v_27690_2;
--enable_warnings
-eval $base_count;
-
create table t_27690_1 (a int, b int);
insert into t_27690_1 values (1,1),(2,2);
@@ -1822,27 +1810,27 @@ create table v_27690_2 as select * from t_27690_1;
prepare stmt from 'select * from v_27690_1, v_27690_2';
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
drop table v_27690_1;
--error ER_NO_SUCH_TABLE
execute stmt;
-eval $reprepared;
+eval $check;
--error ER_NO_SUCH_TABLE
execute stmt;
-eval $reprepared;
+eval $check;
create view v_27690_1 as select A.a, A.b from t_27690_1 A, t_27690_1 B;
-# REPREPARED +1
+set @expected = @expected + 1;
execute stmt;
-eval $reprepared;
+eval $check;
execute stmt;
-eval $reprepared;
+eval $check;
deallocate prepare stmt;
drop table t_27690_1;
diff --git a/mysql-test/t/show_check.test b/mysql-test/t/show_check.test
index 34e1941c9d7..613e9acc4c4 100644
--- a/mysql-test/t/show_check.test
+++ b/mysql-test/t/show_check.test
@@ -1115,5 +1115,24 @@ DROP EVENT ev1;
SHOW TABLE TYPES;
--enable_result_log
+#
+# Bug #32710: SHOW INNODB STATUS requires SUPER
+#
+
+
+CREATE USER test_u@localhost;
+GRANT PROCESS ON *.* TO test_u@localhost;
+
+connect (conn1, localhost, test_u,,);
+
+--disable_result_log
+SHOW ENGINE MYISAM MUTEX;
+SHOW ENGINE MYISAM STATUS;
+--enable_result_log
+
+disconnect conn1;
+connection default;
+DROP USER test_u@localhost;
+
--echo End of 5.1 tests
diff --git a/mysql-test/t/sp-error.test b/mysql-test/t/sp-error.test
index 286722df65c..23bce3805af 100644
--- a/mysql-test/t/sp-error.test
+++ b/mysql-test/t/sp-error.test
@@ -2369,6 +2369,24 @@ end|
delimiter ;|
#
+# Bug#21801: SQL exception handlers and warnings
+#
+
+--disable_warnings
+drop procedure if exists p1;
+--enable_warnings
+delimiter |;
+create procedure p1()
+begin
+ create table t1 (a int) type=MyISAM;
+ drop table t1;
+end|
+delimiter ;|
+call p1();
+call p1();
+drop procedure p1;
+
+#
# BUG#NNNN: New bug synopsis
#
#--disable_warnings
diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test
index 6dc2f906d45..bb9aae6dee6 100644
--- a/mysql-test/t/sp.test
+++ b/mysql-test/t/sp.test
@@ -8135,6 +8135,29 @@ DROP FUNCTION f1;
###########################################################################
+#
+# Bug#32633 Can not create any routine if SQL_MODE=no_engine_substitution
+#
+# Ensure that when new SQL modes are introduced, they are also added to
+# the mysql.proc table.
+#
+
+--disable_warnings
+drop procedure if exists p;
+--enable_warnings
+set @old_mode= @@sql_mode;
+set @@sql_mode= pow(2,32)-1;
+select @@sql_mode into @full_mode;
+create procedure p() begin end;
+call p();
+select @@sql_mode;
+set @@sql_mode= @old_mode;
+# Rename SQL modes that differ in name between the server and the table definition.
+select replace(@full_mode, '?', 'NOT_USED') into @full_mode;
+select replace(@full_mode, 'ALLOW_INVALID_DATES', 'INVALID_DATES') into @full_mode;
+select name from mysql.proc where name = 'p' and sql_mode = @full_mode;
+drop procedure p;
+
--echo # ------------------------------------------------------------------
--echo # -- End of 5.1 tests
--echo # ------------------------------------------------------------------
diff --git a/mysql-test/t/system_mysql_db_fix50117.test b/mysql-test/t/system_mysql_db_fix50117.test
index 5f259ac6133..ea379757f26 100644
--- a/mysql-test/t/system_mysql_db_fix50117.test
+++ b/mysql-test/t/system_mysql_db_fix50117.test
@@ -78,7 +78,7 @@ CREATE TABLE IF NOT EXISTS proc ( db char(64) collate utf8_bin DEFAULT '' NOT NU
CREATE TABLE IF NOT EXISTS procs_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Routine_name char(64) binary DEFAULT '' NOT NULL, Routine_type enum('FUNCTION','PROCEDURE') NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Proc_priv set('Execute','Alter Routine','Grant') COLLATE utf8_general_ci DEFAULT '' NOT NULL, Timestamp timestamp(14), PRIMARY KEY (Host,Db,User,Routine_name,Routine_type), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Procedure privileges';
-CREATE TABLE IF NOT EXISTS event ( db char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', name char(64) CHARACTER SET utf8 NOT NULL default '', body longblob NOT NULL, definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', execute_at DATETIME default NULL, interval_value int(11) default NULL, interval_field ENUM('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') default NULL, created TIMESTAMP NOT NULL, modified TIMESTAMP NOT NULL, last_executed DATETIME default NULL, starts DATETIME default NULL, ends DATETIME default NULL, status ENUM('ENABLED','DISABLED') NOT NULL default 'ENABLED', on_completion ENUM('DROP','PRESERVE') NOT NULL default 'DROP', sql_mode set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE') DEFAULT '' NOT NULL, comment char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', time_zone char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM', PRIMARY KEY (db, name) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT 'Events';
+CREATE TABLE IF NOT EXISTS event ( db char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', name char(64) CHARACTER SET utf8 NOT NULL default '', body longblob NOT NULL, definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', execute_at DATETIME default NULL, interval_value int(11) default NULL, interval_field ENUM('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') default NULL, created TIMESTAMP NOT NULL, modified TIMESTAMP NOT NULL, last_executed DATETIME default NULL, starts DATETIME default NULL, ends DATETIME default NULL, status ENUM('ENABLED','DISABLED') NOT NULL default 'ENABLED', on_completion ENUM('DROP','PRESERVE') NOT NULL default 'DROP', sql_mode set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH') DEFAULT '' NOT NULL, comment char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', time_zone char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM', PRIMARY KEY (db, name) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT 'Events';
CREATE TABLE IF NOT EXISTS ndb_binlog_index (Position BIGINT UNSIGNED NOT NULL, File VARCHAR(255) NOT NULL, epoch BIGINT UNSIGNED NOT NULL, inserts BIGINT UNSIGNED NOT NULL, updates BIGINT UNSIGNED NOT NULL, deletes BIGINT UNSIGNED NOT NULL, schemaops BIGINT UNSIGNED NOT NULL, PRIMARY KEY(epoch)) ENGINE=MYISAM;
diff --git a/mysql-test/t/upgrade.test b/mysql-test/t/upgrade.test
index 05f430b087b..ce40ec8ed77 100644
--- a/mysql-test/t/upgrade.test
+++ b/mysql-test/t/upgrade.test
@@ -1,10 +1,5 @@
-- source include/not_embedded.inc
-# Temporary disabled on windows,
-# because of --exec mkdir
-# TODO: implement Bug#31004 and remove this limitation
---source include/not_windows.inc
-
--disable_warnings
drop database if exists `mysqltest1`;
drop database if exists `mysqltest-1`;
@@ -75,7 +70,7 @@ create table tabc.t1 (a int);
FLUSH TABLES;
# Manually make a 5.0 database from the template
---exec mkdir $MYSQLTEST_VARDIR/master-data/a-b-c
+--mkdir $MYSQLTEST_VARDIR/master-data/a-b-c
--copy_file $MYSQLTEST_VARDIR/master-data/tabc/db.opt $MYSQLTEST_VARDIR/master-data/a-b-c/db.opt
--copy_file $MYSQLTEST_VARDIR/master-data/tabc/t1.frm $MYSQLTEST_VARDIR/master-data/a-b-c/t1.frm
--copy_file $MYSQLTEST_VARDIR/master-data/tabc/t1.MYD $MYSQLTEST_VARDIR/master-data/a-b-c/t1.MYD
diff --git a/mysys/thr_lock.c b/mysys/thr_lock.c
index 7f7be4835a5..afe8f289089 100644
--- a/mysys/thr_lock.c
+++ b/mysys/thr_lock.c
@@ -405,6 +405,8 @@ wait_for_lock(struct st_lock_list *wait, THR_LOCK_DATA *data,
wait->last= &data->next;
}
+ statistic_increment(locks_waited, &THR_LOCK_lock);
+
/* Set up control struct to allow others to abort locks */
thread_var->current_mutex= &data->lock->mutex;
thread_var->current_cond= cond;
@@ -469,7 +471,6 @@ wait_for_lock(struct st_lock_list *wait, THR_LOCK_DATA *data,
else
{
result= THR_LOCK_SUCCESS;
- statistic_increment(locks_waited, &THR_LOCK_lock);
if (data->lock->get_status)
(*data->lock->get_status)(data->status_param, 0);
check_locks(data->lock,"got wait_for_lock",0);
diff --git a/scripts/mysql_system_tables.sql b/scripts/mysql_system_tables.sql
index 7ca35ae0752..fdab9601129 100644
--- a/scripts/mysql_system_tables.sql
+++ b/scripts/mysql_system_tables.sql
@@ -60,7 +60,7 @@ CREATE TABLE IF NOT EXISTS time_zone_transition_type ( Time_zone_id int unsign
CREATE TABLE IF NOT EXISTS time_zone_leap_second ( Transition_time bigint signed NOT NULL, Correction int signed NOT NULL, PRIMARY KEY TranTime (Transition_time) ) engine=MyISAM CHARACTER SET utf8 comment='Leap seconds information for time zones';
-CREATE TABLE IF NOT EXISTS proc (db char(64) collate utf8_bin DEFAULT '' NOT NULL, name char(64) DEFAULT '' NOT NULL, type enum('FUNCTION','PROCEDURE') NOT NULL, specific_name char(64) DEFAULT '' NOT NULL, language enum('SQL') DEFAULT 'SQL' NOT NULL, sql_data_access enum( 'CONTAINS_SQL', 'NO_SQL', 'READS_SQL_DATA', 'MODIFIES_SQL_DATA') DEFAULT 'CONTAINS_SQL' NOT NULL, is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL, security_type enum('INVOKER','DEFINER') DEFAULT 'DEFINER' NOT NULL, param_list blob NOT NULL, returns longblob DEFAULT '' NOT NULL, body longblob NOT NULL, definer char(77) collate utf8_bin DEFAULT '' NOT NULL, created timestamp, modified timestamp, sql_mode set( 'REAL_AS_FLOAT', 'PIPES_AS_CONCAT', 'ANSI_QUOTES', 'IGNORE_SPACE', 'NOT_USED', 'ONLY_FULL_GROUP_BY', 'NO_UNSIGNED_SUBTRACTION', 'NO_DIR_IN_CREATE', 'POSTGRESQL', 'ORACLE', 'MSSQL', 'DB2', 'MAXDB', 'NO_KEY_OPTIONS', 'NO_TABLE_OPTIONS', 'NO_FIELD_OPTIONS', 'MYSQL323', 'MYSQL40', 'ANSI', 'NO_AUTO_VALUE_ON_ZERO', 'NO_BACKSLASH_ESCAPES', 'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES', 'NO_ZERO_IN_DATE', 'NO_ZERO_DATE', 'INVALID_DATES', 'ERROR_FOR_DIVISION_BY_ZERO', 'TRADITIONAL', 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE') DEFAULT '' NOT NULL, comment char(64) collate utf8_bin DEFAULT '' NOT NULL, character_set_client char(32) collate utf8_bin, collation_connection char(32) collate utf8_bin, db_collation char(32) collate utf8_bin, body_utf8 longblob, PRIMARY KEY (db,name,type)) engine=MyISAM character set utf8 comment='Stored Procedures';
+CREATE TABLE IF NOT EXISTS proc (db char(64) collate utf8_bin DEFAULT '' NOT NULL, name char(64) DEFAULT '' NOT NULL, type enum('FUNCTION','PROCEDURE') NOT NULL, specific_name char(64) DEFAULT '' NOT NULL, language enum('SQL') DEFAULT 'SQL' NOT NULL, sql_data_access enum( 'CONTAINS_SQL', 'NO_SQL', 'READS_SQL_DATA', 'MODIFIES_SQL_DATA') DEFAULT 'CONTAINS_SQL' NOT NULL, is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL, security_type enum('INVOKER','DEFINER') DEFAULT 'DEFINER' NOT NULL, param_list blob NOT NULL, returns longblob DEFAULT '' NOT NULL, body longblob NOT NULL, definer char(77) collate utf8_bin DEFAULT '' NOT NULL, created timestamp, modified timestamp, sql_mode set( 'REAL_AS_FLOAT', 'PIPES_AS_CONCAT', 'ANSI_QUOTES', 'IGNORE_SPACE', 'NOT_USED', 'ONLY_FULL_GROUP_BY', 'NO_UNSIGNED_SUBTRACTION', 'NO_DIR_IN_CREATE', 'POSTGRESQL', 'ORACLE', 'MSSQL', 'DB2', 'MAXDB', 'NO_KEY_OPTIONS', 'NO_TABLE_OPTIONS', 'NO_FIELD_OPTIONS', 'MYSQL323', 'MYSQL40', 'ANSI', 'NO_AUTO_VALUE_ON_ZERO', 'NO_BACKSLASH_ESCAPES', 'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES', 'NO_ZERO_IN_DATE', 'NO_ZERO_DATE', 'INVALID_DATES', 'ERROR_FOR_DIVISION_BY_ZERO', 'TRADITIONAL', 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE', 'NO_ENGINE_SUBSTITUTION', 'PAD_CHAR_TO_FULL_LENGTH') DEFAULT '' NOT NULL, comment char(64) collate utf8_bin DEFAULT '' NOT NULL, character_set_client char(32) collate utf8_bin, collation_connection char(32) collate utf8_bin, db_collation char(32) collate utf8_bin, body_utf8 longblob, PRIMARY KEY (db,name,type)) engine=MyISAM character set utf8 comment='Stored Procedures';
CREATE TABLE IF NOT EXISTS procs_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Routine_name char(64) binary DEFAULT '' NOT NULL, Routine_type enum('FUNCTION','PROCEDURE') NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Proc_priv set('Execute','Alter Routine','Grant') COLLATE utf8_general_ci DEFAULT '' NOT NULL, Timestamp timestamp(14), PRIMARY KEY (Host,Db,User,Routine_name,Routine_type), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Procedure privileges';
@@ -80,7 +80,7 @@ PREPARE stmt FROM @str;
EXECUTE stmt;
DROP PREPARE stmt;
-CREATE TABLE IF NOT EXISTS event ( db char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', name char(64) CHARACTER SET utf8 NOT NULL default '', body longblob NOT NULL, definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', execute_at DATETIME default NULL, interval_value int(11) default NULL, interval_field ENUM('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') default NULL, created TIMESTAMP NOT NULL, modified TIMESTAMP NOT NULL, last_executed DATETIME default NULL, starts DATETIME default NULL, ends DATETIME default NULL, status ENUM('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL default 'ENABLED', on_completion ENUM('DROP','PRESERVE') NOT NULL default 'DROP', sql_mode set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE') DEFAULT '' NOT NULL, comment char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', originator int(10) NOT NULL, time_zone char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM', character_set_client char(32) collate utf8_bin, collation_connection char(32) collate utf8_bin, db_collation char(32) collate utf8_bin, body_utf8 longblob, PRIMARY KEY (db, name) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT 'Events';
+CREATE TABLE IF NOT EXISTS event ( db char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', name char(64) CHARACTER SET utf8 NOT NULL default '', body longblob NOT NULL, definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', execute_at DATETIME default NULL, interval_value int(11) default NULL, interval_field ENUM('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') default NULL, created TIMESTAMP NOT NULL, modified TIMESTAMP NOT NULL, last_executed DATETIME default NULL, starts DATETIME default NULL, ends DATETIME default NULL, status ENUM('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL default 'ENABLED', on_completion ENUM('DROP','PRESERVE') NOT NULL default 'DROP', sql_mode set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH') DEFAULT '' NOT NULL, comment char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', originator int(10) NOT NULL, time_zone char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM', character_set_client char(32) collate utf8_bin, collation_connection char(32) collate utf8_bin, db_collation char(32) collate utf8_bin, body_utf8 longblob, PRIMARY KEY (db, name) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT 'Events';
CREATE TABLE IF NOT EXISTS ndb_binlog_index (Position BIGINT UNSIGNED NOT NULL, File VARCHAR(255) NOT NULL, epoch BIGINT UNSIGNED NOT NULL, inserts BIGINT UNSIGNED NOT NULL, updates BIGINT UNSIGNED NOT NULL, deletes BIGINT UNSIGNED NOT NULL, schemaops BIGINT UNSIGNED NOT NULL, PRIMARY KEY(epoch)) ENGINE=MYISAM;
diff --git a/scripts/mysql_system_tables_fix.sql b/scripts/mysql_system_tables_fix.sql
index a43964bf09a..e2bdd668c0f 100644
--- a/scripts/mysql_system_tables_fix.sql
+++ b/scripts/mysql_system_tables_fix.sql
@@ -375,7 +375,9 @@ ALTER TABLE proc MODIFY name char(64) DEFAULT '' NOT NULL,
'ERROR_FOR_DIVISION_BY_ZERO',
'TRADITIONAL',
'NO_AUTO_CREATE_USER',
- 'HIGH_NOT_PRECEDENCE'
+ 'HIGH_NOT_PRECEDENCE',
+ 'NO_ENGINE_SUBSTITUTION',
+ 'PAD_CHAR_TO_FULL_LENGTH'
) DEFAULT '' NOT NULL,
DEFAULT CHARACTER SET utf8;
@@ -461,7 +463,9 @@ ALTER TABLE event ADD sql_mode
'ERROR_FOR_DIVISION_BY_ZERO',
'TRADITIONAL',
'NO_AUTO_CREATE_USER',
- 'HIGH_NOT_PRECEDENCE'
+ 'HIGH_NOT_PRECEDENCE',
+ 'NO_ENGINE_SUBSTITUTION',
+ 'PAD_CHAR_TO_FULL_LENGTH'
) DEFAULT '' NOT NULL AFTER on_completion;
ALTER TABLE event MODIFY name char(64) CHARACTER SET utf8 NOT NULL default '';
ALTER TABLE event ADD COLUMN originator INT(10) NOT NULL AFTER comment;
diff --git a/sql-common/my_user.c b/sql-common/my_user.c
index 16a544387ee..d6f2818ad77 100644
--- a/sql-common/my_user.c
+++ b/sql-common/my_user.c
@@ -15,7 +15,7 @@
#include <my_user.h>
#include <m_string.h>
-
+#include <mysql_com.h>
/*
Parse user value to user name and host name parts.
@@ -47,6 +47,12 @@ void parse_user(const char *user_id_str, size_t user_id_len,
*user_name_len= p - user_id_str;
*host_name_len= user_id_len - *user_name_len - 1;
+ if (*user_name_len > USERNAME_LENGTH)
+ *user_name_len= USERNAME_LENGTH;
+
+ if (*host_name_len > HOSTNAME_LENGTH)
+ *host_name_len= HOSTNAME_LENGTH;
+
memcpy(user_name_str, user_id_str, *user_name_len);
memcpy(host_name_str, p + 1, *host_name_len);
}
diff --git a/sql/event_db_repository.cc b/sql/event_db_repository.cc
index 9a33b33d8c9..401f76f5d26 100644
--- a/sql/event_db_repository.cc
+++ b/sql/event_db_repository.cc
@@ -111,7 +111,7 @@ const TABLE_FIELD_W_TYPE event_table_fields[ET_FIELD_COUNT] =
"'ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES',"
"'STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES',"
"'ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER',"
- "'HIGH_NOT_PRECEDENCE')") },
+ "'HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH')") },
{NULL, 0}
},
{
@@ -172,11 +172,13 @@ mysql_event_fill_row(THD *thd,
TABLE *table,
Event_parse_data *et,
sp_head *sp,
+ ulong sql_mode,
my_bool is_update)
{
CHARSET_INFO *scs= system_charset_info;
enum enum_events_table_field f_num;
Field **fields= table->field;
+ int rs= FALSE;
DBUG_ENTER("mysql_event_fill_row");
@@ -205,12 +207,9 @@ mysql_event_fill_row(THD *thd,
goto err_truncate;
/* both ON_COMPLETION and STATUS are NOT NULL thus not calling set_notnull()*/
- fields[ET_FIELD_ON_COMPLETION]->store((longlong)et->on_completion, TRUE);
-
- fields[ET_FIELD_STATUS]->store((longlong)et->status, TRUE);
-
- fields[ET_FIELD_ORIGINATOR]->store((longlong)et->originator, TRUE);
-
+ rs|= fields[ET_FIELD_ON_COMPLETION]->store((longlong)et->on_completion, TRUE);
+ rs|= fields[ET_FIELD_STATUS]->store((longlong)et->status, TRUE);
+ rs|= fields[ET_FIELD_ORIGINATOR]->store((longlong)et->originator, TRUE);
/*
Change the SQL_MODE only if body was present in an ALTER EVENT and of course
@@ -220,7 +219,7 @@ mysql_event_fill_row(THD *thd,
{
DBUG_ASSERT(sp->m_body.str);
- fields[ET_FIELD_SQL_MODE]->store((longlong)thd->variables.sql_mode, TRUE);
+ rs|= fields[ET_FIELD_SQL_MODE]->store((longlong)sql_mode, TRUE);
if (fields[f_num= ET_FIELD_BODY]->store(sp->m_body.str,
sp->m_body.length,
@@ -236,16 +235,16 @@ mysql_event_fill_row(THD *thd,
if (!is_update || !et->starts_null)
{
fields[ET_FIELD_TIME_ZONE]->set_notnull();
- fields[ET_FIELD_TIME_ZONE]->store(tz_name->ptr(), tz_name->length(),
- tz_name->charset());
+ rs|= fields[ET_FIELD_TIME_ZONE]->store(tz_name->ptr(), tz_name->length(),
+ tz_name->charset());
}
fields[ET_FIELD_INTERVAL_EXPR]->set_notnull();
- fields[ET_FIELD_INTERVAL_EXPR]->store((longlong)et->expression, TRUE);
+ rs|= fields[ET_FIELD_INTERVAL_EXPR]->store((longlong)et->expression, TRUE);
fields[ET_FIELD_TRANSIENT_INTERVAL]->set_notnull();
- fields[ET_FIELD_TRANSIENT_INTERVAL]->
+ rs|= fields[ET_FIELD_TRANSIENT_INTERVAL]->
store(interval_type_to_name[et->interval].str,
interval_type_to_name[et->interval].length,
scs);
@@ -274,8 +273,8 @@ mysql_event_fill_row(THD *thd,
{
const String *tz_name= thd->variables.time_zone->get_name();
fields[ET_FIELD_TIME_ZONE]->set_notnull();
- fields[ET_FIELD_TIME_ZONE]->store(tz_name->ptr(), tz_name->length(),
- tz_name->charset());
+ rs|= fields[ET_FIELD_TIME_ZONE]->store(tz_name->ptr(), tz_name->length(),
+ tz_name->charset());
fields[ET_FIELD_INTERVAL_EXPR]->set_null();
fields[ET_FIELD_TRANSIENT_INTERVAL]->set_null();
@@ -308,13 +307,13 @@ mysql_event_fill_row(THD *thd,
}
fields[ET_FIELD_CHARACTER_SET_CLIENT]->set_notnull();
- fields[ET_FIELD_CHARACTER_SET_CLIENT]->store(
+ rs|= fields[ET_FIELD_CHARACTER_SET_CLIENT]->store(
thd->variables.character_set_client->csname,
strlen(thd->variables.character_set_client->csname),
system_charset_info);
fields[ET_FIELD_COLLATION_CONNECTION]->set_notnull();
- fields[ET_FIELD_COLLATION_CONNECTION]->store(
+ rs|= fields[ET_FIELD_COLLATION_CONNECTION]->store(
thd->variables.collation_connection->name,
strlen(thd->variables.collation_connection->name),
system_charset_info);
@@ -323,15 +322,23 @@ mysql_event_fill_row(THD *thd,
CHARSET_INFO *db_cl= get_default_db_collation(thd, et->dbname.str);
fields[ET_FIELD_DB_COLLATION]->set_notnull();
- fields[ET_FIELD_DB_COLLATION]->store(
- db_cl->name, strlen(db_cl->name), system_charset_info);
+ rs|= fields[ET_FIELD_DB_COLLATION]->store(db_cl->name,
+ strlen(db_cl->name),
+ system_charset_info);
}
if (et->body_changed)
{
fields[ET_FIELD_BODY_UTF8]->set_notnull();
- fields[ET_FIELD_BODY_UTF8]->store(
- sp->m_body_utf8.str, sp->m_body_utf8.length, system_charset_info);
+ rs|= fields[ET_FIELD_BODY_UTF8]->store(sp->m_body_utf8.str,
+ sp->m_body_utf8.length,
+ system_charset_info);
+ }
+
+ if (rs)
+ {
+ my_error(ER_EVENT_STORE_FAILED, MYF(0), fields[f_num]->field_name, rs);
+ DBUG_RETURN(TRUE);
}
DBUG_RETURN(FALSE);
@@ -585,12 +592,16 @@ Event_db_repository::create_event(THD *thd, Event_parse_data *parse_data,
int ret= 1;
TABLE *table= NULL;
sp_head *sp= thd->lex->sphead;
+ ulong saved_mode= thd->variables.sql_mode;
DBUG_ENTER("Event_db_repository::create_event");
DBUG_PRINT("info", ("open mysql.event for update"));
DBUG_ASSERT(sp);
+ /* Reset sql_mode during data dictionary operations. */
+ thd->variables.sql_mode= 0;
+
if (open_event_table(thd, TL_WRITE, &table))
goto end;
@@ -646,7 +657,7 @@ Event_db_repository::create_event(THD *thd, Event_parse_data *parse_data,
mysql_event_fill_row() calls my_error() in case of error so no need to
handle it here
*/
- if (mysql_event_fill_row(thd, table, parse_data, sp, FALSE))
+ if (mysql_event_fill_row(thd, table, parse_data, sp, saved_mode, FALSE))
goto end;
table->field[ET_FIELD_STATUS]->store((longlong)parse_data->status, TRUE);
@@ -661,6 +672,7 @@ Event_db_repository::create_event(THD *thd, Event_parse_data *parse_data,
end:
if (table)
close_thread_tables(thd);
+ thd->variables.sql_mode= saved_mode;
DBUG_RETURN(test(ret));
}
@@ -691,6 +703,7 @@ Event_db_repository::update_event(THD *thd, Event_parse_data *parse_data,
CHARSET_INFO *scs= system_charset_info;
TABLE *table= NULL;
sp_head *sp= thd->lex->sphead;
+ ulong saved_mode= thd->variables.sql_mode;
int ret= 1;
DBUG_ENTER("Event_db_repository::update_event");
@@ -698,6 +711,9 @@ Event_db_repository::update_event(THD *thd, Event_parse_data *parse_data,
/* None or both must be set */
DBUG_ASSERT(new_dbname && new_name || new_dbname == new_name);
+ /* Reset sql_mode during data dictionary operations. */
+ thd->variables.sql_mode= 0;
+
if (open_event_table(thd, TL_WRITE, &table))
goto end;
@@ -736,7 +752,7 @@ Event_db_repository::update_event(THD *thd, Event_parse_data *parse_data,
mysql_event_fill_row() calls my_error() in case of error so no need to
handle it here
*/
- if (mysql_event_fill_row(thd, table, parse_data, sp, TRUE))
+ if (mysql_event_fill_row(thd, table, parse_data, sp, saved_mode, TRUE))
goto end;
if (new_dbname)
@@ -755,6 +771,7 @@ Event_db_repository::update_event(THD *thd, Event_parse_data *parse_data,
end:
if (table)
close_thread_tables(thd);
+ thd->variables.sql_mode= saved_mode;
DBUG_RETURN(test(ret));
}
@@ -950,13 +967,17 @@ bool
Event_db_repository::load_named_event(THD *thd, LEX_STRING dbname,
LEX_STRING name, Event_basic *etn)
{
- TABLE *table= NULL;
bool ret;
+ TABLE *table= NULL;
+ ulong saved_mode= thd->variables.sql_mode;
DBUG_ENTER("Event_db_repository::load_named_event");
DBUG_PRINT("enter",("thd: 0x%lx name: %*s", (long) thd,
(int) name.length, name.str));
+ /* Reset sql_mode during data dictionary operations. */
+ thd->variables.sql_mode= 0;
+
if (!(ret= open_event_table(thd, TL_READ, &table)))
{
if ((ret= find_named_event(dbname, name, table)))
@@ -967,7 +988,7 @@ Event_db_repository::load_named_event(THD *thd, LEX_STRING dbname,
close_thread_tables(thd);
}
-
+ thd->variables.sql_mode= saved_mode;
DBUG_RETURN(ret);
}
diff --git a/sql/item.cc b/sql/item.cc
index c546badd8e7..ab9243fcaf5 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -2628,6 +2628,7 @@ bool Item_param::set_from_user_var(THD *thd, const user_var_entry *entry)
if (entry && entry->value)
{
item_result_type= entry->type;
+ unsigned_flag= entry->unsigned_flag;
if (strict_type && required_result_type != item_result_type)
DBUG_RETURN(1);
switch (item_result_type) {
@@ -2925,7 +2926,7 @@ const String *Item_param::query_val_str(String* str) const
{
switch (state) {
case INT_VALUE:
- str->set(value.integer, &my_charset_bin);
+ str->set_int(value.integer, unsigned_flag, &my_charset_bin);
break;
case REAL_VALUE:
str->set_real(value.real, NOT_FIXED_DEC, &my_charset_bin);
diff --git a/sql/log.cc b/sql/log.cc
index fce1eb076db..042eddea5cf 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -73,23 +73,28 @@ static int binlog_prepare(handlerton *hton, THD *thd, bool all);
*/
class Silence_log_table_errors : public Internal_error_handler
{
+ char m_message[MYSQL_ERRMSG_SIZE];
public:
Silence_log_table_errors()
- {}
+ {
+ m_message[0]= '\0';
+ }
virtual ~Silence_log_table_errors() {}
virtual bool handle_error(uint sql_errno, const char *message,
MYSQL_ERROR::enum_warning_level level,
THD *thd);
+ const char *message() const { return m_message; }
};
bool
Silence_log_table_errors::handle_error(uint /* sql_errno */,
- const char * /* message */,
+ const char *message_arg,
MYSQL_ERROR::enum_warning_level /* level */,
THD * /* thd */)
{
+ strmake(m_message, message_arg, sizeof(m_message));
return TRUE;
}
@@ -436,8 +441,9 @@ bool Log_to_csv_event_handler::
result= FALSE;
err:
- if (result)
- sql_print_error("Failed to write to mysql.general_log");
+ if (result && !thd->killed)
+ sql_print_error("Failed to write to mysql.general_log: %s",
+ error_handler.message());
if (need_rnd_end)
{
@@ -495,11 +501,13 @@ bool Log_to_csv_event_handler::
bool result= TRUE;
bool need_close= FALSE;
bool need_rnd_end= FALSE;
+ Silence_log_table_errors error_handler;
Open_tables_state open_tables_backup;
CHARSET_INFO *client_cs= thd->variables.character_set_client;
bool save_time_zone_used;
DBUG_ENTER("Log_to_csv_event_handler::log_slow");
+ thd->push_internal_handler(& error_handler);
/*
CSV uses TIME_to_timestamp() internally if table needs to be repaired
which will set thd->time_zone_used
@@ -629,8 +637,11 @@ bool Log_to_csv_event_handler::
result= FALSE;
err:
- if (result)
- sql_print_error("Failed to write to mysql.slow_log");
+ thd->pop_internal_handler();
+
+ if (result && !thd->killed)
+ sql_print_error("Failed to write to mysql.slow_log: %s",
+ error_handler.message());
if (need_rnd_end)
{
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index f1a594351bc..ea552414d9a 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -1034,7 +1034,7 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
bool check_access(THD *thd, ulong access, const char *db, ulong *save_priv,
bool no_grant, bool no_errors, bool schema_db);
bool check_table_access(THD *thd, ulong want_access, TABLE_LIST *tables,
- bool no_errors);
+ uint number, bool no_errors);
bool check_global_access(THD *thd, ulong want_access);
#else
inline bool check_access(THD *thd, ulong access, const char *db,
@@ -1046,7 +1046,7 @@ inline bool check_access(THD *thd, ulong access, const char *db,
return false;
}
inline bool check_table_access(THD *thd, ulong want_access, TABLE_LIST *tables,
- bool no_errors)
+ uint number, bool no_errors)
{ return false; }
inline bool check_global_access(THD *thd, ulong want_access)
{ return false; }
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 61f3735fe62..08ecc025332 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -221,6 +221,11 @@ extern "C" int gethostname(char *name, int namelen);
/* Constants */
const char *show_comp_option_name[]= {"YES", "NO", "DISABLED"};
+/*
+ WARNING: When adding new SQL modes don't forget to update the
+ tables definitions that stores it's value.
+ (ie: mysql.event, mysql.proc)
+*/
static const char *sql_mode_names[]=
{
"REAL_AS_FLOAT", "PIPES_AS_CONCAT", "ANSI_QUOTES", "IGNORE_SPACE",
@@ -2179,6 +2184,16 @@ static void check_data_home(const char *path)
#define UNSAFE_DEFAULT_LINUX_THREADS 200
#endif
+
+#if BACKTRACE_DEMANGLE
+#include <cxxabi.h>
+extern "C" char *my_demangle(const char *mangled_name, int *status)
+{
+ return abi::__cxa_demangle(mangled_name, NULL, NULL, status);
+}
+#endif
+
+
extern "C" sig_handler handle_segfault(int sig)
{
time_t curr_time;
@@ -2250,10 +2265,29 @@ the thread stack. Please read http://dev.mysql.com/doc/mysql/en/linux.html\n\n",
}
if (thd)
{
+ const char *kreason= "UNKNOWN";
+ switch (thd->killed) {
+ case THD::NOT_KILLED:
+ kreason= "NOT_KILLED";
+ break;
+ case THD::KILL_BAD_DATA:
+ kreason= "KILL_BAD_DATA";
+ break;
+ case THD::KILL_CONNECTION:
+ kreason= "KILL_CONNECTION";
+ break;
+ case THD::KILL_QUERY:
+ kreason= "KILL_QUERY";
+ break;
+ case THD::KILLED_NO_VALUE:
+ kreason= "KILLED_NO_VALUE";
+ break;
+ }
fprintf(stderr, "Trying to get some variables.\n\
Some pointers may be invalid and cause the dump to abort...\n");
safe_print_str("thd->query", thd->query, 1024);
fprintf(stderr, "thd->thread_id=%lu\n", (ulong) thd->thread_id);
+ fprintf(stderr, "thd->killed=%s\n", kreason);
}
fprintf(stderr, "\
The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains\n\
diff --git a/sql/sp.cc b/sql/sp.cc
index 99ffc18deea..83995e9b753 100644
--- a/sql/sp.cc
+++ b/sql/sp.cc
@@ -388,7 +388,7 @@ db_find_routine(THD *thd, int type, sp_name *name, sp_head **sphp)
uint length;
char buff[65];
String str(buff, sizeof(buff), &my_charset_bin);
- ulong sql_mode;
+ ulong sql_mode, saved_mode= thd->variables.sql_mode;
Open_tables_state open_tables_state_backup;
Stored_program_creation_ctx *creation_ctx;
@@ -400,6 +400,9 @@ db_find_routine(THD *thd, int type, sp_name *name, sp_head **sphp)
if (!(table= open_proc_table_for_read(thd, &open_tables_state_backup)))
DBUG_RETURN(SP_OPEN_TABLE_FAILED);
+ /* Reset sql_mode during data dictionary operations. */
+ thd->variables.sql_mode= 0;
+
if ((ret= db_find_routine_aux(thd, type, name, table)) != SP_OK)
goto done;
@@ -503,10 +506,36 @@ db_find_routine(THD *thd, int type, sp_name *name, sp_head **sphp)
done:
if (table)
close_system_tables(thd, &open_tables_state_backup);
+ thd->variables.sql_mode= saved_mode;
DBUG_RETURN(ret);
}
+/**
+ Silence DEPRECATED SYNTAX warnings when loading a stored procedure
+ into the cache.
+*/
+struct Silence_deprecated_warning : public Internal_error_handler
+{
+public:
+ virtual bool handle_error(uint sql_errno, const char *message,
+ MYSQL_ERROR::enum_warning_level level,
+ THD *thd);
+};
+
+bool
+Silence_deprecated_warning::handle_error(uint sql_errno, const char *message,
+ MYSQL_ERROR::enum_warning_level level,
+ THD *thd)
+{
+ if (sql_errno == ER_WARN_DEPRECATED_SYNTAX &&
+ level == MYSQL_ERROR::WARN_LEVEL_WARN)
+ return TRUE;
+
+ return FALSE;
+}
+
+
static int
db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp,
ulong sql_mode, const char *params, const char *returns,
@@ -523,7 +552,8 @@ db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp,
ulong old_sql_mode= thd->variables.sql_mode;
ha_rows old_select_limit= thd->variables.select_limit;
sp_rcontext *old_spcont= thd->spcont;
-
+ Silence_deprecated_warning warning_handler;
+
char definer_user_name_holder[USERNAME_LENGTH + 1];
LEX_STRING definer_user_name= { definer_user_name_holder,
USERNAME_LENGTH };
@@ -583,7 +613,9 @@ db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp,
lex_start(thd);
+ thd->push_internal_handler(&warning_handler);
ret= parse_sql(thd, &lip, creation_ctx) || newlex.sphead == NULL;
+ thd->pop_internal_handler();
/*
Force switching back to the saved current database (if changed),
@@ -675,6 +707,7 @@ sp_create_routine(THD *thd, int type, sp_head *sp)
int ret;
TABLE *table;
char definer[USER_HOST_BUFF_SIZE];
+ ulong saved_mode= thd->variables.sql_mode;
CHARSET_INFO *db_cs= get_default_db_collation(thd, sp->m_db.str);
@@ -689,6 +722,9 @@ sp_create_routine(THD *thd, int type, sp_head *sp)
DBUG_ASSERT(type == TYPE_ENUM_PROCEDURE ||
type == TYPE_ENUM_FUNCTION);
+ /* Reset sql_mode during data dictionary operations. */
+ thd->variables.sql_mode= 0;
+
/*
This statement will be replicated as a statement, even when using
row-based replication. The flag will be reset at the end of the
@@ -790,7 +826,7 @@ sp_create_routine(THD *thd, int type, sp_head *sp)
store_failed= store_failed ||
table->field[MYSQL_PROC_FIELD_SQL_MODE]->
- store((longlong)thd->variables.sql_mode, TRUE);
+ store((longlong)saved_mode, TRUE);
if (sp->m_chistics->comment.str)
{
@@ -890,6 +926,7 @@ sp_create_routine(THD *thd, int type, sp_head *sp)
done:
thd->count_cuted_fields= saved_count_cuted_fields;
+ thd->variables.sql_mode= saved_mode;
close_thread_tables(thd);
DBUG_RETURN(ret);
diff --git a/sql/sp_head.cc b/sql/sp_head.cc
index 0edb566ed9f..8e6f5a96640 100644
--- a/sql/sp_head.cc
+++ b/sql/sp_head.cc
@@ -2309,7 +2309,7 @@ bool check_show_routine_access(THD *thd, sp_head *sp, bool *full_access)
bzero((char*) &tables,sizeof(tables));
tables.db= (char*) "mysql";
tables.table_name= tables.alias= (char*) "proc";
- *full_access= (!check_table_access(thd, SELECT_ACL, &tables, 1) ||
+ *full_access= (!check_table_access(thd, SELECT_ACL, &tables, 1, TRUE) ||
(!strcmp(sp->m_definer_user.str,
thd->security_ctx->priv_user) &&
!strcmp(sp->m_definer_host.str,
@@ -2753,7 +2753,7 @@ int sp_instr::exec_open_and_lock_tables(THD *thd, TABLE_LIST *tables)
Check whenever we have access to tables for this statement
and open and lock them before executing instructions core function.
*/
- if (check_table_access(thd, SELECT_ACL, tables, 0)
+ if (check_table_access(thd, SELECT_ACL, tables, UINT_MAX, FALSE)
|| open_and_lock_tables(thd, tables))
result= -1;
else
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 0d563ab9051..b04f624f746 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -3041,6 +3041,12 @@ bool mysql_table_grant(THD *thd, TABLE_LIST *table_list,
}
#endif
+ /*
+ The lock api is depending on the thd->lex variable which needs to be
+ re-initialized.
+ */
+ Query_tables_list backup;
+ thd->lex->reset_n_backup_query_tables_list(&backup);
if (simple_open_n_lock_tables(thd,tables))
{ // Should never happen
close_thread_tables(thd); /* purecov: deadcode */
@@ -3173,6 +3179,7 @@ bool mysql_table_grant(THD *thd, TABLE_LIST *table_list,
send_ok(thd);
/* Tables are automatically closed */
+ thd->lex->restore_backup_query_tables_list(&backup);
DBUG_RETURN(result);
}
@@ -3862,7 +3869,7 @@ bool check_grant(THD *thd, ulong want_access, TABLE_LIST *tables,
of other queries). For simple queries first_not_own_table is 0.
*/
for (i= 0, table= tables;
- table != first_not_own_table && i < number;
+ i < number && table != first_not_own_table;
table= table->next_global, i++)
{
/* Remove SHOW_VIEW_ACL, because it will be checked during making view */
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 799cb673a0e..e5a5b51fcf6 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -799,7 +799,7 @@ OPEN_TABLE_LIST *list_open_tables(THD *thd, const char *db, const char *wild)
table_list.table_name= share->table_name.str;
table_list.grant.privilege=0;
- if (check_table_access(thd,SELECT_ACL | EXTRA_ACL,&table_list,1))
+ if (check_table_access(thd,SELECT_ACL | EXTRA_ACL,&table_list, 1, TRUE))
continue;
/* need to check if we haven't already listed it */
for (table= open_list ; table ; table=table->next)
diff --git a/sql/sql_bitmap.h b/sql/sql_bitmap.h
index 9a765120895..97accefe8aa 100644
--- a/sql/sql_bitmap.h
+++ b/sql/sql_bitmap.h
@@ -65,7 +65,7 @@ public:
my_bool is_clear_all() const { return bitmap_is_clear_all(&map); }
my_bool is_set_all() const { return bitmap_is_set_all(&map); }
my_bool is_subset(const Bitmap& map2) const { return bitmap_is_subset(&map, &map2.map); }
- my_bool is_overlapping(const Bitmap& map2) const { return bitmap_is_overlapping(&map, map2.map); }
+ my_bool is_overlapping(const Bitmap& map2) const { return bitmap_is_overlapping(&map, &map2.map); }
my_bool operator==(const Bitmap& map2) const { return bitmap_cmp(&map, &map2.map); }
char *print(char *buf) const
{
diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc
index 7e54f87fe14..ae6765c7934 100644
--- a/sql/sql_cache.cc
+++ b/sql/sql_cache.cc
@@ -1384,7 +1384,7 @@ def_week_frmt: %lu",
table_list.db = table->db();
table_list.alias= table_list.table_name= table->table();
#ifndef NO_EMBEDDED_ACCESS_CHECKS
- if (check_table_access(thd,SELECT_ACL,&table_list,1))
+ if (check_table_access(thd,SELECT_ACL,&table_list, 1, TRUE))
{
DBUG_PRINT("qcache",
("probably no SELECT access to %s.%s => return to normal processing",
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 1ae42b3ce79..55ae30d37ad 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -503,7 +503,7 @@ static bool check_merge_table_access(THD *thd, char *db,
tlist->db= db; /* purecov: inspected */
}
error= check_table_access(thd, SELECT_ACL | UPDATE_ACL | DELETE_ACL,
- table_list,0);
+ table_list, UINT_MAX, FALSE);
}
return error;
}
@@ -2046,7 +2046,7 @@ mysql_execute_command(THD *thd)
res= check_table_access(thd,
lex->exchange ? SELECT_ACL | FILE_ACL :
SELECT_ACL,
- all_tables, 0);
+ all_tables, UINT_MAX, FALSE);
}
else
res= check_access(thd,
@@ -2071,7 +2071,7 @@ mysql_execute_command(THD *thd)
break;
}
case SQLCOM_DO:
- if (check_table_access(thd, SELECT_ACL, all_tables, 0) ||
+ if (check_table_access(thd, SELECT_ACL, all_tables, UINT_MAX, FALSE) ||
open_and_lock_tables(thd, all_tables))
goto error;
@@ -2181,7 +2181,7 @@ mysql_execute_command(THD *thd)
case SQLCOM_BACKUP_TABLE:
{
DBUG_ASSERT(first_table == all_tables && first_table != 0);
- if (check_table_access(thd, SELECT_ACL, all_tables, 0) ||
+ if (check_table_access(thd, SELECT_ACL, all_tables, UINT_MAX, FALSE) ||
check_global_access(thd, FILE_ACL))
goto error; /* purecov: inspected */
thd->enable_slow_log= opt_log_slow_admin_statements;
@@ -2193,7 +2193,7 @@ mysql_execute_command(THD *thd)
case SQLCOM_RESTORE_TABLE:
{
DBUG_ASSERT(first_table == all_tables && first_table != 0);
- if (check_table_access(thd, INSERT_ACL, all_tables, 0) ||
+ if (check_table_access(thd, INSERT_ACL, all_tables, UINT_MAX, FALSE) ||
check_global_access(thd, FILE_ACL))
goto error; /* purecov: inspected */
thd->enable_slow_log= opt_log_slow_admin_statements;
@@ -2270,14 +2270,14 @@ mysql_execute_command(THD *thd)
#endif /* HAVE_REPLICATION */
case SQLCOM_SHOW_ENGINE_STATUS:
{
- if (check_global_access(thd, SUPER_ACL))
+ if (check_global_access(thd, PROCESS_ACL))
goto error;
res = ha_show_status(thd, lex->create_info.db_type, HA_ENGINE_STATUS);
break;
}
case SQLCOM_SHOW_ENGINE_MUTEX:
{
- if (check_global_access(thd, SUPER_ACL))
+ if (check_global_access(thd, PROCESS_ACL))
goto error;
res = ha_show_status(thd, lex->create_info.db_type, HA_ENGINE_MUTEX);
break;
@@ -2742,7 +2742,8 @@ end_with_restore_list:
case SQLCOM_CHECKSUM:
{
DBUG_ASSERT(first_table == all_tables && first_table != 0);
- if (check_table_access(thd, SELECT_ACL | EXTRA_ACL, all_tables, 0))
+ if (check_table_access(thd, SELECT_ACL | EXTRA_ACL, all_tables,
+ UINT_MAX, FALSE))
goto error; /* purecov: inspected */
res = mysql_checksum_table(thd, first_table, &lex->check_opt);
break;
@@ -2750,7 +2751,8 @@ end_with_restore_list:
case SQLCOM_REPAIR:
{
DBUG_ASSERT(first_table == all_tables && first_table != 0);
- if (check_table_access(thd, SELECT_ACL | INSERT_ACL, all_tables, 0))
+ if (check_table_access(thd, SELECT_ACL | INSERT_ACL, all_tables,
+ UINT_MAX, FALSE))
goto error; /* purecov: inspected */
thd->enable_slow_log= opt_log_slow_admin_statements;
res= mysql_repair_table(thd, first_table, &lex->check_opt);
@@ -2769,7 +2771,8 @@ end_with_restore_list:
case SQLCOM_CHECK:
{
DBUG_ASSERT(first_table == all_tables && first_table != 0);
- if (check_table_access(thd, SELECT_ACL | EXTRA_ACL , all_tables, 0))
+ if (check_table_access(thd, SELECT_ACL | EXTRA_ACL , all_tables,
+ UINT_MAX, FALSE))
goto error; /* purecov: inspected */
thd->enable_slow_log= opt_log_slow_admin_statements;
res = mysql_check_table(thd, first_table, &lex->check_opt);
@@ -2780,7 +2783,8 @@ end_with_restore_list:
case SQLCOM_ANALYZE:
{
DBUG_ASSERT(first_table == all_tables && first_table != 0);
- if (check_table_access(thd, SELECT_ACL | INSERT_ACL, all_tables, 0))
+ if (check_table_access(thd, SELECT_ACL | INSERT_ACL, all_tables,
+ UINT_MAX, FALSE))
goto error; /* purecov: inspected */
thd->enable_slow_log= opt_log_slow_admin_statements;
res= mysql_analyze_table(thd, first_table, &lex->check_opt);
@@ -2800,7 +2804,8 @@ end_with_restore_list:
case SQLCOM_OPTIMIZE:
{
DBUG_ASSERT(first_table == all_tables && first_table != 0);
- if (check_table_access(thd, SELECT_ACL | INSERT_ACL, all_tables, 0))
+ if (check_table_access(thd, SELECT_ACL | INSERT_ACL, all_tables,
+ UINT_MAX, FALSE))
goto error; /* purecov: inspected */
thd->enable_slow_log= opt_log_slow_admin_statements;
res= (specialflag & (SPECIAL_SAFE_MODE | SPECIAL_NO_NEW_FUNC)) ?
@@ -3129,7 +3134,7 @@ end_with_restore_list:
DBUG_ASSERT(first_table == all_tables && first_table != 0);
if (!lex->drop_temporary)
{
- if (check_table_access(thd, DROP_ACL, all_tables, 0))
+ if (check_table_access(thd, DROP_ACL, all_tables, UINT_MAX, FALSE))
goto error; /* purecov: inspected */
if (end_active_trans(thd))
goto error;
@@ -3233,7 +3238,7 @@ end_with_restore_list:
if (lex->autocommit && end_active_trans(thd))
goto error;
- if ((check_table_access(thd, SELECT_ACL, all_tables, 0) ||
+ if ((check_table_access(thd, SELECT_ACL, all_tables, UINT_MAX, FALSE) ||
open_and_lock_tables(thd, all_tables)))
goto error;
if (lex->one_shot_set && not_all_support_one_shot(lex_var_list))
@@ -3275,7 +3280,8 @@ end_with_restore_list:
/* we must end the trasaction first, regardless of anything */
if (end_active_trans(thd))
goto error;
- if (check_table_access(thd, LOCK_TABLES_ACL | SELECT_ACL, all_tables, 0))
+ if (check_table_access(thd, LOCK_TABLES_ACL | SELECT_ACL, all_tables,
+ UINT_MAX, FALSE))
goto error;
thd->in_lock_tables=1;
thd->options|= OPTION_TABLE_LOCK;
@@ -3769,7 +3775,7 @@ end_with_restore_list:
#endif
case SQLCOM_HA_OPEN:
DBUG_ASSERT(first_table == all_tables && first_table != 0);
- if (check_table_access(thd, SELECT_ACL, all_tables, 0))
+ if (check_table_access(thd, SELECT_ACL, all_tables, UINT_MAX, FALSE))
goto error;
res= mysql_ha_open(thd, first_table, 0);
break;
@@ -4017,7 +4023,7 @@ create_sp_error:
This will cache all SP and SF and open and lock all tables
required for execution.
*/
- if (check_table_access(thd, SELECT_ACL, all_tables, 0) ||
+ if (check_table_access(thd, SELECT_ACL, all_tables, UINT_MAX, FALSE) ||
open_and_lock_tables(thd, all_tables))
goto error;
@@ -4364,7 +4370,7 @@ create_sp_error:
}
case SQLCOM_DROP_VIEW:
{
- if (check_table_access(thd, DROP_ACL, all_tables, 0) ||
+ if (check_table_access(thd, DROP_ACL, all_tables, UINT_MAX, FALSE) ||
end_active_trans(thd))
goto error;
/* Conditionally writes to binlog. */
@@ -4840,7 +4846,7 @@ bool check_one_table_access(THD *thd, ulong privilege, TABLE_LIST *all_tables)
subselects_tables= subselects_tables->next_global;
}
if (subselects_tables &&
- (check_table_access(thd, SELECT_ACL, subselects_tables, 0)))
+ (check_table_access(thd, SELECT_ACL, subselects_tables, UINT_MAX, FALSE)))
return 1;
}
return 0;
@@ -5074,11 +5080,12 @@ static bool check_show_access(THD *thd, TABLE_LIST *table)
/**
Check the privilege for all used tables.
- @param thd Thread context
- @param want_access Privileges requested
- @param tables List of tables to be checked
- @param no_errors FALSE/TRUE - report/don't report error to
- the client (using my_error() call).
+ @param thd Thread context
+ @param want_access Privileges requested
+ @param tables List of tables to be checked
+ @param number Check at most this number of tables.
+ @param no_errors FALSE/TRUE - report/don't report error to
+ the client (using my_error() call).
@note
Table privileges are cached in the table list for GRANT checking.
@@ -5087,25 +5094,25 @@ static bool check_show_access(THD *thd, TABLE_LIST *table)
(the latter should be either 0 or point to next_global member
of one of elements of this table list).
- @retval
- FALSE OK
- @retval
- TRUE Access denied
+ @retval FALSE OK
+ @retval TRUE Access denied
*/
bool
check_table_access(THD *thd, ulong want_access,TABLE_LIST *tables,
- bool no_errors)
+ uint number, bool no_errors)
{
TABLE_LIST *org_tables= tables;
TABLE_LIST *first_not_own_table= thd->lex->first_not_own_table();
+ uint i= 0;
Security_context *sctx= thd->security_ctx, *backup_ctx= thd->security_ctx;
/*
The check that first_not_own_table is not reached is for the case when
the given table list refers to the list for prelocking (contains tables
of other queries). For simple queries first_not_own_table is 0.
*/
- for (; tables != first_not_own_table; tables= tables->next_global)
+ for (; i < number && tables != first_not_own_table;
+ tables= tables->next_global, i++)
{
if (tables->security_ctx)
sctx= tables->security_ctx;
@@ -5155,7 +5162,7 @@ check_table_access(THD *thd, ulong want_access,TABLE_LIST *tables,
}
thd->security_ctx= backup_ctx;
return check_grant(thd,want_access & ~EXTRA_ACL,org_tables,
- test(want_access & EXTRA_ACL), UINT_MAX, no_errors);
+ test(want_access & EXTRA_ACL), number, no_errors);
deny:
thd->security_ctx= backup_ctx;
return TRUE;
@@ -6884,7 +6891,7 @@ bool multi_delete_precheck(THD *thd, TABLE_LIST *tables)
/* sql_yacc guarantees that tables and aux_tables are not zero */
DBUG_ASSERT(aux_tables != 0);
- if (check_table_access(thd, SELECT_ACL, tables, 0))
+ if (check_table_access(thd, SELECT_ACL, tables, UINT_MAX, FALSE))
DBUG_RETURN(TRUE);
/*
@@ -6893,7 +6900,7 @@ bool multi_delete_precheck(THD *thd, TABLE_LIST *tables)
call check_table_access() safely.
*/
thd->lex->query_tables_own_last= 0;
- if (check_table_access(thd, DELETE_ACL, aux_tables, 0))
+ if (check_table_access(thd, DELETE_ACL, aux_tables, UINT_MAX, FALSE))
{
thd->lex->query_tables_own_last= save_query_tables_own_last;
DBUG_RETURN(TRUE);
@@ -7132,7 +7139,7 @@ bool create_table_precheck(THD *thd, TABLE_LIST *tables,
}
}
#endif
- if (tables && check_table_access(thd, SELECT_ACL, tables,0))
+ if (tables && check_table_access(thd, SELECT_ACL, tables, UINT_MAX, FALSE))
goto err;
}
else if (lex->create_info.options & HA_LEX_CREATE_TABLE_LIKE)
diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc
index 2a86844c8c6..5cd056807a6 100644
--- a/sql/sql_plugin.cc
+++ b/sql/sql_plugin.cc
@@ -1619,7 +1619,7 @@ bool mysql_install_plugin(THD *thd, const LEX_STRING *name, const LEX_STRING *dl
bzero(&tables, sizeof(tables));
tables.db= (char *)"mysql";
tables.table_name= tables.alias= (char *)"plugin";
- if (check_table_access(thd, INSERT_ACL, &tables, 0))
+ if (check_table_access(thd, INSERT_ACL, &tables, 1, FALSE))
DBUG_RETURN(TRUE);
/* need to open before acquiring LOCK_plugin or it will deadlock */
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index c0178a231c9..5a903a4fe1c 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -1280,7 +1280,7 @@ static int mysql_test_select(Prepared_statement *stmt,
ulong privilege= lex->exchange ? SELECT_ACL | FILE_ACL : SELECT_ACL;
if (tables)
{
- if (check_table_access(thd, privilege, tables,0))
+ if (check_table_access(thd, privilege, tables, UINT_MAX, FALSE))
goto error;
}
else if (check_access(thd, privilege, any_db,0,0,0,0))
@@ -1349,7 +1349,7 @@ static bool mysql_test_do_fields(Prepared_statement *stmt,
THD *thd= stmt->thd;
DBUG_ENTER("mysql_test_do_fields");
- if (tables && check_table_access(thd, SELECT_ACL, tables, 0))
+ if (tables && check_table_access(thd, SELECT_ACL, tables, UINT_MAX, FALSE))
DBUG_RETURN(TRUE);
if (open_normal_and_derived_tables(thd, tables, 0))
@@ -1380,7 +1380,7 @@ static bool mysql_test_set_fields(Prepared_statement *stmt,
THD *thd= stmt->thd;
set_var_base *var;
- if (tables && check_table_access(thd, SELECT_ACL, tables, 0) ||
+ if (tables && check_table_access(thd, SELECT_ACL, tables, UINT_MAX, FALSE) ||
open_normal_and_derived_tables(thd, tables, 0))
goto error;
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index ee0a6d3c2ab..6d817cb0620 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -4059,7 +4059,7 @@ int fill_schema_proc(THD *thd, TABLE_LIST *tables, COND *cond)
proc_tables.table_name= proc_tables.alias= (char*) "proc";
proc_tables.table_name_length= 4;
proc_tables.lock_type= TL_READ;
- full_access= !check_table_access(thd, SELECT_ACL, &proc_tables, 1);
+ full_access= !check_table_access(thd, SELECT_ACL, &proc_tables, 1, TRUE);
if (!(proc_table= open_proc_table_for_read(thd, &open_tables_state_backup)))
{
DBUG_RETURN(1);
@@ -4447,10 +4447,8 @@ static int get_schema_triggers_record(THD *thd, TABLE_LIST *tables,
Table_triggers_list *triggers= tables->table->triggers;
int event, timing;
-#ifndef NO_EMBEDDED_ACCESS_CHECKS
- if (check_table_access(thd, TRIGGER_ACL, tables, 1))
+ if (check_table_access(thd, TRIGGER_ACL, tables, 1, TRUE))
goto ret;
-#endif
for (event= 0; event < (int)TRG_EVENT_MAX; event++)
{
@@ -4488,9 +4486,7 @@ static int get_schema_triggers_record(THD *thd, TABLE_LIST *tables,
}
}
}
-#ifndef NO_EMBEDDED_ACCESS_CHECKS
ret:
-#endif
DBUG_RETURN(0);
}
diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc
index 4bf23dc52f9..4cd1d542375 100644
--- a/sql/sql_trigger.cc
+++ b/sql/sql_trigger.cc
@@ -422,7 +422,7 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
TABLE_LIST **save_query_tables_own_last= thd->lex->query_tables_own_last;
thd->lex->query_tables_own_last= 0;
- err_status= check_table_access(thd, TRIGGER_ACL, tables, 0);
+ err_status= check_table_access(thd, TRIGGER_ACL, tables, 1, FALSE);
thd->lex->query_tables_own_last= save_query_tables_own_last;
diff --git a/sql/sql_view.cc b/sql/sql_view.cc
index da301b37484..1a4d7d515a8 100644
--- a/sql/sql_view.cc
+++ b/sql/sql_view.cc
@@ -1123,8 +1123,8 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table,
if (!table->prelocking_placeholder &&
(old_lex->sql_command == SQLCOM_SELECT && old_lex->describe))
{
- if (check_table_access(thd, SELECT_ACL, view_tables, 1) &&
- check_table_access(thd, SHOW_VIEW_ACL, table, 1))
+ if (check_table_access(thd, SELECT_ACL, view_tables, UINT_MAX, TRUE) &&
+ check_table_access(thd, SHOW_VIEW_ACL, table, UINT_MAX, TRUE))
{
my_message(ER_VIEW_NO_EXPLAIN, ER(ER_VIEW_NO_EXPLAIN), MYF(0));
goto err;
@@ -1134,7 +1134,7 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table,
(old_lex->sql_command == SQLCOM_SHOW_CREATE) &&
!table->belong_to_view)
{
- if (check_table_access(thd, SHOW_VIEW_ACL, table, 0))
+ if (check_table_access(thd, SHOW_VIEW_ACL, table, UINT_MAX, FALSE))
goto err;
}
diff --git a/sql/stacktrace.c b/sql/stacktrace.c
index b1267e20774..3d718dfd9d2 100644
--- a/sql/stacktrace.c
+++ b/sql/stacktrace.c
@@ -17,11 +17,16 @@
#include "stacktrace.h"
#include <signal.h>
#include <my_pthread.h>
+#include <m_string.h>
#ifdef HAVE_STACKTRACE
#include <unistd.h>
#include <strings.h>
+#if HAVE_EXECINFO_H
+#include <execinfo.h>
+#endif
+
#define PTR_SANE(p) ((p) && (char*)(p) >= heap_start && (char*)(p) <= heap_end)
char *heap_start;
@@ -93,9 +98,68 @@ inline uint32* find_prev_pc(uint32* pc, uchar** fp)
}
#endif /* defined(__alpha__) && defined(__GNUC__) */
+#if BACKTRACE_DEMANGLE
+static void my_demangle_symbols(char **addrs, int n)
+{
+ int status, i;
+ char *begin, *end, *demangled;
+
+ for (i= 0; i < n; i++)
+ {
+ demangled= NULL;
+ begin= strchr(addrs[i], '(');
+ end= begin ? strchr(begin, '+') : NULL;
+
+ if (begin && end)
+ {
+ *begin++= *end++= '\0';
+ demangled= my_demangle(begin, &status);
+ if (!demangled || status)
+ {
+ demangled= NULL;
+ begin[-1]= '(';
+ end[-1]= '+';
+ }
+ }
+
+ if (demangled)
+ fprintf(stderr, "%s(%s+%s\n", addrs[i], demangled, end);
+ else
+ fprintf(stderr, "%s\n", addrs[i]);
+ }
+}
+#endif
+
+
+#if HAVE_BACKTRACE
+static void backtrace_current_thread(void)
+{
+ void *addrs[128];
+ char **strings= NULL;
+ int n = backtrace(addrs, array_elements(addrs));
+#if BACKTRACE_DEMANGLE
+ if ((strings= backtrace_symbols(addrs, n)))
+ {
+ my_demangle_symbols(strings, n);
+ free(strings);
+ }
+#endif
+#if HAVE_BACKTRACE_SYMBOLS_FD
+ if (!strings)
+ {
+ backtrace_symbols_fd(addrs, n, fileno(stderr));
+ }
+#endif
+}
+#endif
+
void print_stacktrace(uchar* stack_bottom, ulong thread_stack)
{
+#if HAVE_BACKTRACE
+ backtrace_current_thread();
+ return;
+#endif
uchar** fp;
uint frame_count = 0, sigreturn_frame_count;
#if defined(__alpha__) && defined(__GNUC__)
diff --git a/sql/stacktrace.h b/sql/stacktrace.h
index 1a0b80c88d3..96c09a21ad6 100644
--- a/sql/stacktrace.h
+++ b/sql/stacktrace.h
@@ -17,6 +17,14 @@
extern "C" {
#endif
+#if HAVE_BACKTRACE && HAVE_BACKTRACE_SYMBOLS && HAVE_CXXABI_H && HAVE_ABI_CXA_DEMANGLE
+#define BACKTRACE_DEMANGLE 1
+#endif
+
+#if BACKTRACE_DEMANGLE
+char *my_demangle(const char *mangled_name, int *status);
+#endif
+
#ifdef TARGET_OS_LINUX
#if defined(HAVE_STACKTRACE) || (defined (__x86_64__) || defined (__i386__) || (defined(__alpha__) && defined(__GNUC__)))
#undef HAVE_STACKTRACE