rangetypes spgist questions/refactoring - Mailing list pgsql-hackers

From Jeff Davis
Subject rangetypes spgist questions/refactoring
Date
Msg-id 1400604765.3741.28.camel@jdavis-laptop
Whole thread Raw
Responses Re: rangetypes spgist questions/refactoring
List pgsql-hackers
I am trying to understand the rangetypes spgist code and its interaction
with empty ranges. (Slightly embarrassing, because I reviewed the code.)
I see an old email here:

http://www.postgresql.org/message-id/50145A9C.7080400@enterprisedb.com

But still don't have a clear picture.

What I don't understand is:
1. Under what conditions might a tuple have no prefix (centroid), yet
also *not* be allTheSame?
2. Why would any tuple have 2 nodes? If there are some non-empty ranges,
why not make a centroid and have 4 or 5 nodes?

I added a bunch of assertions that seem reasonable to me based on my
understanding of the structure, and I attached them as a patch. They all
pass regression, which has a non-trivial set of input ranges, so there
is a reasonable chance the assertions are generally true. But if they
are true, some refactoring is in order.

It seems like the structure should be something like:

* Empty and non-empty ranges are only mixed in the root (level == 0).
* If a tuple has any non-empty ranges, there's a prefix (centroid).
AllTheSame may or may not be set (ordinarily not).
* If a tuple has only empty ranges, there's no prefix, and allTheSame is
set.
* The root tuple may have 5 nodes if there are any non-empty ranges,
otherwise 1 node (and allTheSame is set).
* Inner tuples may have either:
  - one node if it contains only empty ranges, in which case it is
allTheSame, and must be in the 5th node (quadrant) of the root node, and
be at level 1
  - four nodes if there are any non-empty ranges, in which case it has
*no* empty ranges

Note: I am using "allTheSame" in the logical sense; perhaps the flag is
an internal optimization that we can't rely on.

Regards,
    Jeff Davis


Attachment

pgsql-hackers by date:

Previous
From: Josh Berkus
Date:
Subject: Re: I thought we were changing the name of recvlogical?
Next
From: Alvaro Herrera
Date:
Subject: Re: I thought we were changing the name of recvlogical?