mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 13:32:33 +01:00
Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.1
into sunlight.local:/local_work/tmp_merge-5.1-opt-mysql
This commit is contained in:
commit
8cd88a9179
4 changed files with 174 additions and 4 deletions
|
@ -775,3 +775,89 @@ ref NULL
|
|||
rows 2
|
||||
Extra
|
||||
drop table t2;
|
||||
create table t1 (s1 int);
|
||||
explain partitions select 1 from t1 union all select 2;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 NULL system NULL NULL NULL NULL 0 const row not found
|
||||
2 UNION NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
NULL UNION RESULT <union1,2> NULL ALL NULL NULL NULL NULL NULL
|
||||
drop table t1;
|
||||
create table t1 (a bigint unsigned not null) partition by range(a) (
|
||||
partition p0 values less than (10),
|
||||
partition p1 values less than (100),
|
||||
partition p2 values less than (1000),
|
||||
partition p3 values less than (18446744073709551000),
|
||||
partition p4 values less than (18446744073709551614)
|
||||
);
|
||||
insert into t1 values (5),(15),(105),(1005);
|
||||
insert into t1 values (18446744073709551000+1);
|
||||
insert into t1 values (18446744073709551614-1);
|
||||
explain partitions select * from t1 where a < 10;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 system NULL NULL NULL NULL 1
|
||||
explain partitions select * from t1
|
||||
where a >= 18446744073709551000-1 and a <= 18446744073709551000+1;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p3,p4 ALL NULL NULL NULL NULL 3 Using where
|
||||
explain partitions select * from t1
|
||||
where a between 18446744073709551001 and 18446744073709551002;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a = 18446744073709551000;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a = 18446744073709551613;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a = 18446744073709551614;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
drop table t1;
|
||||
create table t1 (a int)
|
||||
partition by range((a & 0xFF) << 56) (
|
||||
partition p0 values less than (0x40 << 56),
|
||||
partition p1 values less than (0x80 << 56),
|
||||
partition p2 values less than (0xFF << 56)
|
||||
);
|
||||
insert into t1 values (0x20), (0x20), (0x41), (0x41), (0xFE), (0xFE);
|
||||
explain partitions select * from t1 where a=0;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a=0xFE;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p2 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a>0xFE and a<= 0xFF;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
drop table t1;
|
||||
create table t1(a bigint unsigned not null) partition by range(a+0) (
|
||||
partition p1 values less than (10),
|
||||
partition p2 values less than (20),
|
||||
partition p3 values less than (2305561538531885056),
|
||||
partition p4 values less than (2305561538531950591)
|
||||
);
|
||||
insert into t1 values (9),(19),(0xFFFF0000FFFF000-1), (0xFFFF0000FFFFFFF-1);
|
||||
insert into t1 values (9),(19),(0xFFFF0000FFFF000-1), (0xFFFF0000FFFFFFF-1);
|
||||
explain partitions select * from t1 where
|
||||
a >= 2305561538531885056-10 and a <= 2305561538531885056-8;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p3 ALL NULL NULL NULL NULL 4 Using where
|
||||
explain partitions select * from t1 where
|
||||
a > 0xFFFFFFFFFFFFFFEC and a < 0xFFFFFFFFFFFFFFEE;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
explain partitions select * from t1 where a>=0 and a <= 0xFFFFFFFFFFFFFFFF;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p1,p2,p3,p4 ALL NULL NULL NULL NULL 8 Using where
|
||||
drop table t1;
|
||||
create table t1 (a bigint) partition by range(a+0) (
|
||||
partition p1 values less than (-1000),
|
||||
partition p2 values less than (-10),
|
||||
partition p3 values less than (10),
|
||||
partition p4 values less than (1000)
|
||||
);
|
||||
insert into t1 values (-15),(-5),(5),(15),(-15),(-5),(5),(15);
|
||||
explain partitions select * from t1 where a>-2 and a <=0;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p3 ALL NULL NULL NULL NULL 4 Using where
|
||||
drop table t1;
|
||||
|
|
|
@ -642,3 +642,76 @@ explain partitions select * from t2;
|
|||
--horizontal_results
|
||||
drop table t2;
|
||||
|
||||
|
||||
# BUG#20484 "Partitions: crash with explain and union"
|
||||
create table t1 (s1 int);
|
||||
explain partitions select 1 from t1 union all select 2;
|
||||
drop table t1;
|
||||
|
||||
|
||||
# BUG#20257: partition pruning test coverage for BIGINT UNSIGNED
|
||||
create table t1 (a bigint unsigned not null) partition by range(a) (
|
||||
partition p0 values less than (10),
|
||||
partition p1 values less than (100),
|
||||
partition p2 values less than (1000),
|
||||
partition p3 values less than (18446744073709551000),
|
||||
partition p4 values less than (18446744073709551614)
|
||||
);
|
||||
insert into t1 values (5),(15),(105),(1005);
|
||||
insert into t1 values (18446744073709551000+1);
|
||||
insert into t1 values (18446744073709551614-1);
|
||||
|
||||
explain partitions select * from t1 where a < 10;
|
||||
explain partitions select * from t1
|
||||
where a >= 18446744073709551000-1 and a <= 18446744073709551000+1;
|
||||
|
||||
explain partitions select * from t1
|
||||
where a between 18446744073709551001 and 18446744073709551002;
|
||||
|
||||
explain partitions select * from t1 where a = 18446744073709551000;
|
||||
explain partitions select * from t1 where a = 18446744073709551613;
|
||||
explain partitions select * from t1 where a = 18446744073709551614;
|
||||
drop table t1;
|
||||
|
||||
create table t1 (a int)
|
||||
partition by range((a & 0xFF) << 56) (
|
||||
partition p0 values less than (0x40 << 56),
|
||||
partition p1 values less than (0x80 << 56),
|
||||
partition p2 values less than (0xFF << 56)
|
||||
);
|
||||
|
||||
insert into t1 values (0x20), (0x20), (0x41), (0x41), (0xFE), (0xFE);
|
||||
explain partitions select * from t1 where a=0;
|
||||
explain partitions select * from t1 where a=0xFE;
|
||||
explain partitions select * from t1 where a>0xFE and a<= 0xFF;
|
||||
drop table t1;
|
||||
|
||||
create table t1(a bigint unsigned not null) partition by range(a+0) (
|
||||
partition p1 values less than (10),
|
||||
partition p2 values less than (20),
|
||||
partition p3 values less than (2305561538531885056),
|
||||
partition p4 values less than (2305561538531950591)
|
||||
);
|
||||
|
||||
insert into t1 values (9),(19),(0xFFFF0000FFFF000-1), (0xFFFF0000FFFFFFF-1);
|
||||
insert into t1 values (9),(19),(0xFFFF0000FFFF000-1), (0xFFFF0000FFFFFFF-1);
|
||||
|
||||
explain partitions select * from t1 where
|
||||
a >= 2305561538531885056-10 and a <= 2305561538531885056-8;
|
||||
|
||||
explain partitions select * from t1 where
|
||||
a > 0xFFFFFFFFFFFFFFEC and a < 0xFFFFFFFFFFFFFFEE;
|
||||
|
||||
explain partitions select * from t1 where a>=0 and a <= 0xFFFFFFFFFFFFFFFF;
|
||||
drop table t1;
|
||||
|
||||
create table t1 (a bigint) partition by range(a+0) (
|
||||
partition p1 values less than (-1000),
|
||||
partition p2 values less than (-10),
|
||||
partition p3 values less than (10),
|
||||
partition p4 values less than (1000)
|
||||
);
|
||||
insert into t1 values (-15),(-5),(5),(15),(-15),(-5),(5),(15);
|
||||
explain partitions select * from t1 where a>-2 and a <=0;
|
||||
drop table t1;
|
||||
|
||||
|
|
|
@ -6577,10 +6577,19 @@ int get_part_iter_for_interval_via_walking(partition_info *part_info,
|
|||
|
||||
store_key_image_to_rec(field, max_value, len);
|
||||
b= field->val_int();
|
||||
|
||||
/*
|
||||
Handle a special case where the distance between interval bounds is
|
||||
exactly 4G-1. This interval is too big for range walking, and if it is an
|
||||
(x,y]-type interval then the following "b +=..." code will convert it to
|
||||
an empty interval by "wrapping around" a + 4G-1 + 1 = a.
|
||||
*/
|
||||
if ((ulonglong)b - (ulonglong)a == ~0ULL)
|
||||
return -1;
|
||||
|
||||
a += test(flags & NEAR_MIN);
|
||||
b += test(!(flags & NEAR_MAX));
|
||||
uint n_values= b - a;
|
||||
ulonglong n_values= b - a;
|
||||
|
||||
if (n_values > total_parts || n_values > MAX_RANGE_TO_WALK)
|
||||
return -1;
|
||||
|
@ -6684,7 +6693,8 @@ static uint32 get_next_partition_via_walking(PARTITION_ITERATOR *part_iter)
|
|||
while (part_iter->field_vals.cur != part_iter->field_vals.end)
|
||||
{
|
||||
longlong dummy;
|
||||
field->store(part_iter->field_vals.cur++, FALSE);
|
||||
field->store(part_iter->field_vals.cur++,
|
||||
((Field_num*)field)->unsigned_flag);
|
||||
if (part_iter->part_info->is_sub_partitioned() &&
|
||||
!part_iter->part_info->get_part_partition_id(part_iter->part_info,
|
||||
&part_id, &dummy) ||
|
||||
|
@ -6692,8 +6702,6 @@ static uint32 get_next_partition_via_walking(PARTITION_ITERATOR *part_iter)
|
|||
&part_id, &dummy))
|
||||
return part_id;
|
||||
}
|
||||
//psergey-todo: return partition(part_func(NULL)) here...
|
||||
|
||||
part_iter->field_vals.cur= part_iter->field_vals.start;
|
||||
return NOT_A_PARTITION_ID;
|
||||
}
|
||||
|
|
|
@ -14114,6 +14114,9 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
|
|||
}
|
||||
item_list.push_back(new Item_string(table_name_buffer, len, cs));
|
||||
}
|
||||
/* partitions */
|
||||
if (join->thd->lex->describe & DESCRIBE_PARTITIONS)
|
||||
item_list.push_back(item_null);
|
||||
/* type */
|
||||
item_list.push_back(new Item_string(join_type_str[JT_ALL],
|
||||
strlen(join_type_str[JT_ALL]),
|
||||
|
|
Loading…
Reference in a new issue