diff --git a/mysql-test/suite/versioning/r/delete_history.result b/mysql-test/suite/versioning/r/delete_history.result index 4fc4618d110..40d519b3e98 100644 --- a/mysql-test/suite/versioning/r/delete_history.result +++ b/mysql-test/suite/versioning/r/delete_history.result @@ -187,3 +187,15 @@ x 1 drop prepare stmt; drop table t1; +# +# MDEV-28201 Server crashes upon SHOW ANALYZE/EXPLAIN FORMAT=JSON +# +CREATE TABLE t1 (a INT) WITH SYSTEM VERSIONING; +CREATE ALGORITHM=TEMPTABLE VIEW v1 AS SELECT * FROM t1; +SET optimizer_trace= 'enabled=on'; +DELETE HISTORY FROM v1 BEFORE SYSTEM_TIME '2021-01-01'; +ERROR HY000: The target table v1 of the DELETE is not updatable +DELETE HISTORY FROM v1; +ERROR HY000: The target table v1 of the DELETE is not updatable +DROP VIEW v1; +DROP TABLE t1; diff --git a/mysql-test/suite/versioning/t/delete_history.test b/mysql-test/suite/versioning/t/delete_history.test index 94e58590dd9..5c4aa6154bd 100644 --- a/mysql-test/suite/versioning/t/delete_history.test +++ b/mysql-test/suite/versioning/t/delete_history.test @@ -192,4 +192,17 @@ select * from t1; drop prepare stmt; drop table t1; +--echo # +--echo # MDEV-28201 Server crashes upon SHOW ANALYZE/EXPLAIN FORMAT=JSON +--echo # +CREATE TABLE t1 (a INT) WITH SYSTEM VERSIONING; +CREATE ALGORITHM=TEMPTABLE VIEW v1 AS SELECT * FROM t1; +SET optimizer_trace= 'enabled=on'; +--error ER_NON_UPDATABLE_TABLE +DELETE HISTORY FROM v1 BEFORE SYSTEM_TIME '2021-01-01'; +--error ER_NON_UPDATABLE_TABLE +DELETE HISTORY FROM v1; +DROP VIEW v1; +DROP TABLE t1; + --source suite/versioning/common_finish.inc diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 8561f421ab3..234085fe3d9 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -790,8 +790,10 @@ void vers_select_conds_t::print(String *str, enum_query_type query_type) const end.print(str, query_type, STRING_WITH_LEN(" AND ")); break; case SYSTEM_TIME_BEFORE: + start.print(str, query_type, STRING_WITH_LEN(" FOR SYSTEM_TIME BEFORE ")); + break; case SYSTEM_TIME_HISTORY: - DBUG_ASSERT(0); + // nothing to add break; case SYSTEM_TIME_ALL: str->append(" FOR SYSTEM_TIME ALL");