Commit 27caeeac 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 f935dcf2 f0a6416b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -180,7 +180,7 @@ typedef struct st_lex {
  enum enum_ha_read_modes ha_read_mode;
  enum ha_rkey_function ha_rkey_mode;
  enum enum_enable_or_disable alter_keys_onoff;
  uint grant,grant_tot_col,which_columns;
  uint grant,grant_tot_col,which_columns, union_option;
  thr_lock_type lock_option;
  bool	drop_primary,drop_if_exists,local_file;
  bool  in_comment,ignore_space,verbose,simple_alter, option_type;
+27 −23
Original line number Diff line number Diff line
@@ -1761,7 +1761,9 @@ mysql_execute_command(void)
				for (TABLE_LIST *cursor=(TABLE_LIST *)sl->table_list.first;cursor;cursor=cursor->next)
					cursor->table= ((TABLE_LIST*) cursor->table)->table;
			}
			ha_rows save_it=thd->offset_limit; thd->offset_limit=0;
      res=mysql_union(thd,lex, select_lex->select_number+1);
			thd->offset_limit=save_it;
		}
    close_thread_tables(thd);
    break;
@@ -2440,9 +2442,9 @@ mysql_init_select(LEX *lex)
  SELECT_LEX *select_lex = lex->select;
  select_lex->where=select_lex->having=0;
  select_lex->select_limit=current_thd->default_select_limit;
  select_lex->offset_limit=0L;
  select_lex->offset_limit=0;
  select_lex->options=0; select_lex->linkage=UNSPECIFIED_TYPE;
  select_lex->select_number = 0;  lex->exchange = 0;
  select_lex->select_number = 0;  lex->exchange = 0; lex->union_option=0;
  lex->proc_list.first=0;
  select_lex->order_list.elements=select_lex->group_list.elements=0;
  select_lex->order_list.first=0;
@@ -2938,6 +2940,8 @@ static int link_in_large_list_and_check_acl(THD *thd,LEX *lex,SQL_LIST *tables)
					aux->table=(TABLE *)ptr;
					link_in_list(tables,(byte*)ptr,(byte**) &ptr->next);
				}
				else
					aux->table=(TABLE *)cursor;
      }
    }
  }
+7 −5
Original line number Diff line number Diff line
@@ -72,10 +72,10 @@ int mysql_union(THD *thd,LEX *lex,uint no_of_selects)
					return res;
				}
				table=create_result->table;
				List_iterator<Item> it(*(create_result->fields));
/*				List_iterator<Item> it(*(create_result->fields));
				Item *item;
				while ((item= it++))
					fields.push_back(item);
				fields.push_back(item);*/
				if (!(resulting = (TABLE_LIST *) thd->calloc(sizeof(TABLE_LIST))))
					return 1;
				resulting->db=tables->db ? tables->db : thd->db;
@@ -88,8 +88,8 @@ int mysql_union(THD *thd,LEX *lex,uint no_of_selects)
    }
    else // Then we do INSERT from SELECT
    {
      select_result *result;
      if ((result=new select_insert(table, &fields, DUP_IGNORE, true)))
			select_insert *result;
      if ((result=new select_insert(table, create_result->fields, DUP_IGNORE, true)))
      {
				res=mysql_select(thd,tables,sl->item_list,
												 sl->where,
@@ -104,7 +104,7 @@ int mysql_union(THD *thd,LEX *lex,uint no_of_selects)
				if (res) 
				{
					delete create_result;
					return 1;
					return res;
				}
      }
      else
@@ -142,6 +142,8 @@ int mysql_union(THD *thd,LEX *lex,uint no_of_selects)
      result->abort();
		delete result;
  }
	else
		res=-1;
  delete create_result;
  return res;
}
+7 −3
Original line number Diff line number Diff line
@@ -551,7 +551,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
	table_to_table_list table_to_table opt_table_list opt_as
	handler_rkey_function handler_rkey_mode handler_read_or_scan
	single_multi table_wild_list table_wild_one opt_wild union union_list
	precision
	precision union_option
END_OF_INPUT

%type <NONE>
@@ -3404,7 +3404,7 @@ union:
  | union_list

union_list:
  UNION_SYM  
  UNION_SYM    union_option
  {
    LEX *lex=Lex;
    if (lex->exchange) YYABORT; /* Only the last SELECT can have  INTO...... */
@@ -3412,3 +3412,7 @@ union_list:
    mysql_new_select(lex); lex->select->linkage=UNION_TYPE;
  } 
	select

union_option:
  /* empty */ {}
  | ALL {Lex->union_option=1;}