Commit ea2f1630 authored by Sinisa@sinisa.nasamreza.org's avatar Sinisa@sinisa.nasamreza.org
Browse files

Merge sinisa@work.mysql.com:/home/bk/mysql-4.0

into sinisa.nasamreza.org:/mnt/hdc/Sinisa/mysql-4.0
parents eef79492 b98a84a1
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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	
+1 −0
Original line number Diff line number Diff line
@@ -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;
+5 −3
Original line number Diff line number Diff line
@@ -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");
@@ -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)
  {
@@ -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,
@@ -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);
    }