Commit 3edb0ae9 authored by Mattias Jonsson's avatar Mattias Jonsson

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
parent b9e10c89
...@@ -247,13 +247,10 @@ set global general_log='OFF'; ...@@ -247,13 +247,10 @@ set global general_log='OFF';
set global slow_query_log='OFF'; set global slow_query_log='OFF';
set @save_storage_engine= @@session.storage_engine; set @save_storage_engine= @@session.storage_engine;
set storage_engine= MEMORY; set storage_engine= MEMORY;
alter table mysql.slow_log engine=ndb; alter table mysql.slow_log engine=NonExistentEngine;
ERROR HY000: This storage engine cannot be used for log tables" Warnings:
alter table mysql.slow_log engine=innodb; Warning 1286 Unknown table engine 'NonExistentEngine'
ERROR HY000: This storage engine cannot be used for log tables" alter table mysql.slow_log engine=memory;
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;
ERROR HY000: This storage engine cannot be used for log tables" ERROR HY000: This storage engine cannot be used for log tables"
set storage_engine= @save_storage_engine; set storage_engine= @save_storage_engine;
drop table mysql.slow_log; drop table mysql.slow_log;
......
...@@ -81,6 +81,42 @@ INSERT INTO t1 VALUES (NULL); ...@@ -81,6 +81,42 @@ INSERT INTO t1 VALUES (NULL);
SELECT * FROM t1 WHERE pk < 0 ORDER BY pk; SELECT * FROM t1 WHERE pk < 0 ORDER BY pk;
pk pk
DROP TABLE t1; 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)) CREATE TABLE t1 (a INT NOT NULL, KEY(a))
PARTITION BY RANGE(a) PARTITION BY RANGE(a)
(PARTITION p1 VALUES LESS THAN (200), PARTITION pmax VALUES LESS THAN MAXVALUE); (PARTITION p1 VALUES LESS THAN (200), PARTITION pmax VALUES LESS THAN MAXVALUE);
......
...@@ -210,7 +210,8 @@ engine = innodb ...@@ -210,7 +210,8 @@ engine = innodb
partition by list (a) partition by list (a)
(partition p0 values in (0)); (partition p0 values in (0));
alter table t1 engine = x; 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; show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
......
...@@ -258,14 +258,21 @@ set global slow_query_log='OFF'; ...@@ -258,14 +258,21 @@ set global slow_query_log='OFF';
# check that alter table doesn't work for other engines # check that alter table doesn't work for other engines
set @save_storage_engine= @@session.storage_engine; set @save_storage_engine= @@session.storage_engine;
set storage_engine= MEMORY; 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 --error ER_UNSUPORTED_LOG_ENGINE
alter table mysql.slow_log engine=ndb; alter table mysql.slow_log engine=memory;
--error ER_UNSUPORTED_LOG_ENGINE #--error ER_UNSUPORTED_LOG_ENGINE
alter table mysql.slow_log engine=innodb; #alter table mysql.slow_log engine=ndb;
--error ER_UNSUPORTED_LOG_ENGINE #--error ER_UNSUPORTED_LOG_ENGINE
alter table mysql.slow_log engine=archive; #alter table mysql.slow_log engine=innodb;
--error ER_UNSUPORTED_LOG_ENGINE #--error ER_UNSUPORTED_LOG_ENGINE
alter table mysql.slow_log engine=blackhole; #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; set storage_engine= @save_storage_engine;
drop table mysql.slow_log; drop table mysql.slow_log;
......
...@@ -97,6 +97,29 @@ INSERT INTO t1 VALUES (NULL); ...@@ -97,6 +97,29 @@ INSERT INTO t1 VALUES (NULL);
SELECT * FROM t1 WHERE pk < 0 ORDER BY pk; SELECT * FROM t1 WHERE pk < 0 ORDER BY pk;
DROP TABLE t1; 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 # Bug#40494: Crash MYSQL server crashes on range access with partitioning
# and order by # and order by
......
...@@ -250,7 +250,6 @@ engine = innodb ...@@ -250,7 +250,6 @@ engine = innodb
partition by list (a) partition by list (a)
(partition p0 values in (0)); (partition p0 values in (0));
-- error ER_MIX_HANDLER_ERROR
alter table t1 engine = x; alter table t1 engine = x;
show create table t1; show create table t1;
drop table t1; drop table t1;
......
...@@ -411,8 +411,8 @@ bool net_send_error_packet(THD *thd, uint sql_errno, const char *err, ...@@ -411,8 +411,8 @@ bool net_send_error_packet(THD *thd, uint sql_errno, const char *err,
thd->variables.character_set_results, thd->variables.character_set_results,
err, strlen(err), err, strlen(err),
system_charset_info, &error); system_charset_info, &error);
length= (uint) (strmake((char*) pos, (char*)converted_err, MYSQL_ERRMSG_SIZE) - length= (uint) (strmake((char*) pos, (char*)converted_err,
(char*) buff); MYSQL_ERRMSG_SIZE - 1) - (char*) buff);
err= (char*) buff; err= (char*) buff;
DBUG_RETURN(net_write_command(net,(uchar) 255, (uchar*) "", 0, (uchar*) err, DBUG_RETURN(net_write_command(net,(uchar) 255, (uchar*) "", 0, (uchar*) err,
length)); length));
......
...@@ -4820,7 +4820,8 @@ create_table_option: ...@@ -4820,7 +4820,8 @@ create_table_option:
ENGINE_SYM opt_equal storage_engines ENGINE_SYM opt_equal storage_engines
{ {
Lex->create_info.db_type= $3; 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 | TYPE_SYM opt_equal storage_engines
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment