diff options
author | Daniel Ye <35718816+GreaTdANie1@users.noreply.github.com> | 2021-09-22 17:55:05 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-22 18:55:05 +0900 |
commit | 9fc1ef932f0b7499724cfcf76bd0f298f135018f (patch) | |
tree | 75545537126fdf6a3639cc10fcbe8bff86487611 /sql/sql_update.cc | |
parent | 3d30458695ed9c8acf8d33b447e4b18844f2988b (diff) | |
download | mariadb-git-9fc1ef932f0b7499724cfcf76bd0f298f135018f.tar.gz |
MDEV-26545 Spider does not correctly handle UDF and stored function in where conds
- Handle stored function conditions correctly, with the same logic as with UDFs.
- When running queries on Spider SE, by default, we do not push down WHERE conditions containing usage of UDFs/stored functions to remote data nodes, unless the user demands (by setting spider_use_pushdown_udf).
- Disable direct update/delete when a udf condition is skipped.
Diffstat (limited to 'sql/sql_update.cc')
-rw-r--r-- | sql/sql_update.cc | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/sql/sql_update.cc b/sql/sql_update.cc index e808d7f5de0..6065d03402f 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -651,15 +651,20 @@ int mysql_update(THD *thd, !table->check_virtual_columns_marked_for_write()) { DBUG_PRINT("info", ("Trying direct update")); - if (select && select->cond && - (select->cond->used_tables() == table->map)) + bool use_direct_update= !select || !select->cond; + if (!use_direct_update && + (select->cond->used_tables() & ~RAND_TABLE_BIT) == table->map) { DBUG_ASSERT(!table->file->pushed_cond); if (!table->file->cond_push(select->cond)) + { + use_direct_update= TRUE; table->file->pushed_cond= select->cond; + } } - if (!table->file->info_push(INFO_KIND_UPDATE_FIELDS, &fields) && + if (use_direct_update && + !table->file->info_push(INFO_KIND_UPDATE_FIELDS, &fields) && !table->file->info_push(INFO_KIND_UPDATE_VALUES, &values) && !table->file->direct_update_rows_init(&fields)) { |