From: Alexander Barkov Date: February 10 2011 6:39am Subject: bzr commit into mysql-5.5 branch (alexander.barkov:3294) Bug#31384 List-Archive: http://lists.mysql.com/commits/130943 X-Bug: 31384 Message-Id: <201102100639.p1A6dtVH008535@bar.myoffice.izhnet.ru> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7369137393748959792==" --===============7369137393748959792== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/bar/mysql-bzr/mysql-5.5.b31384/ based on revid:ole.john.aske@stripped 3294 Alexander Barkov 2011-02-10 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. modified: mysql-test/include/ctype_numconv.inc mysql-test/r/ctype_binary.result mysql-test/r/ctype_cp1251.result mysql-test/r/ctype_latin1.result mysql-test/r/ctype_ucs.result mysql-test/r/ctype_utf8.result sql/item_strfunc.cc sql/item_strfunc.h sql/item_timefunc.cc sql/item_timefunc.h === modified file 'mysql-test/include/ctype_numconv.inc' --- a/mysql-test/include/ctype_numconv.inc 2010-11-19 17:15:47 +0000 +++ b/mysql-test/include/ctype_numconv.inc 2011-02-10 06:39:10 +0000 @@ -1738,6 +1738,32 @@ DROP TABLE t1; --echo # +--echo # Bug #31384 DATE_ADD() and DATE_SUB() return binary data +--echo # +SELECT @@collation_connection, @@character_set_results; +CREATE TABLE t1 AS +SELECT + DATE_SUB('2007-08-03', INTERVAL 1 MINUTE) AS field_str1, + DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2, + DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date, + DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime; +SHOW CREATE TABLE t1; +DROP TABLE t1; +--enable_metadata +SELECT + DATE_SUB('2007-08-03', INTERVAL 1 DAY) AS field_str1, + DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2, + DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date, + DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime; +--disable_metadata +SELECT + HEX(DATE_SUB('2007-08-03', INTERVAL 1 MINUTE)) AS field_str1, + HEX(DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE)) AS field1_str2, + HEX(DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY)) AS field_date, + HEX(DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE)) AS field_datetime; + + +--echo # --echo # Bug#52159 returning time type from function and empty left join causes debug assertion --echo # CREATE FUNCTION f1() RETURNS TIME RETURN 1; === modified file 'mysql-test/r/ctype_binary.result' --- a/mysql-test/r/ctype_binary.result 2010-11-19 17:15:47 +0000 +++ b/mysql-test/r/ctype_binary.result 2011-02-10 06:39:10 +0000 @@ -2767,6 +2767,46 @@ id select_type table type possible_keys 1 SIMPLE t1 range date_column date_column 9 NULL 1 Using where DROP TABLE t1; # +# Bug #31384 DATE_ADD() and DATE_SUB() return binary data +# +SELECT @@collation_connection, @@character_set_results; +@@collation_connection @@character_set_results +binary binary +CREATE TABLE t1 AS +SELECT +DATE_SUB('2007-08-03', INTERVAL 1 MINUTE) AS field_str1, +DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2, +DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date, +DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `field_str1` varbinary(29) DEFAULT NULL, + `field1_str2` varbinary(29) DEFAULT NULL, + `field_date` date DEFAULT NULL, + `field_datetime` datetime DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1; +SELECT +DATE_SUB('2007-08-03', INTERVAL 1 DAY) AS field_str1, +DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2, +DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date, +DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def field_str1 254 29 10 Y 128 31 63 +def field1_str2 254 29 19 Y 128 31 63 +def field_date 10 29 10 Y 128 31 63 +def field_datetime 12 29 19 Y 128 31 63 +field_str1 field1_str2 field_date field_datetime +2007-08-02 2007-08-03 17:32:00 2007-08-02 2007-08-03 17:32:00 +SELECT +HEX(DATE_SUB('2007-08-03', INTERVAL 1 MINUTE)) AS field_str1, +HEX(DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE)) AS field1_str2, +HEX(DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY)) AS field_date, +HEX(DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE)) AS field_datetime; +field_str1 field1_str2 field_date field_datetime +323030372D30382D30322032333A35393A3030 323030372D30382D30332031373A33323A3030 323030372D30382D3032 323030372D30382D30332031373A33323A3030 +# # Bug#52159 returning time type from function and empty left join causes debug assertion # CREATE FUNCTION f1() RETURNS TIME RETURN 1; === modified file 'mysql-test/r/ctype_cp1251.result' --- a/mysql-test/r/ctype_cp1251.result 2010-11-26 14:22:06 +0000 +++ b/mysql-test/r/ctype_cp1251.result 2011-02-10 06:39:10 +0000 @@ -3157,6 +3157,46 @@ id select_type table type possible_keys 1 SIMPLE t1 range date_column date_column 9 NULL 1 Using where DROP TABLE t1; # +# Bug #31384 DATE_ADD() and DATE_SUB() return binary data +# +SELECT @@collation_connection, @@character_set_results; +@@collation_connection @@character_set_results +cp1251_general_ci cp1251 +CREATE TABLE t1 AS +SELECT +DATE_SUB('2007-08-03', INTERVAL 1 MINUTE) AS field_str1, +DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2, +DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date, +DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `field_str1` varchar(29) CHARACTER SET cp1251 DEFAULT NULL, + `field1_str2` varchar(29) CHARACTER SET cp1251 DEFAULT NULL, + `field_date` date DEFAULT NULL, + `field_datetime` datetime DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1; +SELECT +DATE_SUB('2007-08-03', INTERVAL 1 DAY) AS field_str1, +DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2, +DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date, +DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def field_str1 254 29 10 Y 0 31 51 +def field1_str2 254 29 19 Y 0 31 51 +def field_date 10 29 10 Y 128 31 63 +def field_datetime 12 29 19 Y 128 31 63 +field_str1 field1_str2 field_date field_datetime +2007-08-02 2007-08-03 17:32:00 2007-08-02 2007-08-03 17:32:00 +SELECT +HEX(DATE_SUB('2007-08-03', INTERVAL 1 MINUTE)) AS field_str1, +HEX(DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE)) AS field1_str2, +HEX(DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY)) AS field_date, +HEX(DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE)) AS field_datetime; +field_str1 field1_str2 field_date field_datetime +323030372D30382D30322032333A35393A3030 323030372D30382D30332031373A33323A3030 323030372D30382D3032 323030372D30382D30332031373A33323A3030 +# # Bug#52159 returning time type from function and empty left join causes debug assertion # CREATE FUNCTION f1() RETURNS TIME RETURN 1; === modified file 'mysql-test/r/ctype_latin1.result' --- a/mysql-test/r/ctype_latin1.result 2010-11-22 11:47:28 +0000 +++ b/mysql-test/r/ctype_latin1.result 2011-02-10 06:39:10 +0000 @@ -3186,6 +3186,46 @@ id select_type table type possible_keys 1 SIMPLE t1 range date_column date_column 9 NULL 1 Using where DROP TABLE t1; # +# Bug #31384 DATE_ADD() and DATE_SUB() return binary data +# +SELECT @@collation_connection, @@character_set_results; +@@collation_connection @@character_set_results +latin1_swedish_ci latin1 +CREATE TABLE t1 AS +SELECT +DATE_SUB('2007-08-03', INTERVAL 1 MINUTE) AS field_str1, +DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2, +DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date, +DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `field_str1` varchar(29) DEFAULT NULL, + `field1_str2` varchar(29) DEFAULT NULL, + `field_date` date DEFAULT NULL, + `field_datetime` datetime DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1; +SELECT +DATE_SUB('2007-08-03', INTERVAL 1 DAY) AS field_str1, +DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2, +DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date, +DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def field_str1 254 29 10 Y 0 31 8 +def field1_str2 254 29 19 Y 0 31 8 +def field_date 10 29 10 Y 128 31 63 +def field_datetime 12 29 19 Y 128 31 63 +field_str1 field1_str2 field_date field_datetime +2007-08-02 2007-08-03 17:32:00 2007-08-02 2007-08-03 17:32:00 +SELECT +HEX(DATE_SUB('2007-08-03', INTERVAL 1 MINUTE)) AS field_str1, +HEX(DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE)) AS field1_str2, +HEX(DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY)) AS field_date, +HEX(DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE)) AS field_datetime; +field_str1 field1_str2 field_date field_datetime +323030372D30382D30322032333A35393A3030 323030372D30382D30332031373A33323A3030 323030372D30382D3032 323030372D30382D30332031373A33323A3030 +# # Bug#52159 returning time type from function and empty left join causes debug assertion # CREATE FUNCTION f1() RETURNS TIME RETURN 1; === modified file 'mysql-test/r/ctype_ucs.result' --- a/mysql-test/r/ctype_ucs.result 2010-11-19 17:15:47 +0000 +++ b/mysql-test/r/ctype_ucs.result 2011-02-10 06:39:10 +0000 @@ -4009,6 +4009,46 @@ id select_type table type possible_keys 1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where DROP TABLE t1; # +# Bug #31384 DATE_ADD() and DATE_SUB() return binary data +# +SELECT @@collation_connection, @@character_set_results; +@@collation_connection @@character_set_results +ucs2_general_ci latin1 +CREATE TABLE t1 AS +SELECT +DATE_SUB('2007-08-03', INTERVAL 1 MINUTE) AS field_str1, +DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2, +DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date, +DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `field_str1` varchar(29) CHARACTER SET ucs2 DEFAULT NULL, + `field1_str2` varchar(29) CHARACTER SET ucs2 DEFAULT NULL, + `field_date` date DEFAULT NULL, + `field_datetime` datetime DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1; +SELECT +DATE_SUB('2007-08-03', INTERVAL 1 DAY) AS field_str1, +DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2, +DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date, +DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def field_str1 254 29 10 Y 0 31 8 +def field1_str2 254 29 19 Y 0 31 8 +def field_date 10 29 10 Y 128 31 63 +def field_datetime 12 29 19 Y 128 31 63 +field_str1 field1_str2 field_date field_datetime +2007-08-02 2007-08-03 17:32:00 2007-08-02 2007-08-03 17:32:00 +SELECT +HEX(DATE_SUB('2007-08-03', INTERVAL 1 MINUTE)) AS field_str1, +HEX(DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE)) AS field1_str2, +HEX(DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY)) AS field_date, +HEX(DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE)) AS field_datetime; +field_str1 field1_str2 field_date field_datetime +0032003000300037002D00300038002D00300032002000320033003A00350039003A00300030 0032003000300037002D00300038002D00300033002000310037003A00330032003A00300030 323030372D30382D3032 323030372D30382D30332031373A33323A3030 +# # Bug#52159 returning time type from function and empty left join causes debug assertion # CREATE FUNCTION f1() RETURNS TIME RETURN 1; === modified file 'mysql-test/r/ctype_utf8.result' --- a/mysql-test/r/ctype_utf8.result 2010-12-17 11:11:34 +0000 +++ b/mysql-test/r/ctype_utf8.result 2011-02-10 06:39:10 +0000 @@ -4898,6 +4898,46 @@ id select_type table type possible_keys 1 SIMPLE t1 range date_column date_column 9 NULL 1 Using where DROP TABLE t1; # +# Bug #31384 DATE_ADD() and DATE_SUB() return binary data +# +SELECT @@collation_connection, @@character_set_results; +@@collation_connection @@character_set_results +utf8_general_ci utf8 +CREATE TABLE t1 AS +SELECT +DATE_SUB('2007-08-03', INTERVAL 1 MINUTE) AS field_str1, +DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2, +DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date, +DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `field_str1` varchar(29) CHARACTER SET utf8 DEFAULT NULL, + `field1_str2` varchar(29) CHARACTER SET utf8 DEFAULT NULL, + `field_date` date DEFAULT NULL, + `field_datetime` datetime DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1; +SELECT +DATE_SUB('2007-08-03', INTERVAL 1 DAY) AS field_str1, +DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2, +DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date, +DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def field_str1 254 87 10 Y 0 31 33 +def field1_str2 254 87 19 Y 0 31 33 +def field_date 10 29 10 Y 128 31 63 +def field_datetime 12 29 19 Y 128 31 63 +field_str1 field1_str2 field_date field_datetime +2007-08-02 2007-08-03 17:32:00 2007-08-02 2007-08-03 17:32:00 +SELECT +HEX(DATE_SUB('2007-08-03', INTERVAL 1 MINUTE)) AS field_str1, +HEX(DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE)) AS field1_str2, +HEX(DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY)) AS field_date, +HEX(DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE)) AS field_datetime; +field_str1 field1_str2 field_date field_datetime +323030372D30382D30322032333A35393A3030 323030372D30382D30332031373A33323A3030 323030372D30382D3032 323030372D30382D30332031373A33323A3030 +# # Bug#52159 returning time type from function and empty left join causes debug assertion # CREATE FUNCTION f1() RETURNS TIME RETURN 1; === modified file 'sql/item_strfunc.cc' --- a/sql/item_strfunc.cc 2011-01-17 12:26:13 +0000 +++ b/sql/item_strfunc.cc 2011-02-10 06:39:10 +0000 @@ -70,7 +70,7 @@ String my_empty_string("",default_charse Normally conversion does not happen, and val_str_ascii() is immediately returned instead. */ -String *Item_str_ascii_func::val_str(String *str) +String *Item_str_func::val_str_from_val_str_ascii(String *str, String *str2) { DBUG_ASSERT(fixed == 1); @@ -82,19 +82,19 @@ String *Item_str_ascii_func::val_str(Str return res; } - DBUG_ASSERT(str != &ascii_buf); + DBUG_ASSERT(str != str2); uint errors; - String *res= val_str_ascii(&ascii_buf); + String *res= val_str_ascii(str); if (!res) return 0; - if ((null_value= str->copy(res->ptr(), res->length(), - &my_charset_latin1, collation.collation, - &errors))) + if ((null_value= str2->copy(res->ptr(), res->length(), + &my_charset_latin1, collation.collation, + &errors))) return 0; - return str; + return str2; } === modified file 'sql/item_strfunc.h' --- a/sql/item_strfunc.h 2011-01-17 12:26:13 +0000 +++ b/sql/item_strfunc.h 2011-02-10 06:39:10 +0000 @@ -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; }; === modified file 'sql/item_timefunc.cc' --- a/sql/item_timefunc.cc 2010-11-25 10:46:18 +0000 +++ b/sql/item_timefunc.cc 2011-02-10 06:39:10 +0000 @@ -2205,8 +2205,6 @@ void Item_date_add_interval::fix_length_ enum_field_types arg0_field_type; maybe_null=1; - fix_length_and_charset_datetime(MAX_DATETIME_FULL_WIDTH); - value.alloc(max_length); /* The field type for the result of an Item_date function is defined as @@ -2231,6 +2229,21 @@ void Item_date_add_interval::fix_length_ else cached_field_type= MYSQL_TYPE_DATETIME; } + + if (cached_field_type == MYSQL_TYPE_STRING) + { + /* Behave as a usual string function when return type is VARCHAR. */ + fix_length_and_charset(MAX_DATETIME_FULL_WIDTH, default_charset()); + } + else + { + /* + Follow the "Number-to-string conversion" rules as in WorkLog 2649 + when return type is DATE or DATETIME. + */ + fix_length_and_charset_datetime(MAX_DATETIME_FULL_WIDTH); + } + value.alloc(max_length); } @@ -2253,7 +2266,7 @@ bool Item_date_add_interval::get_date(MY } -String *Item_date_add_interval::val_str(String *str) +String *Item_date_add_interval::val_str_ascii(String *str) { DBUG_ASSERT(fixed == 1); MYSQL_TIME ltime; === modified file 'sql/item_timefunc.h' --- a/sql/item_timefunc.h 2011-01-28 12:39:39 +0000 +++ b/sql/item_timefunc.h 2011-02-10 06:39:10 +0000 @@ -773,16 +773,32 @@ class Item_date_add_interval :public Ite { String value; enum_field_types cached_field_type; - + String ascii_buf; public: const interval_type int_type; // keep it public const bool date_sub_interval; // keep it public Item_date_add_interval(Item *a,Item *b,interval_type type_arg,bool neg_arg) :Item_date_func(a,b),int_type(type_arg), date_sub_interval(neg_arg) {} - String *val_str(String *); + String *val_str_ascii(String *str); + String *val_str(String *str) + { + return val_str_from_val_str_ascii(str, &ascii_buf); + } const char *func_name() const { return "date_add_interval"; } void fix_length_and_dec(); enum_field_types field_type() const { return cached_field_type; } + CHARSET_INFO *charset_for_protocol(void) const + { + /* + DATE_ADD() can return DATE, DATETIME or VARCHAR depending on arguments. + Send using "binary" when DATE or DATETIME, + or using collation.collation when VARCHAR + (which was fixed from @collation_connection in fix_length_and_dec). + */ + DBUG_ASSERT(fixed == 1); + return cached_field_type == MYSQL_TYPE_STRING ? + collation.collation : &my_charset_bin; + } longlong val_int(); bool get_date(MYSQL_TIME *res, uint fuzzy_date); bool eq(const Item *item, bool binary_cmp) const; --===============7369137393748959792== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/alexander.barkov@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: alexander.barkov@stripped\ # oqh1o4v07fo7u7z6 # target_branch: file:///home/bar/mysql-bzr/mysql-5.5.b31384/ # testament_sha1: e9164c9771e883b1f300d67d87af70490cc04f4a # timestamp: 2011-02-10 09:39:55 +0300 # base_revision_id: ole.john.aske@stripped\ # hdrlhd5cgbxq3zgd # # Begin bundle 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 --===============7369137393748959792==--