diff --git a/mysql-test/main/trigger.result b/mysql-test/main/trigger.result index cae8faf90b1..f7fbe73b495 100644 --- a/mysql-test/main/trigger.result +++ b/mysql-test/main/trigger.result @@ -2448,6 +2448,14 @@ SELECT * FROM t1; a b total 10 20 30 DROP TABLE t1; -# # End of 10.3 tests # +# MDEV-32022 ERROR 1054 (42S22): Unknown column 'X' in 'NEW' in trigger +# +create table t1 (m set('sms') not null); +create table t2 (i int); +create table t3 (j int); +create trigger t1 after insert on t1 for each row insert ignore into t2 select t3.j from t3 join (select 'sms' as method) m on find_in_set(m.method, new.m); +insert into t1 values ('sms'); +drop table t1, t2, t3; +# End of 10.5 tests diff --git a/mysql-test/main/trigger.test b/mysql-test/main/trigger.test index 5086215f751..54220ae2f27 100644 --- a/mysql-test/main/trigger.test +++ b/mysql-test/main/trigger.test @@ -2784,6 +2784,16 @@ INSERT INTO t1 (a,b) VALUES (10, 20); SELECT * FROM t1; DROP TABLE t1; ---echo # --echo # End of 10.3 tests + --echo # +--echo # MDEV-32022 ERROR 1054 (42S22): Unknown column 'X' in 'NEW' in trigger +--echo # +create table t1 (m set('sms') not null); +create table t2 (i int); +create table t3 (j int); +create trigger t1 after insert on t1 for each row insert ignore into t2 select t3.j from t3 join (select 'sms' as method) m on find_in_set(m.method, new.m); +insert into t1 values ('sms'); +drop table t1, t2, t3; + +--echo # End of 10.5 tests diff --git a/sql/item.cc b/sql/item.cc index 35d7eaefd01..078d223bb25 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -7871,6 +7871,7 @@ static Item *find_producing_item(Item *item, st_select_lex *sel) { DBUG_ASSERT(item->type() == Item::FIELD_ITEM || + item->type() == Item::TRIGGER_FIELD_ITEM || (item->type() == Item::REF_ITEM && ((Item_ref *) item)->ref_type() == Item_ref::VIEW_REF)); Item_field *field_item= NULL; diff --git a/sql/item.h b/sql/item.h index a1c53ab33f9..3e1e9b25c71 100644 --- a/sql/item.h +++ b/sql/item.h @@ -6947,6 +6947,9 @@ public: Item *copy_or_same(THD *) override { return this; } Item *get_tmp_table_item(THD *thd) override { return copy_or_same(thd); } void cleanup() override; + Item *do_get_copy(THD *thd) const override + { return get_item_copy(thd, this); } + Item *do_build_clone(THD *thd) const override { return get_copy(thd); } private: void set_required_privilege(bool rw) override;