From: Alexander Barkov Date: February 10 2011 8:19am Subject: bzr commit into mysql-5.5 branch (alexander.barkov:3318) Bug#31384 List-Archive: http://lists.mysql.com/commits/130955 X-Bug: 31384 Message-Id: <201102100819.p1A8J6xH005768@bar.myoffice.izhnet.ru> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3389936586069604775==" --===============3389936586069604775== 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:mats.kindahl@stripped 3318 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 08:18:08 +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 08:18:08 +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 08:18:08 +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 08:18:08 +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 08:18:08 +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 08:18:08 +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 08:18:08 +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-02-07 10:17:46 +0000 +++ b/sql/item_strfunc.h 2011-02-10 08:18:08 +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 08:18:08 +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 08:18:08 +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; --===============3389936586069604775== 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\ # 0egpjmqvr4m1hr7m # target_branch: file:///home/bar/mysql-bzr/mysql-5.5.b31384/ # testament_sha1: 3b951e250bdae652b12b8bdd4cc388e393ae4e71 # timestamp: 2011-02-10 11:19:05 +0300 # base_revision_id: mats.kindahl@stripped\ # u4m8pwlummit0nd1 # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWQlw+mMAEqr/gHAwABR59/// /+f/4P////pgF18+ZHp9rxfH2+dXtZ2UAxKdANV9YStap7wYJApcsrbHR1p9vHe13dLO3Jnd0ura 06uYrrrphomo1MkPKe0p6mT9TU9JkPUA9NQNMhoAAD1A0aCSUxDEZCaJPJkmhqnmhJ+SPKj0PUyT T9U8o0NAA0GgIKmjT9KGgNAAAAANAAAAACRFAETaqbxNTyp+ESftSaT0nqfqjTRobUDIyNAAARKJ MKZGT0mptNFT2aIwqfiE1GaT9FPKPUPUzyoA00eoFSSAmhNMmmgCaaNCaZKfoKepkZPUMRo9IaAZ Mo6aRgRSUST9hH6h1fsjx8oWi8l10L47kaiiq8C6KLRY8iVEtF5F7ySif4Eom4m6P0SxPJPwTIkS CVTczSQhJEifn45RN0S4Sr05vQfz3CydeOEx09483b6aIpBkcRECgh+9mvHjjqH7NFK9EzMzxkK9 VeUD2lujupDy7hi/VjIMWBO4dpjw8gYDTUYlCSRXUDpEXAQt36XdlxmxncqY2jDqTrSJ/FMmWzbX ATMPB1SUsTPjlpa9nPq37r+3cLZVO7hE4hICVsTGqWJBKGPjLUomhO4ajeROG5A0QEpEbMxiSUpQ fzTXJSBgGVRnO7jfTsRigYwz1lEI1zNJY4jJ2nCvbLfkVNPqAcw20UGKhBiqSKb9vq7JzMG88P8p 6Tf4bXxiu6B2idQmoSDJIySSSSNg22Bw5CWNF2ICD6Ne+ml9+YsmNz3RRRQqxIhZYYbzjI4SQxI1 eaTqcRVpMAyJCMFMgYZUJaoLKYJalqmYoa32Xk10xe7nm/329p6uCDcLEVfk7yf2ofUIfk8Ep7fp 8EwTSMf4pr+Fb+Z8UNbl8L+OhlJRvEr84vjmv8O2666y6+LRiZiHz5LmYTzcnEin3pnjSo/fI/1q oqNkdM4+N6prBFSJDNdglUr9F19j6hvtVaXJ1t2x47KxuUMcIwroVSgdoh8avbPiAgsEVpp/uelo 1KyHQjFsLzN/2o5Yv+Ytoi4uJllDaGzk64Q0TGljMllYQBXRwV/At8MBA8V4I+6UyuFdZjbysPst sjbaMsQvh1oIP7x5UKxBA8RBWnRQqg6FUtmOxuzyTS6VZ/fsENUNq5sY+vNzwIswz5duTfSbNG0A u1kCTGAE9YkiRdUPnJoENgDAYMGD4AIebInMIfgIdAhBCvD4oclKFi+hvs5JVcYTICD/AC1uttGC WDcqSfBY/K/l6L/1vPp2EGEMj9ozCQaAxKUpRKJRP2CbEvA88V25LRuGAuuC+sQOEFhs31Keppk/ y8V8t7MkGUMfXZI4mBa1v1yS5FyLkWi0Wjw5mSZsMycEpKGAwGDByNL96tcwGpO8NYKnWCpAJtcX SpSyKU+EQ8DarHh2OsfoNavjx5bMQKnkE1uXIPP6i0PfmLr35K9lssHIY9mzhys0lrq6NG9+XZS+ yAhc6UVIIMwAPeB8AwDrft4j52M0TBBJBJ3LiukRn5qcoi7oZEQaME0SBrzoyx+4XQsjj29t8eMd GcY3W3klqRWVi6lqiqh46ryGa/9CNFELjzqqjMVbI1qCw9hSciRkCgxzRa6qXBazNkpurqJEkhgT WsZCpLhuWSSyKlnoXUi17nXkljS5dcYsUItnKpFIpCmpRgKwhfFoosWloUUhesshUWKLy5Wcwppb R0s1695aiSNS67Zh+PDlfjzEkbBObRrEssYX0sVPJYXNyc9KoxNzFt2/gxaNWTXq2Ca2t6+yYdsb iLosjLsJv75LLMpZtXbL780oS9QTKs0M8WFqqlOuSdGo1/9t4lyTOq48LEmV4saednJ18L7+dk61 CSwCJCbxbh5W3uvOBdIJJjGmiHBBiGOWX/EnsyuBW3aNnOWbHsrnlxapeRoaA9nbEFrAcbbwULUO bTXibCG2psWipQoMXEC0qOPu1Lj/xcFjjjnNG1jXAqSRi/bdsEzNrB39iNbCdMp4C2Vdi94k7EdH akPG+NkczuRg8KsHsAUdoi5E0URYIjXwhuNUxeznc93rIujHmeJGjXMEpT2x1yT6CF0I7JixhtOy pdbddV071El2y+WbzIxtL9y2KmC+2V3SsuuQv7TCochx5KodBmzYXt6XIb4nNY4W7SVtaf9qZmpe S7S11cG1talmxD8Ec+W1HVaJVx2obEO2+MelWxXD04Nzo2t+TmUvjxmDm4umnk9G5TAw6sdN9VVI o3Xs8tqSMMLmN5DXUkspGE98TUh8EL0KQ51mSmxROsisah+2Tt7HPF6NkKMV2UeRULzCG7qRwb+p saam42aya4cIXF/XsIYGxVcXyyerg6cH2te3aYMHQw6PUynCkL4bK6lxhSFw5+fXL8tZqxIXl5gV GuF57dizMucnryZEBs+oqHwKkjqBjoUC9EIiJaaWPazACGZZldXAqYxqY2XqU4MSYzU7mBcv6r2x S7Y/ka2hjCJzvKPyDN3W+tkY0oZHVyjkm8hhiUgQeZXR1mDtkYYaM3JxbmbrejSM8t7a+tyjrPwd Il5YQzUGpUKVWL0MuC70K5jW04RmjtTKFlCIw4ewGkxYja7G16204HW0RlotpNHi4PGYYWs2XPLu aY8MrRzGgDF7347g0XJHmNpqbSwiSxI1JnbQ7MUd+J0H0D6lpMo2+urO2P5mWj4tY9MQ22mRdJmi XkWKmpzgo3EL2OBiPmWsSlPfB5usIXjxw4ypwLSdrNHgEc5gsdMCe8qjIjUe855ESQPND8zzF7qU ajli3dHTuuWp07cr+eiSLl8xlsXGhymLe2mLaX3K013TVf0NWukOPwMZtzYQ1K5Q43NnVpjXszLF 0EZmmE2VoxcMnFS8vEkSw0Jfq0LM3JvYscVqadwnsWaNxNmem3HtObdbvNBRTSIWYBAidGYBaB4m IAAmqDqKMYzJjISmWmaF7g5rk0VqVryrJa7qdK5dtU52WY8kVJwZqWDzOZzGBEeMSsu2TkZkjM2E jQsLmLgbvpMkNiMr9uq1a6tdbFFjoowxXX7HHEiaYkhyZFg6hCweRRsJ3kdCF8nteBxucVsNFlhz WbF2Smp0LOLoczJy9lzoec9Z38/X5cEciHBbqtzpIqa3CjjdOxXSU6brL+WdtWUvvoBUwCbripIu QqrHX4UvKbWVd+A6GRf1ihEDBiRODuU+T/ey20+yoUhCBDATkpWkZChAoIYP2p8U6PeJt88LROlI OhIvzAJB63lmf1kKtEHaK7qp4D9VPqAh9E+KNFg5gAbD8hDgQPeIgf8QfEoA2ic/1VQ49QyBBJJ8 FS0twi3fIQ0LUHWl6WTETNLovIzke0RizQwsJud9sk/xtGCMUtaKqLJYWiqiyWWRZLCflWkioS9P /mSOqD90fws4rkLIFpClV/KOEHHAThCdomyMksoQqRUJXYJaRqaLSSHTCa+LdzR0XydTJ2SG25JE kSRN0f7GQB8Uy6S4BDOAPzTDeSz8Y65TUmsBCK/FU4AHFVPqWGCeNycjvE1oTCKfSLhpFCFxFBPr 8+hPBMP4p/Cce5za0qQ74O55Jcl6IarAnNGYma9NiXJoxI7oI9V7F0SVG+nMJ0wm1NiGxaMJI1xD qCVMk9QhaQk52ImauZW2OUaRSMJJDsaiOTSEsE2iGUnSmtbWJi0IoTpngvkeJ/UoWRATSHOv6U+j 3D64vtyB5LT29UnsL5gmFSZ5mUDUojCkSpfJqUff8/06tTJFCs1olqP7in4xRqXhdtuJcRtjJIZR QopukAgNItS8Ci2WJUSZpJJI3MgVyBkw1gREj4/Gp4kif4H3lD4/Z8ywzPwMB5U/hojiCPJzfMKF T8d4kinb8JnpOeGg337TnNkpbjiMd5GicTxM5D8d0tYA4fIyqQSn1mkTn8vMtkancjWv7FuuGqew k6nq4D8yonfsRblcJqfbiiYE5oN6MD2UpbaS6fl/Na5nG9l0mxT7k9yUBNqY0RAyYqsDe5fFNJ7E yav9Hte1teNmj4s3ubGb3smXiUxWesxeZrROlEjgeU9oem6Bnpb5RxeeLtg4L8hx2Hm+39V6VDrI B27TSKeWzWVc+7euUsnZ1ZxQpQ70y6qhYgUcXW9TsYud1L1y9k9S2Pq3O9izUZNianP+uph4yZvt etzLm9r7fuXPdOavAbf3k7S32W4t8sdsRaLs/2vYvvga2qd7pn87m0lyQ8tsS+aDUf1jJIdPZiak syFgjBjYvi8LbfsIiCIbbha1n3L5gKVXKmVXel/LvRh6m7ty9j+hIaSzHJTzmulsCeja1k976eza 9H2NXxa3Ly3RGDgSFb2xcI4L54Sb1PCSVFCKihOe6fqI8i4mw3XX4bgRYpglLz86Q+2AyCfHOu8o j+l7nH45Ww+TT7O3FaPdHZG+PKLRei16Lo9uD6r4qEY0Q4qEaCTlFugfNbaIK6nttSET0nEsxnPt bXVFubBe/Hnuzx89O5xrZHo61zzVm3qlWXnJDj3osjX2066FrOqOsUjmiWLKJdCyD4U2zuEJA2ed kAeEYkCC1cLhIVrpAjhmt5qtFK7iDKcKLzhjJgZTQcKnz4AjoDIRrSpAXk03LlTl1PZ71DpEUOrm 41S/5aA49fz5zocE+CROW8gPY5SgNuY1lcSlS7p4SWAvVkR1tnWmPvr4ZwxvKb92d4cbQZBqq2Al QqClEqi5uUuBcipj2Eb/lornlyp6wt4vc+j56k0YNrB8zF7W7aVS9A1aWjGMi1en1G897CWbzVIm Nmbw/NHeI6hD8kqlRKiFUqlRKiFUqncJUQcjuPgIeIeI8BvBqk0dLB0viMd/97E4D1nQQs2NjTGx lIqjejhcc4mIJaETMPaHHt3XRUTSbPNfm5minA+TnE3zXFMZJ72p8j0J7jrYUIFMTtLGlYKXlESk X4pmOC3T0Fp1v6T8WPxdE+DCd7DBhM5dxj5ifV+Ln8uZmefpIlaG8nfncsuh3eKL/Pxl/dWzs84j 7betEhq3rAcDfRMNlwrVLkR5S9KI8V0QOYM3hwgGrZ02CB4RJMEl0wg4jyXHV1+5falawbSY00hg n4DKWrTfS+ZCo0rD5dREQNkRBvz09RwHeo+XFFBHTXv5I5R8q1O0BRLzy/VEyPYecnmeuzUNhzo5 Ww9BadaWWKOB1bmz24GJrTizThNKlYB56jwfc++aRNOyMe9U05++WkTHrdDxivvfnHbHvyQ1okNk k2IzgUi0Uip6R+nM7f1blHzchvnKWKWpnmwQrKaKpImiqJsGyinJiWnY3ibQ+wz8qdBv3XG0j0UU oiEE9ijm4ZJDJdvcuHFEl2B7tTbLmIjgvSQbRDAqTeSfxLYO7TWRDiDg/SUJrRhG4Mr6JGgZgKu0 +QzFWAu5HYKtGCLq5jI3KlSk3+EyZSkpRcF8TLpc669FVjqi0S2tF8RhEarLLIWepsRqxgLUwxRu PThTIy4RK5ixXIXcmK+cWUSpnf9nE6XjH17T1NGeslLLTgusk7o76MD0wljnjv2PrlHQ6zdu9MGP pNWHS1so8OA7zRsdwE7/cJxGZsFCAT26l3iIu5EawghTZI4Diy4N2H46uPQgCxC5/yeo95Bdwczw qXGvLBHj/gbLNAFmoR6HaaXrgkB9/MXKfciChn9AcgE7bO4Jz6jB0Ebeg7/DoPBdxwP0bIantO0+ 5jynl7cG59Ufg8YTue93nU+x4CYtI9ufFLaNKhUCA1P0JAWyeCWIBSKJIMxCd7cJmYQmTElQLolR LS3q87I+MMPYBdJ2ePuBFUh4jqZMS97kjSgE0UwLI097GI9fXjn+ODVIn9TDCaztCnof7Z+uRs3b eyj6/c27dxLFqros/BV8L6KorFo+cXx7opOZIxIG7P4mQnVGaSolq5LtIFR5kRZj3kWIRjUbaYdb 5eNtrjXKipFRp8GeUOVMUZZ7aalbYLsqEaS8wS0NGQu7hHibbbbbbbchsB3mDxmrg85RGaUenQnS 0kI0RHChKCEIKG5S4dUVbtpbwHKGxMd7hqmfcewKiV7S5MZ7o3IflHua9elHhrRpdUVI1kYhZUXZ HO6ryRjUmGfkOaSfN7NfhYm11puTemwkXrEXdY8pJdrrTgZ8tm7AkdcnYxiat0KRkkGK8vPv3pup TMYcCOLUoG2Kq/vUUvlJxizZLJz3E3X7A9jHe18xW8Tw+eWrQzWw5g1bPg+gUOjIO1HtQeKXu5FT 0mu/eJ2QI41I/O8zbYnYykjofrZ6o7HqDjJ/fTkctpwWsxze0HmcJC26TwGTxGWGTMEsiQcqWI14 nzcWuT89b2RtnpE8Tr+Xp6bBPI+F3xcn0YNNleTmPSZnjOF6DCnffQ+EMefQbXzQ0lDd038hwFzm 40noL3PFRjljU0JPqs6GTmOxjJF3sfW52q+w20bqSv6461zw+XB++MwdrIi3gybzkc9trp9hw1JF 3l59B2GgvxRxNwj/xdyRThQkAlw+mMA= --===============3389936586069604775==--