From: Tatiana A. Nurnberg Date: October 9 2009 9:57pm Subject: bzr commit into mysql-5.1-bugteam branch (azundris:3156) Bug#43508 List-Archive: http://lists.mysql.com/commits/86468 X-Bug: 43508 Message-Id: <20091009215804.4F6D9BD34CB@azundris.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_u9Jr8KROLr9+lnlVFTZZ7A)" --Boundary_(ID_u9Jr8KROLr9+lnlVFTZZ7A) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline #At file:///Users/tnurnberg/forest/43508-waffleday/51-43508-waffleday/ based on revid:mattias.jonsson@stripped 3156 Tatiana A. Nurnberg 2009-10-09 [merge] manual merge of Bug#43508 modified: mysql-test/r/alter_table.result mysql-test/t/alter_table.test sql/field.cc sql/field.h === modified file 'mysql-test/r/alter_table.result' --- a/mysql-test/r/alter_table.result 2009-09-29 10:58:42 +0000 +++ b/mysql-test/r/alter_table.result 2009-10-09 21:57:43 +0000 @@ -1330,4 +1330,12 @@ ALTER TABLE t1 MODIFY COLUMN a SET('a1', affected rows: 2 info: Records: 2 Duplicates: 0 Warnings: 0 DROP TABLE t1; +CREATE TABLE t1 (f1 TIMESTAMP NULL DEFAULT NULL, +f2 INT(11) DEFAULT NULL) ENGINE=MYISAM DEFAULT CHARSET=utf8; +INSERT INTO t1 VALUES (NULL, NULL), ("2009-10-09 11:46:19", 2); +this should affect no rows as there is no real change +ALTER TABLE t1 CHANGE COLUMN f1 f1_no_real_change TIMESTAMP NULL DEFAULT NULL; +affected rows: 0 +info: Records: 0 Duplicates: 0 Warnings: 0 +DROP TABLE t1; End of 5.1 tests === modified file 'mysql-test/t/alter_table.test' --- a/mysql-test/t/alter_table.test 2009-09-29 10:58:42 +0000 +++ b/mysql-test/t/alter_table.test 2009-10-09 21:57:43 +0000 @@ -1046,4 +1046,19 @@ ALTER TABLE t1 MODIFY COLUMN a SET('a1', --disable_info DROP TABLE t1; +# +# Bug#43508: Renaming timestamp or date column triggers table copy +# + +CREATE TABLE t1 (f1 TIMESTAMP NULL DEFAULT NULL, + f2 INT(11) DEFAULT NULL) ENGINE=MYISAM DEFAULT CHARSET=utf8; + +INSERT INTO t1 VALUES (NULL, NULL), ("2009-10-09 11:46:19", 2); + +--echo this should affect no rows as there is no real change +--enable_info +ALTER TABLE t1 CHANGE COLUMN f1 f1_no_real_change TIMESTAMP NULL DEFAULT NULL; +--disable_info +DROP TABLE t1; + --echo End of 5.1 tests === modified file 'sql/field.cc' --- a/sql/field.cc 2009-09-29 10:58:42 +0000 +++ b/sql/field.cc 2009-10-09 21:57:43 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc. +/* Copyright 2000-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -6550,20 +6550,9 @@ uint Field::is_equal(Create_field *new_f } -/* If one of the fields is binary and the other one isn't return 1 else 0 */ - -bool Field_str::compare_str_field_flags(Create_field *new_field, uint32 flag_arg) -{ - return (((new_field->flags & (BINCMP_FLAG | BINARY_FLAG)) && - !(flag_arg & (BINCMP_FLAG | BINARY_FLAG))) || - (!(new_field->flags & (BINCMP_FLAG | BINARY_FLAG)) && - (flag_arg & (BINCMP_FLAG | BINARY_FLAG)))); -} - - uint Field_str::is_equal(Create_field *new_field) { - if (compare_str_field_flags(new_field, flags)) + if (field_flags_are_binary() != new_field->field_flags_are_binary()) return 0; return ((new_field->sql_type == real_type()) && @@ -8329,7 +8318,7 @@ uint Field_blob::max_packed_col_length(u uint Field_blob::is_equal(Create_field *new_field) { - if (compare_str_field_flags(new_field, flags)) + if (field_flags_are_binary() != new_field->field_flags_are_binary()) return 0; return ((new_field->sql_type == get_blob_type_from_length(max_data_length())) @@ -8889,7 +8878,7 @@ uint Field_enum::is_equal(Create_field * The fields are compatible if they have the same flags, type, charset and have the same underlying length. */ - if (compare_str_field_flags(new_field, flags) || + if (new_field->field_flags_are_binary() != field_flags_are_binary() || new_field->sql_type != real_type() || new_field->charset != field_charset || new_field->pack_length != pack_length()) @@ -9658,7 +9647,7 @@ bool Create_field::init(THD *thd, char * } if (length == 0) - fld_length= 0; /* purecov: inspected */ + fld_length= NULL; /* purecov: inspected */ } sign_len= fld_type_modifier & UNSIGNED_FLAG ? 0 : 1; @@ -9810,8 +9799,7 @@ bool Create_field::init(THD *thd, char * case MYSQL_TYPE_TIMESTAMP: if (fld_length == NULL) { - /* Compressed date YYYYMMDDHHMMSS */ - length= MAX_DATETIME_COMPRESSED_WIDTH; + length= MAX_DATETIME_WIDTH; } else if (length != MAX_DATETIME_WIDTH) { @@ -9876,7 +9864,7 @@ bool Create_field::init(THD *thd, char * sql_type= MYSQL_TYPE_NEWDATE; /* fall trough */ case MYSQL_TYPE_NEWDATE: - length= 10; + length= MAX_DATE_WIDTH; break; case MYSQL_TYPE_TIME: length= 10; @@ -9957,6 +9945,17 @@ bool Create_field::init(THD *thd, char * DBUG_RETURN(TRUE); } + switch (fld_type) { + case MYSQL_TYPE_DATE: + case MYSQL_TYPE_NEWDATE: + case MYSQL_TYPE_TIME: + case MYSQL_TYPE_DATETIME: + case MYSQL_TYPE_TIMESTAMP: + charset= &my_charset_bin; + flags|= BINCMP_FLAG; + default: break; + } + DBUG_RETURN(FALSE); /* success */ } === modified file 'sql/field.h' --- a/sql/field.h 2009-09-29 10:58:42 +0000 +++ b/sql/field.h 2009-10-09 21:57:43 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc. +/* Copyright 2000-2008 MySQL AB, 2008, 2009 Sun Microsystems, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -610,6 +610,12 @@ protected: handle_int64(to, from, low_byte_first_from, table->s->db_low_byte_first); return from + sizeof(int64); } + + bool field_flags_are_binary() + { + return (flags & (BINCMP_FLAG | BINARY_FLAG)) != 0; + } + }; @@ -669,7 +675,6 @@ public: friend class Create_field; my_decimal *val_decimal(my_decimal *); virtual bool str_needs_quotes() { return TRUE; } - bool compare_str_field_flags(Create_field *new_field, uint32 flags); uint is_equal(Create_field *new_field); }; @@ -1284,12 +1289,12 @@ public: Field_date(uchar *ptr_arg, uchar *null_ptr_arg, uchar null_bit_arg, enum utype unireg_check_arg, const char *field_name_arg, CHARSET_INFO *cs) - :Field_str(ptr_arg, 10, null_ptr_arg, null_bit_arg, + :Field_str(ptr_arg, MAX_DATE_WIDTH, null_ptr_arg, null_bit_arg, unireg_check_arg, field_name_arg, cs) {} Field_date(bool maybe_null_arg, const char *field_name_arg, CHARSET_INFO *cs) - :Field_str((uchar*) 0,10, maybe_null_arg ? (uchar*) "": 0,0, + :Field_str((uchar*) 0, MAX_DATE_WIDTH, maybe_null_arg ? (uchar*) "": 0,0, NONE, field_name_arg, cs) {} enum_field_types type() const { return MYSQL_TYPE_DATE;} enum ha_base_keytype key_type() const { return HA_KEYTYPE_ULONG_INT; } @@ -1399,12 +1404,12 @@ public: Field_datetime(uchar *ptr_arg, uchar *null_ptr_arg, uchar null_bit_arg, enum utype unireg_check_arg, const char *field_name_arg, CHARSET_INFO *cs) - :Field_str(ptr_arg, 19, null_ptr_arg, null_bit_arg, + :Field_str(ptr_arg, MAX_DATETIME_WIDTH, null_ptr_arg, null_bit_arg, unireg_check_arg, field_name_arg, cs) {} Field_datetime(bool maybe_null_arg, const char *field_name_arg, CHARSET_INFO *cs) - :Field_str((uchar*) 0,19, maybe_null_arg ? (uchar*) "": 0,0, + :Field_str((uchar*) 0, MAX_DATETIME_WIDTH, maybe_null_arg ? (uchar*) "": 0,0, NONE, field_name_arg, cs) {} enum_field_types type() const { return MYSQL_TYPE_DATETIME;} #ifdef HAVE_LONG_LONG @@ -2076,6 +2081,11 @@ public: Item *on_update_value, LEX_STRING *comment, char *change, List *interval_list, CHARSET_INFO *cs, uint uint_geom_type); + + bool field_flags_are_binary() + { + return (flags & (BINCMP_FLAG | BINARY_FLAG)) != 0; + } }; --Boundary_(ID_u9Jr8KROLr9+lnlVFTZZ7A) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/azundris@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/azundris@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: azundris@stripped # target_branch: file:///Users/tnurnberg/forest/43508-waffleday/51-\ # 43508-waffleday/ # testament_sha1: 0b2eb0e022805fc90e9da346b0ff1e33170a2404 # timestamp: 2009-10-09 23:58:04 +0200 # source_branch: file:///Users/tnurnberg/forest/43508/51-43508/ # base_revision_id: mattias.jonsson@stripped\ # d06no60fal558l2p # # Begin bundle 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 AjqKJoTY/ox0Qf/i7kinChILc4JmgA== --Boundary_(ID_u9Jr8KROLr9+lnlVFTZZ7A)--