]> granicus.if.org Git - postgresql/commitdiff
Fix thinko in JsObjectSize() macro.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 29 May 2017 22:51:56 +0000 (18:51 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 29 May 2017 22:51:56 +0000 (18:51 -0400)
The macro gave the wrong answers for a JsObject with is_json == 0:
it would return 1 if jsonb_cont == NULL, or if that wasn't NULL,
it would return 1 for any non-zero size.

We could fix that, but the only use of this macro at present is in the
JsObjectIsEmpty() macro, so it seems simpler and clearer to get rid of
JsObjectSize() and put corrected logic into JsObjectIsEmpty().

Thinko in commit cf35346e8, so no need for back-patch.

Nikita Glukhov

Discussion: https://postgr.es/m/fbd1d566-bba0-a3de-d6d0-d3b1d7c24ff2@postgrespro.ru

src/backend/utils/adt/jsonfuncs.c

index ab9a7452340cefe3e6ba31cb428265e0ef54d26e..bfd6cd9cbc5474e86b83754a776028e810db361a 100644 (file)
@@ -308,14 +308,14 @@ typedef struct JsObject
        ((jsv)->is_json ? (jsv)->val.json.type == JSON_TOKEN_STRING \
                : ((jsv)->val.jsonb && (jsv)->val.jsonb->type == jbvString))
 
-#define JsObjectSize(jso) \
+#define JsObjectIsEmpty(jso) \
        ((jso)->is_json \
-               ? hash_get_num_entries((jso)->val.json_hash) \
-               : !(jso)->val.jsonb_cont || JsonContainerSize((jso)->val.jsonb_cont))
+               ? hash_get_num_entries((jso)->val.json_hash) == 0 \
+               : ((jso)->val.jsonb_cont == NULL || \
+                  JsonContainerSize((jso)->val.jsonb_cont) == 0))
 
-#define JsObjectIsEmpty(jso) (JsObjectSize(jso) == 0)
-
-#define JsObjectFree(jso) do { \
+#define JsObjectFree(jso) \
+       do { \
                if ((jso)->is_json) \
                        hash_destroy((jso)->val.json_hash); \
        } while (0)