mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Adjust DatumGetBool macro, this time for sure.
Commit 23a41573c
attempted to fix the DatumGetBool macro to ignore bits
in a Datum that are to the left of the actual bool value. But it did that
by casting the Datum to bool; and on compilers that use C99 semantics for
bool, that ends up being a whole-word test, not a 1-byte test. This seems
to be the true explanation for contrib/seg failing in VS2015. To fix, use
GET_1_BYTE() explicitly. I think in the previous patch, I'd had some idea
of not having to commit to bool being exactly 1 byte wide, but regardless
of what the compiler's bool is, boolean columns and Datums are certainly
1 byte wide.
The previous fix was (eventually) back-patched into all active versions,
so do likewise with this one.
This commit is contained in:
@ -326,7 +326,7 @@ typedef Datum *DatumPtr;
|
|||||||
* the left of the width of bool, per comment above.
|
* the left of the width of bool, per comment above.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define DatumGetBool(X) ((bool) (((bool) (X)) != 0))
|
#define DatumGetBool(X) ((bool) (GET_1_BYTE(X) != 0))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* BoolGetDatum
|
* BoolGetDatum
|
||||||
|
Reference in New Issue
Block a user