1
0
mirror of https://github.com/MariaDB/server.git synced 2025-05-01 08:45:04 +03:00
Andrei e7cf871dda MDEV-24617 OPTIMIZE on a sequence causes unexpected ER_BINLOG_UNSAFE_STATEMENT
The warning out of OPTIMIZE
  Statement is unsafe because it uses a system function
was indeed counterfactual and was resulted by checking an
insufficiently strict property of lex' sql_command_flags.

Fixed with deploying an additional checking of weather
the current sql command that modifes a share->non_determinstic_insert
table is capable of generating ROW format events.
The extra check rules out the unsafety to OPTIMIZE et al, while the
existing check continues to do so to CREATE TABLE (which is
perculiarly tagged as ROW-event generative sql command).

As a side effect sql_sequence.binlog test gets corrected and
binlog_stm_unsafe_warning.test is reinforced to add up
an unsafe CREATE..SELECT test.
2022-03-10 13:38:07 +02:00

58 lines
2.5 KiB
Plaintext

create or replace sequence s1 cache 3;
select next value for s1, minimum_value from s1 where maximum_value> 1;
next value for s1 minimum_value
1 1
select next value for s1, minimum_value from s1 where maximum_value> 2;
next value for s1 minimum_value
2 1
select next value for s1, minimum_value from s1 where maximum_value> 3;
next value for s1 minimum_value
3 1
select next value for s1, minimum_value from s1 where maximum_value> 4;
next value for s1 minimum_value
4 1
alter sequence s1 maxvalue 1000;
optimize table s1;
Table Op Msg_type Msg_text
test.s1 optimize note The storage engine for the table doesn't support optimize
analyze table s1;
Table Op Msg_type Msg_text
test.s1 analyze note The storage engine for the table doesn't support analyze
repair table s1;
Table Op Msg_type Msg_text
test.s1 repair status OK
check table s1;
Table Op Msg_type Msg_text
test.s1 check note The storage engine for the table doesn't support check
rename table s1 to tmp_s;
rename table tmp_s to s1;
drop sequence s1;
include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; create or replace sequence s1 cache 3
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Annotate_rows # # select next value for s1, minimum_value from s1 where maximum_value> 1
master-bin.000001 # Table_map # # table_id: # (test.s1)
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # COMMIT
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Annotate_rows # # select next value for s1, minimum_value from s1 where maximum_value> 4
master-bin.000001 # Table_map # # table_id: # (test.s1)
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # COMMIT
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; alter sequence s1 maxvalue 1000
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; optimize table s1
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; analyze table s1
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; repair table s1
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; rename table s1 to tmp_s
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; rename table tmp_s to s1
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; DROP SEQUENCE `s1` /* generated by server */