Commit bfc7394e authored by monty@hundin.mysql.fi's avatar monty@hundin.mysql.fi
Browse files

Fixed bug in UNION when doing UNION with the same tables

parent fe1753de
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function)
  int error=0;
  MYISAM_SHARE *share=info->s;
  DBUG_ENTER("mi_extra");
  DBUG_PRINT("enter",("function: %d",(int) function));

  switch (function) {
  case HA_EXTRA_RESET:
+6 −2
Original line number Diff line number Diff line
@@ -62,7 +62,11 @@ t2 ALL NULL NULL NULL NULL 4
pseudo
dekad
joce
pseudo1
joce
testtt
tsestset
pseudo	pseudo1	same
dekad	joce	1
joce	testtt	1
joce	tsestset	1
joce	testtt	1
dekad	joce	1
+2 −1
Original line number Diff line number Diff line
@@ -60,5 +60,6 @@ CREATE TABLE t1 (
) TYPE=MyISAM;
INSERT INTO t1 (pseudo,pseudo1,same) VALUES ('joce', 'testtt', 1),('joce', 'tsestset', 1),('dekad', 'joce', 1);
SELECT pseudo FROM t1 WHERE pseudo1='joce' UNION SELECT pseudo FROM t1 WHERE pseudo='joce';
SELECT * FROM t1 WHERE pseudo1='joce' UNION SELECT * FROM t1 WHERE pseudo='joce';
SELECT pseudo1 FROM t1 WHERE pseudo1='joce' UNION SELECT pseudo1 FROM t1 WHERE pseudo='joce';
SELECT * FROM t1 WHERE pseudo1='joce' UNION SELECT * FROM t1 WHERE pseudo='joce' order by pseudo desc;
drop table t1;
+8 −1
Original line number Diff line number Diff line
@@ -1590,7 +1590,8 @@ Field *find_field_in_table(THD *thd,TABLE *table,const char *name,uint length,
    else
      thd->dupp_field=field;
  }
  if (check_grants && !thd->master_access && check_grant_column(thd,table,name,length))
  if (check_grants && !thd->master_access &&
      check_grant_column(thd,table,name,length))
    return WRONG_GRANT;
  return field;
}
@@ -1808,6 +1809,12 @@ bool setup_tables(TABLE_LIST *tables)
	DBUG_RETURN(1);
      table->keys_in_use_for_query &= ~map;
    }
    if (table_list->shared)
    {
      /* Clear query_id that may have been set by previous select */
      for (Field **ptr=table->field ; *ptr ; ptr++)
	(*ptr)->query_id=0;
    }
  }
  if (tablenr > MAX_TABLES)
  {
+3 −1
Original line number Diff line number Diff line
@@ -2923,6 +2923,8 @@ static bool create_total_list(THD *thd, LEX *lex, TABLE_LIST **result)
	  new_table_list= &cursor->next;
	  *new_table_list=0;			// end result list
	}
	else
	  aux->shared=1;			// Mark that it's used twice
	aux->table=(TABLE *) cursor;
      }
    }
Loading