Commit 0a29b8b0 authored by kaa@kaamos.(none)'s avatar kaa@kaamos.(none)
Browse files

Fix for bug #33049: Assert while running test-as3ap test(mysql-bench

                    suite)

Under some circumstances a combination of aggregate functions and
GROUP BY in a SELECT query over a VIEW could lead to incorrect
calculation of the result type of the aggregate function. This in
turn could result in incorrect results, or assertion failures on debug
builds.

Fixed by changing the logic in Item_sum_hybrid::fix_fields() so that
the argument's item is dereferenced before calling its type() method.
parent f41a5edf
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -3634,4 +3634,12 @@ a
1
drop view v1, v2;
drop table t1, t2;
CREATE TABLE t1 (a INT);
CREATE VIEW v1 AS SELECT p.a AS a FROM t1 p, t1 q;
INSERT INTO t1 VALUES (1), (1);
SELECT MAX(a), COUNT(DISTINCT a) FROM v1 GROUP BY a;
MAX(a)	COUNT(DISTINCT a)
1	1
DROP VIEW v1;
DROP TABLE t1;
End of 5.0 tests.
+13 −0
Original line number Diff line number Diff line
@@ -3492,5 +3492,18 @@ execute stmt;
drop view v1, v2;
drop table t1, t2;

#
# Bug #33049: Assert while running test-as3ap test(mysql-bench suite)
#

CREATE TABLE t1 (a INT);
CREATE VIEW v1 AS SELECT p.a AS a FROM t1 p, t1 q;

INSERT INTO t1 VALUES (1), (1);
SELECT MAX(a), COUNT(DISTINCT a) FROM v1 GROUP BY a;

DROP VIEW v1;
DROP TABLE t1;

--echo End of 5.0 tests.
+1 −0
Original line number Diff line number Diff line
@@ -597,6 +597,7 @@ Item_sum_hybrid::fix_fields(THD *thd, Item **ref)
  result_field=0;
  null_value=1;
  fix_length_and_dec();
  item= item->real_item();
  if (item->type() == Item::FIELD_ITEM)
    hybrid_field_type= ((Item_field*) item)->field->type();
  else