From: Alexander Barkov Date: January 21 2011 1:46pm Subject: bzr commit into mysql-5.5 branch (alexander.barkov:3271) Bug#31384 List-Archive: http://lists.mysql.com/commits/129337 X-Bug: 31384 Message-Id: <201101211346.p0LDklM2004220@bar.myoffice.izhnet.ru> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3357609696126929419==" --===============3357609696126929419== 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:martin.hansson@stripped 3271 Alexander Barkov 2011-01-21 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-01-21 13:46:43 +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-01-21 13:46:43 +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-01-21 13:46:43 +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-01-21 13:46:43 +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-01-21 13:46:43 +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-01-21 13:46:43 +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-01-21 13:46:43 +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-01-21 13:46:43 +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,8 @@ 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-01-21 13:46:43 +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-10 14:08:31 +0000 +++ b/sql/item_timefunc.h 2011-01-21 13:46:43 +0000 @@ -773,16 +773,30 @@ 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; --===============3357609696126929419== 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\ # b8jrv2zl926uv04q # target_branch: file:///home/bar/mysql-bzr/mysql-5.5.b31384/ # testament_sha1: 59684ddef5646a90695d3152a38533d854397e7f # timestamp: 2011-01-21 16:46:47 +0300 # base_revision_id: martin.hansson@stripped\ # ko4u8sf72seqzw3h # # Begin bundle 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 An/xdyRThQkBb0ycEA== --===============3357609696126929419==--