summaryrefslogtreecommitdiff
path: root/sql/item.cc
diff options
context:
space:
mode:
authorMichael Widenius <monty@askmonty.org>2014-04-24 18:20:57 +0300
committerMichael Widenius <monty@askmonty.org>2014-04-24 18:20:57 +0300
commitb17a053cc997adbf3f410aec4a6fab6739a8e15c (patch)
tree9b880d74dc711ab70bc8e856b78f00a03c995677 /sql/item.cc
parent64d33032a6b780a345418ebcab2edd5fb68bfe0d (diff)
downloadmariadb-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.cc22
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