Just historical reasons...

Itai Zukerman wrote:
I didn't get any responses on pgsql-sql, so I'm re-posting here...


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?



------------------------------------------------------------------------



------------------------------------------------------------------------


---------------------------(end of broadcast)--------------------------- TIP 6: Have you searched our list archives?

http://archives.postgresql.org

-- Teodor Sigaev [EMAIL PROTECTED]



---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Reply via email to