diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2017-09-13 15:41:04 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2017-09-13 16:14:37 +0300 |
commit | f5a833c3e085524585d1ae5b8303c168f075dab3 (patch) | |
tree | 95d235d9cd99d2b9b8640719b6c0d4cda5c6b2fe /storage/innobase/row/row0merge.cc | |
parent | 24062fed7026cd9a65864402a6a4761ef88ade39 (diff) | |
download | mariadb-git-f5a833c3e085524585d1ae5b8303c168f075dab3.tar.gz |
Clean up the logging of virtual column values in table-rebuilding online ALTER
In online table-rebuilding ALTER TABLE (LOCK=NONE), virtual column values
are being written to the online_log. WL#8149 in MySQL 5.7 changed some
low-level functions that are also being used outside row0log.cc, causing
performance penalty to other code.
We revert those changes, and introduce separate functions for writing
the virtual column values.
The only functional change should be the one that is mentioned in
MDEV-13795: row_log_table_low_redundant() will no longer write
virtual column values along with old_pk, just like row_log_table_low().
As noted in MDEV-13795, some forms of table-rebuilding ALTER with
virtual columns is broken. At least DROP PRIMARY KEY, ADD PRIMARY KEY
is broken.
rec_get_converted_size_temp(), rec_convert_dtuple_to_temp():
Remove the parameter for passing virtual column values.
rec_get_converted_size_temp_v(), rec_convert_dtuple_to_temp_v():
New functions for appending virtual column values to the online_log.
rec_get_converted_size_comp_prefix_low(),
rec_convert_dtuple_to_rec_comp(): Remove the v_entry parameter,
and do not allow n_fields=0.
Diffstat (limited to 'storage/innobase/row/row0merge.cc')
-rw-r--r-- | storage/innobase/row/row0merge.cc | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/storage/innobase/row/row0merge.cc b/storage/innobase/row/row0merge.cc index cba453ced24..85fac6c0bba 100644 --- a/storage/innobase/row/row0merge.cc +++ b/storage/innobase/row/row0merge.cc @@ -407,7 +407,7 @@ row_merge_buf_encode( ulint extra_size; size = rec_get_converted_size_temp( - index, entry->fields, n_fields, NULL, &extra_size); + index, entry->fields, n_fields, &extra_size); ut_ad(size >= extra_size); /* Encode extra_size + 1 */ @@ -420,7 +420,7 @@ row_merge_buf_encode( } rec_convert_dtuple_to_temp(*b + extra_size, index, - entry->fields, n_fields, NULL); + entry->fields, n_fields); *b += size; } @@ -893,7 +893,7 @@ row_merge_buf_add( ulint extra; size = rec_get_converted_size_temp( - index, entry->fields, n_fields, NULL, &extra); + index, entry->fields, n_fields, &extra); ut_ad(data_size + extra_size == size); ut_ad(extra_size == extra); |