mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-33044 Loading time zones does not work with alter_algorithm INPLACE
$MYSQL_TZINFO_TO_SQL works by truncating tables. Truncation is an operation that cannot be done in-place and therefore is fundamentally incompatible with alter_algorithm='INPLACE'. As a result, we override the default alter_algorithm setting in tztime.cc to alter_algorithm='COPY' so that timezones can be loaded regardless of the previously set alter_algorithm. All new code of the whole pull request, including one or several files that are either new files or modified ones, are contributed under the BSD-new license. I am contributing on behalf of my employer Amazon Web Services, Inc.
This commit is contained in:
committed by
Daniel Black
parent
81f75ca83a
commit
7890388d91
@ -20,12 +20,16 @@ ALTER TABLE time_zone ENGINE=InnoDB;
|
||||
ALTER TABLE time_zone_name ENGINE=InnoDB;
|
||||
ALTER TABLE time_zone_transition ENGINE=InnoDB;
|
||||
ALTER TABLE time_zone_transition_type ENGINE=InnoDB;
|
||||
SET @old_alter_alg=@@SESSION.alter_algorithm;
|
||||
SET session alter_algorithm='COPY';
|
||||
TRUNCATE TABLE time_zone;
|
||||
TRUNCATE TABLE time_zone_name;
|
||||
TRUNCATE TABLE time_zone_transition;
|
||||
TRUNCATE TABLE time_zone_transition_type;
|
||||
START TRANSACTION;
|
||||
ELSE
|
||||
SET @old_alter_alg=@@SESSION.alter_algorithm;
|
||||
SET session alter_algorithm='COPY';
|
||||
TRUNCATE TABLE time_zone;
|
||||
TRUNCATE TABLE time_zone_name;
|
||||
TRUNCATE TABLE time_zone_transition;
|
||||
@ -62,6 +66,7 @@ ALTER TABLE time_zone_transition ENGINE=Aria, ORDER BY Time_zone_id, Transition_
|
||||
ALTER TABLE time_zone_transition_type ENGINE=Aria, ORDER BY Time_zone_id, Transition_type_id;
|
||||
END IF|
|
||||
\d ;
|
||||
SET session alter_algorithm=@old_alter_alg;
|
||||
SELECT COUNT(*) FROM time_zone;
|
||||
COUNT(*)
|
||||
0
|
||||
@ -85,12 +90,16 @@ ALTER TABLE time_zone ENGINE=InnoDB;
|
||||
ALTER TABLE time_zone_name ENGINE=InnoDB;
|
||||
ALTER TABLE time_zone_transition ENGINE=InnoDB;
|
||||
ALTER TABLE time_zone_transition_type ENGINE=InnoDB;
|
||||
SET @old_alter_alg=@@SESSION.alter_algorithm;
|
||||
SET session alter_algorithm='COPY';
|
||||
TRUNCATE TABLE time_zone;
|
||||
TRUNCATE TABLE time_zone_name;
|
||||
TRUNCATE TABLE time_zone_transition;
|
||||
TRUNCATE TABLE time_zone_transition_type;
|
||||
START TRANSACTION;
|
||||
ELSE
|
||||
SET @old_alter_alg=@@SESSION.alter_algorithm;
|
||||
SET session alter_algorithm='COPY';
|
||||
TRUNCATE TABLE time_zone;
|
||||
TRUNCATE TABLE time_zone_name;
|
||||
TRUNCATE TABLE time_zone_transition;
|
||||
@ -124,6 +133,7 @@ ALTER TABLE time_zone_transition ENGINE=Aria, ORDER BY Time_zone_id, Transition_
|
||||
ALTER TABLE time_zone_transition_type ENGINE=Aria, ORDER BY Time_zone_id, Transition_type_id;
|
||||
END IF|
|
||||
\d ;
|
||||
SET session alter_algorithm=@old_alter_alg;
|
||||
SELECT COUNT(*) FROM time_zone;
|
||||
COUNT(*)
|
||||
2
|
||||
@ -145,6 +155,8 @@ COUNT(*)
|
||||
set @prep1=if((select count(*) from information_schema.global_variables where variable_name='wsrep_on' and variable_value='ON'), 'SET SESSION WSREP_ON=OFF', 'do 0');
|
||||
SET SESSION SQL_LOG_BIN=0;
|
||||
execute immediate @prep1;
|
||||
SET @old_alter_alg=@@SESSION.alter_algorithm;
|
||||
SET session alter_algorithm='COPY';
|
||||
TRUNCATE TABLE time_zone;
|
||||
TRUNCATE TABLE time_zone_name;
|
||||
TRUNCATE TABLE time_zone_transition;
|
||||
@ -172,6 +184,7 @@ UNLOCK TABLES;
|
||||
COMMIT;
|
||||
ALTER TABLE time_zone_transition ORDER BY Time_zone_id, Transition_time;
|
||||
ALTER TABLE time_zone_transition_type ORDER BY Time_zone_id, Transition_type_id;
|
||||
SET session alter_algorithm=@old_alter_alg;
|
||||
SELECT COUNT(*) FROM time_zone;
|
||||
COUNT(*)
|
||||
2
|
||||
@ -432,12 +445,16 @@ ALTER TABLE time_zone ENGINE=InnoDB;
|
||||
ALTER TABLE time_zone_name ENGINE=InnoDB;
|
||||
ALTER TABLE time_zone_transition ENGINE=InnoDB;
|
||||
ALTER TABLE time_zone_transition_type ENGINE=InnoDB;
|
||||
SET @old_alter_alg=@@SESSION.alter_algorithm;
|
||||
SET session alter_algorithm='COPY';
|
||||
TRUNCATE TABLE time_zone;
|
||||
TRUNCATE TABLE time_zone_name;
|
||||
TRUNCATE TABLE time_zone_transition;
|
||||
TRUNCATE TABLE time_zone_transition_type;
|
||||
START TRANSACTION;
|
||||
ELSE
|
||||
SET @old_alter_alg=@@SESSION.alter_algorithm;
|
||||
SET session alter_algorithm='COPY';
|
||||
TRUNCATE TABLE time_zone;
|
||||
TRUNCATE TABLE time_zone_name;
|
||||
TRUNCATE TABLE time_zone_transition;
|
||||
@ -457,6 +474,7 @@ ALTER TABLE time_zone_transition ENGINE=Aria, ORDER BY Time_zone_id, Transition_
|
||||
ALTER TABLE time_zone_transition_type ENGINE=Aria, ORDER BY Time_zone_id, Transition_type_id;
|
||||
END IF|
|
||||
\d ;
|
||||
SET session alter_algorithm=@old_alter_alg;
|
||||
DROP TABLE time_zone;
|
||||
DROP TABLE time_zone_name;
|
||||
DROP TABLE time_zone_transition;
|
||||
|
Reference in New Issue
Block a user