pgsql: Fix bugs in SP-GiST search with range type's -|- (adjacent) oper - Mailing list pgsql-committers

From Heikki Linnakangas
Subject pgsql: Fix bugs in SP-GiST search with range type's -|- (adjacent) oper
Date
Msg-id E1X7IeH-00036R-H7@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix bugs in SP-GiST search with range type's -|- (adjacent) operator.

The consistent function contained several bugs:

* The "if (which2) { ... }"  block was broken. It compared the  argument's
lower bound against centroid's upper bound, while it was supposed to compare
the argument's upper bound against the centroid's lower bound (the comment
was correct, code was wrong). Also, it cleared bits in the "which1"
variable, while it was supposed to clear bits in "which2".

* If the argument's upper bound was equal to the centroid's lower bound, we
descended to both halves (= all quadrants). That's unnecessary, searching
the right quadrants is sufficient. This didn't lead to incorrect query
results, but was clearly wrong, and slowed down queries unnecessarily.

* In the case that argument's lower bound is adjacent to the centroid's
upper bound, we also don't need to visit all quadrants. Per similar
reasoning as previous point.

* The code where we compare the previous centroid with the current centroid
should match the code where we compare the current centroid with the
argument. The point of that code is to redo the calculation done in the
previous level, to see if we were supposed to traverse left or right (or up
or down), and if we actually did. If we moved in the different direction,
then we know there are no matches for bound.

Refactor the code and adds comments to make it more readable and easier to
reason about.

Backpatch to 9.3 where SP-GiST support for range types was introduced.

Branch
------
REL9_3_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/a4867d041eff3f3217d39a3909b6f6790fa731d7

Modified Files
--------------
src/backend/utils/adt/rangetypes_spgist.c |  275 +++++++++++++++++++----------
1 file changed, 185 insertions(+), 90 deletions(-)


pgsql-committers by date:

Previous
From: Heikki Linnakangas
Date:
Subject: pgsql: Fix bugs in SP-GiST search with range type's -|- (adjacent) oper
Next
From: Peter Eisentraut
Date:
Subject: pgsql: doc: Spell checking