summaryrefslogtreecommitdiff
path: root/sql/table.cc
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2022-09-15 18:28:51 +0200
committerSergei Golubchik <serg@mariadb.org>2022-10-26 15:30:38 +0200
commitadcbf015c94c0b7ab03d5cf9f79c7913d4e6589e (patch)
treec92ce20b89f045f7a2e045cf3894c73c3ae9813a /sql/table.cc
parentbf62d8e7e78c5db4de35ce4fff79247ca3459905 (diff)
downloadmariadb-git-adcbf015c94c0b7ab03d5cf9f79c7913d4e6589e.tar.gz
cleanup: read_set/write_set are based on metadata
they should be set once, not for every row
Diffstat (limited to 'sql/table.cc')
-rw-r--r--sql/table.cc16
1 files changed, 8 insertions, 8 deletions
diff --git a/sql/table.cc b/sql/table.cc
index 0476d8f2bd0..e94c8eabed0 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -7614,6 +7614,8 @@ void TABLE::mark_columns_needed_for_update()
}
if (s->versioned)
{
+ bitmap_set_bit(write_set, s->vers.start_fieldno);
+ bitmap_set_bit(write_set, s->vers.end_fieldno);
/*
For System Versioning we have to read all columns since we store
a copy of previous row with modified row_end back to a table.
@@ -7671,6 +7673,12 @@ void TABLE::mark_columns_needed_for_insert()
mark_auto_increment_column();
if (default_field)
mark_default_fields_for_write(TRUE);
+ if (s->versioned)
+ {
+ bitmap_set_bit(write_set, s->vers.start_fieldno);
+ bitmap_set_bit(write_set, s->vers.end_fieldno);
+ bitmap_set_bit(read_set, s->vers.end_fieldno);
+ }
/* Mark virtual columns for insert */
if (vfield)
mark_virtual_columns_for_write(TRUE);
@@ -9148,29 +9156,21 @@ bool TABLE::check_period_overlaps(const KEY &key,
void TABLE::vers_update_fields()
{
if (!vers_write)
- {
- file->column_bitmaps_signal();
return;
- }
if (versioned(VERS_TIMESTAMP))
{
- bitmap_set_bit(write_set, vers_start_field()->field_index);
if (vers_start_field()->store_timestamp(in_use->query_start(),
in_use->query_start_sec_part()))
{
DBUG_ASSERT(0);
}
vers_start_field()->set_has_explicit_value();
- bitmap_set_bit(read_set, vers_start_field()->field_index);
}
- bitmap_set_bit(write_set, vers_end_field()->field_index);
vers_end_field()->set_max();
vers_end_field()->set_has_explicit_value();
- bitmap_set_bit(read_set, vers_end_field()->field_index);
- file->column_bitmaps_signal();
if (vfield)
update_virtual_fields(file, VCOL_UPDATE_FOR_READ);
}