v12-0001-delta-uniqueifyJsonbObject-bugfix.patch
application/octet-stream
Filename: v12-0001-delta-uniqueifyJsonbObject-bugfix.patch
Type: application/octet-stream
Part: 0
Message:
Re: SQL/JSON revisited
Patch
Format: unified
Series: patch v12-0001
| File | + | − |
|---|---|---|
| src/backend/utils/adt/jsonb_util.c | 16 | 13 |
diff --git a/src/backend/utils/adt/jsonb_util.c b/src/backend/utils/adt/jsonb_util.c
index e7811647f0..9cc95b773d 100644
--- a/src/backend/utils/adt/jsonb_util.c
+++ b/src/backend/utils/adt/jsonb_util.c
@@ -1970,22 +1970,25 @@ uniqueifyJsonbObject(JsonbValue *object, bool unique_keys, bool skip_nulls)
object->val.object.nPairs--;
}
- ptr = object->val.object.pairs + 1;
- res = object->val.object.pairs;
-
- while (ptr - object->val.object.pairs < object->val.object.nPairs)
+ if (object->val.object.nPairs > 0)
{
- /* Avoid copying over duplicate or null */
- if (lengthCompareJsonbStringValue(ptr, res) != 0 &&
- (!skip_nulls || ptr->value.type != jbvNull))
+ ptr = object->val.object.pairs + 1;
+ res = object->val.object.pairs;
+
+ while (ptr - object->val.object.pairs < object->val.object.nPairs)
{
- res++;
- if (ptr != res)
- memcpy(res, ptr, sizeof(JsonbPair));
+ /* Avoid copying over duplicate or null */
+ if (lengthCompareJsonbStringValue(ptr, res) != 0 &&
+ (!skip_nulls || ptr->value.type != jbvNull))
+ {
+ res++;
+ if (ptr != res)
+ memcpy(res, ptr, sizeof(JsonbPair));
+ }
+ ptr++;
}
- ptr++;
- }
- object->val.object.nPairs = res + 1 - object->val.object.pairs;
+ object->val.object.nPairs = res + 1 - object->val.object.pairs;
+ }
}
}