small bug fix

parent d96c670c
...@@ -111,6 +111,7 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, TABLE_LIST *t) ...@@ -111,6 +111,7 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, TABLE_LIST *t)
t->real_name=table->real_name; t->real_name=table->real_name;
t->table=table; t->table=table;
table->derived_select_number= sl->select_number; table->derived_select_number= sl->select_number;
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= (tables && tables->db && tables->db[0]) ? t->db : thd->db;
......
...@@ -1332,13 +1332,18 @@ mysql_execute_command(THD *thd) ...@@ -1332,13 +1332,18 @@ mysql_execute_command(THD *thd)
TODO: make derived tables processing 'inside' SELECT processing. TODO: make derived tables processing 'inside' SELECT processing.
TODO: solve problem with depended derived tables in subselects TODO: solve problem with depended derived tables in subselects
*/ */
if (lex->derived_tables) if ((lex->select_lex.next_select_in_list() &&
lex->unit.create_total_list(thd, lex, &tables)) ||
(table_rules_on && tables && thd->slave_thread &&
!tables_ok(thd,tables)))
DBUG_VOID_RETURN;
if (lex->derived_tables)
{ {
for (TABLE_LIST *cursor= tables; for (TABLE_LIST *cursor= tables;
cursor; cursor;
cursor= cursor->next) cursor= cursor->next)
if (cursor->derived && (res=mysql_derived(thd, lex, if (cursor->derived && (res=mysql_derived(thd, lex,
(SELECT_LEX_UNIT *)cursor->derived, (SELECT_LEX_UNIT *)cursor->derived,
cursor))) cursor)))
{ {
if (res < 0) if (res < 0)
...@@ -1346,11 +1351,6 @@ if (lex->derived_tables) ...@@ -1346,11 +1351,6 @@ if (lex->derived_tables)
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
} }
if ((lex->select_lex.next_select_in_list() &&
lex->unit.create_total_list(thd, lex, &tables)) ||
(table_rules_on && tables && thd->slave_thread &&
!tables_ok(thd,tables)))
DBUG_VOID_RETURN;
thread_safe_increment(com_stat[lex->sql_command],&LOCK_status); thread_safe_increment(com_stat[lex->sql_command],&LOCK_status);
switch (lex->sql_command) { switch (lex->sql_command) {
...@@ -2717,6 +2717,8 @@ check_table_access(THD *thd, ulong want_access,TABLE_LIST *tables, ...@@ -2717,6 +2717,8 @@ 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)
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)
tables->grant.privilege= want_access; tables->grant.privilege= want_access;
......
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