Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit54c80a3

Browse files
committed
Adjust contrib/seg &< and &> operators so that r-tree indexing logic
works properly for 1-D comparisons. Fix some other errors such asbogus commutator specifications.
1 parent06ae88a commit54c80a3

File tree

5 files changed

+60
-54
lines changed

5 files changed

+60
-54
lines changed

‎contrib/seg/README.seg

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ have just 2 significant digits.
214214
USAGE
215215
=====
216216

217-
The access method for SEG is a GiST (gist_seg_ops), which is a
217+
The access method for SEG is a GiSTindex(gist_seg_ops), which is a
218218
generalization of R-tree. GiSTs allow the postgres implementation of
219219
R-tree, originally encoded to support 2-D geometric types such as
220220
boxes and polygons, to be used with any data type whose data domain
@@ -236,23 +236,27 @@ The operators supported by the GiST access method include:
236236
[a, b] >> [c, d]Is right of
237237

238238
[a, b] is occurs entirely to the right of [c, d].
239-
[a, b] >> [c, d] is true ifb >c and false otherwise
239+
[a, b] >> [c, d] is true ifa >d and false otherwise
240240

241-
[a, b] &< [c, d]Overleft
241+
[a, b] &< [c, d]Overlaps or isleft of
242242

243-
The segment [a, b] overlaps the segment [c, d] in such a way
244-
that a <= c <= b and b<= d
243+
This might be better read as "does not extend to right of".
244+
It is true when b<= d.
245245

246-
[a, b] &> [c, d]Overright
246+
[a, b] &> [c, d]Overlaps or isright of
247247

248-
The segment [a, b] overlaps the segment [c, d] in such a way
249-
that a > c and b <= c <= d
248+
This might be better read as "does not extend to left of".
249+
It is true when a >= c.
250250

251251
[a, b] = [c, d]Same as
252252

253253
The segments [a, b] and [c, d] are identical, that is, a == b
254254
and c == d
255255

256+
[a, b] && [c, d]Overlaps
257+
258+
The segments [a, b] and [c, d] overlap.
259+
256260
[a, b] @ [c, d]Contains
257261

258262
The segment [a, b] contains the segment [c, d], that is,

‎contrib/seg/expected/seg.out

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,7 @@ SELECT '1'::seg &< '1'::seg AS bool;
557557
SELECT '1'::seg &< '2'::seg AS bool;
558558
bool
559559
------
560-
f
560+
t
561561
(1 row)
562562

563563
SELECT '0 .. 1'::seg &< '0'::seg AS bool;
@@ -575,7 +575,7 @@ SELECT '0 .. 1'::seg &< '1'::seg AS bool;
575575
SELECT '0 .. 1'::seg &< '2'::seg AS bool;
576576
bool
577577
------
578-
f
578+
t
579579
(1 row)
580580

581581
SELECT '0 .. 1'::seg &< '0 .. 0.5'::seg AS bool;
@@ -605,7 +605,7 @@ SELECT '0 .. 1'::seg &< '1 .. 2'::seg AS bool;
605605
SELECT '0 .. 1'::seg &< '2 .. 3'::seg AS bool;
606606
bool
607607
------
608-
f
608+
t
609609
(1 row)
610610

611611
-- overlap on the right
@@ -625,7 +625,7 @@ SELECT '1'::seg &> '1'::seg AS bool;
625625
SELECT '2'::seg &> '1'::seg AS bool;
626626
bool
627627
------
628-
f
628+
t
629629
(1 row)
630630

631631
SELECT '0'::seg &> '0 .. 1'::seg AS bool;
@@ -643,7 +643,7 @@ SELECT '1'::seg &> '0 .. 1'::seg AS bool;
643643
SELECT '2'::seg &> '0 .. 1'::seg AS bool;
644644
bool
645645
------
646-
f
646+
t
647647
(1 row)
648648

649649
SELECT '0 .. 0.5'::seg &> '0 .. 1'::seg AS bool;
@@ -673,7 +673,7 @@ SELECT '1 .. 2'::seg &> '0 .. 1'::seg AS bool;
673673
SELECT '2 .. 3'::seg &> '0 .. 1'::seg AS bool;
674674
bool
675675
------
676-
f
676+
t
677677
(1 row)
678678

679679
-- left

‎contrib/seg/expected/seg_1.out

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,7 @@ SELECT '1'::seg &< '1'::seg AS bool;
557557
SELECT '1'::seg &< '2'::seg AS bool;
558558
bool
559559
------
560-
f
560+
t
561561
(1 row)
562562

