diff options
author | Tom Lane | 2005-06-27 00:48:07 +0000 |
---|---|---|
committer | Tom Lane | 2005-06-27 00:48:07 +0000 |
commit | 54c80a3434b5ad3b3841b402097d7e3821f36c85 (patch) | |
tree | ac0c1bfc74010df22f6a74d49bbb658bdc1ddff4 /contrib/seg/seg.c | |
parent | 06ae88a82e7fea5a1c3f8083581f1dd9d75fafc4 (diff) |
Adjust contrib/seg &< and &> operators so that r-tree indexing logic
works properly for 1-D comparisons. Fix some other errors such as
bogus commutator specifications.
Diffstat (limited to 'contrib/seg/seg.c')
-rw-r--r-- | contrib/seg/seg.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/contrib/seg/seg.c b/contrib/seg/seg.c index 4bd9b9a59fd..5bdad542e4a 100644 --- a/contrib/seg/seg.c +++ b/contrib/seg/seg.c @@ -204,7 +204,7 @@ gseg_consistent(GISTENTRY *entry, StrategyNumber strategy) { /* - * * if entry is not leaf, use gseg_internal_consistent, * else use + * if entry is not leaf, use gseg_internal_consistent, else use * gseg_leaf_consistent */ if (GIST_LEAF(entry)) @@ -517,15 +517,19 @@ gseg_internal_consistent(SEG * key, switch (strategy) { case RTLeftStrategyNumber: + retval = (bool) !seg_over_right(key, query); + break; case RTOverLeftStrategyNumber: - retval = (bool) seg_over_left(key, query); + retval = (bool) !seg_right(key, query); break; case RTOverlapStrategyNumber: retval = (bool) seg_overlap(key, query); break; case RTOverRightStrategyNumber: + retval = (bool) !seg_left(key, query); + break; case RTRightStrategyNumber: - retval = (bool) seg_right(key, query); + retval = (bool) !seg_over_left(key, query); break; case RTSameStrategyNumber: case RTContainsStrategyNumber: @@ -586,12 +590,12 @@ seg_overlap(SEG * a, SEG * b) ); } -/* seg_overleft -- is the right edge of (a) located to the left of the right edge of (b)? +/* seg_overleft -- is the right edge of (a) located at or left of the right edge of (b)? */ bool seg_over_left(SEG * a, SEG * b) { - return (a->upper <= b->upper && !seg_left(a, b) && !seg_right(a, b)); + return (a->upper <= b->upper); } /* seg_left -- is (a) entirely on the left of (b)? @@ -610,12 +614,12 @@ seg_right(SEG * a, SEG * b) return (a->lower > b->upper); } -/* seg_overright -- is the left edge of (a) located to the right of the left edge of (b)? +/* seg_overright -- is the left edge of (a) located at or right of the left edge of (b)? */ bool seg_over_right(SEG * a, SEG * b) { - return (a->lower >= b->lower && !seg_left(a, b) && !seg_right(a, b)); + return (a->lower >= b->lower); } |