summaryrefslogtreecommitdiff
path: root/sql/sql_update.cc
diff options
context:
space:
mode:
authorunknown <sergefp@mysql.com>2004-05-29 20:55:46 +0400
committerunknown <sergefp@mysql.com>2004-05-29 20:55:46 +0400
commitb7130450950898892f14f2a1fef462ecac49e92a (patch)
tree0107d5b2c95123b7a602a9f396d6aca05ce21a54 /sql/sql_update.cc
parentb0921b1f5a1f610b04641a83d0d7b21e3fe46d84 (diff)
parent2164db3c8c4c086dcc16d73baf7557a344d82129 (diff)
downloadmariadb-git-b7130450950898892f14f2a1fef462ecac49e92a.tar.gz
Manual merge
include/my_base.h: Auto merged innobase/include/row0mysql.h: Auto merged innobase/row/row0sel.c: Auto merged mysql-test/r/index_merge.result: Auto merged mysql-test/r/index_merge_innodb.result: Auto merged sql/ha_berkeley.cc: Auto merged sql/ha_berkeley.h: Auto merged sql/ha_heap.h: Auto merged sql/ha_innodb.cc: Auto merged sql/ha_innodb.h: Auto merged sql/handler.h: Auto merged sql/sql_delete.cc: Auto merged sql/sql_select.cc: Auto merged sql/sql_select.h: Auto merged sql/sql_test.cc: Auto merged sql/sql_update.cc: Auto merged sql/opt_range.cc: Hand merged sql/opt_range.h: Hand merged
Diffstat (limited to 'sql/sql_update.cc')
-rw-r--r--sql/sql_update.cc39
1 files changed, 8 insertions, 31 deletions
diff --git a/sql/sql_update.cc b/sql/sql_update.cc
index 5c6ed023485..b85ddff84f9 100644
--- a/sql/sql_update.cc
+++ b/sql/sql_update.cc
@@ -156,18 +156,11 @@ int mysql_update(THD *thd,
}
init_ftfuncs(thd, &thd->lex->select_lex, 1);
/* Check if we are modifying a key that we are used to search with */
+
if (select && select->quick)
{
- if (select->quick->get_type() != QUICK_SELECT_I::QS_TYPE_INDEX_MERGE)
- {
- used_index= select->quick->index;
- used_key_is_modified= (!select->quick->unique_key_range() &&
- check_if_key_used(table,used_index,fields));
- }
- else
- {
- used_key_is_modified= true;
- }
+ used_key_is_modified= (!select->quick->unique_key_range() &&
+ select->quick->check_if_keys_used(&fields));
}
else if ((used_index=table->file->key_used_on_scan) < MAX_KEY)
used_key_is_modified=check_if_key_used(table, used_index, fields);
@@ -226,7 +219,7 @@ int mysql_update(THD *thd,
if (open_cached_file(&tempfile, mysql_tmpdir,TEMP_PREFIX,
DISK_BUFFER_SIZE, MYF(MY_WME)))
goto err;
-
+
/* If quick select is used, initialize it before retrieving rows. */
if (select && select->quick && select->quick->reset())
goto err;
@@ -286,6 +279,9 @@ int mysql_update(THD *thd,
if (handle_duplicates == DUP_IGNORE)
table->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
+
+ if (select && select->quick && select->quick->reset())
+ goto err;
init_read_record(&info,thd,table,select,0,1);
updated= found= 0;
@@ -833,26 +829,7 @@ static bool safe_update_on_fly(JOIN_TAB *join_tab, List<Item> *fields)
case JT_ALL:
/* If range search on index */
if (join_tab->quick)
- {
- if (join_tab->quick->get_type() != QUICK_SELECT_I::QS_TYPE_INDEX_MERGE)
- {
- return !check_if_key_used(table,join_tab->quick->index,*fields);
- }
- else
- {
- QUICK_INDEX_MERGE_SELECT *qsel_imerge=
- (QUICK_INDEX_MERGE_SELECT*)(join_tab->quick);
- List_iterator_fast<QUICK_RANGE_SELECT> it(qsel_imerge->quick_selects);
- QUICK_RANGE_SELECT *quick;
- while ((quick= it++))
- {
- if (check_if_key_used(table, quick->index, *fields))
- return 0;
- }
- return 1;
- }
- }
-
+ return !join_tab->quick->check_if_keys_used(fields);
/* If scanning in clustered key */
if ((table->file->table_flags() & HA_PRIMARY_KEY_IN_READ_INDEX) &&
table->primary_key < MAX_KEY)