mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
fixed aggregate function processing in VIEWs (BUG#4665)
This commit is contained in:
@@ -1074,3 +1074,12 @@ s1 s2
|
||||
2 3
|
||||
drop view v1;
|
||||
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;
|
||||
select * from v1;
|
||||
drop view v1;
|
||||
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)
|
||||
uint i= 0;
|
||||
bool save_set_query_id= thd->set_query_id;
|
||||
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");
|
||||
|
||||
if (ancestor->ancestor &&
|
||||
@@ -1525,6 +1526,8 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds)
|
||||
uint want_privilege= ancestor->table->grant.want_privilege;
|
||||
/* real rights will be checked in VIEW field */
|
||||
ancestor->table->grant.want_privilege= 0;
|
||||
/* aggregate function are allowed */
|
||||
thd->allow_sum_func= 1;
|
||||
if (!(*i)->fixed && (*i)->fix_fields(thd, ancestor, i))
|
||||
goto err;
|
||||
ancestor->table->grant.want_privilege= want_privilege;
|
||||
@@ -1558,6 +1561,8 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds)
|
||||
uint want_privilege= ancestor->table->grant.want_privilege;
|
||||
/* real rights will be checked in VIEW field */
|
||||
ancestor->table->grant.want_privilege= 0;
|
||||
/* aggregate function are allowed */
|
||||
thd->allow_sum_func= 1;
|
||||
if (!item->fixed && item->fix_fields(thd, ancestor, &item))
|
||||
{
|
||||
goto err;
|
||||
@@ -1602,6 +1607,7 @@ ok:
|
||||
thd->lex->select_lex.no_wrap_view_item= save_wrapper;
|
||||
thd->lex->current_select= current_select_save;
|
||||
thd->set_query_id= save_set_query_id;
|
||||
thd->allow_sum_func= save_allow_sum_func;
|
||||
DBUG_RETURN(0);
|
||||
|
||||
err:
|
||||
@@ -1614,6 +1620,7 @@ err:
|
||||
thd->lex->select_lex.no_wrap_view_item= save_wrapper;
|
||||
thd->lex->current_select= current_select_save;
|
||||
thd->set_query_id= save_set_query_id;
|
||||
thd->allow_sum_func= save_allow_sum_func;
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user