mirror of
https://github.com/MariaDB/server.git
synced 2025-01-22 06:44:16 +01:00
48e0325c5e
Problem was that it tried to run partitioning function calls when opening a partitioned table, when it was explicitly disabled. Solution is to check if the partitioning plugin is ready to use before using any partitioning specific calls. mysql-test/r/disabled_partition.require: Bug#39893: Crash if select on a partitioned table, when partitioning is disabled New require file to use when partitioning is disabled (but compiled in) mysql-test/r/not_partition.result: Bug#39893: Crash if select on a partitioned table, when partitioning is disabled Updated testcase mysql-test/r/partition_disabled.result: Bug#39893: Crash if select on a partitioned table, when partitioning is disabled New result file mysql-test/std_data/parts/t1.frm: Bug#39893: Crash if select on a partitioned table, when partitioning is disabled frm file for 'create table t1 (a int) partition by hash (a)' mysql-test/t/not_partition.test: Bug#39893: Crash if select on a partitioned table, when partitioning is disabled Updated test cases mysql-test/t/partition_disabled-master.opt: Bug#39893: Crash if select on a partitioned table, when partitioning is disabled New opt file mysql-test/t/partition_disabled.test: Bug#39893: Crash if select on a partitioned table, when partitioning is disabled New test file (looks like not_partition.test, but with different errors) sql/sql_yacc.yy: Bug#39893: Crash if select on a partitioned table, when partitioning is disabled Better error message (it is already built with partitioning, but is explicitly disabled). sql/table.cc: Bug#39893: Crash if select on a partitioned table, when partitioning is disabled If the partitioning plugin is not ready, fail to open the table.
85 lines
2.4 KiB
Text
85 lines
2.4 KiB
Text
--disable_abort_on_error
|
|
# Run this test only when mysqld don't has partitioning (not compiled with)
|
|
# the statements are not expected to work, just check that we
|
|
# can't crash the server
|
|
-- require r/not_partition.require
|
|
disable_query_log;
|
|
show variables like "have_partitioning";
|
|
enable_query_log;
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS t1;
|
|
--enable_warnings
|
|
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
|
|
|
#
|
|
# Bug#39893: Crash if select on a partitioned table,
|
|
# when partitioning is disabled
|
|
FLUSH TABLES;
|
|
--copy_file $MYSQLTEST_VARDIR/std_data_ln/parts/t1.frm $MYSQLD_DATADIR/test/t1.frm
|
|
SELECT * FROM t1;
|
|
TRUNCATE TABLE t1;
|
|
ANALYZE TABLE t1;
|
|
CHECK TABLE t1;
|
|
OPTIMIZE TABLE t1;
|
|
REPAIR TABLE t1;
|
|
ALTER TABLE t1 REPAIR PARTITION ALL;
|
|
ALTER TABLE t1 CHECK PARTITION ALL;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION ALL;
|
|
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
|
ALTER TABLE t1 REBUILD PARTITION ALL;
|
|
ALTER TABLE t1 ENGINE Memory;
|
|
ALTER TABLE t1 ADD (new INT);
|
|
DROP TABLE t1;
|
|
|
|
--error ER_FEATURE_DISABLED
|
|
CREATE TABLE t1 (
|
|
firstname VARCHAR(25) NOT NULL,
|
|
lastname VARCHAR(25) NOT NULL,
|
|
username VARCHAR(16) NOT NULL,
|
|
email VARCHAR(35),
|
|
joined DATE NOT NULL
|
|
)
|
|
PARTITION BY KEY(joined)
|
|
PARTITIONS 6;
|
|
|
|
--error ER_FEATURE_DISABLED
|
|
ALTER TABLE t1 PARTITION BY KEY(joined) PARTITIONS 2;
|
|
|
|
--error ER_BAD_TABLE_ERROR
|
|
drop table t1;
|
|
|
|
--error ER_FEATURE_DISABLED
|
|
CREATE TABLE t1 (
|
|
firstname VARCHAR(25) NOT NULL,
|
|
lastname VARCHAR(25) NOT NULL,
|
|
username VARCHAR(16) NOT NULL,
|
|
email VARCHAR(35),
|
|
joined DATE NOT NULL
|
|
)
|
|
PARTITION BY RANGE( YEAR(joined) ) (
|
|
PARTITION p0 VALUES LESS THAN (1960),
|
|
PARTITION p1 VALUES LESS THAN (1970),
|
|
PARTITION p2 VALUES LESS THAN (1980),
|
|
PARTITION p3 VALUES LESS THAN (1990),
|
|
PARTITION p4 VALUES LESS THAN MAXVALUE
|
|
);
|
|
--error ER_BAD_TABLE_ERROR
|
|
drop table t1;
|
|
|
|
--error ER_FEATURE_DISABLED
|
|
CREATE TABLE t1 (id INT, purchased DATE)
|
|
PARTITION BY RANGE( YEAR(purchased) )
|
|
SUBPARTITION BY HASH( TO_DAYS(purchased) )
|
|
SUBPARTITIONS 2 (
|
|
PARTITION p0 VALUES LESS THAN (1990),
|
|
PARTITION p1 VALUES LESS THAN (2000),
|
|
PARTITION p2 VALUES LESS THAN MAXVALUE
|
|
);
|
|
--error ER_BAD_TABLE_ERROR
|
|
drop table t1;
|
|
|
|
# Create a table without partitions to test "EXPLAIN PARTITIONS"
|
|
create table t1 (a varchar(10) charset latin1 collate latin1_bin);
|
|
insert into t1 values (''),(' '),('a'),('a '),('a ');
|
|
explain partitions select * from t1 where a='a ' OR a='a';
|
|
drop table t1;
|