mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
Bug#36540: CREATE EVENT and ALTER EVENT statements fail with large server_id
The problem is that creating a event could fail if the value of the variable server_id didn't fit in the originator column of the event system table. The cause is two-fold: it was possible to set server_id to a value outside the documented range (from 0 to 2^32-1) and the originator column of the event table didn't have enough room for values in this range. The log tables (general_log and slow_log) also don't have a proper column type to store the server_id and having a large server_id value could prevent queries from being logged. The solution is to ensure that all system tables that store the server_id value have a proper column type (int unsigned) and that the variable can't be set to a value that is not within the range. mysql-test/r/events_bugs.result: Add test case result for Bug#36540 mysql-test/r/log_tables.result: Update column type. mysql-test/r/system_mysql_db.result: Update column type. mysql-test/r/variables.result: Add test case result for server_id value range. mysql-test/suite/sys_vars/r/server_id_basic_64.result: Update test case results. mysql-test/t/events_bugs.test: Add test case for Bug#36540 mysql-test/t/log_tables.test: Fix column type. mysql-test/t/variables.test: Add test case for server_id value range. scripts/mysql_system_tables.sql: Columns that store the server_id value must be of type INT UNSIGNED, fix event (originator), general_log and slow_log (server_id) tables in accordance. scripts/mysql_system_tables_fix.sql: Columns that store the server_id value must be of type INT UNSIGNED, fix event (originator), general_log and slow_log (server_id) tables in accordance. sql/mysqld.cc: Set min and max values for the server_id variable. Unfortunately we can't easily change server_id variable type from ulong to uint32 because of the sys_var classes.
This commit is contained in:
@ -215,6 +215,20 @@ ALTER TABLE func
|
||||
ALTER TABLE func
|
||||
MODIFY type enum ('function','aggregate') COLLATE utf8_general_ci NOT NULL;
|
||||
|
||||
#
|
||||
# Modify log tables.
|
||||
#
|
||||
|
||||
SET @old_log_state = @@global.general_log;
|
||||
SET GLOBAL general_log = 'OFF';
|
||||
ALTER TABLE general_log MODIFY COLUMN server_id INTEGER UNSIGNED NOT NULL;
|
||||
SET GLOBAL general_log = @old_log_state;
|
||||
|
||||
SET @old_log_state = @@global.slow_query_log;
|
||||
SET GLOBAL slow_query_log = 'OFF';
|
||||
ALTER TABLE slow_log MODIFY COLUMN server_id INTEGER UNSIGNED NOT NULL;
|
||||
SET GLOBAL slow_query_log = @old_log_state;
|
||||
|
||||
#
|
||||
# Detect whether we had Create_view_priv
|
||||
#
|
||||
@ -471,7 +485,10 @@ ALTER TABLE event MODIFY sql_mode
|
||||
'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;
|
||||
|
||||
ALTER TABLE event MODIFY COLUMN originator INT UNSIGNED NOT NULL;
|
||||
ALTER TABLE event ADD COLUMN originator INT UNSIGNED NOT NULL AFTER comment;
|
||||
|
||||
ALTER TABLE event MODIFY COLUMN status ENUM('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL default 'ENABLED';
|
||||
|
||||
ALTER TABLE event ADD COLUMN time_zone char(64) CHARACTER SET latin1
|
||||
|
Reference in New Issue
Block a user