Bug#48295: explain extended crash with subquery and ONLY_FULL_GROUP_BY sql_mode
If an outer query is broken, a subquery might not even get set up. EXPLAIN EXTENDED did not expect this and merrily tried to de-ref all of the half-setup info. We now catch this case and print as much as we have, as it doesn't cost us anything (doesn't make regular execution slower).
This commit is contained in:
parent
842039a1fb
commit
d7e7765b36
@ -194,4 +194,20 @@ dt
|
|||||||
2001-01-01 01:01:01
|
2001-01-01 01:01:01
|
||||||
2001-01-01 01:01:01
|
2001-01-01 01:01:01
|
||||||
drop tables t1, t2;
|
drop tables t1, t2;
|
||||||
|
#
|
||||||
|
# Bug#48295:
|
||||||
|
# explain extended crash with subquery and ONLY_FULL_GROUP_BY sql_mode
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 INT);
|
||||||
|
SELECT @@session.sql_mode INTO @old_sql_mode;
|
||||||
|
SET SESSION sql_mode='ONLY_FULL_GROUP_BY';
|
||||||
|
EXPLAIN EXTENDED SELECT 1 FROM t1
|
||||||
|
WHERE f1 > ALL( SELECT t.f1 FROM t1,t1 AS t );
|
||||||
|
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
SHOW WARNINGS;
|
||||||
|
Level Code Message
|
||||||
|
Error 1140 Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||||
|
Note 1003 select 1 AS `1` from `test`.`t1` where <not>(<exists>(...))
|
||||||
|
SET SESSION sql_mode=@old_sql_mode;
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests.
|
End of 5.1 tests.
|
||||||
|
@ -167,4 +167,24 @@ flush tables;
|
|||||||
SELECT OUTR.dt FROM t1 AS OUTR WHERE OUTR.dt IN ( SELECT INNR.dt FROM t2 AS INNR WHERE OUTR.t < '2005-11-13 7:41:31' );
|
SELECT OUTR.dt FROM t1 AS OUTR WHERE OUTR.dt IN ( SELECT INNR.dt FROM t2 AS INNR WHERE OUTR.t < '2005-11-13 7:41:31' );
|
||||||
drop tables t1, t2;
|
drop tables t1, t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#48295:
|
||||||
|
--echo # explain extended crash with subquery and ONLY_FULL_GROUP_BY sql_mode
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (f1 INT);
|
||||||
|
|
||||||
|
SELECT @@session.sql_mode INTO @old_sql_mode;
|
||||||
|
SET SESSION sql_mode='ONLY_FULL_GROUP_BY';
|
||||||
|
|
||||||
|
# EXPLAIN EXTENDED (with subselect). used to crash. should give NOTICE.
|
||||||
|
--error ER_MIX_OF_GROUP_FUNC_AND_FIELDS
|
||||||
|
EXPLAIN EXTENDED SELECT 1 FROM t1
|
||||||
|
WHERE f1 > ALL( SELECT t.f1 FROM t1,t1 AS t );
|
||||||
|
SHOW WARNINGS;
|
||||||
|
|
||||||
|
SET SESSION sql_mode=@old_sql_mode;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.1 tests.
|
--echo End of 5.1 tests.
|
||||||
|
@ -311,9 +311,14 @@ void Item_subselect::update_used_tables()
|
|||||||
|
|
||||||
void Item_subselect::print(String *str, enum_query_type query_type)
|
void Item_subselect::print(String *str, enum_query_type query_type)
|
||||||
{
|
{
|
||||||
str->append('(');
|
if (engine)
|
||||||
engine->print(str, query_type);
|
{
|
||||||
str->append(')');
|
str->append('(');
|
||||||
|
engine->print(str, query_type);
|
||||||
|
str->append(')');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
str->append("(...)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user