1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-07 00:04:31 +03:00

MDEV-35160 RBR does not work with vector type, ER_SLAVE_CONVERSION_FAILED

This commit is contained in:
Sergei Golubchik
2024-10-16 17:41:56 +02:00
parent 8f49fb8cc3
commit db10e5cf6c
4 changed files with 41 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
include/master-slave.inc
[connection master]
#
# MDEV-35160 RBR does not work with vector type, ER_SLAVE_CONVERSION_FAILED
#
create table t (pk int primary key, a vector(1) not null);
insert into t values (1, 0x00000000);
connection slave;
select pk, vec_totext(a) from t;
pk vec_totext(a)
1 [0]
connection master;
drop table t;
include/rpl_end.inc

View File

@@ -0,0 +1,16 @@
--source include/have_binlog_format_row.inc
--source include/master-slave.inc
--echo #
--echo # MDEV-35160 RBR does not work with vector type, ER_SLAVE_CONVERSION_FAILED
--echo #
create table t (pk int primary key, a vector(1) not null);
insert into t values (1, 0x00000000);
--sync_slave_with_master
select pk, vec_totext(a) from t;
--connection master
drop table t;
--source include/rpl_end.inc

View File

@@ -320,3 +320,12 @@ int Field_vector::store(const char *from, size_t length, CHARSET_INFO *cs)
return Field_varstring::store(from, length, cs); return Field_varstring::store(from, length, cs);
} }
enum_conv_type Field_vector::rpl_conv_type_from(const Conv_source &src,
const Relay_log_info *rli, const Conv_param &param) const
{
if (src.type_handler() == &type_handler_varchar &&
field_length == src.type_handler()->max_display_length_for_field(src))
return rpl_conv_type_from_same_data_type(src.metadata(), rli, param);
return CONV_TYPE_IMPOSSIBLE;
}

View File

@@ -125,6 +125,8 @@ public:
int store(double nr) override; int store(double nr) override;
int store(longlong nr, bool unsigned_val) override; int store(longlong nr, bool unsigned_val) override;
int store_decimal(const my_decimal *) override; int store_decimal(const my_decimal *) override;
enum_conv_type rpl_conv_type_from(const Conv_source &, const Relay_log_info *,
const Conv_param &) const override;
uint size_of() const override { return sizeof(*this); } uint size_of() const override { return sizeof(*this); }
bool update_min(Field *, bool) override { return false; } // disable EITS bool update_min(Field *, bool) override { return false; } // disable EITS
bool update_max(Field *, bool) override { return false; } // disable EITS bool update_max(Field *, bool) override { return false; } // disable EITS