summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <bell@sanja.is.com.ua>2003-07-07 00:45:51 +0300
committerunknown <bell@sanja.is.com.ua>2003-07-07 00:45:51 +0300
commit51b26a4d3fb6a42645a0a19c2bab4c8180013f7f (patch)
tree02faa58687c36707f0d3b5c5a1c5f7a503ecb62e /sql
parent929a4783f162b4818312dead9c1497aa68408f43 (diff)
downloadmariadb-git-51b26a4d3fb6a42645a0a19c2bab4c8180013f7f.tar.gz
fixed subselect with to temporary tables executing
(now it return correct results. Test was commited before, but it is not pushed, BUG# is not registered, because bug was introduced after release) sql/sql_select.cc: fixed subselect with to temporary tables executing sql/sql_select.h: fixed subselect with to temporary tables executing
Diffstat (limited to 'sql')
-rw-r--r--sql/sql_select.cc14
-rw-r--r--sql/sql_select.h4
2 files changed, 17 insertions, 1 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 0eead502f31..0aa7e67a12b 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -1137,6 +1137,20 @@ JOIN::exec()
thd->proc_info="Copying to group table";
tmp_error= -1;
+ if (curr_join != this)
+ {
+ if (sum_funcs2)
+ {
+ curr_join->sum_funcs= sum_funcs2;
+ curr_join->sum_funcs_end= sum_funcs_end2;
+ }
+ else
+ {
+ curr_join->alloc_func_list();
+ sum_funcs2= curr_join->sum_funcs;
+ sum_funcs_end2= curr_join->sum_funcs_end;
+ }
+ }
if (curr_join->make_sum_func_list(*curr_all_fields, *curr_fields_list,
1) ||
(tmp_error= do_select(curr_join, (List<Item> *) 0, curr_tmp_table,
diff --git a/sql/sql_select.h b/sql/sql_select.h
index aa08c5c1725..7de9007369e 100644
--- a/sql/sql_select.h
+++ b/sql/sql_select.h
@@ -146,6 +146,8 @@ class JOIN :public Sql_alloc
TABLE *exec_tmp_table1, *exec_tmp_table2;
THD *thd;
Item_sum **sum_funcs, ***sum_funcs_end;
+ /* second copy of sumfuncs (for queries with 2 temporary tables */
+ Item_sum **sum_funcs2, ***sum_funcs_end2;
Procedure *procedure;
Item *having;
Item *tmp_having; // To store Having when processed temporary table
@@ -199,7 +201,7 @@ class JOIN :public Sql_alloc
send_records(0), found_records(0), examined_rows(0),
exec_tmp_table1(0), exec_tmp_table2(0),
thd(thd_arg),
- sum_funcs(0),
+ sum_funcs(0),sum_funcs2(0),
procedure(0),
having(0), tmp_having(0),
select_options(select_options_arg),