diff options
author | Michael Widenius <monty@askmonty.org> | 2010-05-26 21:55:40 +0300 |
---|---|---|
committer | Michael Widenius <monty@askmonty.org> | 2010-05-26 21:55:40 +0300 |
commit | 4aa9d903c11554cc4887eeffe7f0592c52e8bc99 (patch) | |
tree | af3f0dfb833c3c4aabaa69ce50cfb64202ecd479 /sql/sql_update.cc | |
parent | 9febcb4776e563a93eb8fff247174b0e2eb2ae0b (diff) | |
parent | af6d89a6aa9feb3545de068f461cf91bfb281dd2 (diff) | |
download | mariadb-git-4aa9d903c11554cc4887eeffe7f0592c52e8bc99.tar.gz |
Merge with MySQL 5.1.47
Fixed some bugs introduced in 5.1.47
Disabled some tests until we have merged with latest Xtradb
configure.in:
Added testing if valgrind/memcheck.h exists
storage/pbxt/src/ha_pbxt.cc:
LOCK_plugin is not anymore locked in init
Diffstat (limited to 'sql/sql_update.cc')
-rw-r--r-- | sql/sql_update.cc | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/sql/sql_update.cc b/sql/sql_update.cc index c71060d4066..cb72534856a 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -273,8 +273,7 @@ int mysql_update(THD *thd, table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET; else { - if (table->timestamp_field_type == TIMESTAMP_AUTO_SET_ON_UPDATE || - table->timestamp_field_type == TIMESTAMP_AUTO_SET_ON_BOTH) + if (((uint) table->timestamp_field_type) & TIMESTAMP_AUTO_SET_ON_UPDATE) bitmap_set_bit(table->write_set, table->timestamp_field->field_index); } @@ -308,10 +307,8 @@ int mysql_update(THD *thd, update force the table handler to retrieve write-only fields to be able to compare records and detect data change. */ - if (table->file->ha_table_flags() & HA_PARTIAL_COLUMN_READ && - table->timestamp_field && - (table->timestamp_field_type == TIMESTAMP_AUTO_SET_ON_UPDATE || - table->timestamp_field_type == TIMESTAMP_AUTO_SET_ON_BOTH)) + if ((table->file->ha_table_flags() & HA_PARTIAL_COLUMN_READ) && + (((uint) table->timestamp_field_type) & TIMESTAMP_AUTO_SET_ON_UPDATE)) bitmap_union(table->read_set, table->write_set); // Don't count on usage of 'only index' when calculating which key to use table->covering_keys.clear_all(); @@ -1380,6 +1377,15 @@ int multi_update::prepare(List<Item> ¬_used_values, { table->read_set= &table->def_read_set; bitmap_union(table->read_set, &table->tmp_set); + /* + If a timestamp field settable on UPDATE is present then to avoid wrong + update force the table handler to retrieve write-only fields to be able + to compare records and detect data change. + */ + if ((table->file->ha_table_flags() & HA_PARTIAL_COLUMN_READ) && + (((uint) table->timestamp_field_type) & + TIMESTAMP_AUTO_SET_ON_UPDATE)) + bitmap_union(table->read_set, table->write_set); } } |