some code cleanup as per CTO's instructions plus a small bug fix with

a corresponding test case....
parent 8fa71530
...@@ -37,3 +37,6 @@ select * from (select 1); ...@@ -37,3 +37,6 @@ select * from (select 1);
select a from (select 1 as a); select a from (select 1 as a);
a a
1 1
select 1 from (select 1);
1
1
...@@ -21,3 +21,4 @@ SELECT (SELECT 1) as a FROM (SELECT 1 FROM t1 HAVING a=1); ...@@ -21,3 +21,4 @@ SELECT (SELECT 1) as a FROM (SELECT 1 FROM t1 HAVING a=1);
drop table if exists t1.t2,t3; drop table if exists t1.t2,t3;
select * from (select 1); select * from (select 1);
select a from (select 1 as a); select a from (select 1 as a);
select 1 from (select 1);
...@@ -118,7 +118,7 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, TABLE_LIST *t) ...@@ -118,7 +118,7 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, TABLE_LIST *t)
table->tmp_table=TMP_TABLE; table->tmp_table=TMP_TABLE;
if (!lex->describe) if (!lex->describe)
sl->exclude(); sl->exclude();
t->db= (tables && tables->db && tables->db[0]) ? t->db : thd->db; t->db="";
t->derived=(SELECT_LEX *)0; // just in case ... t->derived=(SELECT_LEX *)0; // just in case ...
} }
} }
......
...@@ -2717,7 +2717,7 @@ check_table_access(THD *thd, ulong want_access,TABLE_LIST *tables, ...@@ -2717,7 +2717,7 @@ check_table_access(THD *thd, ulong want_access,TABLE_LIST *tables,
TABLE_LIST *org_tables=tables; TABLE_LIST *org_tables=tables;
for (; tables ; tables=tables->next) for (; tables ; tables=tables->next)
{ {
if (tables->derived) if (tables->derived || (tables->table && (int)tables->table->tmp_table))
continue; continue;
if ((thd->master_access & want_access) == (want_access & ~EXTRA_ACL) && if ((thd->master_access & want_access) == (want_access & ~EXTRA_ACL) &&
thd->db) thd->db)
...@@ -2735,7 +2735,7 @@ check_table_access(THD *thd, ulong want_access,TABLE_LIST *tables, ...@@ -2735,7 +2735,7 @@ check_table_access(THD *thd, ulong want_access,TABLE_LIST *tables,
found=1; found=1;
} }
} }
else if (tables->db && check_access(thd,want_access,tables->db,&tables->grant.privilege, else if (check_access(thd,want_access,tables->db,&tables->grant.privilege,
0, no_errors)) 0, no_errors))
return TRUE; return TRUE;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment