mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-6129: Server crashes during UNION with ORDER BY field IS NULL
Fixed crashing bug for union queries where there was no real tables. mysql-test/r/group_by.result: Added test case mysql-test/t/group_by.test: Added test case sql/db.opt: Removed genrated file sql/item.cc: Handled case when table_list->pos_in_tables is not set. Can only happens when there is no real tables in query
This commit is contained in:
@ -1433,3 +1433,4 @@ storage/tokudb/ft-index/utils/tokudb_dump
|
|||||||
storage/tokudb/ft-index/utils/tokudb_gen
|
storage/tokudb/ft-index/utils/tokudb_gen
|
||||||
storage/tokudb/ft-index/utils/tokudb_load
|
storage/tokudb/ft-index/utils/tokudb_load
|
||||||
libmysql/libmysql_versions.ld
|
libmysql/libmysql_versions.ld
|
||||||
|
scripts/mysql_config.pl
|
||||||
|
@ -2473,3 +2473,12 @@ c 1c
|
|||||||
v 2v,2v
|
v 2v,2v
|
||||||
NULL 1c,2v,2v
|
NULL 1c,2v,2v
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
#
|
||||||
|
# MDEV-6129: Server crashes during UNION with ORDER BY field IS NULL
|
||||||
|
#
|
||||||
|
SET sql_mode='ONLY_FULL_GROUP_BY';
|
||||||
|
SELECT 1 AS test UNION SELECT 2 AS test ORDER BY test IS NULL ASC;
|
||||||
|
test
|
||||||
|
1
|
||||||
|
2
|
||||||
|
SET sql_mode='';
|
||||||
|
@ -1643,3 +1643,14 @@ FROM t1 JOIN t2 ON c = b GROUP BY b WITH ROLLUP;
|
|||||||
|
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-6129: Server crashes during UNION with ORDER BY field IS NULL
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET sql_mode='ONLY_FULL_GROUP_BY';
|
||||||
|
SELECT 1 AS test UNION SELECT 2 AS test ORDER BY test IS NULL ASC;
|
||||||
|
SET sql_mode='';
|
||||||
|
|
||||||
|
#
|
||||||
|
# End of MariaDB 5.5 tests
|
||||||
|
#
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
default-character-set=latin1
|
|
||||||
default-collation=latin1_swedish_ci
|
|
22
sql/item.cc
22
sql/item.cc
@ -5273,15 +5273,23 @@ mark_non_agg_field:
|
|||||||
/*
|
/*
|
||||||
Mark selects according to presence of non aggregated fields.
|
Mark selects according to presence of non aggregated fields.
|
||||||
Fields from outer selects added to the aggregate function
|
Fields from outer selects added to the aggregate function
|
||||||
outer_fields list as its unknown at the moment whether it's
|
outer_fields list as it's unknown at the moment whether it's
|
||||||
aggregated or not.
|
aggregated or not.
|
||||||
We're using either the select lex of the cached table (if present)
|
We're using the select lex of the cached table (if present).
|
||||||
or the field's resolution context. context->select_lex is
|
|
||||||
safe for use because it's either the SELECT we want to use
|
|
||||||
(the current level) or a stub added by non-SELECT queries.
|
|
||||||
*/
|
*/
|
||||||
SELECT_LEX *select_lex= cached_table ?
|
SELECT_LEX *select_lex;
|
||||||
cached_table->select_lex : field->table->pos_in_table_list->select_lex;
|
if (cached_table)
|
||||||
|
select_lex= cached_table->select_lex;
|
||||||
|
else if (!(select_lex= field->table->pos_in_table_list->select_lex))
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
This can only happen when there is no real table in the query.
|
||||||
|
We are using the field's resolution context. context->select_lex is eee
|
||||||
|
safe for use because it's either the SELECT we want to use
|
||||||
|
(the current level) or a stub added by non-SELECT queries.
|
||||||
|
*/
|
||||||
|
select_lex= context->select_lex;
|
||||||
|
}
|
||||||
if (!thd->lex->in_sum_func)
|
if (!thd->lex->in_sum_func)
|
||||||
select_lex->set_non_agg_field_used(true);
|
select_lex->set_non_agg_field_used(true);
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user