summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSachin Setiya <sachin.setiya@maridb.com>2017-12-28 18:09:28 +0530
committerSachin Setiya <sachin.setiya@maridb.com>2017-12-28 18:09:28 +0530
commit1f4d1fbe2c0344c35b109cee45ac22ea69e43fb9 (patch)
treebf1998c668ce169592e52f3f3455f61688e6555b
parent7a66e0ab8f52f3bd32850463daa05f9a2401e6b1 (diff)
downloadmariadb-git-bb-10.3-hidden.tar.gz
MDEV-14785 SYSTEM_INVISIBLE behavior not Consistentbb-10.3-hidden
//TODO patch commit message
-rw-r--r--mysql-test/r/invisible_field_debug.result8
-rw-r--r--mysql-test/t/invisible_field_debug.test9
-rw-r--r--sql/sql_base.cc4
3 files changed, 20 insertions, 1 deletions
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;
}