Re: OffsetNumber, picksplit, and GiST - Mailing list pgsql-sql

From Itai Zukerman
Subject Re: OffsetNumber, picksplit, and GiST
Date
Msg-id 87lm03ghpo.fsf@matt.w80.math-hat.com
Whole thread Raw
In response to OffsetNumber, picksplit, and GiST  (Itai Zukerman <zukerman@math-hat.com>)
Responses GiST, Not Using Index  (Itai Zukerman <zukerman@math-hat.com>)
List pgsql-sql
> Is the GiST examples I've looked through, in the picksplit functions,
> I see code that looks roughly like this:
>
>   bytea *entryvec = (bytea *) PG_GETARG_POINTER(0);
>   OffsetNumber i, maxoff;
>
>   maxoff = ((VARSIZE(entryvec) - VARHDRSZ) / sizeof(GISTENTRY)) - 1;
>
>   for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i))
>     {
>       ... DatumGetPointer((((GISTENTRY *) (VARDATA(entryvec)))[i].key)) ...
>     }
>
> I'm wondering, since FirstOffsetNumber is 1, what about the 0'th index
> in entryvec?  Is it just not set?

In backend/access/gist/gist.c I see how entryvec is built:
  storage = palloc(MAXALIGN(VARHDRSZ) + (*len + 1) * sizeof(GISTENTRY));  entryvec = (bytea *) (storage +
MAXALIGN(VARHDRSZ)- VARHDRSZ);  decompvec = (bool *) palloc((*len + 1) * sizeof(bool));  VARATT_SIZEP(entryvec) = (*len
+1) * sizeof(GISTENTRY) + VARHDRSZ;  for (i = 1; i <= *len; i++)  {    [...] gistdentryinit(giststate, 0, &((GISTENTRY
*)VARDATA(entryvec))[i], [...]  }
 

So it looks like the 0'th entry indeed is empty.  Why?

Also, in gist.c the index "i" has type "int".  No mention of
OffsetNumber anywhere.  Any reason for that?

Finally, should I be asking this on pgsql-hackers?

-- 
Itai Zukerman  <http://www.math-hat.com/~zukerman/>


pgsql-sql by date:

Previous
From: Achilleus Mantzios
Date:
Subject: Re: Design Q.:logic in app or db?
Next
From: rute solipa
Date:
Subject: Re: disable constraints