diff options
author | Alexander Barkov <alexander.barkov@oracle.com> | 2011-02-10 11:18:08 +0300 |
---|---|---|
committer | Alexander Barkov <alexander.barkov@oracle.com> | 2011-02-10 11:18:08 +0300 |
commit | 7d88b552e2cceddc0b86dff69a12528481e9be1d (patch) | |
tree | a73b08968075c435d6f6de1754f250ceeff37274 /sql/item_strfunc.h | |
parent | 6f7e87cef032802a18b6e34b40e9b15f62b363d7 (diff) | |
download | mariadb-git-7d88b552e2cceddc0b86dff69a12528481e9be1d.tar.gz |
Bug#31384 DATE_ADD() and DATE_SUB() return binary data
Problem: DATE_ADD() is a hybrid function and can return
DATE, DATETIME or VARCHAR data type depending on arguments.
In case of VARCHAR data type, DATE_ADD() reported "binary" character set,
which was wrong.
Fix: make DATE_ADD() return @character_set_connection in VARCHAR context.
@ mysql-test/include/ctype_numconv.inc
Adding tests
@ mysql-test/r/ctype_binary.result
Adding tests
@ mysql-test/r/ctype_cp1251.result
Adding tests
@ mysql-test/r/ctype_latin1.result
Adding tests
@ mysql-test/r/ctype_ucs.result
Adding tests
@ mysql-test/r/ctype_utf8.result
Adding tests
@ sql/item_strfunc.cc
- Moving code from Item_str_ascii_func::val_str() to
Item_str_func::val_str_from_val_str_ascii(), as
this code needs to be shared by Item_date_add_interval.
- Adding str2 parameter to be used as a buffer, instead of
using private ascii_buf member.
@ sql/item_strfunc.h
- Moving code from Item_str_ascii_func::val_str() to
Item_str_func::val_str_from_val_str_ascii()
- Removing "String *val_str_convert_from_ascii(String *str, String *ascii_buf)"
prototype as it was neither used nor declared.
@ sql/item_timefunc.h
- Overwriting parent's charset_for_protocol() method,
becase we need to behave differenlty in VARCHAR and DATE/DATETYPE context.
- Adding ascii_buf for conversion.
- Adding val_str_ascii() prototype.
- Adding val_str() which uses newly added
Item_str_func::val_str_from_val_str_ascii(),
passing ascii_buf as a conversion buffer.
Diffstat (limited to 'sql/item_strfunc.h')
-rw-r--r-- | sql/item_strfunc.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h index e26f9b4467a..fef4f9f975d 100644 --- a/sql/item_strfunc.h +++ b/sql/item_strfunc.h @@ -51,6 +51,7 @@ public: enum Item_result result_type () const { return STRING_RESULT; } void left_right_max_length(); bool fix_fields(THD *thd, Item **ref); + String *val_str_from_val_str_ascii(String *str, String *str2); }; @@ -66,8 +67,10 @@ public: Item_str_ascii_func(Item *a) :Item_str_func(a) {} Item_str_ascii_func(Item *a,Item *b) :Item_str_func(a,b) {} Item_str_ascii_func(Item *a,Item *b,Item *c) :Item_str_func(a,b,c) {} - String *val_str_convert_from_ascii(String *str, String *ascii_buf); - String *val_str(String *str); + String *val_str(String *str) + { + return val_str_from_val_str_ascii(str, &ascii_buf); + } virtual String *val_str_ascii(String *)= 0; }; |