mirror of
https://github.com/postgres/postgres.git
synced 2025-08-25 20:23:07 +03:00
Revert SQL/JSON features
The reverts the following and makes some associated cleanups: commitf79b803dc
: Common SQL/JSON clauses commitf4fb45d15
: SQL/JSON constructors commit5f0adec25
: Make STRING an unreserved_keyword. commit33a377608
: IS JSON predicate commit1a36bc9db
: SQL/JSON query functions commit606948b05
: SQL JSON functions commit49082c2cc
: RETURNING clause for JSON() and JSON_SCALAR() commit4e34747c8
: JSON_TABLE commitfadb48b00
: PLAN clauses for JSON_TABLE commit2ef6f11b0
: Reduce running time of jsonb_sqljson test commit14d3f24fa
: Further improve jsonb_sqljson parallel test commita6baa4bad
: Documentation for SQL/JSON features commitb46bcf7a4
: Improve readability of SQL/JSON documentation. commit112fdb352
: Fix finalization for json_objectagg and friends commitfcdb35c32
: Fix transformJsonBehavior commit4cd8717af
: Improve a couple of sql/json error messages commitf7a605f63
: Small cleanups in SQL/JSON code commit9c3d25e17
: Fix JSON_OBJECTAGG uniquefying bug commita79153b7a
: Claim SQL standard compliance for SQL/JSON features commita1e7616d6
: Rework SQL/JSON documentation commit8d9f9634e
: Fix errors in copyfuncs/equalfuncs support for JSON node types. commit3c633f32b
: Only allow returning string types or bytea from json_serialize commit67b26703b
: 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:
@@ -4923,8 +4923,7 @@ cost_qual_eval_walker(Node *node, cost_qual_eval_context *context)
|
||||
IsA(node, SQLValueFunction) ||
|
||||
IsA(node, XmlExpr) ||
|
||||
IsA(node, CoerceToDomain) ||
|
||||
IsA(node, NextValueExpr) ||
|
||||
IsA(node, JsonExpr))
|
||||
IsA(node, NextValueExpr))
|
||||
{
|
||||
/* Treat all these as having cost 1 */
|
||||
context->total.per_tuple += cpu_operator_cost;
|
||||
|
@@ -28,7 +28,6 @@
|
||||
#include "catalog/pg_type.h"
|
||||
#include "executor/executor.h"
|
||||
#include "executor/functions.h"
|
||||
#include "executor/execExpr.h"
|
||||
#include "funcapi.h"
|
||||
#include "miscadmin.h"
|
||||
#include "nodes/makefuncs.h"
|
||||
@@ -51,9 +50,6 @@
|
||||
#include "utils/builtins.h"
|
||||
#include "utils/datum.h"
|
||||
#include "utils/fmgroids.h"
|
||||
#include "utils/json.h"
|
||||
#include "utils/jsonb.h"
|
||||
#include "utils/jsonpath.h"
|
||||
#include "utils/lsyscache.h"
|
||||
#include "utils/memutils.h"
|
||||
#include "utils/syscache.h"
|
||||
@@ -386,45 +382,6 @@ contain_mutable_functions_walker(Node *node, void *context)
|
||||
context))
|
||||
return true;
|
||||
|
||||
if (IsA(node, JsonConstructorExpr))
|
||||
{
|
||||
const JsonConstructorExpr *ctor = (JsonConstructorExpr *) node;
|
||||
ListCell *lc;
|
||||
bool is_jsonb =
|
||||
ctor->returning->format->format_type == JS_FORMAT_JSONB;
|
||||
|
||||
/* Check argument_type => json[b] conversions */
|
||||
foreach(lc, ctor->args)
|
||||
{
|
||||
Oid typid = exprType(lfirst(lc));
|
||||
|
||||
if (is_jsonb ?
|
||||
!to_jsonb_is_immutable(typid) :
|
||||
!to_json_is_immutable(typid))
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Check all subnodes */
|
||||
}
|
||||
|
||||
if (IsA(node, JsonExpr))
|
||||
{
|
||||
JsonExpr *jexpr = castNode(JsonExpr, node);
|
||||
Const *cnst;
|
||||
|
||||
if (!IsA(jexpr->path_spec, Const))
|
||||
return true;
|
||||
|
||||
cnst = castNode(Const, jexpr->path_spec);
|
||||
|
||||
Assert(cnst->consttype == JSONPATHOID);
|
||||
if (cnst->constisnull)
|
||||
return false;
|
||||
|
||||
return jspIsMutable(DatumGetJsonPathP(cnst->constvalue),
|
||||
jexpr->passing_names, jexpr->passing_values);
|
||||
}
|
||||
|
||||
if (IsA(node, SQLValueFunction))
|
||||
{
|
||||
/* all variants of SQLValueFunction are stable */
|
||||
@@ -896,18 +853,6 @@ max_parallel_hazard_walker(Node *node, max_parallel_hazard_context *context)
|
||||
context, 0);
|
||||
}
|
||||
|
||||
/* JsonExpr is parallel-unsafe if subtransactions can be used. */
|
||||
else if (IsA(node, JsonExpr))
|
||||
{
|
||||
JsonExpr *jsexpr = (JsonExpr *) node;
|
||||
|
||||
if (ExecEvalJsonNeedsSubTransaction(jsexpr, NULL))
|
||||
{
|
||||
context->max_hazard = PROPARALLEL_UNSAFE;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/* Recurse to check arguments */
|
||||
return expression_tree_walker(node,
|
||||
max_parallel_hazard_walker,
|
||||
@@ -3567,29 +3512,6 @@ eval_const_expressions_mutator(Node *node,
|
||||
return ece_evaluate_expr((Node *) newcre);
|
||||
return (Node *) newcre;
|
||||
}
|
||||
case T_JsonValueExpr:
|
||||
{
|
||||
JsonValueExpr *jve = (JsonValueExpr *) node;
|
||||
Node *raw = eval_const_expressions_mutator((Node *) jve->raw_expr,
|
||||
context);
|
||||
|
||||
if (raw && IsA(raw, Const))
|
||||
{
|
||||
Node *formatted;
|
||||
Node *save_case_val = context->case_val;
|
||||
|
||||
context->case_val = raw;
|
||||
|
||||
formatted = eval_const_expressions_mutator((Node *) jve->formatted_expr,
|
||||
context);
|
||||
|
||||
context->case_val = save_case_val;
|
||||
|
||||
if (formatted && IsA(formatted, Const))
|
||||
return formatted;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user