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;
|
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;
|
drop event event2;
|
||||||
CREATE EVENT event_starts_test ON SCHEDULE EVERY 10 SECOND COMMENT "" DO SELECT 1;
|
CREATE EVENT event_starts_test ON SCHEDULE EVERY 10 SECOND COMMENT "" DO SELECT 1;
|
||||||
SHOW EVENTS;
|
SELECT interval_field, interval_value, body FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||||
Db Name Definer Type Execute at Interval value Interval field Starts Ends Status
|
interval_field interval_value body
|
||||||
events_test event_starts_test root@localhost RECURRING NULL 10 SECOND # # ENABLED
|
SECOND 10 SELECT 1
|
||||||
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';
|
||||||
starts IS NULL ends IS NULL comment
|
execute_at IS NULL starts IS NULL ends IS NULL comment
|
||||||
0 1
|
1 0 1
|
||||||
ALTER EVENT event_starts_test ON SCHEDULE AT '2020-02-02 20:00:02';
|
ALTER EVENT event_starts_test ON SCHEDULE AT '2020-02-02 20:00:02';
|
||||||
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';
|
||||||
Db Name Definer Type Execute at Interval value Interval field Starts Ends Status
|
execute_at IS NULL starts IS NULL ends IS NULL comment
|
||||||
events_test event_starts_test root@localhost ONE TIME 2020-02-02 17:00:02 NULL NULL # # ENABLED
|
0 1 1
|
||||||
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
|
|
||||||
ALTER EVENT event_starts_test COMMENT "non-empty comment";
|
ALTER EVENT event_starts_test COMMENT "non-empty comment";
|
||||||
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';
|
||||||
Db Name Definer Type Execute at Interval value Interval field Starts Ends Status
|
execute_at IS NULL starts IS NULL ends IS NULL comment
|
||||||
events_test event_starts_test root@localhost ONE TIME 2020-02-02 17:00:02 NULL NULL # # ENABLED
|
0 1 1 non-empty comment
|
||||||
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
|
|
||||||
ALTER EVENT event_starts_test COMMENT "";
|
ALTER EVENT event_starts_test COMMENT "";
|
||||||
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';
|
||||||
Db Name Definer Type Execute at Interval value Interval field Starts Ends Status
|
execute_at IS NULL starts IS NULL ends IS NULL comment
|
||||||
events_test event_starts_test root@localhost ONE TIME 2020-02-02 17:00:02 NULL NULL # # ENABLED
|
0 1 1
|
||||||
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
|
|
||||||
DROP EVENT 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;
|
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;
|
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||||
Db Name Definer Type Execute at Interval value Interval field Starts Ends Status
|
execute_at IS NULL starts IS NULL ends IS NULL comment
|
||||||
events_test event_starts_test root@localhost RECURRING NULL 20 SECOND # # ENABLED
|
1 0 0
|
||||||
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
|
|
||||||
ALTER EVENT event_starts_test COMMENT "non-empty comment";
|
ALTER EVENT event_starts_test COMMENT "non-empty comment";
|
||||||
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';
|
||||||
Db Name Definer Type Execute at Interval value Interval field Starts Ends Status
|
execute_at IS NULL starts IS NULL ends IS NULL comment
|
||||||
events_test event_starts_test root@localhost RECURRING NULL 20 SECOND # # ENABLED
|
1 0 0 non-empty comment
|
||||||
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
|
|
||||||
ALTER EVENT event_starts_test COMMENT "";
|
ALTER EVENT event_starts_test COMMENT "";
|
||||||
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';
|
||||||
Db Name Definer Type Execute at Interval value Interval field Starts Ends Status
|
execute_at IS NULL starts IS NULL ends IS NULL comment
|
||||||
events_test event_starts_test root@localhost RECURRING NULL 20 SECOND # # ENABLED
|
1 0 0
|
||||||
DROP EVENT event_starts_test;
|
DROP EVENT event_starts_test;
|
||||||
create table test_nested(a int);
|
create table test_nested(a int);
|
||||||
create event e_43 on schedule every 1 second do set @a = 5;
|
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
|
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;
|
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
|
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;
|
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
|
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)
|
TIMESTAMP USER_HOST QUERY_TIME 00:00:00 1 0 test 0 0 1 select sleep(2)
|
||||||
alter table mysql.general_log engine=myisam;
|
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;
|
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;
|
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;
|
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';
|
set global general_log='OFF';
|
||||||
alter table mysql.slow_log engine=myisam;
|
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';
|
set global slow_query_log='OFF';
|
||||||
show create table mysql.general_log;
|
show create table mysql.general_log;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
@ -173,13 +173,13 @@ unlock tables;
|
|||||||
set global general_log='OFF';
|
set global general_log='OFF';
|
||||||
set global slow_query_log='OFF';
|
set global slow_query_log='OFF';
|
||||||
alter table mysql.slow_log engine=ndb;
|
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;
|
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;
|
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;
|
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.slow_log;
|
||||||
drop table mysql.general_log;
|
drop table mysql.general_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`()
|
bug21416 CREATE DEFINER=`root`@`localhost` PROCEDURE `bug21416`()
|
||||||
show create procedure bug21416
|
show create procedure bug21416
|
||||||
drop 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 (
|
CREATE TABLE t3 (
|
||||||
Member_ID varchar(15) NOT NULL,
|
Member_ID varchar(15) NOT NULL,
|
||||||
PRIMARY KEY (Member_ID)
|
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;
|
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;
|
drop event event2;
|
||||||
|
|
||||||
|
#
|
||||||
# BUG #16537 (Events: mysql.event.starts is null)
|
# BUG #16537 (Events: mysql.event.starts is null)
|
||||||
|
#
|
||||||
CREATE EVENT event_starts_test ON SCHEDULE EVERY 10 SECOND COMMENT "" DO SELECT 1;
|
CREATE EVENT event_starts_test ON SCHEDULE EVERY 10 SECOND COMMENT "" DO SELECT 1;
|
||||||
--replace_column 8 # 9 #
|
SELECT interval_field, interval_value, body FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||||
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';
|
||||||
SELECT 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';
|
ALTER EVENT event_starts_test ON SCHEDULE AT '2020-02-02 20:00:02';
|
||||||
--replace_column 8 # 9 #
|
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||||
SHOW EVENTS;
|
|
||||||
SELECT 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";
|
ALTER EVENT event_starts_test COMMENT "non-empty comment";
|
||||||
--replace_column 8 # 9 #
|
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||||
SHOW EVENTS;
|
|
||||||
SELECT 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 "";
|
ALTER EVENT event_starts_test COMMENT "";
|
||||||
--replace_column 8 # 9 #
|
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||||
SHOW EVENTS;
|
|
||||||
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
|
||||||
DROP EVENT 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;
|
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 #
|
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||||
SHOW EVENTS;
|
|
||||||
SELECT 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";
|
ALTER EVENT event_starts_test COMMENT "non-empty comment";
|
||||||
--replace_column 8 # 9 #
|
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||||
SHOW EVENTS;
|
|
||||||
SELECT 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 "";
|
ALTER EVENT event_starts_test COMMENT "";
|
||||||
--replace_column 8 # 9 #
|
SELECT execute_at IS NULL, starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
|
||||||
SHOW EVENTS;
|
|
||||||
DROP EVENT 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
|
# 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;
|
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
|
# check that appropriate error messages are given when one attempts to alter
|
||||||
# or drop a log tables, while corresponding logs are enabled
|
# 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;
|
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;
|
alter table mysql.slow_log engine=myisam;
|
||||||
|
|
||||||
--error ER_CANT_DROP_LOG_TABLE
|
--error ER_BAD_LOG_STATEMENT
|
||||||
drop table mysql.general_log;
|
drop table mysql.general_log;
|
||||||
--error ER_CANT_DROP_LOG_TABLE
|
--error ER_BAD_LOG_STATEMENT
|
||||||
drop table mysql.slow_log;
|
drop table mysql.slow_log;
|
||||||
|
|
||||||
# check that one can alter log tables to MyISAM
|
# check that one can alter log tables to MyISAM
|
||||||
set global general_log='OFF';
|
set global general_log='OFF';
|
||||||
|
|
||||||
# cannot convert another log table
|
# cannot convert another log table
|
||||||
--error ER_CANT_ALTER_LOG_TABLE
|
--error ER_BAD_LOG_STATEMENT
|
||||||
alter table mysql.slow_log engine=myisam;
|
alter table mysql.slow_log engine=myisam;
|
||||||
|
|
||||||
# alter both tables
|
# alter both tables
|
||||||
@ -252,13 +252,13 @@ set global general_log='OFF';
|
|||||||
set global slow_query_log='OFF';
|
set global slow_query_log='OFF';
|
||||||
|
|
||||||
# check that alter table doesn't work for other engines
|
# 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;
|
alter table mysql.slow_log engine=ndb;
|
||||||
--error ER_BAD_LOG_ENGINE
|
--error ER_UNSUPORTED_LOG_ENGINE
|
||||||
alter table mysql.slow_log engine=innodb;
|
alter table mysql.slow_log engine=innodb;
|
||||||
--error ER_BAD_LOG_ENGINE
|
--error ER_UNSUPORTED_LOG_ENGINE
|
||||||
alter table mysql.slow_log engine=archive;
|
alter table mysql.slow_log engine=archive;
|
||||||
--error ER_BAD_LOG_ENGINE
|
--error ER_UNSUPORTED_LOG_ENGINE
|
||||||
alter table mysql.slow_log engine=blackhole;
|
alter table mysql.slow_log engine=blackhole;
|
||||||
|
|
||||||
drop table mysql.slow_log;
|
drop table mysql.slow_log;
|
||||||
|
@ -1,13 +1,9 @@
|
|||||||
#
|
#
|
||||||
# Basic stored PROCEDURE tests
|
# 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.
|
# 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 require inndb go into sp_trans.test
|
||||||
# Tests that check privilege and security issues go to sp-security.test.
|
# Tests that check privilege and security issues go to sp-security.test.
|
||||||
# Tests that require multiple connections, except security/privilege tests,
|
# Tests that require multiple connections, except security/privilege tests,
|
||||||
@ -6295,6 +6291,25 @@ create procedure bug21416() show create procedure bug21416|
|
|||||||
call bug21416()|
|
call bug21416()|
|
||||||
drop procedure 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
|
# BUG#21493: Crash on the second call of a procedure containing
|
||||||
# a select statement that uses an IN aggregating subquery
|
# a select statement that uses an IN aggregating subquery
|
||||||
@ -6363,6 +6378,8 @@ DROP FUNCTION bug21493|
|
|||||||
DROP TABLE t3,t4|
|
DROP TABLE t3,t4|
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# BUG#NNNN: New bug synopsis
|
# BUG#NNNN: New bug synopsis
|
||||||
#
|
#
|
||||||
|
@ -146,20 +146,35 @@ void Guardian_thread::process_instance(Instance *instance,
|
|||||||
|
|
||||||
if (instance->is_running())
|
if (instance->is_running())
|
||||||
{
|
{
|
||||||
/* clear status fields */
|
/* The instance can be contacted on it's port */
|
||||||
current_node->restart_counter= 0;
|
|
||||||
current_node->crash_moment= 0;
|
/* If STARTING also check that pidfile has been created */
|
||||||
current_node->state= STARTED;
|
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
|
else
|
||||||
{
|
{
|
||||||
switch (current_node->state) {
|
switch (current_node->state) {
|
||||||
case NOT_STARTED:
|
case NOT_STARTED:
|
||||||
instance->start();
|
|
||||||
current_node->last_checked= current_time;
|
|
||||||
log_info("guardian: starting instance %s",
|
log_info("guardian: starting instance %s",
|
||||||
instance->options.instance_name);
|
instance->options.instance_name);
|
||||||
|
|
||||||
|
/* NOTE, set state to STARTING _before_ start() is called */
|
||||||
current_node->state= STARTING;
|
current_node->state= STARTING;
|
||||||
|
instance->start();
|
||||||
|
current_node->last_checked= current_time;
|
||||||
break;
|
break;
|
||||||
case STARTED: /* fallthrough */
|
case STARTED: /* fallthrough */
|
||||||
case STARTING: /* let the instance start or crash */
|
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 there are no pid, everything seems to be fine */
|
||||||
if ((pid= options.get_pid()) != 0) /* get pid from pidfile */
|
if ((pid= options.get_pid()) != 0) /* get pid from pidfile */
|
||||||
{
|
{
|
||||||
/*
|
if (kill(pid, signum) == 0)
|
||||||
If we cannot kill mysqld, then it has propably crashed.
|
{
|
||||||
Let us try to remove staled pidfile and return successfully
|
/* Kill suceeded */
|
||||||
as mysqld is probably stopped.
|
if (signum == SIGKILL) /* really killed instance with SIGKILL */
|
||||||
*/
|
{
|
||||||
if (!kill(pid, signum))
|
log_error("The instance %s is being stopped forcibly. Normally" \
|
||||||
options.unlink_pidfile();
|
"it should not happen. Probably the instance has been" \
|
||||||
else if (signum == SIGKILL) /* really killed instance with SIGKILL */
|
"hanging. You should also check your IM setup",
|
||||||
log_error("The instance %s is being stopped forsibly. Normally \
|
options.instance_name);
|
||||||
it should not happed. Probably the instance has been \
|
/* After sucessful hard kill the pidfile need to be removed */
|
||||||
hanging. You should also check your IM setup",
|
options.unlink_pidfile();
|
||||||
options.instance_name);
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -406,7 +406,8 @@ pid_t Instance_options::get_pid()
|
|||||||
{
|
{
|
||||||
pid_t 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));
|
my_fclose(pid_file_stream, MYF(0));
|
||||||
return pid;
|
return pid;
|
||||||
}
|
}
|
||||||
|
@ -353,7 +353,7 @@ Event_parse_data::init_interval(THD *thd)
|
|||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
|
|
||||||
wrong_value:
|
wrong_value:
|
||||||
report_bad_value("INTERVAL", item_execute_at);
|
report_bad_value("INTERVAL", item_expression);
|
||||||
DBUG_RETURN(ER_WRONG_VALUE);
|
DBUG_RETURN(ER_WRONG_VALUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ public:
|
|||||||
{
|
{
|
||||||
EVENTS_OFF= 0,
|
EVENTS_OFF= 0,
|
||||||
EVENTS_ON= 1,
|
EVENTS_ON= 1,
|
||||||
EVENTS_DISABLED= 5
|
EVENTS_DISABLED= 4
|
||||||
};
|
};
|
||||||
|
|
||||||
static enum_opt_event_scheduler opt_event_scheduler;
|
static enum_opt_event_scheduler opt_event_scheduler;
|
||||||
|
@ -690,6 +690,7 @@ struct handlerton
|
|||||||
#define HTON_FLUSH_AFTER_RENAME (1 << 4)
|
#define HTON_FLUSH_AFTER_RENAME (1 << 4)
|
||||||
#define HTON_NOT_USER_SELECTABLE (1 << 5)
|
#define HTON_NOT_USER_SELECTABLE (1 << 5)
|
||||||
#define HTON_TEMPORARY_NOT_SUPPORTED (1 << 6) //Having temporary tables not supported
|
#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
|
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 bool opt_disable_networking, opt_skip_show_db;
|
||||||
extern my_bool opt_character_set_client_handshake;
|
extern my_bool opt_character_set_client_handshake;
|
||||||
extern bool volatile abort_loop, shutdown_in_progress, grant_option;
|
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 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_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;
|
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
|
ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA
|
||||||
eng "Triggers can not be created on system tables"
|
eng "Triggers can not be created on system tables"
|
||||||
ger "Trigger k<>nnen nicht auf Systemtabellen erzeugt werden"
|
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
|
ER_EVENT_RECURSIVITY_FORBIDDEN
|
||||||
eng "Recursivity of EVENT DDL statements is forbidden when body is present"
|
eng "Recursivity of EVENT DDL statements is forbidden when body is present"
|
||||||
ER_EVENTS_DB_ERROR
|
ER_EVENTS_DB_ERROR
|
||||||
@ -5992,3 +5986,8 @@ ER_HOSTNAME
|
|||||||
eng "host name"
|
eng "host name"
|
||||||
ER_WRONG_STRING_LENGTH
|
ER_WRONG_STRING_LENGTH
|
||||||
eng "String '%-.70s' is too long for %s (should be no longer than %d)"
|
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
|
MYSQL_PROC_FIELD_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
bool mysql_proc_table_exists= 1;
|
|
||||||
|
|
||||||
/* Tells what SP_DEFAULT_ACCESS should be mapped to */
|
/* Tells what SP_DEFAULT_ACCESS should be mapped to */
|
||||||
#define SP_DEFAULT_ACCESS_MAPPING SP_CONTAINS_SQL
|
#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;
|
bool not_used;
|
||||||
DBUG_ENTER("open_proc_table");
|
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);
|
thd->reset_n_backup_open_tables_state(backup);
|
||||||
|
|
||||||
bzero((char*) &tables, sizeof(tables));
|
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)))
|
MYSQL_LOCK_IGNORE_FLUSH)))
|
||||||
{
|
{
|
||||||
thd->restore_backup_open_tables_state(backup);
|
thd->restore_backup_open_tables_state(backup);
|
||||||
mysql_proc_table_exists= 0;
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
table->use_all_columns();
|
table->use_all_columns();
|
||||||
@ -186,15 +176,6 @@ static TABLE *open_proc_table_for_update(THD *thd)
|
|||||||
if (table)
|
if (table)
|
||||||
table->use_all_columns();
|
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);
|
DBUG_RETURN(table);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1610,14 +1591,6 @@ sp_cache_routines_and_add_tables_aux(THD *thd, LEX *lex,
|
|||||||
case SP_KEY_NOT_FOUND:
|
case SP_KEY_NOT_FOUND:
|
||||||
ret= SP_OK;
|
ret= SP_OK;
|
||||||
break;
|
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:
|
default:
|
||||||
/*
|
/*
|
||||||
Any error when loading an existing routine is either some problem
|
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");
|
DBUG_ENTER("acl_load");
|
||||||
|
|
||||||
grant_version++; /* Privileges updated */
|
grant_version++; /* Privileges updated */
|
||||||
mysql_proc_table_exists= 1; // Assume mysql.proc exists
|
|
||||||
|
|
||||||
acl_cache->clear(1); // Clear locked hostname cache
|
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;
|
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
|
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")
|
(!my_strcasecmp(system_charset_info, table->table_name, "slow_log")
|
||||||
&& opt_slow_log && logger.is_slow_log_table_enabled())))
|
&& 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);
|
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 &&
|
(table_kind == SLOW_LOG && opt_slow_log &&
|
||||||
logger.is_slow_log_table_enabled()))
|
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);
|
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) &&
|
if ((table_kind == GENERAL_LOG || table_kind == SLOW_LOG) &&
|
||||||
(lex_create_info->used_fields & HA_CREATE_USED_ENGINE) &&
|
(lex_create_info->used_fields & HA_CREATE_USED_ENGINE) &&
|
||||||
(!lex_create_info->db_type || /* unknown engine */
|
(!lex_create_info->db_type || /* unknown engine */
|
||||||
!(lex_create_info->db_type->db_type == DB_TYPE_MYISAM ||
|
!(lex_create_info->db_type->flags & HTON_SUPPORT_LOG_TABLES)))
|
||||||
lex_create_info->db_type->db_type == DB_TYPE_CSV_DB)))
|
|
||||||
{
|
{
|
||||||
my_error(ER_BAD_LOG_ENGINE, MYF(0));
|
my_error(ER_UNSUPORTED_LOG_ENGINE, MYF(0));
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -161,7 +161,7 @@ static int tina_init_func(void *p)
|
|||||||
tina_hton->db_type= DB_TYPE_CSV_DB;
|
tina_hton->db_type= DB_TYPE_CSV_DB;
|
||||||
tina_hton->create= tina_create_handler;
|
tina_hton->create= tina_create_handler;
|
||||||
tina_hton->panic= tina_end;
|
tina_hton->panic= tina_end;
|
||||||
tina_hton->flags= HTON_CAN_RECREATE;
|
tina_hton->flags= HTON_CAN_RECREATE | HTON_SUPPORT_LOG_TABLES;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1796,7 +1796,7 @@ static int myisam_init(void *p)
|
|||||||
myisam_hton->db_type=DB_TYPE_MYISAM;
|
myisam_hton->db_type=DB_TYPE_MYISAM;
|
||||||
myisam_hton->create=myisam_create_handler;
|
myisam_hton->create=myisam_create_handler;
|
||||||
myisam_hton->panic=mi_panic;
|
myisam_hton->panic=mi_panic;
|
||||||
myisam_hton->flags=HTON_CAN_RECREATE;
|
myisam_hton->flags= HTON_CAN_RECREATE | HTON_SUPPORT_LOG_TABLES;
|
||||||
return 0;
|
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
|
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
|
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
|
other threads as soon as possible. We don't lock mutex here
|
||||||
pthread memory visibility rules.
|
(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)
|
if (share->is_log_table)
|
||||||
mi_update_status((void*) info);
|
mi_update_status((void*) info);
|
||||||
pthread_mutex_unlock(&share->intern_lock);
|
|
||||||
|
|
||||||
allow_break(); /* Allow SIGHUP & SIGINT */
|
allow_break(); /* Allow SIGHUP & SIGINT */
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
|
Reference in New Issue
Block a user