diff options
author | unknown <gkodinov/kgeorge@magare.gmz> | 2007-06-28 16:07:55 +0300 |
---|---|---|
committer | unknown <gkodinov/kgeorge@magare.gmz> | 2007-06-28 16:07:55 +0300 |
commit | ba4682ae10648d7341798eb628cfe2c1ce466a89 (patch) | |
tree | a2bf9e1b332e76cb81626a4f4952dfcd1f7eed99 /sql/sql_servers.cc | |
parent | 28187da7747029ee380b5ddcea84cc0002b4ad5d (diff) | |
download | mariadb-git-ba4682ae10648d7341798eb628cfe2c1ce466a89.tar.gz |
Bug #29157: UPDATE, changed rows incorrect
Sometimes the number of really updated rows (with changed
column values) cannot be determined at the server level
alone (e.g. if the storage engine does not return enough
column values to verify that). So the only dependable way
in such cases is to let the storage engine return that
information if possible.
Fixed the bug at server level by providing a way for the
storage engine to return information about wether it
actually updated the row or the old and the new column
values are the same. It can do that by returning
HA_ERR_RECORD_IS_THE_SAME in ha_update_row().
Note that each storage engine may choose not to try to
return this status code, so this behaviour remains
storage engine specific.
include/my_base.h:
Bug #29157: handle the row not updated special return value
sql/log_event.cc:
Bug #29157: handle the row not updated special return value
sql/sp.cc:
Bug #29157: handle the row not updated special return value
sql/sql_acl.cc:
Bug #29157: handle the row not updated special return value
sql/sql_insert.cc:
Bug #29157: handle the row not updated special return value
sql/sql_servers.cc:
Bug #29157: handle the row not updated special return value
sql/sql_update.cc:
Bug #29157: handle the row not updated special return value
Diffstat (limited to 'sql/sql_servers.cc')
-rw-r--r-- | sql/sql_servers.cc | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/sql/sql_servers.cc b/sql/sql_servers.cc index 195e6743a72..ac5ea6f4ac4 100644 --- a/sql/sql_servers.cc +++ b/sql/sql_servers.cc @@ -872,11 +872,15 @@ update_server_record(TABLE *table, FOREIGN_SERVER *server) /* ok, so we can update since the record exists in the table */ store_record(table,record[1]); store_server_fields(table, server); - if ((error=table->file->ha_update_row(table->record[1],table->record[0]))) + if ((error=table->file->ha_update_row(table->record[1], + table->record[0])) && + error != HA_ERR_RECORD_IS_THE_SAME) { DBUG_PRINT("info",("problems with ha_update_row %d", error)); goto end; } + else + error= 0; } end: |