mirror of
https://github.com/postgres/postgres.git
synced 2025-12-21 05:21:08 +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:
@@ -17,9 +17,6 @@
|
||||
#ifndef _FORMATTING_H_
|
||||
#define _FORMATTING_H_
|
||||
|
||||
#define DCH_DATED 0x01
|
||||
#define DCH_TIMED 0x02
|
||||
#define DCH_ZONED 0x04
|
||||
|
||||
extern char *str_tolower(const char *buff, size_t nbytes, Oid collid);
|
||||
extern char *str_toupper(const char *buff, size_t nbytes, Oid collid);
|
||||
@@ -32,6 +29,5 @@ extern char *asc_initcap(const char *buff, size_t nbytes);
|
||||
extern Datum parse_datetime(text *date_txt, text *fmt, Oid collid, bool strict,
|
||||
Oid *typid, int32 *typmod, int *tz,
|
||||
bool *have_error);
|
||||
extern int datetime_format_flags(const char *fmt_str, bool *have_error);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -16,35 +16,9 @@
|
||||
|
||||
#include "lib/stringinfo.h"
|
||||
|
||||
typedef enum /* type categories for datum_to_json */
|
||||
{
|
||||
JSONTYPE_NULL, /* null, so we didn't bother to identify */
|
||||
JSONTYPE_BOOL, /* boolean (built-in types only) */
|
||||
JSONTYPE_NUMERIC, /* numeric (ditto) */
|
||||
JSONTYPE_DATE, /* we use special formatting for datetimes */
|
||||
JSONTYPE_TIMESTAMP,
|
||||
JSONTYPE_TIMESTAMPTZ,
|
||||
JSONTYPE_JSON, /* JSON itself (and JSONB) */
|
||||
JSONTYPE_ARRAY, /* array */
|
||||
JSONTYPE_COMPOSITE, /* composite */
|
||||
JSONTYPE_CAST, /* something with an explicit cast to JSON */
|
||||
JSONTYPE_OTHER /* all else */
|
||||
} JsonTypeCategory;
|
||||
|
||||
/* functions in json.c */
|
||||
extern void escape_json(StringInfo buf, const char *str);
|
||||
extern char *JsonEncodeDateTime(char *buf, Datum value, Oid typid,
|
||||
const int *tzp);
|
||||
extern bool to_json_is_immutable(Oid typoid);
|
||||
extern void json_categorize_type(Oid typoid, JsonTypeCategory *tcategory,
|
||||
Oid *outfuncoid);
|
||||
extern Datum to_json_worker(Datum val, JsonTypeCategory tcategory,
|
||||
Oid outfuncoid);
|
||||
extern Datum json_build_object_worker(int nargs, Datum *args, bool *nulls,
|
||||
Oid *types, bool absent_on_null,
|
||||
bool unique_keys);
|
||||
extern Datum json_build_array_worker(int nargs, Datum *args, bool *nulls,
|
||||
Oid *types, bool absent_on_null);
|
||||
extern bool json_validate(text *json, bool check_unique_keys, bool throw_error);
|
||||
|
||||
#endif /* JSON_H */
|
||||
|
||||
@@ -329,8 +329,6 @@ typedef struct JsonbParseState
|
||||
JsonbValue contVal;
|
||||
Size size;
|
||||
struct JsonbParseState *next;
|
||||
bool unique_keys; /* Check object key uniqueness */
|
||||
bool skip_nulls; /* Skip null object fields */
|
||||
} JsonbParseState;
|
||||
|
||||
/*
|
||||
@@ -376,22 +374,6 @@ typedef struct JsonbIterator
|
||||
struct JsonbIterator *parent;
|
||||
} JsonbIterator;
|
||||
|
||||
/* unlike with json categories, we need to treat json and jsonb differently */
|
||||
typedef enum /* type categories for datum_to_jsonb */
|
||||
{
|
||||
JSONBTYPE_NULL, /* null, so we didn't bother to identify */
|
||||
JSONBTYPE_BOOL, /* boolean (built-in types only) */
|
||||
JSONBTYPE_NUMERIC, /* numeric (ditto) */
|
||||
JSONBTYPE_DATE, /* we use special formatting for datetimes */
|
||||
JSONBTYPE_TIMESTAMP, /* we use special formatting for timestamp */
|
||||
JSONBTYPE_TIMESTAMPTZ, /* ... and timestamptz */
|
||||
JSONBTYPE_JSON, /* JSON */
|
||||
JSONBTYPE_JSONB, /* JSONB */
|
||||
JSONBTYPE_ARRAY, /* array */
|
||||
JSONBTYPE_COMPOSITE, /* composite */
|
||||
JSONBTYPE_JSONCAST, /* something with an explicit cast to JSON */
|
||||
JSONBTYPE_OTHER /* all else */
|
||||
} JsonbTypeCategory;
|
||||
|
||||
/* Support functions */
|
||||
extern uint32 getJsonbOffset(const JsonbContainer *jc, int index);
|
||||
@@ -419,14 +401,10 @@ extern void JsonbHashScalarValueExtended(const JsonbValue *scalarVal,
|
||||
uint64 *hash, uint64 seed);
|
||||
|
||||
/* jsonb.c support functions */
|
||||
extern Datum jsonb_from_text(text *js, bool unique_keys);
|
||||
extern char *JsonbToCString(StringInfo out, JsonbContainer *in,
|
||||
int estimated_len);
|
||||
extern char *JsonbToCStringIndent(StringInfo out, JsonbContainer *in,
|
||||
int estimated_len);
|
||||
extern Jsonb *JsonbMakeEmptyArray(void);
|
||||
extern Jsonb *JsonbMakeEmptyObject(void);
|
||||
extern char *JsonbUnquote(Jsonb *jb);
|
||||
extern bool JsonbExtractScalar(JsonbContainer *jbc, JsonbValue *res);
|
||||
extern const char *JsonbTypeName(JsonbValue *jb);
|
||||
|
||||
@@ -434,15 +412,4 @@ extern Datum jsonb_set_element(Jsonb *jb, Datum *path, int path_len,
|
||||
JsonbValue *newval);
|
||||
extern Datum jsonb_get_element(Jsonb *jb, Datum *path, int npath,
|
||||
bool *isnull, bool as_text);
|
||||
extern bool to_jsonb_is_immutable(Oid typoid);
|
||||
extern void jsonb_categorize_type(Oid typoid, JsonbTypeCategory *tcategory,
|
||||
Oid *outfuncoid);
|
||||
extern Datum to_jsonb_worker(Datum val, JsonbTypeCategory tcategory,
|
||||
Oid outfuncoid);
|
||||
extern Datum jsonb_build_object_worker(int nargs, Datum *args, bool *nulls,
|
||||
Oid *types, bool absent_on_null,
|
||||
bool unique_keys);
|
||||
extern Datum jsonb_build_array_worker(int nargs, Datum *args, bool *nulls,
|
||||
Oid *types, bool absent_on_null);
|
||||
|
||||
#endif /* __JSONB_H__ */
|
||||
|
||||
@@ -45,9 +45,6 @@ extern void pg_parse_json_or_ereport(JsonLexContext *lex, JsonSemAction *sem);
|
||||
/* report an error during json lexing or parsing */
|
||||
extern void json_ereport_error(JsonParseErrorType error, JsonLexContext *lex);
|
||||
|
||||
/* get first JSON token */
|
||||
extern JsonTokenType json_get_first_token(text *json, bool throw_error);
|
||||
|
||||
extern uint32 parse_jsonb_index_flags(Jsonb *jb);
|
||||
extern void iterate_jsonb_values(Jsonb *jb, uint32 flags, void *state,
|
||||
JsonIterateStringValuesAction action);
|
||||
@@ -58,8 +55,4 @@ extern Jsonb *transform_jsonb_string_values(Jsonb *jsonb, void *action_state,
|
||||
extern text *transform_json_string_values(text *json, void *action_state,
|
||||
JsonTransformStringValuesAction transform_action);
|
||||
|
||||
extern Datum json_populate_type(Datum json_val, Oid json_type,
|
||||
Oid typid, int32 typmod,
|
||||
void **cache, MemoryContext mcxt, bool *isnull);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -15,11 +15,8 @@
|
||||
#define JSONPATH_H
|
||||
|
||||
#include "fmgr.h"
|
||||
#include "executor/tablefunc.h"
|
||||
#include "nodes/pg_list.h"
|
||||
#include "nodes/primnodes.h"
|
||||
#include "utils/jsonb.h"
|
||||
#include "utils/jsonfuncs.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@@ -177,7 +174,6 @@ extern bool jspGetBool(JsonPathItem *v);
|
||||
extern char *jspGetString(JsonPathItem *v, int32 *len);
|
||||
extern bool jspGetArraySubscript(JsonPathItem *v, JsonPathItem *from,
|
||||
JsonPathItem *to, int i);
|
||||
extern bool jspIsMutable(JsonPath *path, List *varnames, List *varexprs);
|
||||
|
||||
extern const char *jspOperationName(JsonPathItemType type);
|
||||
|
||||
@@ -252,37 +248,4 @@ extern JsonPathParseResult *parsejsonpath(const char *str, int len);
|
||||
|
||||
extern int jspConvertRegexFlags(uint32 xflags);
|
||||
|
||||
/*
|
||||
* Evaluation of jsonpath
|
||||
*/
|
||||
|
||||
/* External variable passed into jsonpath. */
|
||||
typedef struct JsonPathVariableEvalContext
|
||||
{
|
||||
char *name;
|
||||
Oid typid;
|
||||
int32 typmod;
|
||||
struct ExprContext *econtext;
|
||||
struct ExprState *estate;
|
||||
MemoryContext mcxt; /* memory context for cached value */
|
||||
Datum value;
|
||||
bool isnull;
|
||||
bool evaluated;
|
||||
} JsonPathVariableEvalContext;
|
||||
|
||||
/* SQL/JSON item */
|
||||
extern void JsonItemFromDatum(Datum val, Oid typid, int32 typmod,
|
||||
JsonbValue *res);
|
||||
|
||||
extern bool JsonPathExists(Datum jb, JsonPath *path, List *vars, bool *error);
|
||||
extern Datum JsonPathQuery(Datum jb, JsonPath *jp, JsonWrapper wrapper,
|
||||
bool *empty, bool *error, List *vars);
|
||||
extern JsonbValue *JsonPathValue(Datum jb, JsonPath *jp, bool *empty,
|
||||
bool *error, List *vars);
|
||||
|
||||
extern int EvalJsonPathVar(void *vars, char *varName, int varNameLen,
|
||||
JsonbValue *val, JsonbValue *baseObject);
|
||||
|
||||
extern PGDLLIMPORT const TableFuncRoutine JsonbTableRoutine;
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user