summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <Sinisa@sinisa.nasamreza.org>2002-11-11 14:05:57 +0200
committerunknown <Sinisa@sinisa.nasamreza.org>2002-11-11 14:05:57 +0200
commit9134db473dabee4483d141ecbcbb8269bbc55cd1 (patch)
treef9ad8651c37a57eea7be5bc32b3c88de72078a79
parent4fb279493a56ce129ef0a085798b0bd56ed598a4 (diff)
parent20ea534d0c63f2e7fb230ed05d5469284335330e (diff)
downloadmariadb-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.cc1
-rw-r--r--sql/sql_parse.cc16
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;