diff options
author | Marc Alff <marc.alff@sun.com> | 2009-09-17 03:20:11 -0600 |
---|---|---|
committer | Marc Alff <marc.alff@sun.com> | 2009-09-17 03:20:11 -0600 |
commit | 071634bb3578a3949e09197f7eb17c5619d01562 (patch) | |
tree | d0d731222454addb05b3890fb2bc555da5af7d63 /sql/item_strfunc.cc | |
parent | ea0d4516ed796179ef97a791bb04a646ac98610b (diff) | |
parent | c65bfe456456db2aa60e2275b9ca428c76bbede4 (diff) | |
download | mariadb-git-071634bb3578a3949e09197f7eb17c5619d01562.tar.gz |
Merge mysql-next-mr --> mysql-trunk-signal
Diffstat (limited to 'sql/item_strfunc.cc')
-rw-r--r-- | sql/item_strfunc.cc | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 25c9539c4a5..7a4ffedac10 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -631,6 +631,7 @@ String *Item_func_concat_ws::val_str(String *str) String tmp_sep_str(tmp_str_buff, sizeof(tmp_str_buff),default_charset_info), *sep_str, *res, *res2,*use_as_buff; uint i; + bool is_const= 0; null_value=0; if (!(sep_str= args[0]->val_str(&tmp_sep_str))) @@ -644,7 +645,11 @@ String *Item_func_concat_ws::val_str(String *str) // If not, return the empty string for (i=1; i < arg_count; i++) if ((res= args[i]->val_str(str))) + { + is_const= args[i]->const_item() || !args[i]->used_tables(); break; + } + if (i == arg_count) return &my_empty_string; @@ -662,7 +667,7 @@ String *Item_func_concat_ws::val_str(String *str) current_thd->variables.max_allowed_packet); goto null; } - if (res->alloced_length() >= + if (!is_const && res->alloced_length() >= res->length() + sep_str->length() + res2->length()) { // Use old buffer res->append(*sep_str); // res->length() > 0 always |