Commit 40ec79a7 authored by unknown's avatar unknown

fixed processing aggregate functions with static tables (BUG#1318)


mysql-test/r/func_group.result:
  test of BUG#1318
mysql-test/r/subselect.result:
  correct results
mysql-test/t/func_group.test:
  test of BUG#1318
sql/sql_select.cc:
  hixed processing of static tables
parent 86f1f2a1
...@@ -618,3 +618,12 @@ select coercibility(max(a)) from t1; ...@@ -618,3 +618,12 @@ select coercibility(max(a)) from t1;
coercibility(max(a)) coercibility(max(a))
3 3
drop table t1; drop table t1;
create table t1 (a int);
insert into t1 values (1);
select max(a) as b from t1 having b=1;
b
1
select a from t1 having a=1;
a
1
drop table t1;
...@@ -1338,6 +1338,7 @@ insert into t1 values (1); ...@@ -1338,6 +1338,7 @@ insert into t1 values (1);
insert into t2 values (1); insert into t2 values (1);
select * from t1 where exists (select s1 from t2 having max(t2.s1)=t1.s1); select * from t1 where exists (select s1 from t2 having max(t2.s1)=t1.s1);
s1 s1
1
drop table t1,t2; drop table t1,t2;
create table t1 (s1 int); create table t1 (s1 int);
create table t2 (s1 int); create table t2 (s1 int);
......
...@@ -360,3 +360,12 @@ create table t1 (a char(10)); ...@@ -360,3 +360,12 @@ create table t1 (a char(10));
insert into t1 values ('a'),('b'),('c'); insert into t1 values ('a'),('b'),('c');
select coercibility(max(a)) from t1; select coercibility(max(a)) from t1;
drop table t1; drop table t1;
#
# aggregate functions on static tables
#
create table t1 (a int);
insert into t1 values (1);
select max(a) as b from t1 having b=1;
select a from t1 having a=1;
drop table t1;
...@@ -5295,9 +5295,11 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure) ...@@ -5295,9 +5295,11 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure)
join->send_records=0; join->send_records=0;
if (join->tables == join->const_tables) if (join->tables == join->const_tables)
{ {
if (!join->select_lex->dependent || /*
((!join->conds || join->conds->val_int()) && HAVING will be chcked after processing aggregate functions,
(!join->having || join->having->val_int()))) But WHERE should checkd here (we alredy have read tables)
*/
if(!join->conds || join->conds->val_int())
{ {
if (!(error=(*end_select)(join,join_tab,0)) || error == -3) if (!(error=(*end_select)(join,join_tab,0)) || error == -3)
error=(*end_select)(join,join_tab,1); error=(*end_select)(join,join_tab,1);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment