Merge from mysql-5.1-5.1.29-rc into mysql-5.1-bugteam

This commit is contained in:
Davi Arnaut 2008-10-24 11:58:48 -02:00
commit be7629e370
6 changed files with 61 additions and 12 deletions

View File

@ -1240,4 +1240,16 @@ select (@orig_max_data_length > @changed_max_data_length);
(@orig_max_data_length > @changed_max_data_length) (@orig_max_data_length > @changed_max_data_length)
1 1
drop table t1; drop table t1;
CREATE TABLE t1(a INT AUTO_INCREMENT PRIMARY KEY,
b ENUM('a', 'b', 'c') NOT NULL);
INSERT INTO t1 (b) VALUES ('a'), ('c'), ('b'), ('b'), ('a');
ALTER TABLE t1 MODIFY b ENUM('a', 'z', 'b', 'c') NOT NULL;
SELECT * FROM t1;
a b
1 a
2 c
3 b
4 b
5 a
DROP TABLE t1;
End of 5.1 tests End of 5.1 tests

View File

@ -1,3 +1,6 @@
SELECT @@GLOBAL.binlog_format;
@@GLOBAL.binlog_format
STATEMENT
'#---------------------BS_STVARS_002_01----------------------#' '#---------------------BS_STVARS_002_01----------------------#'
SELECT COUNT(@@GLOBAL.binlog_format); SELECT COUNT(@@GLOBAL.binlog_format);
COUNT(@@GLOBAL.binlog_format) COUNT(@@GLOBAL.binlog_format)

View File

@ -977,4 +977,14 @@ select (@orig_max_data_length > @changed_max_data_length);
drop table t1; drop table t1;
#
# Bug #23113: Different behavior on altering ENUM fields between 5.0 and 5.1
#
CREATE TABLE t1(a INT AUTO_INCREMENT PRIMARY KEY,
b ENUM('a', 'b', 'c') NOT NULL);
INSERT INTO t1 (b) VALUES ('a'), ('c'), ('b'), ('b'), ('a');
ALTER TABLE t1 MODIFY b ENUM('a', 'z', 'b', 'c') NOT NULL;
SELECT * FROM t1;
DROP TABLE t1;
--echo End of 5.1 tests --echo End of 5.1 tests

View File

@ -22,6 +22,13 @@
# # # #
############################################################################### ###############################################################################
###################################################################
# BUG#39812: Make statement replication default for 5.1 (to match 5.0)
# We just verify that the default binlog_format is STATEMENT in 5.1.
# In 6.0, it should be MIXED.
###################################################################
SELECT @@GLOBAL.binlog_format;
--echo '#---------------------BS_STVARS_002_01----------------------#' --echo '#---------------------BS_STVARS_002_01----------------------#'
#################################################################### ####################################################################
# Displaying default value # # Displaying default value #

View File

@ -8783,28 +8783,43 @@ bool Field::eq_def(Field *field)
return 1; return 1;
} }
/** /**
@return @return
returns 1 if the fields are equally defined returns 1 if the fields are equally defined
*/ */
bool Field_enum::eq_def(Field *field) bool Field_enum::eq_def(Field *field)
{ {
if (!Field::eq_def(field)) if (!Field::eq_def(field))
return 0; return 0;
TYPELIB *from_lib=((Field_enum*) field)->typelib; return compare_enum_values(((Field_enum*) field)->typelib);
}
if (typelib->count < from_lib->count)
return 0; bool Field_enum::compare_enum_values(TYPELIB *values)
for (uint i=0 ; i < from_lib->count ; i++) {
if (typelib->count != values->count)
return FALSE;
for (uint i= 0; i < typelib->count; i++)
if (my_strnncoll(field_charset, if (my_strnncoll(field_charset,
(const uchar*) typelib->type_names[i], (const uchar*) typelib->type_names[i],
strlen(typelib->type_names[i]), typelib->type_lengths[i],
(const uchar*)from_lib->type_names[i], (const uchar*) values->type_names[i],
strlen(from_lib->type_names[i]))) values->type_lengths[i]))
return 0; return FALSE;
return 1; return TRUE;
} }
uint Field_enum::is_equal(Create_field *new_field)
{
if (!Field_str::is_equal(new_field))
return 0;
return compare_enum_values(new_field->interval);
}
/** /**
@return @return
returns 1 if the fields are equally defined returns 1 if the fields are equally defined

View File

@ -1853,6 +1853,8 @@ public:
CHARSET_INFO *sort_charset(void) const { return &my_charset_bin; } CHARSET_INFO *sort_charset(void) const { return &my_charset_bin; }
private: private:
int do_save_field_metadata(uchar *first_byte); int do_save_field_metadata(uchar *first_byte);
bool compare_enum_values(TYPELIB *values);
uint is_equal(Create_field *new_field);
}; };