• Davi Arnaut's avatar
    Bug#36540: CREATE EVENT and ALTER EVENT statements fail with large server_id · 402bc523
    Davi Arnaut authored
    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.
    402bc523
mysql_system_tables_fix.sql 25 KB