diff options
author | unknown <Sinisa@sinisa.nasamreza.org> | 2002-11-11 14:05:57 +0200 |
---|---|---|
committer | unknown <Sinisa@sinisa.nasamreza.org> | 2002-11-11 14:05:57 +0200 |
commit | 9134db473dabee4483d141ecbcbb8269bbc55cd1 (patch) | |
tree | f9ad8651c37a57eea7be5bc32b3c88de72078a79 | |
parent | 4fb279493a56ce129ef0a085798b0bd56ed598a4 (diff) | |
parent | 20ea534d0c63f2e7fb230ed05d5469284335330e (diff) | |
download | mariadb-git-9134db473dabee4483d141ecbcbb8269bbc55cd1.tar.gz |
Merge sinisa@work.mysql.com:/home/bk/mysql-4.1
into sinisa.nasamreza.org:/mnt/work/mysql-4.1
sql/sql_derived.cc:
Auto merged
-rw-r--r-- | sql/sql_derived.cc | 1 | ||||
-rw-r--r-- | sql/sql_parse.cc | 16 |
2 files changed, 10 insertions, 7 deletions
diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index 5dbbf39e7d4..b4de767189e 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -115,6 +115,7 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, TABLE_LIST *t) t->real_name=table->real_name; t->table=table; table->derived_select_number= sl->select_number; + table->tmp_table=TMP_TABLE; if (!lex->describe) sl->exclude(); t->db= (tables && tables->db && tables->db[0]) ? t->db : thd->db; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 4288773b00b..e30773984fb 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1332,13 +1332,18 @@ mysql_execute_command(THD *thd) TODO: make derived tables processing 'inside' SELECT processing. 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; cursor; cursor= cursor->next) if (cursor->derived && (res=mysql_derived(thd, lex, - (SELECT_LEX_UNIT *)cursor->derived, + (SELECT_LEX_UNIT *)cursor->derived, cursor))) { if (res < 0) @@ -1346,11 +1351,6 @@ if (lex->derived_tables) 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); switch (lex->sql_command) { @@ -2717,6 +2717,8 @@ check_table_access(THD *thd, ulong want_access,TABLE_LIST *tables, TABLE_LIST *org_tables=tables; for (; tables ; tables=tables->next) { + if (tables->derived) + continue; if ((thd->master_access & want_access) == (want_access & ~EXTRA_ACL) && thd->db) tables->grant.privilege= want_access; |