]> granicus.if.org Git - postgresql/commitdiff
GIN's ItemPointerIsMin, ItemPointerIsMax, and ItemPointerIsLossyPage macros
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 5 Jun 2009 18:50:52 +0000 (18:50 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 5 Jun 2009 18:50:52 +0000 (18:50 +0000)
should use GinItemPointerGetBlockNumber/GinItemPointerGetOffsetNumber,
not ItemPointerGetBlockNumber/ItemPointerGetOffsetNumber, because the latter
will Assert() on ip_posid == 0, ie a "Min" pointer.  (Thus, ItemPointerIsMin
has never worked at all, but it seems unused at present.)  I'm not certain
that the case can occur in normal functioning, but it's blowing up on me
while investigating Tatsuo-san's data corruption problem.  In any case it
seems like a problem waiting to bite someone.

Back-patch just in case this really is a problem for somebody in the field.

src/include/access/gin.h

index 75aa7a5935f1b44022e825c764f0d5c181ff0890..eedaae01d679e41ec2591a88c4591dd0ccb0d2aa 100644 (file)
@@ -4,7 +4,7 @@
  *
  *     Copyright (c) 2006-2008, PostgreSQL Global Development Group
  *
- *     $PostgreSQL: pgsql/src/include/access/gin.h,v 1.16.2.2 2009/03/24 22:06:24 tgl Exp $
+ *     $PostgreSQL: pgsql/src/include/access/gin.h,v 1.16.2.3 2009/06/05 18:50:52 tgl Exp $
  *--------------------------------------------------------------------------
  */
 
@@ -425,9 +425,9 @@ extern void newScanKey(IndexScanDesc scan);
 extern PGDLLIMPORT int GinFuzzySearchLimit;
 
 #define ItemPointerSetMax(p)   ItemPointerSet( (p), (BlockNumber)0xffffffff, (OffsetNumber)0xffff )
-#define ItemPointerIsMax(p) ( ItemPointerGetBlockNumber(p) == (BlockNumber)0xffffffff && ItemPointerGetOffsetNumber(p) == (OffsetNumber)0xffff )
+#define ItemPointerIsMax(p) ( GinItemPointerGetBlockNumber(p) == (BlockNumber)0xffffffff && GinItemPointerGetOffsetNumber(p) == (OffsetNumber)0xffff )
 #define ItemPointerSetMin(p)   ItemPointerSet( (p), (BlockNumber)0, (OffsetNumber)0)
-#define ItemPointerIsMin(p) ( ItemPointerGetBlockNumber(p) == (BlockNumber)0 && ItemPointerGetOffsetNumber(p) == (OffsetNumber)0 )
+#define ItemPointerIsMin(p) ( GinItemPointerGetBlockNumber(p) == (BlockNumber)0 && GinItemPointerGetOffsetNumber(p) == (OffsetNumber)0 )
 
 extern Datum gingetmulti(PG_FUNCTION_ARGS);
 extern Datum gingettuple(PG_FUNCTION_ARGS);