563563
SELECT '0 .. 1'::seg &< '0'::seg AS bool;
@@ -575,7 +575,7 @@ SELECT '0 .. 1'::seg &< '1'::seg AS bool;
575575
SELECT '0 .. 1'::seg &< '2'::seg AS bool;
576576
bool
577577
------
578-
f
578+
t
579579
(1 row)
580580

581581
SELECT '0 .. 1'::seg &< '0 .. 0.5'::seg AS bool;
@@ -605,7 +605,7 @@ SELECT '0 .. 1'::seg &< '1 .. 2'::seg AS bool;
605605
SELECT '0 .. 1'::seg &< '2 .. 3'::seg AS bool;
606606
bool
607607
------
608-
f
608+
t
609609
(1 row)
610610

611611
-- overlap on the right
@@ -625,7 +625,7 @@ SELECT '1'::seg &> '1'::seg AS bool;
625625
SELECT '2'::seg &> '1'::seg AS bool;
626626
bool
627627
------
628-
f
628+
t
629629
(1 row)
630630

631631
SELECT '0'::seg &> '0 .. 1'::seg AS bool;
@@ -643,7 +643,7 @@ SELECT '1'::seg &> '0 .. 1'::seg AS bool;
643643
SELECT '2'::seg &> '0 .. 1'::seg AS bool;
644644
bool
645645
------
646-
f
646+
t
647647
(1 row)
648648

649649
SELECT '0 .. 0.5'::seg &> '0 .. 1'::seg AS bool;
@@ -673,7 +673,7 @@ SELECT '1 .. 2'::seg &> '0 .. 1'::seg AS bool;
673673
SELECT '2 .. 3'::seg &> '0 .. 1'::seg AS bool;
674674
bool
675675
------
676-
f
676+
t
677677
(1 row)
678678

679679
-- left

‎contrib/seg/seg.c

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ gseg_consistent(GISTENTRY *entry,
204204
StrategyNumberstrategy)
205205
{
206206
/*
207-
**if entry is not leaf, use gseg_internal_consistent, * else use
207+
* if entry is not leaf, use gseg_internal_consistent, else use
208208
* gseg_leaf_consistent
209209
*/
210210
if (GIST_LEAF(entry))
@@ -517,15 +517,19 @@ gseg_internal_consistent(SEG * key,
517517
switch (strategy)
518518
{
519519
caseRTLeftStrategyNumber:
520+
retval= (bool) !seg_over_right(key,query);
521+
break;
520522
caseRTOverLeftStrategyNumber:
521-
retval= (bool)seg_over_left(key,query);
523+
retval= (bool)!seg_right(key,query);
522524
break;
523525
caseRTOverlapStrategyNumber:
524526
retval= (bool)seg_overlap(key,query);
525527
break;
526528
caseRTOverRightStrategyNumber:
529+
retval= (bool) !seg_left(key,query);
530+
break;
527531
caseRTRightStrategyNumber:
528-
retval= (bool)seg_right(key,query);
532+
retval= (bool)!seg_over_left(key,query);
529533
break;
530534
caseRTSameStrategyNumber:
531535
caseRTContainsStrategyNumber:
@@ -586,12 +590,12 @@ seg_overlap(SEG * a, SEG * b)
586590
);
587591
}
588592

589-
/*seg_overleft -- is the right edge of (a) locatedto the left of the right edge of (b)?
593+
/*seg_overleft -- is the right edge of (a) locatedat or left of the right edge of (b)?
590594
*/
591595
bool
592596
seg_over_left(SEG*a,SEG*b)
593597
{
594-
return (a->upper <=b->upper&& !seg_left(a,b)&& !seg_right(a,b));
598+
return (a->upper <=b->upper);
595599
}
596600

597601
/*seg_left -- is (a) entirely on the left of (b)?
@@ -610,12 +614,12 @@ seg_right(SEG * a, SEG * b)
610614
return (a->lower>b->upper);
611615
}
612616

613-
/*seg_overright -- is the left edge of (a) locatedto the right of the left edge of (b)?
617+
/*seg_overright -- is the left edge of (a) locatedat or right of the left edge of (b)?
614618
*/
615619
bool
616620
seg_over_right(SEG*a,SEG*b)
617621
{
618-
return (a->lower >=b->lower&& !seg_left(a,b)&& !seg_right(a,b));
622+
return (a->lower >=b->lower);
619623
}
620624

621625

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp