List:Commits« Previous MessageNext Message »
From:Mattias Jonsson Date:November 24 2009 11:08am
Subject:bzr commit into mysql-5.6-next-mr-bugfixing branch
(mattias.jonsson:2947) Bug#35765
View as plain text  
#At file:///Users/mattiasj/clones/bzrroot/b35765-n-mr-bf/ based on revid:martin.hansson@stripped

 2947 Mattias Jonsson	2009-11-24
      merge of bug#35765 into mysql-next-mr-bugfixing
     @ mysql-test/r/log_tables.result
        Bug #35765  	ALTER TABLE produces wrong error when non-existent storage engine used
        
        Updated result
     @ mysql-test/r/partition.result
        Bug #35765  	ALTER TABLE produces wrong error when non-existent storage engine used
        
        Updated result
     @ mysql-test/r/partition_innodb.result
        Bug #35765  	ALTER TABLE produces wrong error when non-existent storage engine used
        
        Updated result
     @ mysql-test/t/log_tables.test
        Bug #35765  	ALTER TABLE produces wrong error when non-existent storage engine used
        
        Updated test
     @ mysql-test/t/partition.test
        Bug #35765  	ALTER TABLE produces wrong error when non-existent storage engine used
        
        Added test case
     @ mysql-test/t/partition_innodb.test
        Bug #35765  	ALTER TABLE produces wrong error when non-existent storage engine used
        
        Updated test
     @ sql/protocol.cc
        Bug #35765  	ALTER TABLE produces wrong error when non-existent storage engine used
        
        (fix of bug#48939 to avoid test failures on my test build).
     @ sql/sql_yacc.yy
        Bug #35765  	ALTER TABLE produces wrong error when non-existent storage engine used
        
        if no existing engine was given, don't set HA_CREATE_USED_ENGINE

    modified:
      mysql-test/r/log_tables.result
      mysql-test/r/partition.result
      mysql-test/r/partition_innodb.result
      mysql-test/t/log_tables.test
      mysql-test/t/partition.test
      mysql-test/t/partition_innodb.test
      sql/protocol.cc
      sql/sql_yacc.yy
=== modified file 'mysql-test/r/log_tables.result'
--- a/mysql-test/r/log_tables.result	2009-03-11 20:30:56 +0000
+++ b/mysql-test/r/log_tables.result	2009-11-24 11:08:04 +0000
@@ -247,13 +247,10 @@ set global general_log='OFF';
 set global slow_query_log='OFF';
 set @save_storage_engine= @@session.storage_engine;
 set storage_engine= MEMORY;
-alter table mysql.slow_log engine=ndb;
-ERROR HY000: This storage engine cannot be used for log tables"
-alter table mysql.slow_log engine=innodb;
-ERROR HY000: This storage engine cannot be used for log tables"
-alter table mysql.slow_log engine=archive;
-ERROR HY000: This storage engine cannot be used for log tables"
-alter table mysql.slow_log engine=blackhole;
+alter table mysql.slow_log engine=NonExistentEngine;
+Warnings:
+Warning	1286	Unknown table engine 'NonExistentEngine'
+alter table mysql.slow_log engine=memory;
 ERROR HY000: This storage engine cannot be used for log tables"
 set storage_engine= @save_storage_engine;
 drop table mysql.slow_log;

=== modified file 'mysql-test/r/partition.result'
--- a/mysql-test/r/partition.result	2009-10-28 17:22:36 +0000
+++ b/mysql-test/r/partition.result	2009-11-24 11:08:04 +0000
@@ -81,6 +81,42 @@ INSERT INTO t1 VALUES (NULL);
 SELECT * FROM t1 WHERE pk < 0 ORDER BY pk;
 pk
 DROP TABLE t1;
+CREATE TABLE t1 (a INT)
+ENGINE=NonExistentEngine;
+Warnings:
+Warning	1286	Unknown table engine 'NonExistentEngine'
+Warning	1266	Using storage engine MyISAM for table 't1'
+DROP TABLE t1;
+CREATE TABLE t1 (a INT)
+ENGINE=NonExistentEngine
+PARTITION BY HASH (a);
+Warnings:
+Warning	1286	Unknown table engine 'NonExistentEngine'
+Warning	1266	Using storage engine MyISAM for table 't1'
+DROP TABLE t1;
+CREATE TABLE t1 (a INT)
+ENGINE=Memory;
+ALTER TABLE t1 ENGINE=NonExistentEngine;
+Warnings:
+Warning	1286	Unknown table engine 'NonExistentEngine'
+ALTER TABLE t1
+PARTITION BY HASH (a)
+(PARTITION p0 ENGINE=Memory,
+PARTITION p1 ENGINE=NonExistentEngine);
+Warnings:
+Warning	1286	Unknown table engine 'NonExistentEngine'
+ALTER TABLE t1 ENGINE=NonExistentEngine;
+Warnings:
+Warning	1286	Unknown table engine 'NonExistentEngine'
+SHOW CREATE TABLE t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MEMORY DEFAULT CHARSET=latin1
+/*!50100 PARTITION BY HASH (a)
+(PARTITION p0 ENGINE = MEMORY,
+ PARTITION p1 ENGINE = MEMORY) */
+DROP TABLE t1;
 CREATE TABLE t1 (a INT NOT NULL, KEY(a))
 PARTITION BY RANGE(a)
 (PARTITION p1 VALUES LESS THAN (200), PARTITION pmax VALUES LESS THAN MAXVALUE);

=== modified file 'mysql-test/r/partition_innodb.result'
--- a/mysql-test/r/partition_innodb.result	2009-11-05 14:42:03 +0000
+++ b/mysql-test/r/partition_innodb.result	2009-11-24 11:08:04 +0000
@@ -210,7 +210,8 @@ engine = innodb
 partition by list (a)
 (partition p0 values in (0));
 alter table t1 engine = x;
-ERROR HY000: The mix of handlers in the partitions is not allowed in this version of MySQL
+Warnings:
+Warning	1286	Unknown table engine 'x'
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (

=== modified file 'mysql-test/t/log_tables.test'
--- a/mysql-test/t/log_tables.test	2009-03-11 20:30:56 +0000
+++ b/mysql-test/t/log_tables.test	2009-11-24 11:08:04 +0000
@@ -258,14 +258,21 @@ set global slow_query_log='OFF';
 # check that alter table doesn't work for other engines
 set @save_storage_engine= @@session.storage_engine;
 set storage_engine= MEMORY;
+# After fixing bug#35765 the error behaivor changed:
+# If compiled in/enabled ER_UNSUPORTED_LOG_ENGINE
+# If not (i.e. not existant) it will show a warning
+# and use the current one.
+alter table mysql.slow_log engine=NonExistentEngine;
 --error ER_UNSUPORTED_LOG_ENGINE
-alter table mysql.slow_log engine=ndb;
---error ER_UNSUPORTED_LOG_ENGINE
-alter table mysql.slow_log engine=innodb;
---error ER_UNSUPORTED_LOG_ENGINE
-alter table mysql.slow_log engine=archive;
---error ER_UNSUPORTED_LOG_ENGINE
-alter table mysql.slow_log engine=blackhole;
+alter table mysql.slow_log engine=memory;
+#--error ER_UNSUPORTED_LOG_ENGINE
+#alter table mysql.slow_log engine=ndb;
+#--error ER_UNSUPORTED_LOG_ENGINE
+#alter table mysql.slow_log engine=innodb;
+#--error ER_UNSUPORTED_LOG_ENGINE
+#alter table mysql.slow_log engine=archive;
+#--error ER_UNSUPORTED_LOG_ENGINE
+#alter table mysql.slow_log engine=blackhole;
 set storage_engine= @save_storage_engine;
 
 drop table mysql.slow_log;

=== modified file 'mysql-test/t/partition.test'
--- a/mysql-test/t/partition.test	2009-10-28 17:22:36 +0000
+++ b/mysql-test/t/partition.test	2009-11-24 11:08:04 +0000
@@ -98,6 +98,29 @@ SELECT * FROM t1 WHERE pk < 0 ORDER BY p
 DROP TABLE t1;
 
 #
+# Bug#35765: ALTER TABLE produces wrong error when non-existent storage engine
+# used
+CREATE TABLE t1 (a INT)
+ENGINE=NonExistentEngine;
+DROP TABLE t1;
+CREATE TABLE t1 (a INT)
+ENGINE=NonExistentEngine
+PARTITION BY HASH (a);
+DROP TABLE t1;
+CREATE TABLE t1 (a INT)
+ENGINE=Memory;
+ALTER TABLE t1 ENGINE=NonExistentEngine;
+# OK to only specify one partitions engine, since it is already assigned at
+# table level (after create, it is specified on all levels and all parts).
+ALTER TABLE t1
+PARTITION BY HASH (a)
+(PARTITION p0 ENGINE=Memory,
+ PARTITION p1 ENGINE=NonExistentEngine);
+ALTER TABLE t1 ENGINE=NonExistentEngine;
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+#
 # Bug#40494: Crash MYSQL server crashes on range access with partitioning
 #            and order by
 #

=== modified file 'mysql-test/t/partition_innodb.test'
--- a/mysql-test/t/partition_innodb.test	2009-11-05 14:42:03 +0000
+++ b/mysql-test/t/partition_innodb.test	2009-11-24 11:08:04 +0000
@@ -250,7 +250,6 @@ engine = innodb
 partition by list (a)
 (partition p0 values in (0));
 
--- error ER_MIX_HANDLER_ERROR
 alter table t1 engine = x;
 show create table t1;
 drop table t1;

=== modified file 'sql/protocol.cc'
--- a/sql/protocol.cc	2009-10-23 11:22:21 +0000
+++ b/sql/protocol.cc	2009-11-24 11:08:04 +0000
@@ -411,8 +411,8 @@ bool net_send_error_packet(THD *thd, uin
                                            thd->variables.character_set_results,
                                            err, strlen(err),
                                            system_charset_info, &error);
-  length= (uint) (strmake((char*) pos, (char*)converted_err, MYSQL_ERRMSG_SIZE) -
-                  (char*) buff);
+  length= (uint) (strmake((char*) pos, (char*)converted_err,
+                          MYSQL_ERRMSG_SIZE - 1) - (char*) buff);
   err= (char*) buff;
   DBUG_RETURN(net_write_command(net,(uchar) 255, (uchar*) "", 0, (uchar*) err,
                                 length));

=== modified file 'sql/sql_yacc.yy'
--- a/sql/sql_yacc.yy	2009-11-20 12:29:43 +0000
+++ b/sql/sql_yacc.yy	2009-11-24 11:08:04 +0000
@@ -4820,7 +4820,8 @@ create_table_option:
           ENGINE_SYM opt_equal storage_engines
           {
             Lex->create_info.db_type= $3;
-            Lex->create_info.used_fields|= HA_CREATE_USED_ENGINE;
+            if ($3)
+              Lex->create_info.used_fields|= HA_CREATE_USED_ENGINE;
           }
         | TYPE_SYM opt_equal storage_engines
           {


Attachment: [text/bzr-bundle]
Thread
bzr commit into mysql-5.6-next-mr-bugfixing branch(mattias.jonsson:2947) Bug#35765Mattias Jonsson24 Nov