Skip to content

Commit 52f0fc7

Browse files
committed
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.
1 parent 8b78428 commit 52f0fc7

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

src/include/access/gin.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*
55
* Copyright (c) 2006-2009, PostgreSQL Global Development Group
66
*
7-
* $PostgreSQL: pgsql/src/include/access/gin.h,v 1.31 2009/03/25 22:19:01 tgl Exp $
7+
* $PostgreSQL: pgsql/src/include/access/gin.h,v 1.32 2009/06/05 18:50:47 tgl Exp $
88
*--------------------------------------------------------------------------
99
*/
1010
#ifndef GIN_H
@@ -124,18 +124,18 @@ typedef struct GinMetaPageData
124124
#define ItemPointerSetMin(p) \
125125
ItemPointerSet((p), (BlockNumber)0, (OffsetNumber)0)
126126
#define ItemPointerIsMin(p) \
127-
(ItemPointerGetOffsetNumber(p) == (OffsetNumber)0 && \
128-
ItemPointerGetBlockNumber(p) == (BlockNumber)0)
127+
(GinItemPointerGetOffsetNumber(p) == (OffsetNumber)0 && \
128+
GinItemPointerGetBlockNumber(p) == (BlockNumber)0)
129129
#define ItemPointerSetMax(p) \
130130
ItemPointerSet((p), InvalidBlockNumber, (OffsetNumber)0xffff)
131131
#define ItemPointerIsMax(p) \
132-
(ItemPointerGetOffsetNumber(p) == (OffsetNumber)0xffff && \
133-
ItemPointerGetBlockNumber(p) == InvalidBlockNumber)
132+
(GinItemPointerGetOffsetNumber(p) == (OffsetNumber)0xffff && \
133+
GinItemPointerGetBlockNumber(p) == InvalidBlockNumber)
134134
#define ItemPointerSetLossyPage(p, b) \
135135
ItemPointerSet((p), (b), (OffsetNumber)0xffff)
136136
#define ItemPointerIsLossyPage(p) \
137-
(ItemPointerGetOffsetNumber(p) == (OffsetNumber)0xffff && \
138-
ItemPointerGetBlockNumber(p) != InvalidBlockNumber)
137+
(GinItemPointerGetOffsetNumber(p) == (OffsetNumber)0xffff && \
138+
GinItemPointerGetBlockNumber(p) != InvalidBlockNumber)
139139

140140
typedef struct
141141
{

0 commit comments

Comments
 (0)