diff options
author | Aleksey Midenkov <midenok@gmail.com> | 2019-11-25 16:01:43 +0300 |
---|---|---|
committer | Aleksey Midenkov <midenok@gmail.com> | 2019-11-25 16:01:43 +0300 |
commit | 33f55789d354b0fccf5234027dc0bd66cbd0c539 (patch) | |
tree | c223a494f81a6adb384a2e7e3e0323b8992fcef5 /sql/sql_derived.cc | |
parent | 4111a53079da9850c630ce30eec7f8a38744eacd (diff) | |
download | mariadb-git-33f55789d354b0fccf5234027dc0bd66cbd0c539.tar.gz |
MDEV-18727 improve DML operation of System Versioning (10.4)
UPDATE, DELETE: replace linear search of current/historical records
with vers_setup_conds().
Additional DML cases in view.test
Diffstat (limited to 'sql/sql_derived.cc')
-rw-r--r-- | sql/sql_derived.cc | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index 06e82263524..06a3e8a108f 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -723,7 +723,17 @@ bool mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *derived) !(derived->is_multitable() && (thd->lex->sql_command == SQLCOM_UPDATE_MULTI || thd->lex->sql_command == SQLCOM_DELETE_MULTI)))) + { + /* + System versioned tables may still require to get versioning conditions + (when updating view). See vers_setup_conds(). + */ + if (!unit->prepared && + derived->table->versioned() && + (res= unit->prepare(derived, derived->derived_result, 0))) + goto exit; DBUG_RETURN(FALSE); + } /* prevent name resolving out of derived table */ for (SELECT_LEX *sl= first_select; sl; sl= sl->next_select()) |