mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Bug #20868: Client connection is broken on SQL query error
An aggregate function reference was resolved incorrectly and caused a crash in count_field_types. Must use real_item() to get to the real Item instance through the reference
This commit is contained in:
@@ -988,3 +988,14 @@ SUM(a)
|
|||||||
6
|
6
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
set div_precision_increment= @sav_dpi;
|
set div_precision_increment= @sav_dpi;
|
||||||
|
CREATE TABLE t1 (a INT PRIMARY KEY, b INT);
|
||||||
|
INSERT INTO t1 VALUES (1,1), (2,2);
|
||||||
|
CREATE TABLE t2 (a INT PRIMARY KEY, b INT);
|
||||||
|
INSERT INTO t2 VALUES (1,1), (3,3);
|
||||||
|
SELECT SQL_NO_CACHE
|
||||||
|
(SELECT SUM(c.a) FROM t1 ttt, t2 ccc
|
||||||
|
WHERE ttt.a = ccc.b AND ttt.a = t.a GROUP BY ttt.a) AS minid
|
||||||
|
FROM t1 t, t2 c WHERE t.a = c.b;
|
||||||
|
minid
|
||||||
|
NULL
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
@@ -660,3 +660,18 @@ SELECT SUM(a) FROM t1 GROUP BY b/c;
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
set div_precision_increment= @sav_dpi;
|
set div_precision_increment= @sav_dpi;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #20868: Client connection is broken on SQL query error
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT PRIMARY KEY, b INT);
|
||||||
|
INSERT INTO t1 VALUES (1,1), (2,2);
|
||||||
|
|
||||||
|
CREATE TABLE t2 (a INT PRIMARY KEY, b INT);
|
||||||
|
INSERT INTO t2 VALUES (1,1), (3,3);
|
||||||
|
|
||||||
|
SELECT SQL_NO_CACHE
|
||||||
|
(SELECT SUM(c.a) FROM t1 ttt, t2 ccc
|
||||||
|
WHERE ttt.a = ccc.b AND ttt.a = t.a GROUP BY ttt.a) AS minid
|
||||||
|
FROM t1 t, t2 c WHERE t.a = c.b;
|
||||||
|
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
@@ -12806,7 +12806,7 @@ count_field_types(TMP_TABLE_PARAM *param, List<Item> &fields,
|
|||||||
{
|
{
|
||||||
if (! field->const_item())
|
if (! field->const_item())
|
||||||
{
|
{
|
||||||
Item_sum *sum_item=(Item_sum*) field;
|
Item_sum *sum_item=(Item_sum*) field->real_item();
|
||||||
if (!sum_item->quick_group)
|
if (!sum_item->quick_group)
|
||||||
param->quick_group=0; // UDF SUM function
|
param->quick_group=0; // UDF SUM function
|
||||||
param->sum_func_count++;
|
param->sum_func_count++;
|
||||||
|
Reference in New Issue
Block a user