summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavi Arnaut <Davi.Arnaut@Sun.COM>2008-10-24 11:58:48 -0200
committerDavi Arnaut <Davi.Arnaut@Sun.COM>2008-10-24 11:58:48 -0200
commitd4438c99ff0b2a5e9541b1b259b612fb34c46fe7 (patch)
tree93d7ac1e0b63dd10f9a9a294cce8145816509837
parent463c837c3aaa5c85e8024463bf247a926932de5d (diff)
parent256f41edfe87bf92807d9c9500ae627a0045ef5e (diff)
downloadmariadb-git-d4438c99ff0b2a5e9541b1b259b612fb34c46fe7.tar.gz
Merge from mysql-5.1-5.1.29-rc into mysql-5.1-bugteam
-rw-r--r--mysql-test/r/alter_table.result12
-rw-r--r--mysql-test/r/binlog_format_basic.result3
-rw-r--r--mysql-test/t/alter_table.test10
-rw-r--r--mysql-test/t/binlog_format_basic.test7
-rw-r--r--sql/field.cc35
-rw-r--r--sql/field.h2
6 files changed, 59 insertions, 10 deletions
diff --git a/mysql-test/r/alter_table.result b/mysql-test/r/alter_table.result
index e01f4fa047b..f0edfc9bb59 100644
--- a/mysql-test/r/alter_table.result
+++ b/mysql-test/r/alter_table.result
@@ -1240,4 +1240,16 @@ select (@orig_max_data_length > @changed_max_data_length);
(@orig_max_data_length > @changed_max_data_length)
1
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
diff --git a/mysql-test/r/binlog_format_basic.result b/mysql-test/r/binlog_format_basic.result
index 3fee9bade7e..72ba35cd753 100644
--- a/mysql-test/r/binlog_format_basic.result
+++ b/mysql-test/r/binlog_format_basic.result
@@ -1,3 +1,6 @@
+SELECT @@GLOBAL.binlog_format;
+@@GLOBAL.binlog_format
+STATEMENT
'#---------------------BS_STVARS_002_01----------------------#'
SELECT COUNT(@@GLOBAL.binlog_format);
COUNT(@@GLOBAL.binlog_format)
diff --git a/mysql-test/t/alter_table.test b/mysql-test/t/alter_table.test
index 8502ba3f3d3..76d57e76491 100644
--- a/mysql-test/t/alter_table.test
+++ b/mysql-test/t/alter_table.test
@@ -977,4 +977,14 @@ select (@orig_max_data_length > @changed_max_data_length);
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
diff --git a/mysql-test/t/binlog_format_basic.test b/mysql-test/t/binlog_format_basic.test
index e9dfade8f56..819ad047c1b 100644
--- a/mysql-test/t/binlog_format_basic.test
+++ b/mysql-test/t/binlog_format_basic.test
@@ -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----------------------#'
####################################################################
# Displaying default value #
diff --git a/sql/field.cc b/sql/field.cc
index 16bf0fdb070..a03beb4e8af 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -8783,28 +8783,43 @@ bool Field::eq_def(Field *field)
return 1;
}
+
/**
@return
returns 1 if the fields are equally defined
*/
+
bool Field_enum::eq_def(Field *field)
{
if (!Field::eq_def(field))
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;
- for (uint i=0 ; i < from_lib->count ; i++)
+
+bool Field_enum::compare_enum_values(TYPELIB *values)
+{
+ if (typelib->count != values->count)
+ return FALSE;
+ for (uint i= 0; i < typelib->count; i++)
if (my_strnncoll(field_charset,
- (const uchar*)typelib->type_names[i],
- strlen(typelib->type_names[i]),
- (const uchar*)from_lib->type_names[i],
- strlen(from_lib->type_names[i])))
- return 0;
- return 1;
+ (const uchar*) typelib->type_names[i],
+ typelib->type_lengths[i],
+ (const uchar*) values->type_names[i],
+ values->type_lengths[i]))
+ return FALSE;
+ 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
returns 1 if the fields are equally defined
diff --git a/sql/field.h b/sql/field.h
index aa69fea6bdd..81905cc64ae 100644
--- a/sql/field.h
+++ b/sql/field.h
@@ -1853,6 +1853,8 @@ public:
CHARSET_INFO *sort_charset(void) const { return &my_charset_bin; }
private:
int do_save_field_metadata(uchar *first_byte);
+ bool compare_enum_values(TYPELIB *values);
+ uint is_equal(Create_field *new_field);
};