From 1f4d1fbe2c0344c35b109cee45ac22ea69e43fb9 Mon Sep 17 00:00:00 2001 From: Sachin Setiya Date: Thu, 28 Dec 2017 18:09:28 +0530 Subject: MDEV-14785 SYSTEM_INVISIBLE behavior not Consistent //TODO patch commit message --- mysql-test/r/invisible_field_debug.result | 8 ++++++++ mysql-test/t/invisible_field_debug.test | 9 +++++++++ sql/sql_base.cc | 4 +++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/invisible_field_debug.result b/mysql-test/r/invisible_field_debug.result index dab95f14d4c..7dfd5dfe329 100644 --- a/mysql-test/r/invisible_field_debug.result +++ b/mysql-test/r/invisible_field_debug.result @@ -11,6 +11,14 @@ t1 CREATE TABLE `t1` ( `a` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 insert into t1 values(1); +insert into t1(a, invisible) values(99,99); +ERROR 42S22: Unknown column 'invisible' in 'field list' +alter table t1 add constraint a check (invisble > 2); +ERROR 42S22: Unknown column 'invisble' in 'CHECK' +set debug_dbug= "+d,test_pseudo_invisible"; +create table t2(a int, b int as (invisible +2) virtual); +ERROR 42S22: Unknown column 'invisible' in 'GENERATED ALWAYS AS' +set debug_dbug=@old_debug; select * from t1; a 1 diff --git a/mysql-test/t/invisible_field_debug.test b/mysql-test/t/invisible_field_debug.test index 89a856fe970..3c2febf1606 100644 --- a/mysql-test/t/invisible_field_debug.test +++ b/mysql-test/t/invisible_field_debug.test @@ -8,6 +8,15 @@ set debug_dbug=@old_debug; desc t1; show create table t1; insert into t1 values(1); +##field should not be resolved in Item_field::set_field +--error ER_BAD_FIELD_ERROR +insert into t1(a, invisible) values(99,99); +--error ER_BAD_FIELD_ERROR +alter table t1 add constraint a check (invisble > 2); +set debug_dbug= "+d,test_pseudo_invisible"; +--error ER_BAD_FIELD_ERROR +create table t2(a int, b int as (invisible +2) virtual); +set debug_dbug=@old_debug; select * from t1; select invisible ,a from t1; drop table t1; diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 31cb973551f..c764e99cc5d 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -5627,7 +5627,9 @@ find_field_in_table(THD *thd, TABLE *table, const char *name, uint length, if ((*field_ptr)->field_visibility == COMPLETELY_INVISIBLE && DBUG_EVALUATE_IF("test_completely_invisible", 0, 1)) DBUG_RETURN((Field*)0); - + if ((*field_ptr)->field_visibility == SYSTEM_INVISIBLE && + thd->lex->sql_command != SQLCOM_SELECT) + DBUG_RETURN((Field*)0); *cached_field_index_ptr= field_ptr - table->field; field= *field_ptr; } -- cgit v1.2.1