Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
8cd88a91
Commit
8cd88a91
authored
Jul 29, 2006
by
evgen@sunlight.local
Browse files
Options
Browse Files
Download
Plain Diff
Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.1
into sunlight.local:/local_work/tmp_merge-5.1-opt-mysql
parents
69f9fe75
285e3925
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
174 additions
and
4 deletions
+174
-4
mysql-test/r/partition_pruning.result
mysql-test/r/partition_pruning.result
+86
-0
mysql-test/t/partition_pruning.test
mysql-test/t/partition_pruning.test
+73
-0
sql/sql_partition.cc
sql/sql_partition.cc
+12
-4
sql/sql_select.cc
sql/sql_select.cc
+3
-0
No files found.
mysql-test/r/partition_pruning.result
View file @
8cd88a91
...
...
@@ -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;
mysql-test/t/partition_pruning.test
View file @
8cd88a91
...
...
@@ -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
;
sql/sql_partition.cc
View file @
8cd88a91
...
...
@@ -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
));
u
int
n_values
=
b
-
a
;
u
longlong
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
;
}
...
...
sql/sql_select.cc
View file @
8cd88a91
...
...
@@ -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
]),
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment