From 055030457ef4de25f7807ca96c48ef5378748cb7 Mon Sep 17 00:00:00 2001
From: Mikael Ronstrom <mikael@mysql.com>
Date: Wed, 2 Dec 2009 08:14:22 +0100
Subject: [PATCH] BUG#49180, fixed MAXVALUE problem

---
 mysql-test/r/partition_column.result | 22 ++++++++++++++++------
 mysql-test/t/partition_column.test   | 17 ++++++++++++++++-
 sql/partition_info.cc                |  2 +-
 3 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/mysql-test/r/partition_column.result b/mysql-test/r/partition_column.result
index 249de9f349..784df3045f 100644
--- a/mysql-test/r/partition_column.result
+++ b/mysql-test/r/partition_column.result
@@ -1,4 +1,14 @@
 drop table if exists t1;
+create table t1 (a int, b int)
+partition by range columns (a,b)
+( partition p0 values less than (maxvalue, 10),
+partition p1 values less than (maxvalue, maxvalue));
+ERROR HY000: VALUES LESS THAN value must be strictly increasing for each partition
+create table t1 (a int, b int, c int)
+partition by range columns (a,b,c)
+( partition p0 values less than (1, maxvalue, 10),
+partition p1 values less than (1, maxvalue, maxvalue));
+ERROR HY000: VALUES LESS THAN value must be strictly increasing for each partition
 create table t1 (a varchar(1) character set latin1 collate latin1_general_ci)
 partition by range columns(a)
 ( partition p0 values less than ('a'),
@@ -89,7 +99,7 @@ subpartition by hash (to_seconds(d))
 subpartitions 4
 ( partition p0 values less than (1, '0', MAXVALUE, '1900-01-01'),
 partition p1 values less than (1, 'a', MAXVALUE, '1999-01-01'),
-partition p2 values less than (1, 'a', MAXVALUE, MAXVALUE),
+partition p2 values less than (1, 'b', MAXVALUE, MAXVALUE),
 partition p3 values less than (1, MAXVALUE, MAXVALUE, MAXVALUE));
 select partition_method, partition_expression, partition_description
 from information_schema.partitions where table_name = "t1";
@@ -102,10 +112,10 @@ RANGE COLUMNS	a,b,c,d	1,'a',MAXVALUE,'1999-01-01'
 RANGE COLUMNS	a,b,c,d	1,'a',MAXVALUE,'1999-01-01'
 RANGE COLUMNS	a,b,c,d	1,'a',MAXVALUE,'1999-01-01'
 RANGE COLUMNS	a,b,c,d	1,'a',MAXVALUE,'1999-01-01'
-RANGE COLUMNS	a,b,c,d	1,'a',MAXVALUE,MAXVALUE
-RANGE COLUMNS	a,b,c,d	1,'a',MAXVALUE,MAXVALUE
-RANGE COLUMNS	a,b,c,d	1,'a',MAXVALUE,MAXVALUE
-RANGE COLUMNS	a,b,c,d	1,'a',MAXVALUE,MAXVALUE
+RANGE COLUMNS	a,b,c,d	1,'b',MAXVALUE,MAXVALUE
+RANGE COLUMNS	a,b,c,d	1,'b',MAXVALUE,MAXVALUE
+RANGE COLUMNS	a,b,c,d	1,'b',MAXVALUE,MAXVALUE
+RANGE COLUMNS	a,b,c,d	1,'b',MAXVALUE,MAXVALUE
 RANGE COLUMNS	a,b,c,d	1,MAXVALUE,MAXVALUE,MAXVALUE
 RANGE COLUMNS	a,b,c,d	1,MAXVALUE,MAXVALUE,MAXVALUE
 RANGE COLUMNS	a,b,c,d	1,MAXVALUE,MAXVALUE,MAXVALUE
@@ -123,7 +133,7 @@ SUBPARTITION BY HASH (to_seconds(d))
 SUBPARTITIONS 4
 (PARTITION p0 VALUES LESS THAN (1,'0',MAXVALUE,'1900-01-01') ENGINE = MyISAM,
  PARTITION p1 VALUES LESS THAN (1,'a',MAXVALUE,'1999-01-01') ENGINE = MyISAM,
- PARTITION p2 VALUES LESS THAN (1,'a',MAXVALUE,MAXVALUE) ENGINE = MyISAM,
+ PARTITION p2 VALUES LESS THAN (1,'b',MAXVALUE,MAXVALUE) ENGINE = MyISAM,
  PARTITION p3 VALUES LESS THAN (1,MAXVALUE,MAXVALUE,MAXVALUE) ENGINE = MyISAM) */
 drop table t1;
 create table t1 (a int, b int)
diff --git a/mysql-test/t/partition_column.test b/mysql-test/t/partition_column.test
index 7577325234..9e47b94b03 100644
--- a/mysql-test/t/partition_column.test
+++ b/mysql-test/t/partition_column.test
@@ -8,6 +8,21 @@
 drop table if exists t1;
 --enable_warnings
 
+#
+# BUG#49180, Possible to define empty intervals for column list partitioning
+#
+--error ER_RANGE_NOT_INCREASING_ERROR
+create table t1 (a int, b int)
+partition by range columns (a,b)
+( partition p0 values less than (maxvalue, 10),
+  partition p1 values less than (maxvalue, maxvalue));
+
+--error ER_RANGE_NOT_INCREASING_ERROR
+create table t1 (a int, b int, c int)
+partition by range columns (a,b,c)
+( partition p0 values less than (1, maxvalue, 10),
+  partition p1 values less than (1, maxvalue, maxvalue));
+
 #
 # BUG#48161, Delivering too few records using collate syntax with partitions
 #
@@ -78,7 +93,7 @@ subpartition by hash (to_seconds(d))
 subpartitions 4
 ( partition p0 values less than (1, '0', MAXVALUE, '1900-01-01'),
   partition p1 values less than (1, 'a', MAXVALUE, '1999-01-01'),
-  partition p2 values less than (1, 'a', MAXVALUE, MAXVALUE),
+  partition p2 values less than (1, 'b', MAXVALUE, MAXVALUE),
   partition p3 values less than (1, MAXVALUE, MAXVALUE, MAXVALUE));
 select partition_method, partition_expression, partition_description
   from information_schema.partitions where table_name = "t1";
diff --git a/sql/partition_info.cc b/sql/partition_info.cc
index 355a4ba6b6..56d79ac0d4 100644
--- a/sql/partition_info.cc
+++ b/sql/partition_info.cc
@@ -801,7 +801,7 @@ int partition_info::compare_column_values(const void *first_arg,
     if (first->max_value || second->max_value)
     {
       if (first->max_value && second->max_value)
-        continue;
+        return 0;
       if (second->max_value)
         return -1;
       else
-- 
2.30.9