Skip to content

Commit 87075e7

Browse files
committed
MDEV-11704 InnoDB: Failing assertion: dfield_is_null(dfield2) || dfield2->data
relax innodb assertion, because Field_blob::store() clearly says that a data pointer can be zero if the length is zero.
1 parent 239790d commit 87075e7

File tree

4 files changed

+30
-2
lines changed

4 files changed

+30
-2
lines changed

mysql-test/suite/vcol/r/vcol_keys_innodb.result

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,3 +258,14 @@ insert into t1 (col_varchar,col_int,col_datetime,col_time,col_blob,col_bit,col_y
258258
('bar',6,'1900-01-01 00:00:00','00:00:00','bar',b'10011000001101011000101',1985,'b',0.7,'','2028-04-06','1971-01-01 00:00:00');
259259
alter table t1 add index(vcol_datetime);
260260
drop table t1;
261+
create table t1 (
262+
pk int,
263+
col_blob mediumtext not null default '',
264+
vcol_blob tinyblob as (col_blob) virtual,
265+
col_char char(22) null,
266+
primary key(pk),
267+
index(col_char,vcol_blob(64))
268+
) engine=innodb;
269+
insert ignore into t1 (pk) values (1),(2);
270+
update t1 set col_char = 'foo' where pk = 1;
271+
drop table t1;

mysql-test/suite/vcol/t/vcol_keys_innodb.test

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,19 @@ insert into t1 (col_varchar,col_int,col_datetime,col_time,col_blob,col_bit,col_y
101101

102102
alter table t1 add index(vcol_datetime);
103103
drop table t1;
104+
105+
106+
#
107+
# MDEV-11704 InnoDB: Failing assertion: dfield_is_null(dfield2) || dfield2->data
108+
#
109+
create table t1 (
110+
pk int,
111+
col_blob mediumtext not null default '',
112+
vcol_blob tinyblob as (col_blob) virtual,
113+
col_char char(22) null,
114+
primary key(pk),
115+
index(col_char,vcol_blob(64))
116+
) engine=innodb;
117+
insert ignore into t1 (pk) values (1),(2);
118+
update t1 set col_char = 'foo' where pk = 1;
119+
drop table t1;

sql/table.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6243,7 +6243,7 @@ void TABLE::mark_columns_needed_for_delete()
62436243

62446244
void TABLE::mark_columns_needed_for_update()
62456245
{
6246-
DBUG_ENTER("mark_columns_needed_for_update");
6246+
DBUG_ENTER("TABLE::mark_columns_needed_for_update");
62476247
bool need_signal= false;
62486248

62496249
mark_columns_per_binlog_row_image();

storage/innobase/row/row0row.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,8 @@ row_build_index_entry_low(
129129
ut_ad(v_col->v_pos < dtuple_get_n_v_fields(row));
130130
dfield2 = dtuple_get_nth_v_field(row, v_col->v_pos);
131131

132-
ut_ad(dfield_is_null(dfield2) || dfield2->data);
132+
ut_ad(dfield_is_null(dfield2) ||
133+
dfield_get_len(dfield2) == 0 || dfield2->data);
133134
} else {
134135
dfield2 = dtuple_get_nth_field(row, col_no);
135136
ut_ad(dfield_get_type(dfield2)->mtype == DATA_MISSING

0 commit comments

Comments
 (0)