Commit ff4de905 authored by unknown's avatar unknown
Browse files

Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-4.1

into sunlight.local:/local_work/15560-bug-4.1-mysql


sql/sql_table.cc:
  Auto merged
parents a48af9eb b2531546
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -589,3 +589,18 @@ GROUP_CONCAT(a ORDER BY a)
,x
,z
DROP TABLE t1;
create table t1(f1 int);
insert into t1 values(1),(2),(3);
select f1, group_concat(f1+1) from t1 group by f1 with rollup;
f1	group_concat(f1+1)
1	2
2	3
3	4
NULL	2,3,4
select count(distinct (f1+1)) from t1 group by f1 with rollup;
count(distinct (f1+1))
1
1
1
3
drop table t1;
+8 −0
Original line number Diff line number Diff line
@@ -382,4 +382,12 @@ SELECT GROUP_CONCAT(a ORDER BY a) FROM t1 GROUP BY id;

DROP TABLE t1;

#
# Bug #15560: GROUP_CONCAT wasn't ready for WITH ROLLUP queries
#
create table t1(f1 int);
insert into t1 values(1),(2),(3);
select f1, group_concat(f1+1) from t1 group by f1 with rollup;
select count(distinct (f1+1)) from t1 group by f1 with rollup;
drop table t1;
# End of 4.1 tests
+6 −0
Original line number Diff line number Diff line
@@ -1185,6 +1185,7 @@ void Item_sum_count_distinct::make_unique()
  original= 0;
  use_tree= 0; // to prevent delete_tree call on uninitialized tree
  tree= &tree_base;
  force_copy_fields= 1;
}


@@ -1219,6 +1220,7 @@ bool Item_sum_count_distinct::setup(THD *thd)
    free_tmp_table(thd, table);
    tmp_table_param->cleanup();
  }
  tmp_table_param->force_copy_fields= force_copy_fields;
  if (!(table= create_tmp_table(thd, tmp_table_param, list, (ORDER*) 0, 1,
				0,
				select_lex->options | thd->options,
@@ -1724,6 +1726,7 @@ Item_func_group_concat::Item_func_group_concat(bool is_distinct,
					       String *is_separator)
  :Item_sum(), tmp_table_param(0), max_elements_in_tree(0), warning(0),
   key_length(0), tree_mode(0), distinct(is_distinct), warning_for_row(0),
   force_copy_fields(0),
   separator(is_separator), tree(&tree_base), table(0),
   order(0), tables_list(0),
   arg_count_order(0), arg_count_field(0),
@@ -1785,6 +1788,7 @@ Item_func_group_concat::Item_func_group_concat(THD *thd,
  tree_mode(item->tree_mode),
  distinct(item->distinct),
  warning_for_row(item->warning_for_row),
  force_copy_fields(item->force_copy_fields),
  separator(item->separator),
  tree(item->tree),
  table(item->table),
@@ -2004,6 +2008,7 @@ bool Item_func_group_concat::setup(THD *thd)
    free_tmp_table(thd, table);
    tmp_table_param->cleanup();
  }
  tmp_table_param->force_copy_fields= force_copy_fields;
  /*
    We have to create a temporary table to get descriptions of fields 
    (types, sizes and so on).
@@ -2079,6 +2084,7 @@ void Item_func_group_concat::make_unique()
  original= 0;
  tree_mode= 0; // to prevent delete_tree call on uninitialized tree
  tree= &tree_base;
  force_copy_fields= 1;
}


+6 −3
Original line number Diff line number Diff line
@@ -185,6 +185,7 @@ class Item_sum_count_distinct :public Item_sum_int
  TMP_TABLE_PARAM *tmp_table_param;
  TREE tree_base;
  TREE *tree;
  bool force_copy_fields;
  /*
    Following is 0 normal object and pointer to original one for copy 
    (to correctly free resources)
@@ -226,15 +227,16 @@ class Item_sum_count_distinct :public Item_sum_int
  public:
  Item_sum_count_distinct(List<Item> &list)
    :Item_sum_int(list), table(0), used_table_cache(~(table_map) 0),
     tmp_table_param(0), tree(&tree_base), original(0), use_tree(0),
     always_null(0)
     tmp_table_param(0), tree(&tree_base), force_copy_fields(0), original(0),
     use_tree(0), always_null(0)
  { quick_group= 0; }
  Item_sum_count_distinct(THD *thd, Item_sum_count_distinct *item)
    :Item_sum_int(thd, item), table(item->table),
     used_table_cache(item->used_table_cache),
     field_lengths(item->field_lengths),
     tmp_table_param(item->tmp_table_param),
     tree(item->tree), original(item), key_length(item->key_length),
     tree(item->tree), force_copy_fields(item->force_copy_fields),
     original(item), key_length(item->key_length),
     max_elements_in_tree(item->max_elements_in_tree),
     rec_offset(item->rec_offset), use_tree(item->use_tree),
     always_null(item->always_null)
@@ -685,6 +687,7 @@ class Item_func_group_concat : public Item_sum
  bool distinct;
  bool warning_for_row;
  bool always_null;
  bool force_copy_fields;

  friend int group_concat_key_cmp_with_distinct(void* arg, byte* key1,
					      byte* key2);
+3 −2
Original line number Diff line number Diff line
@@ -538,7 +538,8 @@ int mysql_union(THD *thd, LEX *lex, select_result *result,
int mysql_handle_derived(LEX *lex);
Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
                        Item ***copy_func, Field **from_field,
			bool group, bool modify_item, uint convert_blob_length);
                        bool group, bool modify_item, uint convert_blob_length,
                        bool make_copy_field);
int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
		       List<create_field> &fields,
		       List<Key> &keys, uint &db_options, 
Loading