@@ -56,31 +56,33 @@ static Page
56
56
verify_hash_page (bytea * raw_page , int flags )
57
57
{
58
58
Page page = get_page_from_raw (raw_page );
59
- int pagetype ;
60
- HashPageOpaque pageopaque ;
59
+ int pagetype = LH_UNUSED_PAGE ;
61
60
62
- if ( PageIsNew ( page ))
63
- ereport ( ERROR ,
64
- ( errcode ( ERRCODE_INDEX_CORRUPTED ),
65
- errmsg ( "index table contains zero page" ))) ;
61
+ /* Treat new pages as unused. */
62
+ if (! PageIsNew ( page ))
63
+ {
64
+ HashPageOpaque pageopaque ;
66
65
67
- if (PageGetSpecialSize (page ) != MAXALIGN (sizeof (HashPageOpaqueData )))
68
- ereport (ERROR ,
69
- (errcode (ERRCODE_INDEX_CORRUPTED ),
70
- errmsg ("index table contains corrupted page" )));
66
+ if (PageGetSpecialSize (page ) != MAXALIGN (sizeof (HashPageOpaqueData )))
67
+ ereport (ERROR ,
68
+ (errcode (ERRCODE_INDEX_CORRUPTED ),
69
+ errmsg ("index table contains corrupted page" )));
71
70
72
- pageopaque = (HashPageOpaque ) PageGetSpecialPointer (page );
73
- if (pageopaque -> hasho_page_id != HASHO_PAGE_ID )
74
- ereport (ERROR ,
75
- (errcode (ERRCODE_INVALID_PARAMETER_VALUE ),
76
- errmsg ("page is not a hash page" ),
77
- errdetail ("Expected %08x, got %08x." ,
78
- HASHO_PAGE_ID , pageopaque -> hasho_page_id )));
71
+ pageopaque = (HashPageOpaque ) PageGetSpecialPointer (page );
72
+ if (pageopaque -> hasho_page_id != HASHO_PAGE_ID )
73
+ ereport (ERROR ,
74
+ (errcode (ERRCODE_INVALID_PARAMETER_VALUE ),
75
+ errmsg ("page is not a hash page" ),
76
+ errdetail ("Expected %08x, got %08x." ,
77
+ HASHO_PAGE_ID , pageopaque -> hasho_page_id )));
78
+
79
+ pagetype = pageopaque -> hasho_flag & LH_PAGE_TYPE ;
80
+ }
79
81
80
82
/* Check that page type is sane. */
81
- pagetype = pageopaque -> hasho_flag & LH_PAGE_TYPE ;
82
83
if (pagetype != LH_OVERFLOW_PAGE && pagetype != LH_BUCKET_PAGE &&
83
- pagetype != LH_BITMAP_PAGE && pagetype != LH_META_PAGE )
84
+ pagetype != LH_BITMAP_PAGE && pagetype != LH_META_PAGE &&
85
+ pagetype != LH_UNUSED_PAGE )
84
86
ereport (ERROR ,
85
87
(errcode (ERRCODE_INVALID_PARAMETER_VALUE ),
86
88
errmsg ("invalid hash page type %08x" , pagetype )));
@@ -190,19 +192,25 @@ hash_page_type(PG_FUNCTION_ARGS)
190
192
(errmsg ("must be superuser to use raw page functions" ))));
191
193
192
194
page = verify_hash_page (raw_page , 0 );
193
- opaque = (HashPageOpaque ) PageGetSpecialPointer (page );
194
-
195
- /* page type (flags) */
196
- if (opaque -> hasho_flag & LH_META_PAGE )
197
- type = "metapage" ;
198
- else if (opaque -> hasho_flag & LH_OVERFLOW_PAGE )
199
- type = "overflow" ;
200
- else if (opaque -> hasho_flag & LH_BUCKET_PAGE )
201
- type = "bucket" ;
202
- else if (opaque -> hasho_flag & LH_BITMAP_PAGE )
203
- type = "bitmap" ;
204
- else
195
+
196
+ if (PageIsNew (page ))
205
197
type = "unused" ;
198
+ else
199
+ {
200
+ opaque = (HashPageOpaque ) PageGetSpecialPointer (page );
201
+
202
+ /* page type (flags) */
203
+ if (opaque -> hasho_flag & LH_META_PAGE )
204
+ type = "metapage" ;
205
+ else if (opaque -> hasho_flag & LH_OVERFLOW_PAGE )
206
+ type = "overflow" ;
207
+ else if (opaque -> hasho_flag & LH_BUCKET_PAGE )
208
+ type = "bucket" ;
209
+ else if (opaque -> hasho_flag & LH_BITMAP_PAGE )
210
+ type = "bitmap" ;
211
+ else
212
+ type = "unused" ;
213
+ }
206
214
207
215
PG_RETURN_TEXT_P (cstring_to_text (type ));
208
216
}
0 commit comments