Commit 3a55c4bc authored by wax@kishkin.ru's avatar wax@kishkin.ru

BUG#4315

BUG#4535
BUG#4686
parent 08acf5ae
...@@ -1966,13 +1966,14 @@ Item_func_group_concat::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) ...@@ -1966,13 +1966,14 @@ Item_func_group_concat::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
Fix fields for select list and ORDER clause Fix fields for select list and ORDER clause
*/ */
for (uint i=0 ; i < arg_count ; i++) for (i=0 ; i < arg_count ; i++)
{ {
if (args[i]->fix_fields(thd, tables, args + i) || args[i]->check_cols(1)) if (args[i]->fix_fields(thd, tables, args + i) || args[i]->check_cols(1))
return 1; return 1;
maybe_null |= args[i]->maybe_null; if (i < arg_count_field)
maybe_null |= args[i]->maybe_null;
} }
result_field= 0; result_field= 0;
null_value= 1; null_value= 1;
max_length= group_concat_max_len; max_length= group_concat_max_len;
...@@ -1992,8 +1993,6 @@ bool Item_func_group_concat::setup(THD *thd) ...@@ -1992,8 +1993,6 @@ bool Item_func_group_concat::setup(THD *thd)
uint const_fields; uint const_fields;
byte *record; byte *record;
qsort_cmp2 compare_key; qsort_cmp2 compare_key;
Copy_field *ptr;
Copy_field *end;
DBUG_ENTER("Item_func_group_concat::setup"); DBUG_ENTER("Item_func_group_concat::setup");
if (select_lex->linkage == GLOBAL_OPTIONS_TYPE) if (select_lex->linkage == GLOBAL_OPTIONS_TYPE)
...@@ -2044,10 +2043,13 @@ bool Item_func_group_concat::setup(THD *thd) ...@@ -2044,10 +2043,13 @@ bool Item_func_group_concat::setup(THD *thd)
Note that in the table, we first have the ORDER BY fields, then the Note that in the table, we first have the ORDER BY fields, then the
field list. field list.
We need to set set_sum_field in true for storing value of blob in buffer
of a record instead of a pointer of one.
*/ */
if (!(table=create_tmp_table(thd, tmp_table_param, all_fields, 0, if (!(table=create_tmp_table(thd, tmp_table_param, all_fields,
0, 0, 0,select_lex->options | thd->options, (ORDER*) 0, 0, TRUE,select_lex->options | thd->options,
(char *) ""))) HA_POS_ERROR,(char *) "")))
DBUG_RETURN(1); DBUG_RETURN(1);
table->file->extra(HA_EXTRA_NO_ROWS); table->file->extra(HA_EXTRA_NO_ROWS);
table->no_rows= 1; table->no_rows= 1;
...@@ -2055,16 +2057,6 @@ bool Item_func_group_concat::setup(THD *thd) ...@@ -2055,16 +2057,6 @@ bool Item_func_group_concat::setup(THD *thd)
key_length= table->reclength; key_length= table->reclength;
record= table->record[0]; record= table->record[0];
/*
We need to store value of blob in buffer of a record instead of a pointer of
one.
*/
ptr=tmp_table_param->copy_field;
end=tmp_table_param->copy_field_end;
for (; ptr != end; ptr++)
ptr->set(ptr->to_field,ptr->from_field,1);
/* Offset to first result field in table */ /* Offset to first result field in table */
field_list_offset= table->fields - (list.elements - const_fields); field_list_offset= table->fields - (list.elements - const_fields);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment