From: Jon Olav Hauglid Date: March 3 2011 11:15am Subject: bzr commit into mysql-5.5 branch (jon.hauglid:3368) Bug#11755431 List-Archive: http://lists.mysql.com/commits/132367 X-Bug: 11755431 Message-Id: <201103031116.p23AphKF010681@rcsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7378614601047805759==" --===============7378614601047805759== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-5.5-bug11755431/ based on revid:alexander.barkov@stripped 3368 Jon Olav Hauglid 2011-03-03 Bug #11755431 (former 47205) MAP 'REPAIR TABLE' TO RECREATE +ANALYZE FOR ENGINES NOT SUPPORTING NATIVE REPAIR Executing 'mysqlcheck --check-upgrade --auto-repair ...' will first issue 'CHECK TABLE FOR UPGRADE' for all tables in the database in order to check if the tables are compatible with the current version of MySQL. Any tables that are found incompatible are then upgraded using 'REPAIR TABLE'. The problem was that some engines (e.g. InnoDB) does not support 'REPAIR TABLE'. This caused any such tables to be left incompatible. As a result such tables were not properly fixed by the mysql_upgrade tool. This patch fixes the problem by first changing 'CHECK TABLE FOR UPGRADE' to return a different error message if the engine does not support REPAIR. Instead of "Table upgrade required. Please do "REPAIR TABLE ..." it will report "Table rebuild required. Please do "ALTER TABLE ... FORCE ..." Second, the patch changes mysqlcheck to do 'ALTER TABLE ... FORCE' instead of 'REPAIR TABLE' in these cases. This patch also fixes 'ALTER TABLE ... FORCE' to actually rebuild the table. This change should be reflected in the documentation. Test case added to mysqlcheck.test @ client/mysqlcheck.c Changed mysqlcheck to do 'ALTER TABLE ... FORCE' if 'CHECK TABLE FOR UPGRADE' reports ER_TABLE_NEEDS_REBUILD and not ER_TABLE_NEEDS_UPGRADE. @ mysql-test/r/mysqlcheck.result Added regression test. @ mysql-test/std_data/bug47205.frm InnoDB 5.0 FRM which contains a varchar primary key using utf8_general_ci. This is an incompatible FRM for 5.5. @ mysql-test/t/mysqlcheck.test Added regression test. @ sql/handler.h Added new HA_CAN_REPAIR flag. @ sql/share/errmsg-utf8.txt Added new error message ER_TABLE_NEEDS_REBUILD @ sql/sql_admin.cc Changed 'CHECK TABLE FOR UPDATE' to give ER_TABLE_NEEDS_REBUILD instead of ER_TABLE_NEEDS_UPGRADE if the engine does not support REPAIR (as indicated by the new HA_CAN_REPAIR flag). @ sql/sql_lex.h Remove unused ALTER_FORCE flag. @ sql/sql_yacc.yy Make sure ALTER TABLE ... FORCE recreates the table by setting the ALTER_RECREATE flag as the ALTER_FORCE flag was unused. @ storage/archive/ha_archive.h Added new HA_CAN_REPAIR flag to Archive @ storage/csv/ha_tina.h Added new HA_CAN_REPAIR flag to CSV @ storage/federated/ha_federated.h Added new HA_CAN_REPAIR flag to Federated @ storage/myisam/ha_myisam.cc Added new HA_CAN_REPAIR flag to MyISAM added: mysql-test/std_data/bug47205.frm modified: client/mysqlcheck.c mysql-test/r/mysqlcheck.result mysql-test/t/mysqlcheck.test sql/handler.cc sql/handler.h sql/share/errmsg-utf8.txt sql/sql_admin.cc sql/sql_lex.h sql/sql_yacc.yy storage/archive/ha_archive.h storage/csv/ha_tina.h storage/federated/ha_federated.h storage/myisam/ha_myisam.cc === modified file 'client/mysqlcheck.c' --- a/client/mysqlcheck.c 2011-01-16 03:59:05 +0000 +++ b/client/mysqlcheck.c 2011-03-03 11:15:45 +0000 @@ -42,7 +42,7 @@ static char *opt_password = 0, *current_ *default_charset= 0, *current_host= 0; static char *opt_plugin_dir= 0, *opt_default_auth= 0; static int first_error = 0; -DYNAMIC_ARRAY tables4repair; +DYNAMIC_ARRAY tables4repair, tables4rebuild; #ifdef HAVE_SMEM static char *shared_memory_base_name=0; #endif @@ -626,6 +626,27 @@ static int fix_database_storage_name(con return rc; } +static int rebuild_table(char *name) +{ + char *query, *ptr; + int rc= 0; + query= (char*)my_malloc(sizeof(char) * (12 + fixed_name_length(name) + 6 + 1), + MYF(MY_WME)); + if (!query) + return 1; + ptr= strmov(query, "ALTER TABLE "); + ptr= fix_table_name(ptr, name); + ptr= strxmov(ptr, " FORCE", NullS); + if (mysql_real_query(sock, query, (uint)(ptr - query))) + { + fprintf(stderr, "Failed to %s\n", query); + fprintf(stderr, "Error: %s\n", mysql_error(sock)); + rc= 1; + } + my_free(query); + return rc; +} + static int process_one_db(char *database) { if (what_to_do == DO_UPGRADE) @@ -739,7 +760,7 @@ static void print_result() MYSQL_ROW row; char prev[NAME_LEN*2+2]; uint i; - my_bool found_error=0; + my_bool found_error=0, table_rebuild=0; res = mysql_use_result(sock); @@ -758,8 +779,14 @@ static void print_result() */ if (found_error && opt_auto_repair && what_to_do != DO_REPAIR && strcmp(row[3],"OK")) - insert_dynamic(&tables4repair, (uchar*) prev); + { + if (table_rebuild) + insert_dynamic(&tables4rebuild, (uchar*) prev); + else + insert_dynamic(&tables4repair, (uchar*) prev); + } found_error=0; + table_rebuild=0; if (opt_silent) continue; } @@ -769,7 +796,11 @@ static void print_result() { printf("%s\n%-9s: %s", row[0], row[2], row[3]); if (strcmp(row[2],"note")) + { found_error=1; + if (opt_auto_repair && strstr(row[3], "ALTER TABLE") != NULL) + table_rebuild=1; + } } else printf("%-9s: %s", row[2], row[3]); @@ -778,7 +809,12 @@ static void print_result() } /* add the last table to be repaired to the list */ if (found_error && opt_auto_repair && what_to_do != DO_REPAIR) - insert_dynamic(&tables4repair, (uchar*) prev); + { + if (table_rebuild) + insert_dynamic(&tables4rebuild, (uchar*) prev); + else + insert_dynamic(&tables4repair, (uchar*) prev); + } mysql_free_result(res); } @@ -876,7 +912,8 @@ int main(int argc, char **argv) } if (opt_auto_repair && - my_init_dynamic_array(&tables4repair, sizeof(char)*(NAME_LEN*2+2),16,64)) + (my_init_dynamic_array(&tables4repair, sizeof(char)*(NAME_LEN*2+2),16,64) || + my_init_dynamic_array(&tables4rebuild, sizeof(char)*(NAME_LEN*2+2),16,64))) { first_error = 1; goto end; @@ -894,7 +931,7 @@ int main(int argc, char **argv) { uint i; - if (!opt_silent && tables4repair.elements) + if (!opt_silent && (tables4repair.elements || tables4rebuild.elements)) puts("\nRepairing tables"); what_to_do = DO_REPAIR; for (i = 0; i < tables4repair.elements ; i++) @@ -902,11 +939,16 @@ int main(int argc, char **argv) char *name= (char*) dynamic_array_ptr(&tables4repair, i); handle_request_for_tables(name, fixed_name_length(name)); } + for (i = 0; i < tables4rebuild.elements ; i++) + rebuild_table((char*) dynamic_array_ptr(&tables4rebuild, i)); } end: dbDisconnect(current_host); if (opt_auto_repair) + { delete_dynamic(&tables4repair); + delete_dynamic(&tables4rebuild); + } my_free(opt_password); #ifdef HAVE_SMEM my_free(shared_memory_base_name); === modified file 'mysql-test/r/mysqlcheck.result' --- a/mysql-test/r/mysqlcheck.result 2010-12-17 11:11:34 +0000 +++ b/mysql-test/r/mysqlcheck.result 2011-03-03 11:15:45 +0000 @@ -260,3 +260,67 @@ End of 5.1 tests # # Bug #35269: mysqlcheck behaves different depending on order of parameters # +# +# Bug#11755431 47205: MAP 'REPAIR TABLE' TO RECREATE +ANALYZE FOR +# ENGINES NOT SUPPORTING NATIVE +# +DROP TABLE IF EXISTS bug47205; +# +# Test 1: Check that ALTER TABLE ... rebuilds the table +CREATE TABLE bug47205(a VARCHAR(20) PRIMARY KEY) +DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci engine=innodb; +INSERT INTO bug47205 VALUES ("foobar"); +FLUSH TABLE bug47205; +# Replace the FRM with a 5.0 FRM that will require upgrade +# Should indicate that ALTER TABLE ... FORCE is needed +CHECK TABLE bug47205 FOR UPGRADE; +Table Op Msg_type Msg_text +test.bug47205 check error Table rebuild required. Please do "ALTER TABLE `bug47205` FORCE" or dump/reload to fix it! +# ALTER TABLE ... FORCE should rebuild the table +# and therefore output "affected rows: 1" +ALTER TABLE bug47205 FORCE; +affected rows: 1 +info: Records: 1 Duplicates: 0 Warnings: 0 +# Table should now be ok +CHECK TABLE bug47205 FOR UPGRADE; +Table Op Msg_type Msg_text +test.bug47205 check status OK +DROP TABLE bug47205; +# +# Test 2: InnoDB - REPAIR not supported +CREATE TABLE bug47205(a VARCHAR(20) PRIMARY KEY) +DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci engine=innodb; +FLUSH TABLE bug47205; +# Replace the FRM with a 5.0 FRM that will require upgrade +# Should indicate that ALTER TABLE .. FORCE is needed +CHECK TABLE bug47205 FOR UPGRADE; +Table Op Msg_type Msg_text +test.bug47205 check error Table rebuild required. Please do "ALTER TABLE `bug47205` FORCE" or dump/reload to fix it! +# Running mysqlcheck to check and upgrade +test.bug47205 +error : Table rebuild required. Please do "ALTER TABLE `bug47205` FORCE" or dump/reload to fix it! + +Repairing tables +# Table should now be ok +CHECK TABLE bug47205 FOR UPGRADE; +Table Op Msg_type Msg_text +test.bug47205 check status OK +DROP TABLE bug47205; +# +# Test 3: MyISAM - REPAIR supported +# Replace old FRM that will require upgrade +# Should indicate that REPAIR TABLE is needed +CHECK TABLE bug47205 FOR UPGRADE; +Table Op Msg_type Msg_text +test.bug47205 check error Table upgrade required. Please do "REPAIR TABLE `bug47205`" or dump/reload to fix it! +# Running mysqlcheck to check and upgrade +test.bug47205 +error : Table upgrade required. Please do "REPAIR TABLE `bug47205`" or dump/reload to fix it! + +Repairing tables +test.bug47205 OK +# Table should now be ok +CHECK TABLE bug47205 FOR UPGRADE; +Table Op Msg_type Msg_text +test.bug47205 check status OK +DROP TABLE bug47205; === added file 'mysql-test/std_data/bug47205.frm' Binary files a/mysql-test/std_data/bug47205.frm 1970-01-01 00:00:00 +0000 and b/mysql-test/std_data/bug47205.frm 2011-03-03 11:15:45 +0000 differ === modified file 'mysql-test/t/mysqlcheck.test' --- a/mysql-test/t/mysqlcheck.test 2010-10-08 07:09:47 +0000 +++ b/mysql-test/t/mysqlcheck.test 2011-03-03 11:15:45 +0000 @@ -229,3 +229,83 @@ drop table `t1-1`; --error 1 --exec $MYSQL_CHECK -aoc test "#mysql50#t1-1" + +--echo # +--echo # Bug#11755431 47205: MAP 'REPAIR TABLE' TO RECREATE +ANALYZE FOR +--echo # ENGINES NOT SUPPORTING NATIVE +--echo # + +--disable_warnings +DROP TABLE IF EXISTS bug47205; +--enable_warnings + +--echo # +--echo # Test 1: Check that ALTER TABLE ... rebuilds the table + +CREATE TABLE bug47205(a VARCHAR(20) PRIMARY KEY) + DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci engine=innodb; + +INSERT INTO bug47205 VALUES ("foobar"); +FLUSH TABLE bug47205; + +--echo # Replace the FRM with a 5.0 FRM that will require upgrade +let $MYSQLD_DATADIR= `select @@datadir`; +--remove_file $MYSQLD_DATADIR/test/bug47205.frm +--copy_file std_data/bug47205.frm $MYSQLD_DATADIR/test/bug47205.frm + +--echo # Should indicate that ALTER TABLE ... FORCE is needed +CHECK TABLE bug47205 FOR UPGRADE; + +--echo # ALTER TABLE ... FORCE should rebuild the table +--echo # and therefore output "affected rows: 1" +--enable_info +ALTER TABLE bug47205 FORCE; +--disable_info + +--echo # Table should now be ok +CHECK TABLE bug47205 FOR UPGRADE; + +DROP TABLE bug47205; + +--echo # +--echo # Test 2: InnoDB - REPAIR not supported + +CREATE TABLE bug47205(a VARCHAR(20) PRIMARY KEY) + DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci engine=innodb; + +FLUSH TABLE bug47205; + +--echo # Replace the FRM with a 5.0 FRM that will require upgrade +let $MYSQLD_DATADIR= `select @@datadir`; +--remove_file $MYSQLD_DATADIR/test/bug47205.frm +--copy_file std_data/bug47205.frm $MYSQLD_DATADIR/test/bug47205.frm + +--echo # Should indicate that ALTER TABLE .. FORCE is needed +CHECK TABLE bug47205 FOR UPGRADE; + +--echo # Running mysqlcheck to check and upgrade +--exec $MYSQL_CHECK --check-upgrade --auto-repair test + +--echo # Table should now be ok +CHECK TABLE bug47205 FOR UPGRADE; + +DROP TABLE bug47205; + +--echo # +--echo # Test 3: MyISAM - REPAIR supported + +--echo # Replace old FRM that will require upgrade +--copy_file std_data/bug36055.frm $MYSQLD_DATADIR/test/bug47205.frm +--copy_file std_data/bug36055.MYD $MYSQLD_DATADIR/test/bug47205.MYD +--copy_file std_data/bug36055.MYI $MYSQLD_DATADIR/test/bug47205.MYI + +--echo # Should indicate that REPAIR TABLE is needed +CHECK TABLE bug47205 FOR UPGRADE; + +--echo # Running mysqlcheck to check and upgrade +--exec $MYSQL_CHECK --check-upgrade --auto-repair test + +--echo # Table should now be ok +CHECK TABLE bug47205 FOR UPGRADE; + +DROP TABLE bug47205; === modified file 'sql/handler.cc' --- a/sql/handler.cc 2011-03-01 14:42:37 +0000 +++ b/sql/handler.cc 2011-03-03 11:15:45 +0000 @@ -3214,9 +3214,13 @@ int handler::ha_repair(THD* thd, HA_CHEC mark_trx_read_write(); - if ((result= repair(thd, check_opt))) - return result; - return update_frm_version(table); + result= repair(thd, check_opt); + DBUG_ASSERT(result == HA_ADMIN_NOT_IMPLEMENTED || + ha_table_flags() & HA_CAN_REPAIR); + + if (result == HA_ADMIN_OK) + result= update_frm_version(table); + return result; } === modified file 'sql/handler.h' --- a/sql/handler.h 2011-01-26 13:23:29 +0000 +++ b/sql/handler.h 2011-03-03 11:15:45 +0000 @@ -153,6 +153,12 @@ ordered. */ #define HA_DUPLICATE_KEY_NOT_IN_ORDER (LL(1) << 36) +/* + Engine supports REPAIR TABLE. Used by CHECK TABLE FOR UPGRADE if an + incompatible table is detected. If this flag is set, CHECK TABLE FOR UPGRADE + will report ER_TABLE_NEEDS_UPGRADE, otherwise ER_TABLE_NEED_REBUILD. +*/ +#define HA_CAN_REPAIR (LL(1) << 37) /* Set of all binlog flags. Currently only contain the capabilities @@ -2010,7 +2016,10 @@ private: upon the table. */ virtual int repair(THD* thd, HA_CHECK_OPT* check_opt) - { return HA_ADMIN_NOT_IMPLEMENTED; } + { + DBUG_ASSERT(!(ha_table_flags() & HA_CAN_REPAIR)); + return HA_ADMIN_NOT_IMPLEMENTED; + } virtual void start_bulk_insert(ha_rows rows) {} virtual int end_bulk_insert() { return 0; } virtual int index_read(uchar * buf, const uchar * key, uint key_len, === modified file 'sql/share/errmsg-utf8.txt' --- a/sql/share/errmsg-utf8.txt 2011-02-21 15:49:03 +0000 +++ b/sql/share/errmsg-utf8.txt 2011-03-03 11:15:45 +0000 @@ -6397,3 +6397,8 @@ ER_STMT_CACHE_FULL ER_MULTI_UPDATE_KEY_CONFLICT eng "Primary key/partition key update is not allowed since the table is updated both as '%-.192s' and '%-.192s'." + +# When translating this error mesage make sure to include "ALTER TABLE" in the +# message as mysqlcheck parses the error message looking for ALTER TABLE. +ER_TABLE_NEEDS_REBUILD + eng "Table rebuild required. Please do \"ALTER TABLE `%-.32s` FORCE\" or dump/reload to fix it!" === modified file 'sql/sql_admin.cc' --- a/sql/sql_admin.cc 2011-01-10 13:12:23 +0000 +++ b/sql/sql_admin.cc 2011-03-03 11:15:45 +0000 @@ -771,8 +771,12 @@ send_result_message: size_t length; protocol->store(STRING_WITH_LEN("error"), system_charset_info); - length=my_snprintf(buf, sizeof(buf), ER(ER_TABLE_NEEDS_UPGRADE), - table->table_name); + if (table->table->file->ha_table_flags() & HA_CAN_REPAIR) + length= my_snprintf(buf, sizeof(buf), ER(ER_TABLE_NEEDS_UPGRADE), + table->table_name); + else + length= my_snprintf(buf, sizeof(buf), ER(ER_TABLE_NEEDS_REBUILD), + table->table_name); protocol->store(buf, length, system_charset_info); fatal_error=1; break; === modified file 'sql/sql_lex.h' --- a/sql/sql_lex.h 2011-03-01 14:42:37 +0000 +++ b/sql/sql_lex.h 2011-03-03 11:15:45 +0000 @@ -944,20 +944,19 @@ inline bool st_select_lex_unit::is_union #define ALTER_CHANGE_COLUMN_DEFAULT (1L << 8) #define ALTER_KEYS_ONOFF (1L << 9) #define ALTER_CONVERT (1L << 10) -#define ALTER_FORCE (1L << 11) -#define ALTER_RECREATE (1L << 12) -#define ALTER_ADD_PARTITION (1L << 13) -#define ALTER_DROP_PARTITION (1L << 14) -#define ALTER_COALESCE_PARTITION (1L << 15) -#define ALTER_REORGANIZE_PARTITION (1L << 16) -#define ALTER_PARTITION (1L << 17) -#define ALTER_ADMIN_PARTITION (1L << 18) -#define ALTER_TABLE_REORG (1L << 19) -#define ALTER_REBUILD_PARTITION (1L << 20) -#define ALTER_ALL_PARTITION (1L << 21) -#define ALTER_REMOVE_PARTITIONING (1L << 22) -#define ALTER_FOREIGN_KEY (1L << 23) -#define ALTER_TRUNCATE_PARTITION (1L << 24) +#define ALTER_RECREATE (1L << 11) +#define ALTER_ADD_PARTITION (1L << 12) +#define ALTER_DROP_PARTITION (1L << 13) +#define ALTER_COALESCE_PARTITION (1L << 14) +#define ALTER_REORGANIZE_PARTITION (1L << 15) +#define ALTER_PARTITION (1L << 16) +#define ALTER_ADMIN_PARTITION (1L << 17) +#define ALTER_TABLE_REORG (1L << 18) +#define ALTER_REBUILD_PARTITION (1L << 19) +#define ALTER_ALL_PARTITION (1L << 20) +#define ALTER_REMOVE_PARTITIONING (1L << 21) +#define ALTER_FOREIGN_KEY (1L << 22) +#define ALTER_TRUNCATE_PARTITION (1L << 23) enum enum_alter_table_change_level { === modified file 'sql/sql_yacc.yy' --- a/sql/sql_yacc.yy 2011-02-16 16:27:35 +0000 +++ b/sql/sql_yacc.yy 2011-03-03 11:15:45 +0000 @@ -6747,7 +6747,7 @@ alter_list_item: } | FORCE_SYM { - Lex->alter_info.flags|= ALTER_FORCE; + Lex->alter_info.flags|= ALTER_RECREATE; } | alter_order_clause { === modified file 'storage/archive/ha_archive.h' --- a/storage/archive/ha_archive.h 2010-10-06 14:34:28 +0000 +++ b/storage/archive/ha_archive.h 2011-03-03 11:15:45 +0000 @@ -90,7 +90,7 @@ public: return (HA_NO_TRANSACTIONS | HA_REC_NOT_IN_SEQ | HA_CAN_BIT_FIELD | HA_BINLOG_ROW_CAPABLE | HA_BINLOG_STMT_CAPABLE | HA_STATS_RECORDS_IS_EXACT | - HA_HAS_RECORDS | + HA_HAS_RECORDS | HA_CAN_REPAIR | HA_FILE_BASED | HA_CAN_INSERT_DELAYED | HA_CAN_GEOMETRY); } ulong index_flags(uint idx, uint part, bool all_parts) const === modified file 'storage/csv/ha_tina.h' --- a/storage/csv/ha_tina.h 2010-07-08 21:20:08 +0000 +++ b/storage/csv/ha_tina.h 2011-03-03 11:15:45 +0000 @@ -106,7 +106,8 @@ public: ulonglong table_flags() const { return (HA_NO_TRANSACTIONS | HA_REC_NOT_IN_SEQ | HA_NO_AUTO_INCREMENT | - HA_BINLOG_ROW_CAPABLE | HA_BINLOG_STMT_CAPABLE); + HA_BINLOG_ROW_CAPABLE | HA_BINLOG_STMT_CAPABLE | + HA_CAN_REPAIR); } ulong index_flags(uint idx, uint part, bool all_parts) const { === modified file 'storage/federated/ha_federated.h' --- a/storage/federated/ha_federated.h 2010-10-06 14:34:28 +0000 +++ b/storage/federated/ha_federated.h 2011-03-03 11:15:45 +0000 @@ -149,7 +149,8 @@ public: HA_BINLOG_ROW_CAPABLE | HA_BINLOG_STMT_CAPABLE | HA_NO_PREFIX_CHAR_KEYS | HA_PRIMARY_KEY_REQUIRED_FOR_DELETE | HA_NO_TRANSACTIONS /* until fixed by WL#2952 */ | - HA_PARTIAL_COLUMN_READ | HA_NULL_IN_KEY); + HA_PARTIAL_COLUMN_READ | HA_NULL_IN_KEY | + HA_CAN_REPAIR); } /* This is a bitmap of flags that says how the storage engine === modified file 'storage/myisam/ha_myisam.cc' --- a/storage/myisam/ha_myisam.cc 2011-01-11 09:07:37 +0000 +++ b/storage/myisam/ha_myisam.cc 2011-03-03 11:15:45 +0000 @@ -639,7 +639,7 @@ ha_myisam::ha_myisam(handlerton *hton, T HA_DUPLICATE_POS | HA_CAN_INDEX_BLOBS | HA_AUTO_PART_KEY | HA_FILE_BASED | HA_CAN_GEOMETRY | HA_NO_TRANSACTIONS | HA_CAN_INSERT_DELAYED | HA_CAN_BIT_FIELD | HA_CAN_RTREEKEYS | - HA_HAS_RECORDS | HA_STATS_RECORDS_IS_EXACT), + HA_HAS_RECORDS | HA_STATS_RECORDS_IS_EXACT | HA_CAN_REPAIR), can_enable_indexes(1) {} --===============7378614601047805759== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jon.hauglid@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jon.hauglid@stripped # target_branch: file:///export/home/x/mysql-5.5-bug11755431/ # testament_sha1: 0a5e96e9f6dec0fcb4691cbe8f09cdc79854f1d4 # timestamp: 2011-03-03 12:15:49 +0100 # base_revision_id: alexander.barkov@stripped\ # 7my9cadoq48gup0z # # Begin bundle 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 --===============7378614601047805759==--