mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge dator5.(none):/home/pappa/clean-mysql-5.1
into dator5.(none):/home/pappa/bug18198
This commit is contained in:
@ -38,52 +38,37 @@ drop event event2;
|
||||
create event event2 on schedule every 2 second starts now() ends date_add(now(), interval 5 hour) comment "some" DO begin end;
|
||||
drop event event2;
|
||||
CREATE EVENT event_starts_test ON SCHEDULE EVERY 10 SECOND COMMENT "" DO SELECT 1;
|
||||
SHOW EVENTS;
|
||||
Db Name Definer Type Execute at Interval value Interval field Starts Ends Status
|
||||
events_test event_starts_test root@localhost RECURRING NULL 10 SECOND # # ENABLED
|
||||
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
starts IS NULL ends IS NULL comment
|
||||
0 1
|
||||
SELECT interval_field, interval_value, body FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
interval_field interval_value body
|
||||
SECOND 10 SELECT 1
|
||||
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
execute_at IS NULL starts IS NULL ends IS NULL comment
|
||||
1 0 1
|
||||
ALTER EVENT event_starts_test ON SCHEDULE AT '2020-02-02 20:00:02';
|
||||
SHOW EVENTS;
|
||||
Db Name Definer Type Execute at Interval value Interval field Starts Ends Status
|
||||
events_test event_starts_test root@localhost ONE TIME 2020-02-02 17:00:02 NULL NULL # # ENABLED
|
||||
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
starts IS NULL ends IS NULL comment
|
||||
1 1
|
||||
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
execute_at IS NULL starts IS NULL ends IS NULL comment
|
||||
0 1 1
|
||||
ALTER EVENT event_starts_test COMMENT "non-empty comment";
|
||||
SHOW EVENTS;
|
||||
Db Name Definer Type Execute at Interval value Interval field Starts Ends Status
|
||||
events_test event_starts_test root@localhost ONE TIME 2020-02-02 17:00:02 NULL NULL # # ENABLED
|
||||
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
starts IS NULL ends IS NULL comment
|
||||
1 1 non-empty comment
|
||||
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
execute_at IS NULL starts IS NULL ends IS NULL comment
|
||||
0 1 1 non-empty comment
|
||||
ALTER EVENT event_starts_test COMMENT "";
|
||||
SHOW EVENTS;
|
||||
Db Name Definer Type Execute at Interval value Interval field Starts Ends Status
|
||||
events_test event_starts_test root@localhost ONE TIME 2020-02-02 17:00:02 NULL NULL # # ENABLED
|
||||
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
starts IS NULL ends IS NULL comment
|
||||
1 1
|
||||
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
execute_at IS NULL starts IS NULL ends IS NULL comment
|
||||
0 1 1
|
||||
DROP EVENT event_starts_test;
|
||||
CREATE EVENT event_starts_test ON SCHEDULE EVERY 20 SECOND STARTS '2020-02-02 20:00:02' ENDS '2022-02-02 20:00:02' DO SELECT 2;
|
||||
SHOW EVENTS;
|
||||
Db Name Definer Type Execute at Interval value Interval field Starts Ends Status
|
||||
events_test event_starts_test root@localhost RECURRING NULL 20 SECOND # # ENABLED
|
||||
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
starts IS NULL ends IS NULL comment
|
||||
0 0
|
||||
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
execute_at IS NULL starts IS NULL ends IS NULL comment
|
||||
1 0 0
|
||||
ALTER EVENT event_starts_test COMMENT "non-empty comment";
|
||||
SHOW EVENTS;
|
||||
Db Name Definer Type Execute at Interval value Interval field Starts Ends Status
|
||||
events_test event_starts_test root@localhost RECURRING NULL 20 SECOND # # ENABLED
|
||||
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
starts IS NULL ends IS NULL comment
|
||||
0 0 non-empty comment
|
||||
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
execute_at IS NULL starts IS NULL ends IS NULL comment
|
||||
1 0 0 non-empty comment
|
||||
ALTER EVENT event_starts_test COMMENT "";
|
||||
SHOW EVENTS;
|
||||
Db Name Definer Type Execute at Interval value Interval field Starts Ends Status
|
||||
events_test event_starts_test root@localhost RECURRING NULL 20 SECOND # # ENABLED
|
||||
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
execute_at IS NULL starts IS NULL ends IS NULL comment
|
||||
1 0 0
|
||||
DROP EVENT event_starts_test;
|
||||
create table test_nested(a int);
|
||||
create event e_43 on schedule every 1 second do set @a = 5;
|
||||
|
@ -213,4 +213,17 @@ create event e_53 on schedule every 5 second starts (select s1 from ttx) do drop
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select s1 from ttx) do drop table t' at line 1
|
||||
create event e_53 on schedule every 5 second ends (select s1 from ttx) do drop table t;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select s1 from ttx) do drop table t' at line 1
|
||||
drop event if exists e_16;
|
||||
drop procedure if exists p_16;
|
||||
create event e_16 on schedule every 1 second do set @a=5;
|
||||
create procedure p_16 () alter event e_16 on schedule every @a second;
|
||||
set @a = null;
|
||||
call p_16();
|
||||
ERROR HY000: Incorrect INTERVAL value: 'NULL'
|
||||
call p_16();
|
||||
ERROR HY000: Incorrect INTERVAL value: 'NULL'
|
||||
set @a= 6;
|
||||
call p_16();
|
||||
drop procedure p_16;
|
||||
drop event e_16;
|
||||
drop database events_test;
|
||||
|
22
mysql-test/r/events_restart_phase0.result
Normal file
22
mysql-test/r/events_restart_phase0.result
Normal file
@ -0,0 +1,22 @@
|
||||
SHOW VARIABLES LIKE 'event%';
|
||||
Variable_name Value
|
||||
event_scheduler DISABLED
|
||||
SELECT @@global.event_scheduler;
|
||||
@@global.event_scheduler
|
||||
DISABLED
|
||||
SET GLOBAL event_scheduler=on;
|
||||
ERROR HY000: The MySQL server is running with the --event-scheduler=DISABLED option so it cannot execute this statement
|
||||
SET GLOBAL event_scheduler=off;
|
||||
ERROR HY000: The MySQL server is running with the --event-scheduler=DISABLED option so it cannot execute this statement
|
||||
SET GLOBAL event_scheduler=0;
|
||||
ERROR HY000: The MySQL server is running with the --event-scheduler=DISABLED option so it cannot execute this statement
|
||||
SET GLOBAL event_scheduler=1;
|
||||
ERROR HY000: The MySQL server is running with the --event-scheduler=DISABLED option so it cannot execute this statement
|
||||
SET GLOBAL event_scheduler=2;
|
||||
ERROR 42000: Variable 'event_scheduler' can't be set to the value of '2'
|
||||
SET GLOBAL event_scheduler=SUSPEND;
|
||||
ERROR 42000: Variable 'event_scheduler' can't be set to the value of 'SUSPEND'
|
||||
SET GLOBAL event_scheduler=SUSPENDED;
|
||||
ERROR 42000: Variable 'event_scheduler' can't be set to the value of 'SUSPENDED'
|
||||
SET GLOBAL event_scheduler=disabled;
|
||||
ERROR 42000: Variable 'event_scheduler' can't be set to the value of 'disabled'
|
@ -73,16 +73,16 @@ select * from mysql.slow_log;
|
||||
start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text
|
||||
TIMESTAMP USER_HOST QUERY_TIME 00:00:00 1 0 test 0 0 1 select sleep(2)
|
||||
alter table mysql.general_log engine=myisam;
|
||||
ERROR HY000: You can't alter a log table if logging is enabled
|
||||
ERROR HY000: You cannot 'ALTER' a log table if logging is enabled
|
||||
alter table mysql.slow_log engine=myisam;
|
||||
ERROR HY000: You can't alter a log table if logging is enabled
|
||||
ERROR HY000: You cannot 'ALTER' a log table if logging is enabled
|
||||
drop table mysql.general_log;
|
||||
ERROR HY000: Cannot drop log table if log is enabled
|
||||
ERROR HY000: You cannot 'DROP' a log table if logging is enabled
|
||||
drop table mysql.slow_log;
|
||||
ERROR HY000: Cannot drop log table if log is enabled
|
||||
ERROR HY000: You cannot 'DROP' a log table if logging is enabled
|
||||
set global general_log='OFF';
|
||||
alter table mysql.slow_log engine=myisam;
|
||||
ERROR HY000: You can't alter a log table if logging is enabled
|
||||
ERROR HY000: You cannot 'ALTER' a log table if logging is enabled
|
||||
set global slow_query_log='OFF';
|
||||
show create table mysql.general_log;
|
||||
Table Create Table
|
||||
@ -173,13 +173,13 @@ unlock tables;
|
||||
set global general_log='OFF';
|
||||
set global slow_query_log='OFF';
|
||||
alter table mysql.slow_log engine=ndb;
|
||||
ERROR HY000: One can use only CSV and MyISAM engines for the log tables
|
||||
ERROR HY000: This storage engine cannot be used for log tables"
|
||||
alter table mysql.slow_log engine=innodb;
|
||||
ERROR HY000: One can use only CSV and MyISAM engines for the log tables
|
||||
ERROR HY000: This storage engine cannot be used for log tables"
|
||||
alter table mysql.slow_log engine=archive;
|
||||
ERROR HY000: One can use only CSV and MyISAM engines for the log tables
|
||||
ERROR HY000: This storage engine cannot be used for log tables"
|
||||
alter table mysql.slow_log engine=blackhole;
|
||||
ERROR HY000: One can use only CSV and MyISAM engines for the log tables
|
||||
ERROR HY000: This storage engine cannot be used for log tables"
|
||||
drop table mysql.slow_log;
|
||||
drop table mysql.general_log;
|
||||
drop table mysql.general_log;
|
||||
|
@ -5379,6 +5379,14 @@ Procedure sql_mode Create Procedure
|
||||
bug21416 CREATE DEFINER=`root`@`localhost` PROCEDURE `bug21416`()
|
||||
show create procedure bug21416
|
||||
drop procedure bug21416|
|
||||
DROP PROCEDURE IF EXISTS bug21414|
|
||||
CREATE PROCEDURE bug21414() SELECT 1|
|
||||
FLUSH TABLES WITH READ LOCK|
|
||||
DROP PROCEDURE bug21414|
|
||||
ERROR HY000: Can't execute the query because you have a conflicting read lock
|
||||
UNLOCK TABLES|
|
||||
The following should succeed.
|
||||
DROP PROCEDURE bug21414|
|
||||
CREATE TABLE t3 (
|
||||
Member_ID varchar(15) NOT NULL,
|
||||
PRIMARY KEY (Member_ID)
|
||||
|
@ -49,35 +49,26 @@ drop event event2;
|
||||
create event event2 on schedule every 2 second starts now() ends date_add(now(), interval 5 hour) comment "some" DO begin end;
|
||||
drop event event2;
|
||||
|
||||
#
|
||||
# BUG #16537 (Events: mysql.event.starts is null)
|
||||
#
|
||||
CREATE EVENT event_starts_test ON SCHEDULE EVERY 10 SECOND COMMENT "" DO SELECT 1;
|
||||
--replace_column 8 # 9 #
|
||||
SHOW EVENTS;
|
||||
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
SELECT interval_field, interval_value, body FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
ALTER EVENT event_starts_test ON SCHEDULE AT '2020-02-02 20:00:02';
|
||||
--replace_column 8 # 9 #
|
||||
SHOW EVENTS;
|
||||
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
ALTER EVENT event_starts_test COMMENT "non-empty comment";
|
||||
--replace_column 8 # 9 #
|
||||
SHOW EVENTS;
|
||||
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
ALTER EVENT event_starts_test COMMENT "";
|
||||
--replace_column 8 # 9 #
|
||||
SHOW EVENTS;
|
||||
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
DROP EVENT event_starts_test;
|
||||
|
||||
CREATE EVENT event_starts_test ON SCHEDULE EVERY 20 SECOND STARTS '2020-02-02 20:00:02' ENDS '2022-02-02 20:00:02' DO SELECT 2;
|
||||
--replace_column 8 # 9 #
|
||||
SHOW EVENTS;
|
||||
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
ALTER EVENT event_starts_test COMMENT "non-empty comment";
|
||||
--replace_column 8 # 9 #
|
||||
SHOW EVENTS;
|
||||
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
ALTER EVENT event_starts_test COMMENT "";
|
||||
--replace_column 8 # 9 #
|
||||
SHOW EVENTS;
|
||||
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||
DROP EVENT event_starts_test;
|
||||
#
|
||||
#
|
||||
|
@ -234,4 +234,23 @@ create event e_53 on schedule every 5 second ends (select s1 from ttx) do drop t
|
||||
# END - BUG#16394: Events: Crash if schedule contains SELECT
|
||||
#
|
||||
|
||||
#
|
||||
# START - BUG#22397: Events: crash with procedure which alters events
|
||||
#
|
||||
--disable_warnings
|
||||
drop event if exists e_16;
|
||||
drop procedure if exists p_16;
|
||||
--enable_warnings
|
||||
create event e_16 on schedule every 1 second do set @a=5;
|
||||
create procedure p_16 () alter event e_16 on schedule every @a second;
|
||||
set @a = null;
|
||||
--error ER_WRONG_VALUE
|
||||
call p_16();
|
||||
--error ER_WRONG_VALUE
|
||||
call p_16();
|
||||
set @a= 6;
|
||||
call p_16();
|
||||
|
||||
drop procedure p_16;
|
||||
drop event e_16;
|
||||
drop database events_test;
|
||||
|
22
mysql-test/t/events_restart_phase0.log
Normal file
22
mysql-test/t/events_restart_phase0.log
Normal file
@ -0,0 +1,22 @@
|
||||
SHOW VARIABLES LIKE 'event%';
|
||||
Variable_name Value
|
||||
event_scheduler DISABLED
|
||||
SELECT @@global.event_scheduler;
|
||||
@@global.event_scheduler
|
||||
DISABLED
|
||||
SET GLOBAL event_scheduler=on;
|
||||
ERROR HY000: The MySQL server is running with the --event-scheduler=DISABLED option so it cannot execute this statement
|
||||
SET GLOBAL event_scheduler=off;
|
||||
ERROR HY000: The MySQL server is running with the --event-scheduler=DISABLED option so it cannot execute this statement
|
||||
SET GLOBAL event_scheduler=0;
|
||||
ERROR HY000: The MySQL server is running with the --event-scheduler=DISABLED option so it cannot execute this statement
|
||||
SET GLOBAL event_scheduler=1;
|
||||
ERROR HY000: The MySQL server is running with the --event-scheduler=DISABLED option so it cannot execute this statement
|
||||
SET GLOBAL event_scheduler=2;
|
||||
ERROR 42000: Variable 'event_scheduler' can't be set to the value of '2'
|
||||
SET GLOBAL event_scheduler=SUSPEND;
|
||||
ERROR 42000: Variable 'event_scheduler' can't be set to the value of 'SUSPEND'
|
||||
SET GLOBAL event_scheduler=SUSPENDED;
|
||||
ERROR 42000: Variable 'event_scheduler' can't be set to the value of 'SUSPENDED'
|
||||
SET GLOBAL event_scheduler=disabled;
|
||||
ERROR 42000: Variable 'event_scheduler' can't be set to the value of 'disabled'
|
22
mysql-test/t/events_restart_phase0.result
Normal file
22
mysql-test/t/events_restart_phase0.result
Normal file
@ -0,0 +1,22 @@
|
||||
SHOW VARIABLES LIKE 'event%';
|
||||
Variable_name Value
|
||||
event_scheduler DISABLED
|
||||
SELECT @@global.event_scheduler;
|
||||
@@global.event_scheduler
|
||||
DISABLED
|
||||
SET GLOBAL event_scheduler=on;
|
||||
ERROR HY000: The MySQL server is running with the --event-scheduler=DISABLED option so it cannot execute this statement
|
||||
SET GLOBAL event_scheduler=off;
|
||||
ERROR HY000: The MySQL server is running with the --event-scheduler=DISABLED option so it cannot execute this statement
|
||||
SET GLOBAL event_scheduler=0;
|
||||
ERROR HY000: The MySQL server is running with the --event-scheduler=DISABLED option so it cannot execute this statement
|
||||
SET GLOBAL event_scheduler=1;
|
||||
ERROR HY000: The MySQL server is running with the --event-scheduler=DISABLED option so it cannot execute this statement
|
||||
SET GLOBAL event_scheduler=2;
|
||||
ERROR 42000: Variable 'event_scheduler' can't be set to the value of '2'
|
||||
SET GLOBAL event_scheduler=SUSPEND;
|
||||
ERROR 42000: Variable 'event_scheduler' can't be set to the value of 'SUSPEND'
|
||||
SET GLOBAL event_scheduler=SUSPENDED;
|
||||
ERROR 42000: Variable 'event_scheduler' can't be set to the value of 'SUSPENDED'
|
||||
SET GLOBAL event_scheduler=disabled;
|
||||
ERROR 42000: Variable 'event_scheduler' can't be set to the value of 'disabled'
|
@ -178,21 +178,21 @@ select * from mysql.slow_log;
|
||||
|
||||
# check that appropriate error messages are given when one attempts to alter
|
||||
# or drop a log tables, while corresponding logs are enabled
|
||||
--error ER_CANT_ALTER_LOG_TABLE
|
||||
--error ER_BAD_LOG_STATEMENT
|
||||
alter table mysql.general_log engine=myisam;
|
||||
--error ER_CANT_ALTER_LOG_TABLE
|
||||
--error ER_BAD_LOG_STATEMENT
|
||||
alter table mysql.slow_log engine=myisam;
|
||||
|
||||
--error ER_CANT_DROP_LOG_TABLE
|
||||
--error ER_BAD_LOG_STATEMENT
|
||||
drop table mysql.general_log;
|
||||
--error ER_CANT_DROP_LOG_TABLE
|
||||
--error ER_BAD_LOG_STATEMENT
|
||||
drop table mysql.slow_log;
|
||||
|
||||
# check that one can alter log tables to MyISAM
|
||||
set global general_log='OFF';
|
||||
|
||||
# cannot convert another log table
|
||||
--error ER_CANT_ALTER_LOG_TABLE
|
||||
--error ER_BAD_LOG_STATEMENT
|
||||
alter table mysql.slow_log engine=myisam;
|
||||
|
||||
# alter both tables
|
||||
@ -252,13 +252,13 @@ set global general_log='OFF';
|
||||
set global slow_query_log='OFF';
|
||||
|
||||
# check that alter table doesn't work for other engines
|
||||
--error ER_BAD_LOG_ENGINE
|
||||
--error ER_UNSUPORTED_LOG_ENGINE
|
||||
alter table mysql.slow_log engine=ndb;
|
||||
--error ER_BAD_LOG_ENGINE
|
||||
--error ER_UNSUPORTED_LOG_ENGINE
|
||||
alter table mysql.slow_log engine=innodb;
|
||||
--error ER_BAD_LOG_ENGINE
|
||||
--error ER_UNSUPORTED_LOG_ENGINE
|
||||
alter table mysql.slow_log engine=archive;
|
||||
--error ER_BAD_LOG_ENGINE
|
||||
--error ER_UNSUPORTED_LOG_ENGINE
|
||||
alter table mysql.slow_log engine=blackhole;
|
||||
|
||||
drop table mysql.slow_log;
|
||||
|
@ -1,13 +1,9 @@
|
||||
#
|
||||
# Basic stored PROCEDURE tests
|
||||
#
|
||||
# Please keep this file free of --error cases and other
|
||||
# things that will not run in a single debugged mysqld
|
||||
# process (e.g. master-slave things).
|
||||
#
|
||||
# Test cases for bugs are added at the end. See template there.
|
||||
#
|
||||
# Tests that require --error go into sp-error.test
|
||||
# Some tests that require --error go into sp-error.test
|
||||
# Tests that require inndb go into sp_trans.test
|
||||
# Tests that check privilege and security issues go to sp-security.test.
|
||||
# Tests that require multiple connections, except security/privilege tests,
|
||||
@ -6295,6 +6291,25 @@ create procedure bug21416() show create procedure bug21416|
|
||||
call bug21416()|
|
||||
drop procedure bug21416|
|
||||
|
||||
#
|
||||
# BUG#21414: SP: Procedure undroppable, to some extent
|
||||
#
|
||||
--disable_warnings
|
||||
DROP PROCEDURE IF EXISTS bug21414|
|
||||
--enable_warnings
|
||||
|
||||
CREATE PROCEDURE bug21414() SELECT 1|
|
||||
|
||||
FLUSH TABLES WITH READ LOCK|
|
||||
|
||||
--error ER_CANT_UPDATE_WITH_READLOCK
|
||||
DROP PROCEDURE bug21414|
|
||||
|
||||
UNLOCK TABLES|
|
||||
|
||||
--echo The following should succeed.
|
||||
DROP PROCEDURE bug21414|
|
||||
|
||||
#
|
||||
# BUG#21493: Crash on the second call of a procedure containing
|
||||
# a select statement that uses an IN aggregating subquery
|
||||
@ -6363,6 +6378,8 @@ DROP FUNCTION bug21493|
|
||||
DROP TABLE t3,t4|
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
|
||||
#
|
||||
# BUG#NNNN: New bug synopsis
|
||||
#
|
||||
|
@ -145,21 +145,36 @@ void Guardian_thread::process_instance(Instance *instance,
|
||||
}
|
||||
|
||||
if (instance->is_running())
|
||||
{
|
||||
/* The instance can be contacted on it's port */
|
||||
|
||||
/* If STARTING also check that pidfile has been created */
|
||||
if (current_node->state == STARTING &&
|
||||
current_node->instance->options.get_pid() == 0)
|
||||
{
|
||||
/* Pid file not created yet, don't go to STARTED state yet */
|
||||
}
|
||||
else
|
||||
{
|
||||
/* clear status fields */
|
||||
log_info("guardian: instance %s is running, set state to STARTED",
|
||||
instance->options.instance_name);
|
||||
current_node->restart_counter= 0;
|
||||
current_node->crash_moment= 0;
|
||||
current_node->state= STARTED;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (current_node->state) {
|
||||
case NOT_STARTED:
|
||||
instance->start();
|
||||
current_node->last_checked= current_time;
|
||||
log_info("guardian: starting instance %s",
|
||||
instance->options.instance_name);
|
||||
|
||||
/* NOTE, set state to STARTING _before_ start() is called */
|
||||
current_node->state= STARTING;
|
||||
instance->start();
|
||||
current_node->last_checked= current_time;
|
||||
break;
|
||||
case STARTED: /* fallthrough */
|
||||
case STARTING: /* let the instance start or crash */
|
||||
|
@ -611,18 +611,19 @@ void Instance::kill_instance(int signum)
|
||||
/* if there are no pid, everything seems to be fine */
|
||||
if ((pid= options.get_pid()) != 0) /* get pid from pidfile */
|
||||
{
|
||||
/*
|
||||
If we cannot kill mysqld, then it has propably crashed.
|
||||
Let us try to remove staled pidfile and return successfully
|
||||
as mysqld is probably stopped.
|
||||
*/
|
||||
if (!kill(pid, signum))
|
||||
options.unlink_pidfile();
|
||||
else if (signum == SIGKILL) /* really killed instance with SIGKILL */
|
||||
log_error("The instance %s is being stopped forsibly. Normally \
|
||||
it should not happed. Probably the instance has been \
|
||||
hanging. You should also check your IM setup",
|
||||
if (kill(pid, signum) == 0)
|
||||
{
|
||||
/* Kill suceeded */
|
||||
if (signum == SIGKILL) /* really killed instance with SIGKILL */
|
||||
{
|
||||
log_error("The instance %s is being stopped forcibly. Normally" \
|
||||
"it should not happen. Probably the instance has been" \
|
||||
"hanging. You should also check your IM setup",
|
||||
options.instance_name);
|
||||
/* After sucessful hard kill the pidfile need to be removed */
|
||||
options.unlink_pidfile();
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -406,7 +406,8 @@ pid_t Instance_options::get_pid()
|
||||
{
|
||||
pid_t pid;
|
||||
|
||||
fscanf(pid_file_stream, "%i", &pid);
|
||||
if (fscanf(pid_file_stream, "%i", &pid) != 1)
|
||||
pid= -1;
|
||||
my_fclose(pid_file_stream, MYF(0));
|
||||
return pid;
|
||||
}
|
||||
|
@ -353,7 +353,7 @@ Event_parse_data::init_interval(THD *thd)
|
||||
DBUG_RETURN(0);
|
||||
|
||||
wrong_value:
|
||||
report_bad_value("INTERVAL", item_execute_at);
|
||||
report_bad_value("INTERVAL", item_expression);
|
||||
DBUG_RETURN(ER_WRONG_VALUE);
|
||||
}
|
||||
|
||||
|
@ -55,7 +55,7 @@ public:
|
||||
{
|
||||
EVENTS_OFF= 0,
|
||||
EVENTS_ON= 1,
|
||||
EVENTS_DISABLED= 5
|
||||
EVENTS_DISABLED= 4
|
||||
};
|
||||
|
||||
static enum_opt_event_scheduler opt_event_scheduler;
|
||||
|
@ -690,6 +690,7 @@ struct handlerton
|
||||
#define HTON_FLUSH_AFTER_RENAME (1 << 4)
|
||||
#define HTON_NOT_USER_SELECTABLE (1 << 5)
|
||||
#define HTON_TEMPORARY_NOT_SUPPORTED (1 << 6) //Having temporary tables not supported
|
||||
#define HTON_SUPPORT_LOG_TABLES (1 << 7) //Engine supports log tables
|
||||
|
||||
typedef struct st_thd_trans
|
||||
{
|
||||
|
@ -1558,7 +1558,6 @@ extern my_bool opt_log_queries_not_using_indexes;
|
||||
extern bool opt_disable_networking, opt_skip_show_db;
|
||||
extern my_bool opt_character_set_client_handshake;
|
||||
extern bool volatile abort_loop, shutdown_in_progress, grant_option;
|
||||
extern bool mysql_proc_table_exists;
|
||||
extern uint volatile thread_count, thread_running, global_read_lock;
|
||||
extern my_bool opt_sql_bin_update, opt_safe_user_create, opt_no_mix_types;
|
||||
extern my_bool opt_safe_show_db, opt_local_infile, opt_myisam_use_mmap;
|
||||
|
@ -5972,12 +5972,6 @@ ER_RBR_NOT_AVAILABLE
|
||||
ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA
|
||||
eng "Triggers can not be created on system tables"
|
||||
ger "Trigger k<>nnen nicht auf Systemtabellen erzeugt werden"
|
||||
ER_CANT_ALTER_LOG_TABLE
|
||||
eng "You can't alter a log table if logging is enabled"
|
||||
ER_BAD_LOG_ENGINE
|
||||
eng "One can use only CSV and MyISAM engines for the log tables"
|
||||
ER_CANT_DROP_LOG_TABLE
|
||||
eng "Cannot drop log table if log is enabled"
|
||||
ER_EVENT_RECURSIVITY_FORBIDDEN
|
||||
eng "Recursivity of EVENT DDL statements is forbidden when body is present"
|
||||
ER_EVENTS_DB_ERROR
|
||||
@ -5992,3 +5986,8 @@ ER_HOSTNAME
|
||||
eng "host name"
|
||||
ER_WRONG_STRING_LENGTH
|
||||
eng "String '%-.70s' is too long for %s (should be no longer than %d)"
|
||||
ER_UNSUPORTED_LOG_ENGINE
|
||||
eng "This storage engine cannot be used for log tables""
|
||||
ER_BAD_LOG_STATEMENT
|
||||
eng "You cannot '%s' a log table if logging is enabled"
|
||||
|
||||
|
27
sql/sp.cc
27
sql/sp.cc
@ -65,8 +65,6 @@ enum
|
||||
MYSQL_PROC_FIELD_COUNT
|
||||
};
|
||||
|
||||
bool mysql_proc_table_exists= 1;
|
||||
|
||||
/* Tells what SP_DEFAULT_ACCESS should be mapped to */
|
||||
#define SP_DEFAULT_ACCESS_MAPPING SP_CONTAINS_SQL
|
||||
|
||||
@ -118,13 +116,6 @@ TABLE *open_proc_table_for_read(THD *thd, Open_tables_state *backup)
|
||||
bool not_used;
|
||||
DBUG_ENTER("open_proc_table");
|
||||
|
||||
/*
|
||||
Speed up things if mysql.proc doesn't exists. mysql_proc_table_exists
|
||||
is set when we create or read stored procedure or on flush privileges.
|
||||
*/
|
||||
if (!mysql_proc_table_exists)
|
||||
DBUG_RETURN(0);
|
||||
|
||||
thd->reset_n_backup_open_tables_state(backup);
|
||||
|
||||
bzero((char*) &tables, sizeof(tables));
|
||||
@ -134,7 +125,6 @@ TABLE *open_proc_table_for_read(THD *thd, Open_tables_state *backup)
|
||||
MYSQL_LOCK_IGNORE_FLUSH)))
|
||||
{
|
||||
thd->restore_backup_open_tables_state(backup);
|
||||
mysql_proc_table_exists= 0;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
table->use_all_columns();
|
||||
@ -186,15 +176,6 @@ static TABLE *open_proc_table_for_update(THD *thd)
|
||||
if (table)
|
||||
table->use_all_columns();
|
||||
|
||||
/*
|
||||
Under explicit LOCK TABLES or in prelocked mode we should not
|
||||
say that mysql.proc table does not exist if we are unable to
|
||||
open and lock it for writing since this condition may be
|
||||
transient.
|
||||
*/
|
||||
if (!(thd->locked_tables || thd->prelocked_mode) || table)
|
||||
mysql_proc_table_exists= test(table);
|
||||
|
||||
DBUG_RETURN(table);
|
||||
}
|
||||
|
||||
@ -1610,14 +1591,6 @@ sp_cache_routines_and_add_tables_aux(THD *thd, LEX *lex,
|
||||
case SP_KEY_NOT_FOUND:
|
||||
ret= SP_OK;
|
||||
break;
|
||||
case SP_OPEN_TABLE_FAILED:
|
||||
/*
|
||||
Force it to attempt opening it again on subsequent calls;
|
||||
otherwise we will get one error message the first time, and
|
||||
then ER_SP_PROC_TABLE_CORRUPT (below) on subsequent tries.
|
||||
*/
|
||||
mysql_proc_table_exists= 1;
|
||||
/* Fall through */
|
||||
default:
|
||||
/*
|
||||
Any error when loading an existing routine is either some problem
|
||||
|
@ -317,7 +317,6 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
|
||||
DBUG_ENTER("acl_load");
|
||||
|
||||
grant_version++; /* Privileges updated */
|
||||
mysql_proc_table_exists= 1; // Assume mysql.proc exists
|
||||
|
||||
acl_cache->clear(1); // Clear locked hostname cache
|
||||
|
||||
|
@ -4211,8 +4211,6 @@ static interval_type get_real_interval_type(interval_type i_type)
|
||||
return INTERVAL_SECOND;
|
||||
}
|
||||
|
||||
extern LEX_STRING interval_type_to_name[];
|
||||
|
||||
|
||||
/*
|
||||
Loads an event from mysql.event and copies it's data to a row of
|
||||
|
@ -1628,7 +1628,7 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
|
||||
(!my_strcasecmp(system_charset_info, table->table_name, "slow_log")
|
||||
&& opt_slow_log && logger.is_slow_log_table_enabled())))
|
||||
{
|
||||
my_error(ER_CANT_DROP_LOG_TABLE, MYF(0));
|
||||
my_error(ER_BAD_LOG_STATEMENT, MYF(0), "DROP");
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
}
|
||||
@ -5180,7 +5180,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
|
||||
(table_kind == SLOW_LOG && opt_slow_log &&
|
||||
logger.is_slow_log_table_enabled()))
|
||||
{
|
||||
my_error(ER_CANT_ALTER_LOG_TABLE, MYF(0));
|
||||
my_error(ER_BAD_LOG_STATEMENT, MYF(0), "ALTER");
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
@ -5188,10 +5188,9 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
|
||||
if ((table_kind == GENERAL_LOG || table_kind == SLOW_LOG) &&
|
||||
(lex_create_info->used_fields & HA_CREATE_USED_ENGINE) &&
|
||||
(!lex_create_info->db_type || /* unknown engine */
|
||||
!(lex_create_info->db_type->db_type == DB_TYPE_MYISAM ||
|
||||
lex_create_info->db_type->db_type == DB_TYPE_CSV_DB)))
|
||||
!(lex_create_info->db_type->flags & HTON_SUPPORT_LOG_TABLES)))
|
||||
{
|
||||
my_error(ER_BAD_LOG_ENGINE, MYF(0));
|
||||
my_error(ER_UNSUPORTED_LOG_ENGINE, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
}
|
||||
|
@ -161,7 +161,7 @@ static int tina_init_func(void *p)
|
||||
tina_hton->db_type= DB_TYPE_CSV_DB;
|
||||
tina_hton->create= tina_create_handler;
|
||||
tina_hton->panic= tina_end;
|
||||
tina_hton->flags= HTON_CAN_RECREATE;
|
||||
tina_hton->flags= HTON_CAN_RECREATE | HTON_SUPPORT_LOG_TABLES;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -1796,7 +1796,7 @@ static int myisam_init(void *p)
|
||||
myisam_hton->db_type=DB_TYPE_MYISAM;
|
||||
myisam_hton->create=myisam_create_handler;
|
||||
myisam_hton->panic=mi_panic;
|
||||
myisam_hton->flags=HTON_CAN_RECREATE;
|
||||
myisam_hton->flags= HTON_CAN_RECREATE | HTON_SUPPORT_LOG_TABLES;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -167,13 +167,13 @@ int mi_write(MI_INFO *info, byte *record)
|
||||
/*
|
||||
Update status of the table. We need to do so after each row write
|
||||
for the log tables, as we want the new row to become visible to
|
||||
other threads as soon as possible. We lock mutex here to follow
|
||||
pthread memory visibility rules.
|
||||
other threads as soon as possible. We don't lock mutex here
|
||||
(as it is required by pthread memory visibility rules) as (1) it's
|
||||
not critical to use outdated share->is_log_table value (2) locking
|
||||
mutex here for every write is too expensive.
|
||||
*/
|
||||
pthread_mutex_lock(&share->intern_lock);
|
||||
if (share->is_log_table)
|
||||
mi_update_status((void*) info);
|
||||
pthread_mutex_unlock(&share->intern_lock);
|
||||
|
||||
allow_break(); /* Allow SIGHUP & SIGINT */
|
||||
DBUG_RETURN(0);
|
||||
|
Reference in New Issue
Block a user