diff options
author | Michael Widenius <monty@askmonty.org> | 2014-04-24 18:20:57 +0300 |
---|---|---|
committer | Michael Widenius <monty@askmonty.org> | 2014-04-24 18:20:57 +0300 |
commit | b17a053cc997adbf3f410aec4a6fab6739a8e15c (patch) | |
tree | 9b880d74dc711ab70bc8e856b78f00a03c995677 /sql/item.cc | |
parent | 64d33032a6b780a345418ebcab2edd5fb68bfe0d (diff) | |
download | mariadb-git-b17a053cc997adbf3f410aec4a6fab6739a8e15c.tar.gz |
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
Diffstat (limited to 'sql/item.cc')
-rw-r--r-- | sql/item.cc | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/sql/item.cc b/sql/item.cc index a4ab81a9e5a..b3d4b4a7616 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -5273,15 +5273,23 @@ mark_non_agg_field: /* Mark selects according to presence of non aggregated fields. 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. - We're using either 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. + We're using the select lex of the cached table (if present). */ - SELECT_LEX *select_lex= cached_table ? - cached_table->select_lex : field->table->pos_in_table_list->select_lex; + SELECT_LEX *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) select_lex->set_non_agg_field_used(true); else |