summaryrefslogtreecommitdiff
path: root/sql/sql_derived.cc
diff options
context:
space:
mode:
authorunknown <bell@sanja.is.com.ua>2003-01-25 13:19:46 +0200
committerunknown <bell@sanja.is.com.ua>2003-01-25 13:19:46 +0200
commitfbd882fca6902e5038bef1d25c1afbfad892d09a (patch)
tree088681536e968628003ae711fd14a8df01b404ac /sql/sql_derived.cc
parent433307fafb1bc315a4e92c995f50d052c8d5eb36 (diff)
parentb23541339c389e452b3d643c249afd4e7fb4899f (diff)
downloadmariadb-git-fbd882fca6902e5038bef1d25c1afbfad892d09a.tar.gz
merging
sql/item.cc: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_cmpfunc.h: Auto merged sql/item_sum.cc: Auto merged sql/mysql_priv.h: Auto merged sql/sql_class.h: Auto merged sql/sql_delete.cc: Auto merged sql/sql_insert.cc: Auto merged sql/sql_lex.h: Auto merged sql/sql_list.h: Auto merged sql/sql_load.cc: Auto merged sql/sql_olap.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_select.h: Auto merged sql/sql_table.cc: Auto merged sql/sql_union.cc: Auto merged sql/sql_update.cc: Auto merged sql/sql_yacc.yy: Auto merged
Diffstat (limited to 'sql/sql_derived.cc')
-rw-r--r--sql/sql_derived.cc43
1 files changed, 16 insertions, 27 deletions
diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc
index f4c3979a34a..9296625dfdb 100644
--- a/sql/sql_derived.cc
+++ b/sql/sql_derived.cc
@@ -99,21 +99,8 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, TABLE_LIST *t)
if (!(res=open_and_lock_tables(thd,tables)))
{
- if (is_union)
- {
- /*
- The following code is a re-do of fix_tables_pointers() found
- in sql_select.cc for UNION's within derived tables. The only
- difference is in navigation, as in derived tables we care for
- this level only.
-
- */
- for (SELECT_LEX *sel= sl; sel; sel= sel->next_select())
- relink_tables(sel);
- }
-
- lex->current_select= sl;
- if (setup_fields(thd,tables,item_list,0,0,1))
+ if (setup_wild(thd, tables, item_list, 0, sl->with_wild) ||
+ setup_fields(thd, 0, tables, item_list, 0, 0, 1))
{
res= -1;
goto exit;
@@ -144,12 +131,14 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, TABLE_LIST *t)
if (is_union)
res= mysql_union(thd,lex,derived_result,unit);
else
- res= mysql_select(thd, tables, sl->item_list,
- sl->where, (ORDER *) sl->order_list.first,
- (ORDER*) sl->group_list.first,
- sl->having, (ORDER*) NULL,
- sl->options | thd->options | SELECT_NO_UNLOCK,
- derived_result, unit, sl, 0);
+ res= mysql_select(thd, &sl->ref_pointer_array, tables, sl->with_wild,
+ sl->item_list, sl->where,
+ sl->order_list.elements+sl->group_list.elements,
+ (ORDER *) sl->order_list.first,
+ (ORDER *) sl->group_list.first,
+ sl->having, (ORDER*) NULL,
+ sl->options | thd->options | SELECT_NO_UNLOCK,
+ derived_result, unit, sl, 0);
if (!res)
{
@@ -181,12 +170,12 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, TABLE_LIST *t)
delete derived_result;
}
if (res)
- free_tmp_table(thd, table);
- else
- {
- table->next= thd->derived_tables;
- thd->derived_tables= table;
- }
+mp_table(thd, table);
+
+
+>next= thd->derived_tables
+erived_tables= table;
+
exit:
lex->current_select= save_current_select;
close_thread_tables(thd, 0, 1);