Loading mysql-test/r/partition_pruning.result +38 −0 Original line number Diff line number Diff line Loading @@ -545,3 +545,41 @@ show status like 'Handler_read_next'; Variable_name Value Handler_read_next 0 drop table t1, t2; create table t1 ( f_int1 mediumint, f_int2 integer) partition by list(mod(f_int1,4)) ( partition p_3 values in (-3), partition p_2 values in (-2), partition p_1 values in (-1), partition p0 values in (0), partition p1 values in (1), partition p2 values in (2), partition p3 values in (3) ); insert into t1 values (9, 9), (8, 8), (7, 7), (6, 6), (5, 5), (4, 4), (3, 3), (2, 2), (1, 1); select * from t1 where f_int1 between 5 and 15 order by f_int1; f_int1 f_int2 5 5 6 6 7 7 8 8 9 9 drop table t1; create table t1 (a char(10)) partition by list(length(a)) ( partition p1 values in (1), partition p2 values in (2), partition p3 values in (3), partition p4 values in (4), partition p5 values in (5) ); insert into t1 values ('a'),('bb'),('ccc'),('dddd'),('eeEee'); select * from t1 where a>='a' and a <= 'dddd'; a a bb ccc dddd explain partitions select * from t1 where a>='a' and a <= 'dddd'; id select_type table partitions type possible_keys key key_len ref rows Extra 1 SIMPLE t1 p1,p2,p3,p4,p5 ALL NULL NULL NULL NULL 5 Using where drop table t1; mysql-test/t/partition_pruning.test +32 −0 Original line number Diff line number Diff line Loading @@ -447,5 +447,37 @@ show status like 'Handler_read_next'; drop table t1, t2; # BUG#18025 # part1: mediumint columns create table t1 ( f_int1 mediumint, f_int2 integer) partition by list(mod(f_int1,4)) ( partition p_3 values in (-3), partition p_2 values in (-2), partition p_1 values in (-1), partition p0 values in (0), partition p1 values in (1), partition p2 values in (2), partition p3 values in (3) ); insert into t1 values (9, 9), (8, 8), (7, 7), (6, 6), (5, 5), (4, 4), (3, 3), (2, 2), (1, 1); select * from t1 where f_int1 between 5 and 15 order by f_int1; drop table t1; # part2: bug in pruning code create table t1 (a char(10)) partition by list(length(a)) ( partition p1 values in (1), partition p2 values in (2), partition p3 values in (3), partition p4 values in (4), partition p5 values in (5) ); insert into t1 values ('a'),('bb'),('ccc'),('dddd'),('eeEee'); select * from t1 where a>='a' and a <= 'dddd'; explain partitions select * from t1 where a>='a' and a <= 'dddd'; drop table t1; # No tests for NULLs in RANGE(monotonic_expr()) - they depend on BUG#15447 # being fixed. sql/opt_range.cc +1 −1 Original line number Diff line number Diff line Loading @@ -339,7 +339,7 @@ class SEL_ARG :public Sql_alloc if (min_flag || max_flag) return FALSE; byte *min_val= (byte *)min_value; byte *max_val= (byte *)min_value; byte *max_val= (byte *)max_value; if (maybe_null) { Loading sql/sql_partition.cc +1 −0 Original line number Diff line number Diff line Loading @@ -5643,6 +5643,7 @@ static void set_up_range_analysis_info(partition_info *part_info) switch (field->type()) { case MYSQL_TYPE_TINY: case MYSQL_TYPE_SHORT: case MYSQL_TYPE_INT24: case MYSQL_TYPE_LONG: case MYSQL_TYPE_LONGLONG: part_info->get_part_iter_for_interval= Loading Loading
mysql-test/r/partition_pruning.result +38 −0 Original line number Diff line number Diff line Loading @@ -545,3 +545,41 @@ show status like 'Handler_read_next'; Variable_name Value Handler_read_next 0 drop table t1, t2; create table t1 ( f_int1 mediumint, f_int2 integer) partition by list(mod(f_int1,4)) ( partition p_3 values in (-3), partition p_2 values in (-2), partition p_1 values in (-1), partition p0 values in (0), partition p1 values in (1), partition p2 values in (2), partition p3 values in (3) ); insert into t1 values (9, 9), (8, 8), (7, 7), (6, 6), (5, 5), (4, 4), (3, 3), (2, 2), (1, 1); select * from t1 where f_int1 between 5 and 15 order by f_int1; f_int1 f_int2 5 5 6 6 7 7 8 8 9 9 drop table t1; create table t1 (a char(10)) partition by list(length(a)) ( partition p1 values in (1), partition p2 values in (2), partition p3 values in (3), partition p4 values in (4), partition p5 values in (5) ); insert into t1 values ('a'),('bb'),('ccc'),('dddd'),('eeEee'); select * from t1 where a>='a' and a <= 'dddd'; a a bb ccc dddd explain partitions select * from t1 where a>='a' and a <= 'dddd'; id select_type table partitions type possible_keys key key_len ref rows Extra 1 SIMPLE t1 p1,p2,p3,p4,p5 ALL NULL NULL NULL NULL 5 Using where drop table t1;
mysql-test/t/partition_pruning.test +32 −0 Original line number Diff line number Diff line Loading @@ -447,5 +447,37 @@ show status like 'Handler_read_next'; drop table t1, t2; # BUG#18025 # part1: mediumint columns create table t1 ( f_int1 mediumint, f_int2 integer) partition by list(mod(f_int1,4)) ( partition p_3 values in (-3), partition p_2 values in (-2), partition p_1 values in (-1), partition p0 values in (0), partition p1 values in (1), partition p2 values in (2), partition p3 values in (3) ); insert into t1 values (9, 9), (8, 8), (7, 7), (6, 6), (5, 5), (4, 4), (3, 3), (2, 2), (1, 1); select * from t1 where f_int1 between 5 and 15 order by f_int1; drop table t1; # part2: bug in pruning code create table t1 (a char(10)) partition by list(length(a)) ( partition p1 values in (1), partition p2 values in (2), partition p3 values in (3), partition p4 values in (4), partition p5 values in (5) ); insert into t1 values ('a'),('bb'),('ccc'),('dddd'),('eeEee'); select * from t1 where a>='a' and a <= 'dddd'; explain partitions select * from t1 where a>='a' and a <= 'dddd'; drop table t1; # No tests for NULLs in RANGE(monotonic_expr()) - they depend on BUG#15447 # being fixed.
sql/opt_range.cc +1 −1 Original line number Diff line number Diff line Loading @@ -339,7 +339,7 @@ class SEL_ARG :public Sql_alloc if (min_flag || max_flag) return FALSE; byte *min_val= (byte *)min_value; byte *max_val= (byte *)min_value; byte *max_val= (byte *)max_value; if (maybe_null) { Loading
sql/sql_partition.cc +1 −0 Original line number Diff line number Diff line Loading @@ -5643,6 +5643,7 @@ static void set_up_range_analysis_info(partition_info *part_info) switch (field->type()) { case MYSQL_TYPE_TINY: case MYSQL_TYPE_SHORT: case MYSQL_TYPE_INT24: case MYSQL_TYPE_LONG: case MYSQL_TYPE_LONGLONG: part_info->get_part_iter_for_interval= Loading