diff options
author | Mikael Ronstrom <mikael@mysql.com> | 2009-10-28 01:11:17 +0100 |
---|---|---|
committer | Mikael Ronstrom <mikael@mysql.com> | 2009-10-28 01:11:17 +0100 |
commit | 10fed1aca0096acb135c2065233e84d61b00b9cf (patch) | |
tree | 32eac76c7c0b41298c58cd40bc85138e177d8a98 /mysql-test | |
parent | cc43a2089cf6f45afb2cb5c15e2a077b075b80f8 (diff) | |
download | mariadb-git-10fed1aca0096acb135c2065233e84d61b00b9cf.tar.gz |
BUG#48165, needed to introduce length restrictions on partitioning fields to ensure that no stack overruns occur
Diffstat (limited to 'mysql-test')
-rw-r--r-- | mysql-test/r/partition_column.result | 15 | ||||
-rw-r--r-- | mysql-test/r/partition_datatype.result | 8 | ||||
-rw-r--r-- | mysql-test/t/partition_column.test | 17 | ||||
-rw-r--r-- | mysql-test/t/partition_datatype.test | 9 |
4 files changed, 43 insertions, 6 deletions
diff --git a/mysql-test/r/partition_column.result b/mysql-test/r/partition_column.result index 0ba56110116..0dc81240782 100644 --- a/mysql-test/r/partition_column.result +++ b/mysql-test/r/partition_column.result @@ -1,4 +1,19 @@ drop table if exists t1; +create table t1 (a varchar(1500), b varchar(1570)) +partition by list column_list(a,b) +( partition p0 values in (('a','b'))); +ERROR HY000: The total length of the partitioning fields is too large +create table t1 (a varchar(1023) character set utf8 collate utf8_spanish2_ci) +partition by range column_list(a) +( partition p0 values less than ('CZ'), +partition p1 values less than ('CH'), +partition p2 values less than ('D')); +insert into t1 values ('czz'),('chi'),('ci'),('cg'); +select * from t1 where a between 'cg' AND 'ci'; +a +ci +cg +drop table t1; set @@sql_mode=allow_invalid_dates; create table t1 (a char, b char, c date) partition by range column_list (a,b,c) diff --git a/mysql-test/r/partition_datatype.result b/mysql-test/r/partition_datatype.result index 607afb71da5..47ea799f497 100644 --- a/mysql-test/r/partition_datatype.result +++ b/mysql-test/r/partition_datatype.result @@ -273,7 +273,7 @@ select * from t1 where a = 'y'; a y drop table t1; -create table t1 (a varchar(65531)) partition by key (a); +create table t1 (a varchar(3068)) partition by key (a); insert into t1 values ('bbbb'); insert into t1 values ('aaaa'); select * from t1 where a = 'aaaa'; @@ -286,7 +286,7 @@ select * from t1 where a = 'bbbb'; a bbbb drop table t1; -create table t1 (a varchar(65532)) partition by key (a); +create table t1 (a varchar(3069)) partition by key (a); insert into t1 values ('bbbb'); insert into t1 values ('aaaa'); select * from t1 where a = 'aaaa'; @@ -299,7 +299,7 @@ select * from t1 where a = 'bbbb'; a bbbb drop table t1; -create table t1 (a varchar(65533) not null) partition by key (a); +create table t1 (a varchar(3070) not null) partition by key (a); insert into t1 values ('bbbb'); insert into t1 values ('aaaa'); select * from t1 where a = 'aaaa'; @@ -312,6 +312,8 @@ select * from t1 where a = 'bbbb'; a bbbb drop table t1; +create table t1 (a varchar(3070)) partition by key (a); +ERROR HY000: The total length of the partitioning fields is too large create table t1 (a varchar(65533)) partition by key (a); ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs create table t1 (a varchar(65534) not null) partition by key (a); diff --git a/mysql-test/t/partition_column.test b/mysql-test/t/partition_column.test index 16f12bfad04..1c5b859a211 100644 --- a/mysql-test/t/partition_column.test +++ b/mysql-test/t/partition_column.test @@ -9,6 +9,23 @@ drop table if exists t1; --enable_warnings # +# BUG#48164, too long partition fields causes crash +# +--error ER_PARTITION_FIELDS_TOO_LONG +create table t1 (a varchar(1500), b varchar(1570)) +partition by list column_list(a,b) +( partition p0 values in (('a','b'))); + +create table t1 (a varchar(1023) character set utf8 collate utf8_spanish2_ci) +partition by range column_list(a) +( partition p0 values less than ('CZ'), + partition p1 values less than ('CH'), + partition p2 values less than ('D')); +insert into t1 values ('czz'),('chi'),('ci'),('cg'); +select * from t1 where a between 'cg' AND 'ci'; +drop table t1; + +# # BUG#48165, sql_mode gives error # set @@sql_mode=allow_invalid_dates; diff --git a/mysql-test/t/partition_datatype.test b/mysql-test/t/partition_datatype.test index 7440a9bf3a3..0a9fae15354 100644 --- a/mysql-test/t/partition_datatype.test +++ b/mysql-test/t/partition_datatype.test @@ -4,6 +4,7 @@ # as partition by key # Created to verify the fix for Bug#31705 # Partitions: crash if varchar length > 65530 +# BUG#48164 limited size to 3072 bytes # -- source include/have_partition.inc @@ -192,27 +193,29 @@ create table t1 (a set('y','n')) partition by key (a); insert into t1 values ('y'); select * from t1 where a = 'y'; drop table t1; -create table t1 (a varchar(65531)) partition by key (a); +create table t1 (a varchar(3068)) partition by key (a); insert into t1 values ('bbbb'); insert into t1 values ('aaaa'); select * from t1 where a = 'aaaa'; select * from t1 where a like 'aaa%'; select * from t1 where a = 'bbbb'; drop table t1; -create table t1 (a varchar(65532)) partition by key (a); +create table t1 (a varchar(3069)) partition by key (a); insert into t1 values ('bbbb'); insert into t1 values ('aaaa'); select * from t1 where a = 'aaaa'; select * from t1 where a like 'aaa%'; select * from t1 where a = 'bbbb'; drop table t1; -create table t1 (a varchar(65533) not null) partition by key (a); +create table t1 (a varchar(3070) not null) partition by key (a); insert into t1 values ('bbbb'); insert into t1 values ('aaaa'); select * from t1 where a = 'aaaa'; select * from t1 where a like 'aaa%'; select * from t1 where a = 'bbbb'; drop table t1; +-- error ER_PARTITION_FIELDS_TOO_LONG +create table t1 (a varchar(3070)) partition by key (a); -- error ER_TOO_BIG_ROWSIZE create table t1 (a varchar(65533)) partition by key (a); -- error ER_TOO_BIG_ROWSIZE |