From 09657805d04dfe6dfe33fb4b3003e06b29c835bd Mon Sep 17 00:00:00 2001 From: Aleksey Midenkov Date: Sat, 14 Feb 2026 22:05:46 +0300 Subject: [PATCH] MDEV-38815 Server crashes in Item_func_nextval::val_int upon update on a view MDEV-28650 (7a88776dc1e) fixed the case when the DEFAULT flag is inside the table definition but it can be also in DML command. When we assign it from the table definition in mysql_make_view() we lose it in the current command. The fix does disjunction assignment to keep both values. It is signalling DML_prelocking_strategy::handle_table() to call add_internal_tables(), so it will correctly open associated sequence table. --- mysql-test/suite/sql_sequence/next.result | 11 +++++++++++ mysql-test/suite/sql_sequence/next.test | 13 +++++++++++++ sql/sql_view.cc | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/sql_sequence/next.result b/mysql-test/suite/sql_sequence/next.result index bf1f24db375..2b463270d01 100644 --- a/mysql-test/suite/sql_sequence/next.result +++ b/mysql-test/suite/sql_sequence/next.result @@ -611,4 +611,15 @@ create sequence s; select next value for s1 from s as s1; ERROR 42S02: Table 'test.s1' doesn't exist drop sequence s; +# +# MDEV-38815 Server crashes in Item_func_nextval::val_int upon update on a view +# +create sequence s; +create table t (a int default(nextval(s))); +create view v as select * from t; +insert into t values (1); +update v set a= default; +drop view v; +drop table t; +drop sequence s; # End of 10.11 tests diff --git a/mysql-test/suite/sql_sequence/next.test b/mysql-test/suite/sql_sequence/next.test index 88b21cc2d76..3595fca6218 100644 --- a/mysql-test/suite/sql_sequence/next.test +++ b/mysql-test/suite/sql_sequence/next.test @@ -340,4 +340,17 @@ create sequence s; select next value for s1 from s as s1; drop sequence s; +--echo # +--echo # MDEV-38815 Server crashes in Item_func_nextval::val_int upon update on a view +--echo # +create sequence s; +create table t (a int default(nextval(s))); +create view v as select * from t; +insert into t values (1); +update v set a= default; + +drop view v; +drop table t; +drop sequence s; + --echo # End of 10.11 tests diff --git a/sql/sql_view.cc b/sql/sql_view.cc index b88d47a4e73..0f223f9d05e 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -1720,7 +1720,7 @@ bool mysql_make_view(THD *thd, TABLE_SHARE *share, TABLE_LIST *table, if (lex->first_select_lex()->options & OPTION_TO_QUERY_CACHE) old_lex->first_select_lex()->options|= OPTION_TO_QUERY_CACHE; - old_lex->default_used= lex->default_used; + old_lex->default_used|= lex->default_used; #ifndef NO_EMBEDDED_ACCESS_CHECKS if (table->view_suid)