postgres.git / summary / log / commit / refs

commit    b2ec4f2ad6e82a14b12ca2ccf1ac4b14265b280e
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Fri Jun 05 18:50:52 2009 +0000
First released in: 8.4.0, 8.2.14, 8.3.8

    GIN's ItemPointerIsMin, ItemPointerIsMax, and ItemPointerIsLossyPage macros
    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 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/include/access/gin.h b/src/include/access/gin.h index 75aa7a5935f..eedaae01d67 100644 --- a/src/include/access/gin.h +++ b/src/include/access/gin.h @@ -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); [parent: 101430d2919f]