diff --git a/mysql-test/suite/versioning/r/truncate.result b/mysql-test/suite/versioning/r/truncate.result index 33f21d6245b..181b120eafb 100644 --- a/mysql-test/suite/versioning/r/truncate.result +++ b/mysql-test/suite/versioning/r/truncate.result @@ -65,14 +65,24 @@ create or replace table t (i int) with system versioning; delete history from t; create or replace view v as select * from t; delete history from v; -ERROR HY000: DELETE HISTORY from VIEW is prohibited +ERROR 42S02: 'v' is a view create or replace table t (i int); delete history from t; ERROR HY000: Table `t` is not system-versioned create or replace view v as select * from t; delete history from v; -ERROR HY000: DELETE HISTORY from VIEW is prohibited +ERROR 42S02: 'v' is a view prepare stmt from 'delete history from t'; ERROR HY000: Table `t` is not system-versioned drop table t; drop view v; +create or replace table t (i int); +create or replace view v as select * from t; +drop table v; +ERROR 42S02: 'test.v' is a view +lock table v write; +delete history from v before system_time now(6); +ERROR 42S02: 'v' is a view +unlock tables; +drop view v; +drop table t; diff --git a/mysql-test/suite/versioning/t/truncate.test b/mysql-test/suite/versioning/t/truncate.test index c0b7f62348d..f52d52d81ea 100644 --- a/mysql-test/suite/versioning/t/truncate.test +++ b/mysql-test/suite/versioning/t/truncate.test @@ -60,17 +60,31 @@ select * from t for system_time all; create or replace table t (i int) with system versioning; delete history from t; create or replace view v as select * from t; ---error ER_VERS_TRUNCATE_VIEW +--error ER_IT_IS_A_VIEW delete history from v; create or replace table t (i int); --error ER_VERS_NOT_VERSIONED delete history from t; create or replace view v as select * from t; ---error ER_VERS_TRUNCATE_VIEW +--error ER_IT_IS_A_VIEW delete history from v; --error ER_VERS_NOT_VERSIONED prepare stmt from 'delete history from t'; drop table t; drop view v; + +# +# MDEV-15402 Assertion `table' failed in mysql_delete on attempt to delete history from view +# +create or replace table t (i int); +create or replace view v as select * from t; +--error ER_IT_IS_A_VIEW +drop table v; +lock table v write; +--error ER_IT_IS_A_VIEW +delete history from v before system_time now(6); +unlock tables; +drop view v; +drop table t; diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index d705ebd3773..3e9e94bbbfd 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -7897,14 +7897,14 @@ ER_VERS_DUPLICATE_ROW_START_END ER_VERS_ALREADY_VERSIONED eng "Table %`s is already system-versioned" -ER_VERS_TRUNCATE_VIEW - eng "DELETE HISTORY from VIEW is prohibited" +ER_UNUSED_24 + eng "You should never see it" ER_VERS_TEMPORARY eng "System versioning prohibited for TEMPORARY tables" -ER_VERS_INPLACE_NOT_IMPLEMENTED - eng "Not implemented for system-versioned tables" +ER_VERS_NOT_SUPPORTED + eng "%s is not supported for %s system-versioned tables" ER_INDEX_FILE_FULL eng "The index file for table '%-.192s' is full" ER_UPDATED_COLUMN_ONLY_ONCE diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 59af16ff525..55cc26d9041 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -310,7 +310,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, { if (table_list->is_view_or_derived()) { - my_error(ER_VERS_TRUNCATE_VIEW, MYF(0)); + my_error(ER_IT_IS_A_VIEW, MYF(0), table_list->table_name.str); DBUG_RETURN(true); } @@ -938,7 +938,7 @@ l { if (table_list->is_view()) { - my_error(ER_VERS_TRUNCATE_VIEW, MYF(0)); + my_error(ER_IT_IS_A_VIEW, MYF(0), table_list->table_name.str); DBUG_RETURN(true); } if (select_lex->vers_setup_conds(thd, table_list, conds)) diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index bbc3d8b95b9..e86c74728be 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -699,7 +699,7 @@ ha_innobase::check_if_supported_inplace_alter( if ((table->versioned(VERS_TIMESTAMP) || altered_table->versioned(VERS_TIMESTAMP)) && innobase_need_rebuild(ha_alter_info, table)) { ha_alter_info->unsupported_reason = - innobase_get_err_msg(ER_VERS_INPLACE_NOT_IMPLEMENTED); + "Not implemented for system-versioned tables"; DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED); } @@ -1239,7 +1239,7 @@ cannot_create_many_fulltext_index: if ((table->versioned(VERS_TRX_ID) || altered_table->versioned(VERS_TRX_ID)) && innobase_need_rebuild(ha_alter_info, table)) { ha_alter_info->unsupported_reason = - innobase_get_err_msg(ER_VERS_INPLACE_NOT_IMPLEMENTED); + "Not implemented for system-versioned tables"; online = false; }