mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
unpack_row: set the correct fields in has_value_set for online alter
This commit is contained in:
committed by
Sergei Golubchik
parent
ecb9db4c3d
commit
af82d56a51
@ -1312,6 +1312,40 @@ insert into t select repeat('a',130000);
|
||||
set debug_sync= "now signal end";
|
||||
connection default;
|
||||
drop table t;
|
||||
#
|
||||
# Test that correct fields are marked as explicit:
|
||||
# Drop a, reorder b, add new column with default.
|
||||
#
|
||||
create table t (a int primary key, b int) engine=innodb;
|
||||
insert into t values (1, 1), (2, 2), (3, 3);
|
||||
set debug_sync= "alter_table_copy_end signal copy wait_for goon";
|
||||
alter table t drop primary key, drop a,
|
||||
change b c bigint,
|
||||
add x longblob default 123456;
|
||||
connection con1;
|
||||
set debug_sync= "now wait_for copy";
|
||||
update t set b = 5 where a = 1;
|
||||
update t set b = NULL where a = 1;
|
||||
select * from t;
|
||||
a b
|
||||
1 NULL
|
||||
2 2
|
||||
3 3
|
||||
update t set a = 100 where a = 1;
|
||||
update t set b = -10 where a = 100;
|
||||
select * from t;
|
||||
a b
|
||||
2 2
|
||||
3 3
|
||||
100 -10
|
||||
set debug_sync= "now signal goon";
|
||||
connection default;
|
||||
select * from t;
|
||||
c x
|
||||
-10 123456
|
||||
2 123456
|
||||
3 123456
|
||||
drop table t;
|
||||
set debug_sync= reset;
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
|
@ -1498,6 +1498,35 @@ set debug_sync= "now signal end";
|
||||
--reap
|
||||
drop table t;
|
||||
|
||||
--echo #
|
||||
--echo # Test that correct fields are marked as explicit:
|
||||
--echo # Drop a, reorder b, add new column with default.
|
||||
--echo #
|
||||
create table t (a int primary key, b int) engine=innodb;
|
||||
insert into t values (1, 1), (2, 2), (3, 3);
|
||||
|
||||
set debug_sync= "alter_table_copy_end signal copy wait_for goon";
|
||||
send alter table t drop primary key, drop a,
|
||||
change b c bigint,
|
||||
add x longblob default 123456;
|
||||
|
||||
--connection con1
|
||||
set debug_sync= "now wait_for copy";
|
||||
|
||||
update t set b = 5 where a = 1;
|
||||
update t set b = NULL where a = 1;
|
||||
select * from t;
|
||||
update t set a = 100 where a = 1;
|
||||
update t set b = -10 where a = 100;
|
||||
select * from t;
|
||||
|
||||
set debug_sync= "now signal goon";
|
||||
|
||||
--connection default
|
||||
--reap
|
||||
select * from t;
|
||||
drop table t;
|
||||
|
||||
|
||||
set debug_sync= reset;
|
||||
--disconnect con1
|
||||
|
@ -254,7 +254,8 @@ int unpack_row(const rpl_group_info *rgi, TABLE *table, uint const colcnt,
|
||||
*/
|
||||
if (bitmap_is_set(cols, (uint)(field_ptr - begin_ptr)))
|
||||
{
|
||||
(*field_ptr)->set_has_explicit_value();
|
||||
if (!rpl_data.is_online_alter())
|
||||
(*field_ptr)->set_has_explicit_value();
|
||||
if ((null_mask & 0xFF) == 0)
|
||||
{
|
||||
DBUG_ASSERT(null_ptr < row_data + master_null_byte_count);
|
||||
@ -376,6 +377,7 @@ int unpack_row(const rpl_group_info *rgi, TABLE *table, uint const colcnt,
|
||||
for (const auto *copy=rpl_data.copy_fields;
|
||||
copy != rpl_data.copy_fields_end; copy++)
|
||||
{
|
||||
copy->to_field->set_has_explicit_value();
|
||||
copy->do_copy(copy);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user