diff options
author | unknown <istruewing@chilla.local> | 2007-07-04 21:55:26 +0200 |
---|---|---|
committer | unknown <istruewing@chilla.local> | 2007-07-04 21:55:26 +0200 |
commit | 435df1859fc503c884cdec9eaceb7f5f102af70d (patch) | |
tree | d991dcc6a940df36931c5a1b84aee99fa0d2c47b /sql/partition_info.h | |
parent | 1490e79da2448e712ed9d7be53f4b1c1e13ffc1d (diff) | |
download | mariadb-git-435df1859fc503c884cdec9eaceb7f5f102af70d.tar.gz |
Bug#26827 - table->read_set is set incorrectly,
causing update of a different column
For efficiency some storage engines do not read a complete record
for update, but only the columns required for selecting the rows.
When updating a row of a partitioned table, modifying a column
that is part of the partition or subpartition expression, then
the row may need to move from one [sub]partition to another one.
This is done by inserting the new row into the target
[sub]partition and deleting the old row from the originating one.
For the insert we need a complete record.
If an above mentioned engine was used for a partitioned table, we
did not have a complete record in update_row(). The implicitly
executed write_row() got an incomplete record.
This is solved by instructing the engine to read a complete record
if one of the columns of the partition or subpartiton is to be
updated.
No testcase. This can be reproduced with Falcon only. The engines
contained in standard 5.1 do always return complete records on
update.
sql/ha_partition.cc:
Bug#26827 - table->read_set is set incorrectly,
causing update of a different column
Setting partition field bits in read_set if a writing
operation is going on. This replaces the old function
include_partition_fields_in_used_fields().
Setting all bits in read_set if write_set contains a column
used in a partition or subpartition expression.
Removed include_partition_fields_in_used_fields().
sql/ha_partition.h:
Bug#26827 - table->read_set is set incorrectly,
causing update of a different column
Removed declaration of
include_partition_fields_in_used_fields().
sql/partition_info.h:
Bug#26827 - table->read_set is set incorrectly,
causing update of a different column
Added a bitmap to partition_info for a quick check of
columns used in a partition or subpartition expression.
sql/sql_partition.cc:
Bug#26827 - table->read_set is set incorrectly,
causing update of a different column
Initializing the new bitmap with all columns used in a
partition or subpartition expression.
Diffstat (limited to 'sql/partition_info.h')
-rw-r--r-- | sql/partition_info.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sql/partition_info.h b/sql/partition_info.h index ce2f2a7b358..10edea074c0 100644 --- a/sql/partition_info.h +++ b/sql/partition_info.h @@ -81,6 +81,13 @@ public: */ Field **full_part_field_array; Field **full_part_charset_field_array; + /* + Set of all fields used in partition and subpartition expression. + Required for testing of partition fields in write_set when + updating. We need to set all bits in read_set because the row may + need to be inserted in a different [sub]partition. + */ + MY_BITMAP full_part_field_set; /* When we have a field that requires transformation before calling the |