summaryrefslogtreecommitdiff
path: root/sql/sql_union.cc
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2017-11-05 22:22:01 +0400
committerAlexander Barkov <bar@mariadb.org>2017-11-05 22:22:01 +0400
commit98b3f28862210a56f6a8a681e6add12ac400521d (patch)
tree4c07a5edb0880d7d7db85d3df110a046b612465d /sql/sql_union.cc
parent4e34eaf1877f8b732bf8d7313e5c6c0699d33043 (diff)
downloadmariadb-git-98b3f28862210a56f6a8a681e6add12ac400521d.tar.gz
MDEV-14217 [db crash] Recursive CTE when SELECT includes new field
Diffstat (limited to 'sql/sql_union.cc')
-rw-r--r--sql/sql_union.cc18
1 files changed, 11 insertions, 7 deletions
diff --git a/sql/sql_union.cc b/sql/sql_union.cc
index 6b5c328fd5d..b978241608c 100644
--- a/sql/sql_union.cc
+++ b/sql/sql_union.cc
@@ -770,13 +770,7 @@ bool st_select_lex_unit::join_union_type_handlers(THD *thd_arg,
holders[pos].set_handler(item_type_handler);
else
{
- if (first_sl->item_list.elements != sl->item_list.elements)
- {
- my_message(ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT,
- ER_THD(thd_arg, ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT),
- MYF(0));
- DBUG_RETURN(true);
- }
+ DBUG_ASSERT(first_sl->item_list.elements == sl->item_list.elements);
if (holders[pos].aggregate_for_result(item_type_handler))
{
my_error(ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION, MYF(0),
@@ -1024,6 +1018,16 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
goto err;
}
}
+ else
+ {
+ if (first_sl->item_list.elements != sl->item_list.elements)
+ {
+ my_message(ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT,
+ ER_THD(thd_arg, ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT),
+ MYF(0));
+ goto err;
+ }
+ }
if (is_recursive)
{
if (!with_element->is_anchor(sl))