Commit 93624bcd authored by Tom Lane's avatar Tom Lane

Fix CHECK_RELATION_BLOCK_RANGE macro, which was not merely producing

a warning but was outright wrong.
parent 4608f359
...@@ -57,12 +57,13 @@ extern Datum bt_page_stats(PG_FUNCTION_ARGS); ...@@ -57,12 +57,13 @@ extern Datum bt_page_stats(PG_FUNCTION_ARGS);
#define IS_BTREE(r) ((r)->rd_rel->relam == BTREE_AM_OID) #define IS_BTREE(r) ((r)->rd_rel->relam == BTREE_AM_OID)
#define CHECK_PAGE_OFFSET_RANGE(pg, offnum) { \ #define CHECK_PAGE_OFFSET_RANGE(pg, offnum) { \
if ( !(FirstOffsetNumber<=(offnum) && \ if ( !(FirstOffsetNumber <= (offnum) && \
(offnum)<=PageGetMaxOffsetNumber(pg)) ) \ (offnum) <= PageGetMaxOffsetNumber(pg)) ) \
elog(ERROR, "page offset number out of range"); } elog(ERROR, "page offset number out of range"); }
/* note: BlockNumber is unsigned, hence can't be negative */
#define CHECK_RELATION_BLOCK_RANGE(rel, blkno) { \ #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"); } elog(ERROR, "block number out of range"); }
/* ------------------------------------------------ /* ------------------------------------------------
......
...@@ -48,12 +48,13 @@ extern Datum pg_relpages(PG_FUNCTION_ARGS); ...@@ -48,12 +48,13 @@ extern Datum pg_relpages(PG_FUNCTION_ARGS);
#define IS_BTREE(r) ((r)->rd_rel->relam == BTREE_AM_OID) #define IS_BTREE(r) ((r)->rd_rel->relam == BTREE_AM_OID)
#define CHECK_PAGE_OFFSET_RANGE(pg, offnum) { \ #define CHECK_PAGE_OFFSET_RANGE(pg, offnum) { \
if ( !(FirstOffsetNumber<=(offnum) && \ if ( !(FirstOffsetNumber <= (offnum) && \
(offnum)<=PageGetMaxOffsetNumber(pg)) ) \ (offnum) <= PageGetMaxOffsetNumber(pg)) ) \
elog(ERROR, "page offset number out of range"); } elog(ERROR, "page offset number out of range"); }
/* note: BlockNumber is unsigned, hence can't be negative */
#define CHECK_RELATION_BLOCK_RANGE(rel, blkno) { \ #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"); } elog(ERROR, "block number out of range"); }
/* ------------------------------------------------ /* ------------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment