summaryrefslogtreecommitdiff
path: root/contrib/seg/seg.c
diff options
context:
space:
mode:
authorTom Lane2005-06-27 00:48:07 +0000
committerTom Lane2005-06-27 00:48:07 +0000
commit54c80a3434b5ad3b3841b402097d7e3821f36c85 (patch)
treeac0c1bfc74010df22f6a74d49bbb658bdc1ddff4 /contrib/seg/seg.c
parent06ae88a82e7fea5a1c3f8083581f1dd9d75fafc4 (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.c18
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);
}