Re: [PATCHES] updated GiST patch

2005-05-16 Thread Neil Conway
Neil Conway wrote:
This is an updated version of the GiST patch I posted a few months ago.
Attached is a revised version. This update fixes some newly-added bugs 
in mark and restore (I forgot to save and restore the current buffer), 
and replaces two ReleaseBuffer() + ReadBuffer() pairs with 
ReleaseAndReadBuffer(). (Is this still worth doing? It seems it no 
longer saves a lock acquire/release, but perhaps it will again be a win 
in some future version of the bufmgr...)

BTW, this idiom occurs a few times:
if (BufferIsValid(buf))
{
ReleaseBuffer(buf);
buf = InvalidBuffer;
}
it would be nice to make this more concise. Perhaps:
InvalidateBuffer(buf);
although that doesn't make the modification of `buf' obvious. An 
alternative would be to have ReleaseBuffer() always return 
InvalidBuffer, so:

if (BufferIsValid(buf))
buf = ReleaseBuffer(buf);
Any thoughts on this? (I'm inclined to prefer InvalidateBuffer().)
-Neil


new_gist_patch-4.patch.gz
Description: application/tgz

---(end of broadcast)---
TIP 9: the planner will ignore your desire to choose an index scan if your
  joining column's datatypes do not match


Re: [PATCHES] updated GiST patch

2005-05-16 Thread Tom Lane
Neil Conway [EMAIL PROTECTED] writes:
 ... replaces two ReleaseBuffer() + ReadBuffer() pairs with 
 ReleaseAndReadBuffer(). (Is this still worth doing? It seems it no 
 longer saves a lock acquire/release, but perhaps it will again be a win 
 in some future version of the bufmgr...)

I think there is no longer any noticeable win except in the case where
the old and new pages are actually the same.  Which is probably unlikely
to be true inside an index AM (it is a useful win for random access into
a heap for instance).  But as you say it might someday again be useful.
My advice is to combine if and only if you're not contorting the code
to do so.

 BTW, this idiom occurs a few times:

  if (BufferIsValid(buf))
  {
  ReleaseBuffer(buf);
  buf = InvalidBuffer;
  }

I'd leave it as-is; ISTM to be more easily understandable than the
alternatives you suggest.

regards, tom lane

---(end of broadcast)---
TIP 9: the planner will ignore your desire to choose an index scan if your
  joining column's datatypes do not match


Re: [PATCHES] updated GiST patch

2005-05-16 Thread Neil Conway
Patch applied.
Tom Lane wrote:
Neil Conway [EMAIL PROTECTED] writes:
BTW, this idiom occurs a few times:

if (BufferIsValid(buf))
{
ReleaseBuffer(buf);
buf = InvalidBuffer;
}

I'd leave it as-is; ISTM to be more easily understandable than the
alternatives you suggest.
Yeah, fair enough.
-Neil
---(end of broadcast)---
TIP 5: Have you checked our extensive FAQ?
  http://www.postgresql.org/docs/faq