Commit b2a0d025 authored by unknown's avatar unknown
Browse files

Bug #21531: EXPORT_SET() doesn't accept args with coercible character sets

- Fix typo in Item_func_export_set::fix_length_and_dec() which caused character set aggregation to fail
- Remove default argument from last arg of agg_arg_charsets() function, to reduce potential errors


mysql-test/r/func_misc.result:
  Test EXPORT_SET() with charset coersion (bug #21531)
mysql-test/t/func_misc.test:
  Test EXPORT_SET() with charset coersion (bug #21531)
sql/item_func.h:
  Remove default argument from last arg of agg_arg_charsets() function, to reduce potential errors.
sql/item_strfunc.cc:
  Fix typo in Item_func_export_set::fix_length_and_dec() which caused character set aggregation to fail.
parent 216f20ad
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -93,3 +93,7 @@ SELECT IS_USED_LOCK('bug16501');
IS_USED_LOCK('bug16501')
NULL
DROP TABLE t1;
select export_set(3, _latin1'foo', _utf8'bar', ',', 4);
export_set(3, _latin1'foo', _utf8'bar', ',', 4)
foo,foo,bar,bar
End of 4.1 tests
+6 −1
Original line number Diff line number Diff line
@@ -83,4 +83,9 @@ connection default;

DROP TABLE t1;

# End of 4.1 tests
#
# Bug #21531: EXPORT_SET() doesn't accept args with coercible character sets
#
select export_set(3, _latin1'foo', _utf8'bar', ',', 4);

--echo End of 4.1 tests
+1 −2
Original line number Diff line number Diff line
@@ -156,8 +156,7 @@ class Item_func :public Item_result_field
    return agg_item_collations_for_comparison(c, func_name(),
                                              items, nitems, flags);
  }
  bool agg_arg_charsets(DTCollation &c, Item **items, uint nitems,
                        uint flags= 0)
  bool agg_arg_charsets(DTCollation &c, Item **items, uint nitems, uint flags)
  {
    return agg_item_charsets(c, func_name(), items, nitems, flags);
  }
+2 −2
Original line number Diff line number Diff line
@@ -2624,8 +2624,8 @@ void Item_func_export_set::fix_length_and_dec()
  uint sep_length=(arg_count > 3 ? args[3]->max_length : 1);
  max_length=length*64+sep_length*63;

  if (agg_arg_charsets(collation, args+1, min(4,arg_count)-1),
                       MY_COLL_ALLOW_CONV)
  if (agg_arg_charsets(collation, args+1, min(4,arg_count)-1,
                       MY_COLL_ALLOW_CONV))
    return;
}