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
24e84f15
Commit
24e84f15
authored
Oct 05, 2007
by
holyfoot/hf@hfmain.(none)
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk@192.168.21.1:mysql-5.1-opt
into mysql.com:/home/hf/work/30286/my51-30286
parents
0b2f20bb
e3b4267c
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
76 additions
and
14 deletions
+76
-14
mysql-test/r/gis-rtree.result
mysql-test/r/gis-rtree.result
+31
-0
mysql-test/t/gis-rtree.test
mysql-test/t/gis-rtree.test
+36
-0
storage/myisam/rt_index.c
storage/myisam/rt_index.c
+5
-13
storage/myisam/rt_mbr.c
storage/myisam/rt_mbr.c
+4
-1
No files found.
mysql-test/r/gis-rtree.result
View file @
24e84f15
...
...
@@ -1425,6 +1425,37 @@ CHECK TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
test.t1 check status OK
DROP TABLE t1;
create table t1 (a geometry not null, spatial index(a));
insert into t1 values (PointFromWKB(POINT(1.1517219314031e+164, 131072)));
insert into t1 values (PointFromWKB(POINT(9.1248812352444e+192, 2.9740338169556e+284)));
insert into t1 values (PointFromWKB(POINT(4.7783097267365e-299, -0)));
insert into t1 values (PointFromWKB(POINT(1.49166814624e-154, 2.0880974297595e-53)));
insert into t1 values (PointFromWKB(POINT(4.0917382598702e+149, 1.2024538023802e+111)));
insert into t1 values (PointFromWKB(POINT(2.0349165139404e+236, 2.9993936277913e-241)));
insert into t1 values (PointFromWKB(POINT(2.5243548967072e-29, 1.2024538023802e+111)));
insert into t1 values (PointFromWKB(POINT(0, 6.9835074892995e-251)));
insert into t1 values (PointFromWKB(POINT(2.0880974297595e-53, 3.1050361846014e+231)));
insert into t1 values (PointFromWKB(POINT(2.8728483499323e-188, 2.4600631144627e+260)));
insert into t1 values (PointFromWKB(POINT(3.0517578125e-05, 2.0349165139404e+236)));
insert into t1 values (PointFromWKB(POINT(1.1517219314031e+164, 1.1818212630766e-125)));
insert into t1 values (PointFromWKB(POINT(2.481040258324e-265, 5.7766220027675e-275)));
insert into t1 values (PointFromWKB(POINT(2.0880974297595e-53, 2.5243548967072e-29)));
insert into t1 values (PointFromWKB(POINT(5.7766220027675e-275, 9.9464647281957e+86)));
insert into t1 values (PointFromWKB(POINT(2.2181357552967e+130, 3.7857669957337e-270)));
insert into t1 values (PointFromWKB(POINT(4.5767114681874e-246, 3.6893488147419e+19)));
insert into t1 values (PointFromWKB(POINT(4.5767114681874e-246, 3.7537584144024e+255)));
insert into t1 values (PointFromWKB(POINT(3.7857669957337e-270, 1.8033161362863e-130)));
insert into t1 values (PointFromWKB(POINT(0, 5.8774717541114e-39)));
insert into t1 values (PointFromWKB(POINT(1.1517219314031e+164, 2.2761049594727e-159)));
insert into t1 values (PointFromWKB(POINT(6.243497100632e+144, 3.7857669957337e-270)));
insert into t1 values (PointFromWKB(POINT(3.7857669957337e-270, 2.6355494858076e-82)));
insert into t1 values (PointFromWKB(POINT(2.0349165139404e+236, 3.8518598887745e-34)));
insert into t1 values (PointFromWKB(POINT(4.6566128730774e-10, 2.0880974297595e-53)));
insert into t1 values (PointFromWKB(POINT(2.0880974297595e-53, 1.8827498946116e-183)));
insert into t1 values (PointFromWKB(POINT(1.8033161362863e-130, 9.1248812352444e+192)));
insert into t1 values (PointFromWKB(POINT(4.7783097267365e-299, 2.2761049594727e-159)));
insert into t1 values (PointFromWKB(POINT(1.94906280228e+289, 1.2338789709327e-178)));
drop table t1;
CREATE TABLE t1(foo GEOMETRY NOT NULL, SPATIAL INDEX(foo) );
INSERT INTO t1(foo) VALUES (NULL);
ERROR 23000: Column 'foo' cannot be null
...
...
mysql-test/t/gis-rtree.test
View file @
24e84f15
...
...
@@ -797,6 +797,42 @@ UPDATE t1 set spatial_point=GeomFromText('POINT(41 46)') where c1 like 'f%';
CHECK
TABLE
t1
EXTENDED
;
DROP
TABLE
t1
;
#
# Bug #30286 spatial index cause corruption and server crash!
#
create
table
t1
(
a
geometry
not
null
,
spatial
index
(
a
));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
1.1517219314031e+164
,
131072
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
9.1248812352444e+192
,
2.9740338169556e+284
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
4.7783097267365e-299
,
-
0
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
1.49166814624e-154
,
2.0880974297595e-53
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
4.0917382598702e+149
,
1.2024538023802e+111
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
2.0349165139404e+236
,
2.9993936277913e-241
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
2.5243548967072e-29
,
1.2024538023802e+111
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
0
,
6.9835074892995e-251
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
2.0880974297595e-53
,
3.1050361846014e+231
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
2.8728483499323e-188
,
2.4600631144627e+260
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
3.0517578125e-05
,
2.0349165139404e+236
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
1.1517219314031e+164
,
1.1818212630766e-125
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
2.481040258324e-265
,
5.7766220027675e-275
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
2.0880974297595e-53
,
2.5243548967072e-29
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
5.7766220027675e-275
,
9.9464647281957e+86
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
2.2181357552967e+130
,
3.7857669957337e-270
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
4.5767114681874e-246
,
3.6893488147419e+19
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
4.5767114681874e-246
,
3.7537584144024e+255
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
3.7857669957337e-270
,
1.8033161362863e-130
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
0
,
5.8774717541114e-39
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
1.1517219314031e+164
,
2.2761049594727e-159
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
6.243497100632e+144
,
3.7857669957337e-270
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
3.7857669957337e-270
,
2.6355494858076e-82
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
2.0349165139404e+236
,
3.8518598887745e-34
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
4.6566128730774e-10
,
2.0880974297595e-53
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
2.0880974297595e-53
,
1.8827498946116e-183
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
1.8033161362863e-130
,
9.1248812352444e+192
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
4.7783097267365e-299
,
2.2761049594727e-159
)));
insert
into
t1
values
(
PointFromWKB
(
POINT
(
1.94906280228e+289
,
1.2338789709327e-178
)));
drop
table
t1
;
# End of 4.1 tests
#
...
...
storage/myisam/rt_index.c
View file @
24e84f15
...
...
@@ -483,15 +483,16 @@ static uchar *rtree_pick_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
uint
key_length
,
uchar
*
page_buf
,
uint
nod_flag
)
{
double
increase
;
double
best_incr
=
DBL_MAX
;
double
best_incr
;
double
area
;
double
best_area
;
uchar
*
best_key
;
uchar
*
best_key
=
NULL
;
uchar
*
k
=
rt_PAGE_FIRST_KEY
(
page_buf
,
nod_flag
);
uchar
*
last
=
rt_PAGE_END
(
page_buf
);
LINT_INIT
(
best_area
);
LINT_INIT
(
best_key
);
LINT_INIT
(
best_incr
);
for
(;
k
<
last
;
k
=
rt_PAGE_NEXT_KEY
(
k
,
key_length
,
nod_flag
))
{
...
...
@@ -500,22 +501,13 @@ static uchar *rtree_pick_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
&
area
))
==
-
1
.
0
)
return
NULL
;
/* The following should be safe, even if we compare doubles */
if
(
increase
<
best_incr
)
if
(
!
best_key
||
increase
<
best_incr
||
((
increase
==
best_incr
)
&&
(
area
<
best_area
)))
{
best_key
=
k
;
best_area
=
area
;
best_incr
=
increase
;
}
else
{
/* The following should be safe, even if we compare doubles */
if
((
increase
==
best_incr
)
&&
(
area
<
best_area
))
{
best_key
=
k
;
best_area
=
area
;
best_incr
=
increase
;
}
}
}
return
best_key
;
}
...
...
storage/myisam/rt_mbr.c
View file @
24e84f15
...
...
@@ -523,7 +523,10 @@ double rtree_overlapping_area(HA_KEYSEG *keyseg, uchar* a, uchar* b,
}
/*
Calculates MBR_AREA(a+b) - MBR_AREA(a)
Calculates MBR_AREA(a+b) - MBR_AREA(a)
Note: when 'a' and 'b' objects are far from each other,
the area increase can be really big, so this function
can return 'inf' as a result.
*/
double
rtree_area_increase
(
HA_KEYSEG
*
keyseg
,
uchar
*
a
,
uchar
*
b
,
uint
key_length
,
double
*
ab_area
)
...
...
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