Commit 7e778e11 authored by bell@sanja.is.com.ua's avatar bell@sanja.is.com.ua

fixed aggregate function processing in VIEWs (BUG#4665)

parent be31afd1
...@@ -1074,3 +1074,12 @@ s1 s2 ...@@ -1074,3 +1074,12 @@ s1 s2
2 3 2 3
drop view v1; drop view v1;
drop tables t1, t2; drop tables t1, t2;
create table t1 (col1 int);
insert into t1 values (1);
create view v1 as select count(*) from t1;
insert into t1 values (null);
select * from v1;
count(*)
2
drop view v1;
drop table t1;
...@@ -1016,3 +1016,14 @@ create view v1 as select * from t1,t2 union all select * from t1,t2; ...@@ -1016,3 +1016,14 @@ create view v1 as select * from t1,t2 union all select * from t1,t2;
select * from v1; select * from v1;
drop view v1; drop view v1;
drop tables t1, t2; drop tables t1, t2;
#
# Aggregate functions in view list
#
create table t1 (col1 int);
insert into t1 values (1);
create view v1 as select count(*) from t1;
insert into t1 values (null);
select * from v1;
drop view v1;
drop table t1;
...@@ -1506,6 +1506,7 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds) ...@@ -1506,6 +1506,7 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds)
uint i= 0; uint i= 0;
bool save_set_query_id= thd->set_query_id; bool save_set_query_id= thd->set_query_id;
bool save_wrapper= thd->lex->select_lex.no_wrap_view_item; bool save_wrapper= thd->lex->select_lex.no_wrap_view_item;
bool save_allow_sum_func= thd->allow_sum_func;
DBUG_ENTER("st_table_list::setup_ancestor"); DBUG_ENTER("st_table_list::setup_ancestor");
if (ancestor->ancestor && if (ancestor->ancestor &&
...@@ -1525,6 +1526,8 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds) ...@@ -1525,6 +1526,8 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds)
uint want_privilege= ancestor->table->grant.want_privilege; uint want_privilege= ancestor->table->grant.want_privilege;
/* real rights will be checked in VIEW field */ /* real rights will be checked in VIEW field */
ancestor->table->grant.want_privilege= 0; ancestor->table->grant.want_privilege= 0;
/* aggregate function are allowed */
thd->allow_sum_func= 1;
if (!(*i)->fixed && (*i)->fix_fields(thd, ancestor, i)) if (!(*i)->fixed && (*i)->fix_fields(thd, ancestor, i))
goto err; goto err;
ancestor->table->grant.want_privilege= want_privilege; ancestor->table->grant.want_privilege= want_privilege;
...@@ -1558,6 +1561,8 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds) ...@@ -1558,6 +1561,8 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds)
uint want_privilege= ancestor->table->grant.want_privilege; uint want_privilege= ancestor->table->grant.want_privilege;
/* real rights will be checked in VIEW field */ /* real rights will be checked in VIEW field */
ancestor->table->grant.want_privilege= 0; ancestor->table->grant.want_privilege= 0;
/* aggregate function are allowed */
thd->allow_sum_func= 1;
if (!item->fixed && item->fix_fields(thd, ancestor, &item)) if (!item->fixed && item->fix_fields(thd, ancestor, &item))
{ {
goto err; goto err;
...@@ -1602,6 +1607,7 @@ ok: ...@@ -1602,6 +1607,7 @@ ok:
thd->lex->select_lex.no_wrap_view_item= save_wrapper; thd->lex->select_lex.no_wrap_view_item= save_wrapper;
thd->lex->current_select= current_select_save; thd->lex->current_select= current_select_save;
thd->set_query_id= save_set_query_id; thd->set_query_id= save_set_query_id;
thd->allow_sum_func= save_allow_sum_func;
DBUG_RETURN(0); DBUG_RETURN(0);
err: err:
...@@ -1614,6 +1620,7 @@ err: ...@@ -1614,6 +1620,7 @@ err:
thd->lex->select_lex.no_wrap_view_item= save_wrapper; thd->lex->select_lex.no_wrap_view_item= save_wrapper;
thd->lex->current_select= current_select_save; thd->lex->current_select= current_select_save;
thd->set_query_id= save_set_query_id; thd->set_query_id= save_set_query_id;
thd->allow_sum_func= save_allow_sum_func;
DBUG_RETURN(1); DBUG_RETURN(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