summaryrefslogtreecommitdiff
path: root/sql/sql_union.cc
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2017-08-08 10:18:43 +0200
committerSergei Golubchik <serg@mariadb.org>2017-08-08 10:18:43 +0200
commit8e8d42ddf0291b2364fef8e3224e65d596ef4202 (patch)
tree056e6f1c489477cb7e1c285924e88f8f02e5918b /sql/sql_union.cc
parent2395adfbfd6b4425981053f074865769414b5614 (diff)
parentef2e51c39637ace64b66fa82b834e31f0e4ef38a (diff)
downloadmariadb-git-8e8d42ddf0291b2364fef8e3224e65d596ef4202.tar.gz
Merge branch '10.0' into 10.1
Diffstat (limited to 'sql/sql_union.cc')
-rw-r--r--sql/sql_union.cc18
1 files changed, 15 insertions, 3 deletions
diff --git a/sql/sql_union.cc b/sql/sql_union.cc
index 7ca0a9bb867..9d825f55fcb 100644
--- a/sql/sql_union.cc
+++ b/sql/sql_union.cc
@@ -1,5 +1,5 @@
-/* Copyright (c) 2000, 2014, Oracle and/or its affiliates.
- Copyright (c) 2010, 2014, SkySQL Ab.
+/* Copyright (c) 2000, 2017, Oracle and/or its affiliates.
+ Copyright (c) 2010, 2017, Corporation
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -484,6 +484,19 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
Item *item_tmp;
while ((item_tmp= it++))
{
+ /*
+ If the outer query has a GROUP BY clause, an outer reference to this
+ query block may have been wrapped in a Item_outer_ref, which has not
+ been fixed yet. An Item_type_holder must be created based on a fixed
+ Item, so use the inner Item instead.
+ */
+ DBUG_ASSERT(item_tmp->fixed ||
+ (item_tmp->type() == Item::REF_ITEM &&
+ ((Item_ref *)(item_tmp))->ref_type() ==
+ Item_ref::OUTER_REF));
+ if (!item_tmp->fixed)
+ item_tmp= item_tmp->real_item();
+
/* Error's in 'new' will be detected after loop */
types.push_back(new (thd_arg->mem_root)
Item_type_holder(thd_arg, item_tmp));
@@ -1240,4 +1253,3 @@ void st_select_lex_unit::set_unique_exclude()
}
}
}
-