]> granicus.if.org Git - postgresql/commitdiff
Fix CHECK_RELATION_BLOCK_RANGE macro, which was not merely producing
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 15 Jul 2007 23:46:20 +0000 (23:46 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 15 Jul 2007 23:46:20 +0000 (23:46 +0000)
a warning but was outright wrong.

contrib/pageinspect/btreefuncs.c
contrib/pgstattuple/pgstatindex.c

index 97c5ae409a4b0b4db20e82cb527d65700c8552cf..f02c3821834cbd72079a0dc7eb033a5c8d9b1672 100644 (file)
@@ -57,12 +57,13 @@ extern Datum bt_page_stats(PG_FUNCTION_ARGS);
 #define IS_BTREE(r) ((r)->rd_rel->relam == BTREE_AM_OID)
 
 #define CHECK_PAGE_OFFSET_RANGE(pg, offnum) { \
-               if ( !(FirstOffsetNumber<=(offnum) && \
-                                               (offnum)<=PageGetMaxOffsetNumber(pg)) ) \
+               if ( !(FirstOffsetNumber <= (offnum) && \
+                                               (offnum) <= PageGetMaxOffsetNumber(pg)) ) \
                         elog(ERROR, "page offset number out of range"); }
 
+/* note: BlockNumber is unsigned, hence can't be negative */
 #define CHECK_RELATION_BLOCK_RANGE(rel, blkno) { \
-               if ( (blkno)<0 && RelationGetNumberOfBlocks((rel))<=(blkno) ) \
+               if ( RelationGetNumberOfBlocks(rel) <= (BlockNumber) (blkno) ) \
                         elog(ERROR, "block number out of range"); }
 
 /* ------------------------------------------------
index 6a64d3992a940fb4fbc4a726415df89e16d46d22..0c2c9a14484f55cd294d42ce298315b6fb7af3b1 100644 (file)
@@ -48,12 +48,13 @@ extern Datum pg_relpages(PG_FUNCTION_ARGS);
 #define IS_BTREE(r) ((r)->rd_rel->relam == BTREE_AM_OID)
 
 #define CHECK_PAGE_OFFSET_RANGE(pg, offnum) { \
-               if ( !(FirstOffsetNumber<=(offnum) && \
-                                               (offnum)<=PageGetMaxOffsetNumber(pg)) ) \
+               if ( !(FirstOffsetNumber <= (offnum) && \
+                                               (offnum) <= PageGetMaxOffsetNumber(pg)) ) \
                         elog(ERROR, "page offset number out of range"); }
 
+/* note: BlockNumber is unsigned, hence can't be negative */
 #define CHECK_RELATION_BLOCK_RANGE(rel, blkno) { \
-               if ( (blkno)<0 && RelationGetNumberOfBlocks((rel))<=(blkno) ) \
+               if ( RelationGetNumberOfBlocks(rel) <= (BlockNumber) (blkno) ) \
                         elog(ERROR, "block number out of range"); }
 
 /* ------------------------------------------------