Re: [SQL] OffsetNumber, picksplit, and GiST
От | Teodor Sigaev |
---|---|
Тема | Re: [SQL] OffsetNumber, picksplit, and GiST |
Дата | |
Msg-id | 3E632458.7000100@stack.net обсуждение исходный текст |
Ответ на | Re: [SQL] OffsetNumber, picksplit, and GiST (Itai Zukerman <zukerman@math-hat.com>) |
Список | pgsql-hackers |
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 teodor@stack.net
В списке pgsql-hackers по дате отправления: