summaryrefslogtreecommitdiff
path: root/sql/sql_derived.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_derived.cc')
-rw-r--r--sql/sql_derived.cc13
1 files changed, 6 insertions, 7 deletions
diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc
index 20a1f7f0124..8e6f5b27ab0 100644
--- a/sql/sql_derived.cc
+++ b/sql/sql_derived.cc
@@ -67,7 +67,6 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
int res;
select_union *derived_result;
TABLE_LIST *tables= (TABLE_LIST *)first_select->table_list.first;
- TMP_TABLE_PARAM tmp_table_param;
bool is_union= first_select->next_select() &&
first_select->next_select()->linkage == UNION_TYPE;
bool is_subsel= first_select->first_inner_unit() ? 1: 0;
@@ -111,7 +110,7 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
fix_tables_pointers(unit);
}
- if(!(derived_result= new select_union(0)))
+ if (!(derived_result= new select_union(0)))
DBUG_RETURN(1); // out of memory
// st_select_lex_unit::prepare correctly work for single select
@@ -128,13 +127,14 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
cursor->table->clear_query_id= 1;
}
- bzero((char*) &tmp_table_param,sizeof(tmp_table_param));
- tmp_table_param.field_count= unit->types.elements;
+ derived_result->tmp_table_param.init();
+ derived_result->tmp_table_param.field_count= unit->types.elements;
/*
Temp table is created so that it hounours if UNION without ALL is to be
processed
*/
- if (!(table= create_tmp_table(thd, &tmp_table_param, unit->types,
+ if (!(table= create_tmp_table(thd, &derived_result->tmp_table_param,
+ unit->types,
(ORDER*) 0,
is_union && !unit->union_option, 1,
(first_select->options | thd->options |
@@ -146,7 +146,6 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
goto exit;
}
derived_result->set_table(table);
- derived_result->tmp_table_param=tmp_table_param;
unit->offset_limit_cnt= first_select->offset_limit;
unit->select_limit_cnt= first_select->select_limit+
@@ -206,7 +205,6 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
table->file->info(HA_STATUS_VARIABLE);
}
}
- delete derived_result;
if (res)
free_tmp_table(thd, table);
@@ -218,6 +216,7 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
}
exit:
+ delete derived_result;
lex->current_select= save_current_select;
close_thread_tables(thd, 0, 1);
}