mirror of
https://github.com/postgres/postgres.git
synced 2025-10-27 00:12:01 +03:00
Revert SQL/JSON features
The reverts the following and makes some associated cleanups:
commit f79b803dc: Common SQL/JSON clauses
commit f4fb45d15: SQL/JSON constructors
commit 5f0adec25: Make STRING an unreserved_keyword.
commit 33a377608: IS JSON predicate
commit 1a36bc9db: SQL/JSON query functions
commit 606948b05: SQL JSON functions
commit 49082c2cc: RETURNING clause for JSON() and JSON_SCALAR()
commit 4e34747c8: JSON_TABLE
commit fadb48b00: PLAN clauses for JSON_TABLE
commit 2ef6f11b0: Reduce running time of jsonb_sqljson test
commit 14d3f24fa: Further improve jsonb_sqljson parallel test
commit a6baa4bad: Documentation for SQL/JSON features
commit b46bcf7a4: Improve readability of SQL/JSON documentation.
commit 112fdb352: Fix finalization for json_objectagg and friends
commit fcdb35c32: Fix transformJsonBehavior
commit 4cd8717af: Improve a couple of sql/json error messages
commit f7a605f63: Small cleanups in SQL/JSON code
commit 9c3d25e17: Fix JSON_OBJECTAGG uniquefying bug
commit a79153b7a: Claim SQL standard compliance for SQL/JSON features
commit a1e7616d6: Rework SQL/JSON documentation
commit 8d9f9634e: Fix errors in copyfuncs/equalfuncs support for JSON node types.
commit 3c633f32b: Only allow returning string types or bytea from json_serialize
commit 67b26703b: expression eval: Fix EEOP_JSON_CONSTRUCTOR and EEOP_JSONEXPR size.
The release notes are also adjusted.
Backpatch to release 15.
Discussion: https://postgr.es/m/40d2c882-bcac-19a9-754d-4299e1d87ac7@postgresql.org
This commit is contained in:
@@ -64,8 +64,7 @@ static int lengthCompareJsonbStringValue(const void *a, const void *b);
|
||||
static int lengthCompareJsonbString(const char *val1, int len1,
|
||||
const char *val2, int len2);
|
||||
static int lengthCompareJsonbPair(const void *a, const void *b, void *arg);
|
||||
static void uniqueifyJsonbObject(JsonbValue *object, bool unique_keys,
|
||||
bool skip_nulls);
|
||||
static void uniqueifyJsonbObject(JsonbValue *object);
|
||||
static JsonbValue *pushJsonbValueScalar(JsonbParseState **pstate,
|
||||
JsonbIteratorToken seq,
|
||||
JsonbValue *scalarVal);
|
||||
@@ -690,9 +689,7 @@ pushJsonbValueScalar(JsonbParseState **pstate, JsonbIteratorToken seq,
|
||||
appendElement(*pstate, scalarVal);
|
||||
break;
|
||||
case WJB_END_OBJECT:
|
||||
uniqueifyJsonbObject(&(*pstate)->contVal,
|
||||
(*pstate)->unique_keys,
|
||||
(*pstate)->skip_nulls);
|
||||
uniqueifyJsonbObject(&(*pstate)->contVal);
|
||||
/* fall through! */
|
||||
case WJB_END_ARRAY:
|
||||
/* Steps here common to WJB_END_OBJECT case */
|
||||
@@ -735,9 +732,6 @@ pushState(JsonbParseState **pstate)
|
||||
JsonbParseState *ns = palloc(sizeof(JsonbParseState));
|
||||
|
||||
ns->next = *pstate;
|
||||
ns->unique_keys = false;
|
||||
ns->skip_nulls = false;
|
||||
|
||||
return ns;
|
||||
}
|
||||
|
||||
@@ -1942,7 +1936,7 @@ lengthCompareJsonbPair(const void *a, const void *b, void *binequal)
|
||||
* Sort and unique-ify pairs in JsonbValue object
|
||||
*/
|
||||
static void
|
||||
uniqueifyJsonbObject(JsonbValue *object, bool unique_keys, bool skip_nulls)
|
||||
uniqueifyJsonbObject(JsonbValue *object)
|
||||
{
|
||||
bool hasNonUniq = false;
|
||||
|
||||
@@ -1952,32 +1946,15 @@ uniqueifyJsonbObject(JsonbValue *object, bool unique_keys, bool skip_nulls)
|
||||
qsort_arg(object->val.object.pairs, object->val.object.nPairs, sizeof(JsonbPair),
|
||||
lengthCompareJsonbPair, &hasNonUniq);
|
||||
|
||||
if (hasNonUniq && unique_keys)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DUPLICATE_JSON_OBJECT_KEY_VALUE),
|
||||
errmsg("duplicate JSON object key value")));
|
||||
|
||||
if (hasNonUniq || skip_nulls)
|
||||
if (hasNonUniq)
|
||||
{
|
||||
JsonbPair *ptr,
|
||||
*res;
|
||||
|
||||
while (skip_nulls && object->val.object.nPairs > 0 &&
|
||||
object->val.object.pairs->value.type == jbvNull)
|
||||
{
|
||||
/* If skip_nulls is true, remove leading items with null */
|
||||
object->val.object.pairs++;
|
||||
object->val.object.nPairs--;
|
||||
}
|
||||
|
||||
ptr = object->val.object.pairs + 1;
|
||||
res = object->val.object.pairs;
|
||||
JsonbPair *ptr = object->val.object.pairs + 1,
|
||||
*res = object->val.object.pairs;
|
||||
|
||||
while (ptr - object->val.object.pairs < object->val.object.nPairs)
|
||||
{
|
||||
/* Avoid copying over duplicate or null */
|
||||
if (lengthCompareJsonbStringValue(ptr, res) != 0 &&
|
||||
(!skip_nulls || ptr->value.type != jbvNull))
|
||||
/* Avoid copying over duplicate */
|
||||
if (lengthCompareJsonbStringValue(ptr, res) != 0)
|
||||
{
|
||||
res++;
|
||||
if (ptr != res)
|
||||
|
||||
Reference in New Issue
Block a user