diff options
author | unknown <iggy@recycle.(none)> | 2007-04-23 13:50:34 -0400 |
---|---|---|
committer | unknown <iggy@recycle.(none)> | 2007-04-23 13:50:34 -0400 |
commit | 6b573ac56281b26ef24122c5c87df13c541207af (patch) | |
tree | 0a3feb59e46ca016b13793a94e4d12c161d9e4bd /mysql-test | |
parent | 5ab8bf08b386877b658810b204bcbf7f912a2268 (diff) | |
download | mariadb-git-6b573ac56281b26ef24122c5c87df13c541207af.tar.gz |
Bug#25141 Crash Server on Partitioning command
- The function build_table_filename() builds up a string unconditionally
using the forward slash as a path separator. Later, when the string is
searched for FN_LIBCHAR by the set_up_table_before_create() function, a
null pointer is returned that is finally used by strlen in the
append_file_to_dir() function which causes the crash.
mysql-test/r/partition.result:
Bug#25141 Crash Server on Partitioning command
- Updated results
mysql-test/t/partition.test:
Bug#25141 Crash Server on Partitioning command
- Enable test on Windows.
- Move failing Windows tests to partition_not_winodws test
sql/sql_table.cc:
Bug#25141 Crash Server on Partitioning command
- Use OS specific path separator when building table_filename
mysql-test/r/partition_not_windows.result:
Bug#25141 Crash Server on Partitioning command
- Non-Windows results.
mysql-test/r/partition_windows.result:
Bug#25141 Crash Server on Partitioning command
- Windows specific tests
mysql-test/t/partition_not_windows.test:
Bug#25141 Crash Server on Partitioning command
- Non-Windows specific partition tests
mysql-test/t/partition_windows.test:
Bug#25141 Crash Server on Partitioning command
- Windows specific partition tests.
Diffstat (limited to 'mysql-test')
-rw-r--r-- | mysql-test/r/partition.result | 13 | ||||
-rw-r--r-- | mysql-test/r/partition_not_windows.result | 27 | ||||
-rw-r--r-- | mysql-test/r/partition_windows.result | 14 | ||||
-rw-r--r-- | mysql-test/t/partition.test | 69 | ||||
-rw-r--r-- | mysql-test/t/partition_not_windows.test | 100 | ||||
-rw-r--r-- | mysql-test/t/partition_windows.test | 29 |
6 files changed, 170 insertions, 82 deletions
diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result index 2e5fa4b9195..8e0ae617a6b 100644 --- a/mysql-test/r/partition.result +++ b/mysql-test/r/partition.result @@ -1087,19 +1087,6 @@ a 2 1 drop table t1; -create table t1 (a int) engine myisam -partition by range (a) -subpartition by hash (a) -(partition p0 VALUES LESS THAN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/tmpdata' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/tmpinx' -(SUBPARTITION subpart00, SUBPARTITION subpart01)); -Checking if file exists before alter -ALTER TABLE t1 REORGANIZE PARTITION p0 INTO -(partition p1 VALUES LESS THAN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/tmpdata' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/tmpinx' -(SUBPARTITION subpart10, SUBPARTITION subpart11), -partition p2 VALUES LESS THAN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/tmpdata' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/tmpinx' -(SUBPARTITION subpart20, SUBPARTITION subpart21)); -Checking if file exists after alter -drop table t1; create table t1 (a bigint unsigned not null, primary key(a)) engine = myisam partition by key (a) diff --git a/mysql-test/r/partition_not_windows.result b/mysql-test/r/partition_not_windows.result new file mode 100644 index 00000000000..31ea300e8ed --- /dev/null +++ b/mysql-test/r/partition_not_windows.result @@ -0,0 +1,27 @@ +create table t1 (a int) engine myisam +partition by range (a) +subpartition by hash (a) +(partition p0 VALUES LESS THAN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/tmpdata' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/tmpinx' +(SUBPARTITION subpart00, SUBPARTITION subpart01)); +Checking if file exists before alter +ALTER TABLE t1 REORGANIZE PARTITION p0 INTO +(partition p1 VALUES LESS THAN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/tmpdata' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/tmpinx' +(SUBPARTITION subpart10, SUBPARTITION subpart11), +partition p2 VALUES LESS THAN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/tmpdata' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/tmpinx' +(SUBPARTITION subpart20, SUBPARTITION subpart21)); +Checking if file exists after alter +drop table t1; +DROP TABLE IF EXISTS `example`; +CREATE TABLE `example` ( +`ID_EXAMPLE` int(10) unsigned NOT NULL AUTO_INCREMENT, +`DESCRIPTION` varchar(30) NOT NULL, +`LEVEL` smallint(5) unsigned DEFAULT NULL, +PRIMARY KEY (`ID_EXAMPLE`) +) ENGINE = MYISAM +PARTITION BY HASH(ID_EXAMPLE)( +PARTITION p0 DATA DIRECTORY = '/build/5.1/data/partitiontest/p0Data', +PARTITION p1 DATA DIRECTORY = '/build/5.1/data/partitiontest/p1Data', +PARTITION p2 DATA DIRECTORY = '/build/5.1/data/partitiontest/p2Data', +PARTITION p3 DATA DIRECTORY = '/build/5.1/data/partitiontest/p3Data' +); +ERROR HY000: Can't create/write to file '/build/5.1/data/partitiontest/p0Data/example#P#p0.MYD' (Errcode: 2) diff --git a/mysql-test/r/partition_windows.result b/mysql-test/r/partition_windows.result new file mode 100644 index 00000000000..1fc9e2ba254 --- /dev/null +++ b/mysql-test/r/partition_windows.result @@ -0,0 +1,14 @@ +DROP TABLE IF EXISTS `example`; +CREATE TABLE `example` ( +`ID_EXAMPLE` int(10) unsigned NOT NULL AUTO_INCREMENT, +`DESCRIPTION` varchar(30) NOT NULL, +`LEVEL` smallint(5) unsigned DEFAULT NULL, +PRIMARY KEY (`ID_EXAMPLE`) +) ENGINE = MYISAM +PARTITION BY HASH(ID_EXAMPLE)( +PARTITION p0 DATA DIRECTORY = 'C:/build/5.1/data/partitiontest/p0Data', +PARTITION p1 DATA DIRECTORY = 'C:/build/5.1/data/partitiontest/p1Data', +PARTITION p2 DATA DIRECTORY = 'C:/build/5.1/data/partitiontest/p2Data', +PARTITION p3 DATA DIRECTORY = 'C:/build/5.1/data/partitiontest/p3Data' +); +ERROR HY000: Can't create/write to file 'C:\build\5.1\data\partitiontest\p0Data\example#P#p0.MYD' (Errcode: 2) diff --git a/mysql-test/t/partition.test b/mysql-test/t/partition.test index 399f3c4a41d..e99593b03a8 100644 --- a/mysql-test/t/partition.test +++ b/mysql-test/t/partition.test @@ -5,11 +5,6 @@ # -- source include/have_partition.inc -# -# This test is disabled on Windows due to BUG#19107 -# --- source include/not_windows.inc - --disable_warnings drop table if exists t1; --enable_warnings @@ -1274,70 +1269,6 @@ select * from t1 ORDER BY a DESC; drop table t1; # -# Bug 20770 Partitions: DATA DIRECTORY clause change in reorganize -# doesn't remove old directory -# ---disable_query_log ---exec mkdir $MYSQLTEST_VARDIR/master-data/tmpdata || true -eval SET @data_dir = 'DATA DIRECTORY = ''$MYSQLTEST_VARDIR/master-data/tmpdata'''; -let $data_directory = `select @data_dir`; - ---exec mkdir $MYSQLTEST_VARDIR/master-data/tmpinx || true -eval SET @inx_dir = 'INDEX DIRECTORY = ''$MYSQLTEST_VARDIR/master-data/tmpinx'''; -let $inx_directory = `select @inx_dir`; ---enable_query_log - ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR -eval create table t1 (a int) engine myisam -partition by range (a) -subpartition by hash (a) -(partition p0 VALUES LESS THAN (1) $data_directory $inx_directory - (SUBPARTITION subpart00, SUBPARTITION subpart01)); - ---echo Checking if file exists before alter ---file_exists $MYSQLTEST_VARDIR/master-data/test/t1.frm ---file_exists $MYSQLTEST_VARDIR/master-data/test/t1.par ---file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p0#SP#subpart00.MYD ---file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p0#SP#subpart00.MYI ---file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p0#SP#subpart01.MYD ---file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p0#SP#subpart01.MYI ---file_exists $MYSQLTEST_VARDIR/master-data/tmpdata/t1#P#p0#SP#subpart00.MYD ---file_exists $MYSQLTEST_VARDIR/master-data/tmpdata/t1#P#p0#SP#subpart01.MYD ---file_exists $MYSQLTEST_VARDIR/master-data/tmpinx/t1#P#p0#SP#subpart00.MYI ---file_exists $MYSQLTEST_VARDIR/master-data/tmpinx/t1#P#p0#SP#subpart01.MYI - ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR -eval ALTER TABLE t1 REORGANIZE PARTITION p0 INTO -(partition p1 VALUES LESS THAN (1) $data_directory $inx_directory - (SUBPARTITION subpart10, SUBPARTITION subpart11), - partition p2 VALUES LESS THAN (2) $data_directory $inx_directory - (SUBPARTITION subpart20, SUBPARTITION subpart21)); - ---echo Checking if file exists after alter ---file_exists $MYSQLTEST_VARDIR/master-data/test/t1.frm ---file_exists $MYSQLTEST_VARDIR/master-data/test/t1.par ---file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p1#SP#subpart10.MYD ---file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p1#SP#subpart10.MYI ---file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p1#SP#subpart11.MYD ---file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p1#SP#subpart11.MYI ---file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p2#SP#subpart20.MYD ---file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p2#SP#subpart20.MYI ---file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p2#SP#subpart21.MYD ---file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p2#SP#subpart21.MYI ---file_exists $MYSQLTEST_VARDIR/master-data/tmpdata/t1#P#p1#SP#subpart10.MYD ---file_exists $MYSQLTEST_VARDIR/master-data/tmpdata/t1#P#p1#SP#subpart11.MYD ---file_exists $MYSQLTEST_VARDIR/master-data/tmpdata/t1#P#p2#SP#subpart20.MYD ---file_exists $MYSQLTEST_VARDIR/master-data/tmpdata/t1#P#p2#SP#subpart21.MYD ---file_exists $MYSQLTEST_VARDIR/master-data/tmpinx/t1#P#p1#SP#subpart10.MYI ---file_exists $MYSQLTEST_VARDIR/master-data/tmpinx/t1#P#p1#SP#subpart11.MYI ---file_exists $MYSQLTEST_VARDIR/master-data/tmpinx/t1#P#p2#SP#subpart20.MYI ---file_exists $MYSQLTEST_VARDIR/master-data/tmpinx/t1#P#p2#SP#subpart21.MYI - -drop table t1; ---exec rmdir $MYSQLTEST_VARDIR/master-data/tmpdata || true ---exec rmdir $MYSQLTEST_VARDIR/master-data/tmpinx || true - -# # Bug 21388: Bigint fails to find record # create table t1 (a bigint unsigned not null, primary key(a)) diff --git a/mysql-test/t/partition_not_windows.test b/mysql-test/t/partition_not_windows.test new file mode 100644 index 00000000000..27f76eb4279 --- /dev/null +++ b/mysql-test/t/partition_not_windows.test @@ -0,0 +1,100 @@ +# Non-windows specific partition tests. +--source include/not_windows.inc +--source include/have_partition.inc + +# partition.test used to contained the following note: +# This test is disabled on Windows due to BUG#19107 +# All tests passed on Windows except the following which should be moved into +# partition.test once the bug has been resolved. + +# +# Bug 20770 Partitions: DATA DIRECTORY clause change in reorganize +# doesn't remove old directory + +--disable_query_log +--exec mkdir $MYSQLTEST_VARDIR/master-data/tmpdata || true +eval SET @data_dir = 'DATA DIRECTORY = ''$MYSQLTEST_VARDIR/master-data/tmpdata'''; +let $data_directory = `select @data_dir`; + +--exec mkdir $MYSQLTEST_VARDIR/master-data/tmpinx || true +eval SET @inx_dir = 'INDEX DIRECTORY = ''$MYSQLTEST_VARDIR/master-data/tmpinx'''; +let $inx_directory = `select @inx_dir`; +--enable_query_log + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval create table t1 (a int) engine myisam +partition by range (a) +subpartition by hash (a) +(partition p0 VALUES LESS THAN (1) $data_directory $inx_directory + (SUBPARTITION subpart00, SUBPARTITION subpart01)); + +--echo Checking if file exists before alter +--file_exists $MYSQLTEST_VARDIR/master-data/test/t1.frm +--file_exists $MYSQLTEST_VARDIR/master-data/test/t1.par +--file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p0#SP#subpart00.MYD +--file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p0#SP#subpart00.MYI +--file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p0#SP#subpart01.MYD +--file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p0#SP#subpart01.MYI +--file_exists $MYSQLTEST_VARDIR/master-data/tmpdata/t1#P#p0#SP#subpart00.MYD +--file_exists $MYSQLTEST_VARDIR/master-data/tmpdata/t1#P#p0#SP#subpart01.MYD +--file_exists $MYSQLTEST_VARDIR/master-data/tmpinx/t1#P#p0#SP#subpart00.MYI +--file_exists $MYSQLTEST_VARDIR/master-data/tmpinx/t1#P#p0#SP#subpart01.MYI + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval ALTER TABLE t1 REORGANIZE PARTITION p0 INTO +(partition p1 VALUES LESS THAN (1) $data_directory $inx_directory + (SUBPARTITION subpart10, SUBPARTITION subpart11), + partition p2 VALUES LESS THAN (2) $data_directory $inx_directory + (SUBPARTITION subpart20, SUBPARTITION subpart21)); + +--echo Checking if file exists after alter +--file_exists $MYSQLTEST_VARDIR/master-data/test/t1.frm +--file_exists $MYSQLTEST_VARDIR/master-data/test/t1.par +--file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p1#SP#subpart10.MYD +--file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p1#SP#subpart10.MYI +--file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p1#SP#subpart11.MYD +--file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p1#SP#subpart11.MYI +--file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p2#SP#subpart20.MYD +--file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p2#SP#subpart20.MYI +--file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p2#SP#subpart21.MYD +--file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p2#SP#subpart21.MYI +--file_exists $MYSQLTEST_VARDIR/master-data/tmpdata/t1#P#p1#SP#subpart10.MYD +--file_exists $MYSQLTEST_VARDIR/master-data/tmpdata/t1#P#p1#SP#subpart11.MYD +--file_exists $MYSQLTEST_VARDIR/master-data/tmpdata/t1#P#p2#SP#subpart20.MYD +--file_exists $MYSQLTEST_VARDIR/master-data/tmpdata/t1#P#p2#SP#subpart21.MYD +--file_exists $MYSQLTEST_VARDIR/master-data/tmpinx/t1#P#p1#SP#subpart10.MYI +--file_exists $MYSQLTEST_VARDIR/master-data/tmpinx/t1#P#p1#SP#subpart11.MYI +--file_exists $MYSQLTEST_VARDIR/master-data/tmpinx/t1#P#p2#SP#subpart20.MYI +--file_exists $MYSQLTEST_VARDIR/master-data/tmpinx/t1#P#p2#SP#subpart21.MYI + +drop table t1; +--exec rmdir $MYSQLTEST_VARDIR/master-data/tmpdata || true +--exec rmdir $MYSQLTEST_VARDIR/master-data/tmpinx || true + +# End Windows specific test failures. + +# These tests contain non-Windows specific directory/file format. + +# +# Bug 25141: Crash Server on Partitioning command +# + +--disable_warnings +DROP TABLE IF EXISTS `example`; +--enable_warnings + +--disable_abort_on_error +CREATE TABLE `example` ( + `ID_EXAMPLE` int(10) unsigned NOT NULL AUTO_INCREMENT, + `DESCRIPTION` varchar(30) NOT NULL, + `LEVEL` smallint(5) unsigned DEFAULT NULL, + PRIMARY KEY (`ID_EXAMPLE`) +) ENGINE = MYISAM +PARTITION BY HASH(ID_EXAMPLE)( +PARTITION p0 DATA DIRECTORY = '/build/5.1/data/partitiontest/p0Data', +PARTITION p1 DATA DIRECTORY = '/build/5.1/data/partitiontest/p1Data', +PARTITION p2 DATA DIRECTORY = '/build/5.1/data/partitiontest/p2Data', +PARTITION p3 DATA DIRECTORY = '/build/5.1/data/partitiontest/p3Data' +); +--enable_abort_on_error + diff --git a/mysql-test/t/partition_windows.test b/mysql-test/t/partition_windows.test new file mode 100644 index 00000000000..a0723feac44 --- /dev/null +++ b/mysql-test/t/partition_windows.test @@ -0,0 +1,29 @@ +# Windows-specific partition tests +--source include/windows.inc +--source include/have_partition.inc + +# These tests contain Windows specific directory/file format. + +# +# Bug 25141: Crash Server on Partitioning command +# + +--disable_warnings +DROP TABLE IF EXISTS `example`; +--enable_warnings + +--disable_abort_on_error +CREATE TABLE `example` ( + `ID_EXAMPLE` int(10) unsigned NOT NULL AUTO_INCREMENT, + `DESCRIPTION` varchar(30) NOT NULL, + `LEVEL` smallint(5) unsigned DEFAULT NULL, + PRIMARY KEY (`ID_EXAMPLE`) +) ENGINE = MYISAM +PARTITION BY HASH(ID_EXAMPLE)( +PARTITION p0 DATA DIRECTORY = 'C:/build/5.1/data/partitiontest/p0Data', +PARTITION p1 DATA DIRECTORY = 'C:/build/5.1/data/partitiontest/p1Data', +PARTITION p2 DATA DIRECTORY = 'C:/build/5.1/data/partitiontest/p2Data', +PARTITION p3 DATA DIRECTORY = 'C:/build/5.1/data/partitiontest/p3Data' +); +--enable_abort_on_error + |