summaryrefslogtreecommitdiff
path: root/sql/sql_delete.cc
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2021-09-24 08:42:23 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2021-09-24 08:42:23 +0300
commit7e2b42324caf6faaaa5a3a033c2b24e1fee93669 (patch)
tree282e59399ddb9e3f72f2607deb163e580f06a88f /sql/sql_delete.cc
parentf5794e1dc6e3d27405daeae850b8e69fd631b62d (diff)
parent913efaa328026455cef0e608c25eaed042344b15 (diff)
downloadmariadb-git-7e2b42324caf6faaaa5a3a033c2b24e1fee93669.tar.gz
Merge 10.4 into 10.5
Diffstat (limited to 'sql/sql_delete.cc')
-rw-r--r--sql/sql_delete.cc10
1 files changed, 7 insertions, 3 deletions
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc
index 1966a77aa3e..7e053e60fdf 100644
--- a/sql/sql_delete.cc
+++ b/sql/sql_delete.cc
@@ -620,14 +620,18 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
if (!table->check_virtual_columns_marked_for_read())
{
DBUG_PRINT("info", ("Trying direct delete"));
- if (select && select->cond &&
- (select->cond->used_tables() == table->map))
+ bool use_direct_delete= !select || !select->cond;
+ if (!use_direct_delete &&
+ (select->cond->used_tables() & ~RAND_TABLE_BIT) == table->map)
{
DBUG_ASSERT(!table->file->pushed_cond);
if (!table->file->cond_push(select->cond))
+ {
+ use_direct_delete= TRUE;
table->file->pushed_cond= select->cond;
+ }
}
- if (!table->file->direct_delete_rows_init())
+ if (use_direct_delete && !table->file->direct_delete_rows_init())
{
/* Direct deleting is supported */
DBUG_PRINT("info", ("Using direct delete"));