Loading mysql-test/r/union.result +5 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,11 @@ a b 3 c 2 b 1 a explain (select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc; table type possible_keys key key_len ref rows Extra t1 ALL NULL NULL NULL NULL 4 t2 ALL NULL NULL NULL NULL 4 Using filesort t1 ALL NULL NULL NULL NULL 4 explain select a,b from t1 union all select a,b from t2; table type possible_keys key key_len ref rows Extra t1 ALL NULL NULL NULL NULL 4 Loading mysql-test/t/union.test +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ select 't1',b,count(*) from t1 group by b UNION select 't2',b,count(*) from t2 g (select a,b from t1 limit 2) union all (select a,b from t2 order by a) limit 4; (select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1); (select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc; explain (select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc; # Test some error conditions with UNION explain select a,b from t1 union all select a,b from t2; Loading sql/sql_union.cc +5 −3 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) int describe=(lex->select_lex.options & SELECT_DESCRIBE) ? 1 : 0; int res; TABLE_LIST result_table_list; TABLE_LIST *first_table=(TABLE_LIST *)lex->select_lex.table_list.first; TMP_TABLE_PARAM tmp_table_param; select_union *union_result; DBUG_ENTER("mysql_union"); Loading @@ -58,8 +59,9 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) the ORDER BY and LIMIT parameter for the whole UNION */ lex_sl= sl; last_sl->next=0; // Remove this extra element order= (ORDER *) lex_sl->order_list.first; if (!order || !describe) last_sl->next=0; // Remove this extra element } else if (!last_sl->braces) { Loading Loading @@ -136,7 +138,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) if (thd->select_limit == HA_POS_ERROR) sl->options&= ~OPTION_FOUND_ROWS; res=mysql_select(thd, (TABLE_LIST*) sl->table_list.first, res=mysql_select(thd, (describe && sl->linkage==NOT_A_SELECT) ? first_table : (TABLE_LIST*) sl->table_list.first, sl->item_list, sl->where, (sl->braces) ? (ORDER *)sl->order_list.first : (ORDER *) 0, Loading Loading @@ -193,7 +195,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) if (describe) thd->select_limit= HA_POS_ERROR; // no limit res=mysql_select(thd,&result_table_list, item_list, NULL, /*ftfunc_list,*/ order, item_list, NULL, (describe) ? 0 : order, (ORDER*) NULL, NULL, (ORDER*) NULL, thd->options, result); } Loading Loading
mysql-test/r/union.result +5 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,11 @@ a b 3 c 2 b 1 a explain (select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc; table type possible_keys key key_len ref rows Extra t1 ALL NULL NULL NULL NULL 4 t2 ALL NULL NULL NULL NULL 4 Using filesort t1 ALL NULL NULL NULL NULL 4 explain select a,b from t1 union all select a,b from t2; table type possible_keys key key_len ref rows Extra t1 ALL NULL NULL NULL NULL 4 Loading
mysql-test/t/union.test +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ select 't1',b,count(*) from t1 group by b UNION select 't2',b,count(*) from t2 g (select a,b from t1 limit 2) union all (select a,b from t2 order by a) limit 4; (select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1); (select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc; explain (select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc; # Test some error conditions with UNION explain select a,b from t1 union all select a,b from t2; Loading
sql/sql_union.cc +5 −3 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) int describe=(lex->select_lex.options & SELECT_DESCRIBE) ? 1 : 0; int res; TABLE_LIST result_table_list; TABLE_LIST *first_table=(TABLE_LIST *)lex->select_lex.table_list.first; TMP_TABLE_PARAM tmp_table_param; select_union *union_result; DBUG_ENTER("mysql_union"); Loading @@ -58,8 +59,9 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) the ORDER BY and LIMIT parameter for the whole UNION */ lex_sl= sl; last_sl->next=0; // Remove this extra element order= (ORDER *) lex_sl->order_list.first; if (!order || !describe) last_sl->next=0; // Remove this extra element } else if (!last_sl->braces) { Loading Loading @@ -136,7 +138,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) if (thd->select_limit == HA_POS_ERROR) sl->options&= ~OPTION_FOUND_ROWS; res=mysql_select(thd, (TABLE_LIST*) sl->table_list.first, res=mysql_select(thd, (describe && sl->linkage==NOT_A_SELECT) ? first_table : (TABLE_LIST*) sl->table_list.first, sl->item_list, sl->where, (sl->braces) ? (ORDER *)sl->order_list.first : (ORDER *) 0, Loading Loading @@ -193,7 +195,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) if (describe) thd->select_limit= HA_POS_ERROR; // no limit res=mysql_select(thd,&result_table_list, item_list, NULL, /*ftfunc_list,*/ order, item_list, NULL, (describe) ? 0 : order, (ORDER*) NULL, NULL, (ORDER*) NULL, thd->options, result); } Loading