Commit 9490742d authored by Marko Mäkelä's avatar Marko Mäkelä

Fix update of the metadata record

btr_cur_pessimistic_update(): Invoke dtuple_convert_big_rec()
for metadata records if the record is too large, or if the
metadata field is not yet marked as externally stored.

row_upd_index_replace_metadata(): Correctly copy the ALTER TABLE
metadata field.
parent 615cd885
......@@ -4799,8 +4799,9 @@ btr_cur_pessimistic_update(
dict_index_get_n_fields(index),
block->page.size)
|| (UNIV_UNLIKELY(update->is_alter_metadata())
&& !thr_get_trx(thr)->in_rollback)) {
&& !dfield_is_ext(dtuple_get_nth_field(
new_entry,
index->first_user_field())))) {
big_rec_vec = dtuple_convert_big_rec(index, update, new_entry, &n_ext);
if (UNIV_UNLIKELY(big_rec_vec == NULL)) {
......
......@@ -640,9 +640,6 @@ dtuple_convert_big_rec(
if (entry->is_alter_metadata()) {
longest_i = index->n_uniq + DATA_ROLL_PTR;
dfield = dtuple_get_nth_field(entry, longest_i);
#if 1 // FIXME: remove this
index->table->serialise_columns(heap, dfield);
#endif
local_len = BTR_EXTERN_FIELD_REF_SIZE;
goto ext_write;
}
......
......@@ -1356,7 +1356,11 @@ row_upd_index_replace_metadata(
ut_ad(dfield_is_ext(dfield));
ut_ad(dfield_get_len(dfield) == FIELD_REF_SIZE);
ut_ad(!dfield_is_null(dfield));
dfield->data = uf->new_val.data;
dfield_set_data(dfield, uf->new_val.data,
uf->new_val.len);
if (dfield_is_ext(&uf->new_val)) {
dfield_set_ext(dfield);
}
continue;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment