From 66047f1c163cc8e9caa08db5c79c3c8e24bf1274 Mon Sep 17 00:00:00 2001
From: "tnurnberg@mysql.com/white.intern.koehntopp.de" <>
Date: Fri, 26 Oct 2007 09:01:29 +0200
Subject: [PATCH] Bug#31662: 'null' is shown as type of fields for view with
 bad definer, breaks mysqldump

SHOW FIELDS FROM a view with no valid definer was possible (since fix
for Bug#26817), but gave NULL as a field-type. This led to mysqldump-ing
of such views being successful, but loading such a dump with the client
failing. Patch allows SHOW FIELDS to give data-type of field in underlying
table.
---
 mysql-test/r/information_schema_db.result | 6 +++---
 sql/sql_base.cc                           | 4 +++-
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/mysql-test/r/information_schema_db.result b/mysql-test/r/information_schema_db.result
index dd1f0295277..ef63ef719a4 100644
--- a/mysql-test/r/information_schema_db.result
+++ b/mysql-test/r/information_schema_db.result
@@ -130,7 +130,7 @@ Warnings:
 Warning	1356	View 'testdb_1.v7' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 show fields from testdb_1.v7;
 Field	Type	Null	Key	Default	Extra
-f1	null	YES		NULL	
+f1	char(4)	YES		NULL	
 Warnings:
 Note	1449	There is no 'no_such_user'@'no_such_host' registered
 create table t3 (f1 char(4), f2 char(4));
@@ -150,7 +150,7 @@ View	Create View
 v6	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `testdb_1`.`v6` AS select `testdb_1`.`t1`.`f1` AS `f1` from `testdb_1`.`t1`
 show fields from testdb_1.v7;
 Field	Type	Null	Key	Default	Extra
-f1	null	YES		NULL	
+f1	char(4)	YES		NULL	
 Warnings:
 Note	1449	There is no 'no_such_user'@'no_such_host' registered
 show create view testdb_1.v7;
@@ -178,7 +178,7 @@ show create view v4;
 ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
 show fields from v4;
 Field	Type	Null	Key	Default	Extra
-f1	null	YES		NULL	
+f1	char(4)	YES		NULL	
 f2	char(4)	YES		NULL	
 show fields from v2;
 Field	Type	Null	Key	Default	Extra
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 2f8bb35683b..7679c9436e9 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -3958,7 +3958,9 @@ find_field_in_tables(THD *thd, Item_ident *item,
   {
     Field *cur_field= find_field_in_table_ref(thd, cur_table, name, length,
                                               item->name, db, table_name, ref,
-                                              check_privileges,
+                                              (thd->lex->sql_command ==
+                                               SQLCOM_SHOW_FIELDS)
+                                              ? false : check_privileges,
                                               allow_rowid,
                                               &(item->cached_field_index),
                                               register_tree_change,