merged bug 39656 to 5.0-bugteam
This commit is contained in:
commit
8dabe40247
@ -1425,4 +1425,27 @@ SELECT AVG(a), CAST(AVG(a) AS DECIMAL) FROM t1;
|
|||||||
AVG(a) CAST(AVG(a) AS DECIMAL)
|
AVG(a) CAST(AVG(a) AS DECIMAL)
|
||||||
15 15
|
15 15
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a INT, b INT);
|
||||||
|
INSERT INTO t1 VALUES (1,1), (1,2), (1,3);
|
||||||
|
SET SQL_MODE='ONLY_FULL_GROUP_BY';
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
COUNT(*)
|
||||||
|
3
|
||||||
|
SELECT COUNT(*) FROM t1 where a=1;
|
||||||
|
COUNT(*)
|
||||||
|
3
|
||||||
|
SELECT COUNT(*),a FROM t1;
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SELECT COUNT(*) FROM t1 a JOIN t1 b ON a.a= b.a;
|
||||||
|
COUNT(*)
|
||||||
|
9
|
||||||
|
SELECT COUNT(*), (SELECT count(*) FROM t1 inr WHERE inr.a = outr.a)
|
||||||
|
FROM t1 outr;
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SELECT COUNT(*) FROM t1 a JOIN t1 outr
|
||||||
|
ON a.a= (SELECT count(*) FROM t1 inr WHERE inr.a = outr.a);
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
SET SQL_MODE=default;
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -926,5 +926,34 @@ SELECT AVG(a), CAST(AVG(a) AS DECIMAL) FROM t1;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #39656: Behaviour different for agg functions with & without where -
|
||||||
|
# ONLY_FULL_GROUP_BY
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a INT, b INT);
|
||||||
|
INSERT INTO t1 VALUES (1,1), (1,2), (1,3);
|
||||||
|
|
||||||
|
SET SQL_MODE='ONLY_FULL_GROUP_BY';
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT COUNT(*) FROM t1 where a=1;
|
||||||
|
|
||||||
|
--error ER_MIX_OF_GROUP_FUNC_AND_FIELDS
|
||||||
|
SELECT COUNT(*),a FROM t1;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1 a JOIN t1 b ON a.a= b.a;
|
||||||
|
|
||||||
|
--error ER_MIX_OF_GROUP_FUNC_AND_FIELDS
|
||||||
|
SELECT COUNT(*), (SELECT count(*) FROM t1 inr WHERE inr.a = outr.a)
|
||||||
|
FROM t1 outr;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1 a JOIN t1 outr
|
||||||
|
ON a.a= (SELECT count(*) FROM t1 inr WHERE inr.a = outr.a);
|
||||||
|
|
||||||
|
SET SQL_MODE=default;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
###
|
###
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
@ -390,11 +390,21 @@ inline int setup_without_group(THD *thd, Item **ref_pointer_array,
|
|||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
nesting_map save_allow_sum_func=thd->lex->allow_sum_func ;
|
nesting_map save_allow_sum_func=thd->lex->allow_sum_func ;
|
||||||
|
/*
|
||||||
|
Need to save the value, so we can turn off only the new NON_AGG_FIELD
|
||||||
|
additions coming from the WHERE
|
||||||
|
*/
|
||||||
|
uint8 saved_flag= thd->lex->current_select->full_group_by_flag;
|
||||||
DBUG_ENTER("setup_without_group");
|
DBUG_ENTER("setup_without_group");
|
||||||
|
|
||||||
thd->lex->allow_sum_func&= ~(1 << thd->lex->current_select->nest_level);
|
thd->lex->allow_sum_func&= ~(1 << thd->lex->current_select->nest_level);
|
||||||
res= setup_conds(thd, tables, leaves, conds);
|
res= setup_conds(thd, tables, leaves, conds);
|
||||||
|
|
||||||
|
/* it's not wrong to have non-aggregated columns in a WHERE */
|
||||||
|
if (thd->variables.sql_mode & MODE_ONLY_FULL_GROUP_BY)
|
||||||
|
thd->lex->current_select->full_group_by_flag= saved_flag |
|
||||||
|
(thd->lex->current_select->full_group_by_flag & ~NON_AGG_FIELD_USED);
|
||||||
|
|
||||||
thd->lex->allow_sum_func|= 1 << thd->lex->current_select->nest_level;
|
thd->lex->allow_sum_func|= 1 << thd->lex->current_select->nest_level;
|
||||||
res= res || setup_order(thd, ref_pointer_array, tables, fields, all_fields,
|
res= res || setup_order(thd, ref_pointer_array, tables, fields, all_fields,
|
||||||
order);
|
order);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user