PostgreSQL Source Code  git master
jsonfuncs.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * jsonfuncs.h
4  * Functions to process JSON data types.
5  *
6  * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
7  * Portions Copyright (c) 1994, Regents of the University of California
8  *
9  * src/include/utils/jsonfuncs.h
10  *
11  *-------------------------------------------------------------------------
12  */
13 
14 #ifndef JSONFUNCS_H
15 #define JSONFUNCS_H
16 
17 #include "common/jsonapi.h"
18 #include "utils/jsonb.h"
19 
20 /*
21  * Flag types for iterate_json(b)_values to specify what elements from a
22  * json(b) document we want to iterate.
23  */
24 typedef enum JsonToIndex
25 {
26  jtiKey = 0x01,
27  jtiString = 0x02,
28  jtiNumeric = 0x04,
29  jtiBool = 0x08,
32 
33 /* an action that will be applied to each value in iterate_json(b)_values functions */
34 typedef void (*JsonIterateStringValuesAction) (void *state, char *elem_value, int elem_len);
35 
36 /* an action that will be applied to each value in transform_json(b)_values functions */
37 typedef text *(*JsonTransformStringValuesAction) (void *state, char *elem_value, int elem_len);
38 
39 /* build a JsonLexContext from a text datum; see also freeJsonLexContext */
40 extern JsonLexContext *makeJsonLexContext(JsonLexContext *lex, text *json, bool need_escapes);
41 
42 /* try to parse json, and errsave(escontext) on failure */
44  struct Node *escontext);
45 
46 #define pg_parse_json_or_ereport(lex, sem) \
47  (void) pg_parse_json_or_errsave(lex, sem, NULL)
48 
49 /* save an error during json lexing or parsing */
51  struct Node *escontext);
52 
53 /* get first JSON token */
54 extern JsonTokenType json_get_first_token(text *json, bool throw_error);
55 
57 extern void iterate_jsonb_values(Jsonb *jb, uint32 flags, void *state,
59 extern void iterate_json_values(text *json, uint32 flags, void *action_state,
61 extern Jsonb *transform_jsonb_string_values(Jsonb *jsonb, void *action_state,
62  JsonTransformStringValuesAction transform_action);
63 extern text *transform_json_string_values(text *json, void *action_state,
64  JsonTransformStringValuesAction transform_action);
65 
66 /* Type categories returned by json_categorize_type */
67 typedef enum
68 {
69  JSONTYPE_NULL, /* null, so we didn't bother to identify */
70  JSONTYPE_BOOL, /* boolean (built-in types only) */
71  JSONTYPE_NUMERIC, /* numeric (ditto) */
72  JSONTYPE_DATE, /* we use special formatting for datetimes */
75  JSONTYPE_JSON, /* JSON (and JSONB, if not is_jsonb) */
76  JSONTYPE_JSONB, /* JSONB (if is_jsonb) */
77  JSONTYPE_ARRAY, /* array */
78  JSONTYPE_COMPOSITE, /* composite */
79  JSONTYPE_CAST, /* something with an explicit cast to JSON */
80  JSONTYPE_OTHER, /* all else */
82 
83 extern void json_categorize_type(Oid typoid, bool is_jsonb,
84  JsonTypeCategory *tcategory, Oid *outfuncoid);
85 extern Datum datum_to_json(Datum val, JsonTypeCategory tcategory,
86  Oid outfuncoid);
88  Oid outfuncoid);
89 extern Datum jsonb_from_text(text *js, bool unique_keys);
90 
91 #endif
unsigned int uint32
Definition: c.h:495
long val
Definition: informix.c:664
JsonParseErrorType
Definition: jsonapi.h:37
JsonTokenType
Definition: jsonapi.h:20
Datum jsonb_from_text(text *js, bool unique_keys)
Definition: jsonb.c:152
text * transform_json_string_values(text *json, void *action_state, JsonTransformStringValuesAction transform_action)
Definition: jsonfuncs.c:5559
Jsonb * transform_jsonb_string_values(Jsonb *jsonb, void *action_state, JsonTransformStringValuesAction transform_action)
Definition: jsonfuncs.c:5512
JsonLexContext * makeJsonLexContext(JsonLexContext *lex, text *json, bool need_escapes)
Definition: jsonfuncs.c:529
bool pg_parse_json_or_errsave(JsonLexContext *lex, JsonSemAction *sem, struct Node *escontext)
Definition: jsonfuncs.c:508
JsonToIndex
Definition: jsonfuncs.h:25
@ jtiKey
Definition: jsonfuncs.h:26
@ jtiAll
Definition: jsonfuncs.h:30
@ jtiNumeric
Definition: jsonfuncs.h:28
@ jtiBool
Definition: jsonfuncs.h:29
@ jtiString
Definition: jsonfuncs.h:27
uint32 parse_jsonb_index_flags(Jsonb *jb)
Definition: jsonfuncs.c:5302
void(* JsonIterateStringValuesAction)(void *state, char *elem_value, int elem_len)
Definition: jsonfuncs.h:34
JsonTokenType json_get_first_token(text *json, bool throw_error)
Definition: jsonfuncs.c:5678
JsonTypeCategory
Definition: jsonfuncs.h:68
@ JSONTYPE_JSON
Definition: jsonfuncs.h:75
@ JSONTYPE_NULL
Definition: jsonfuncs.h:69
@ JSONTYPE_TIMESTAMP
Definition: jsonfuncs.h:73
@ JSONTYPE_NUMERIC
Definition: jsonfuncs.h:71
@ JSONTYPE_DATE
Definition: jsonfuncs.h:72
@ JSONTYPE_BOOL
Definition: jsonfuncs.h:70
@ JSONTYPE_OTHER
Definition: jsonfuncs.h:80
@ JSONTYPE_CAST
Definition: jsonfuncs.h:79
@ JSONTYPE_COMPOSITE
Definition: jsonfuncs.h:78
@ JSONTYPE_ARRAY
Definition: jsonfuncs.h:77
@ JSONTYPE_TIMESTAMPTZ
Definition: jsonfuncs.h:74
@ JSONTYPE_JSONB
Definition: jsonfuncs.h:76
void iterate_jsonb_values(Jsonb *jb, uint32 flags, void *state, JsonIterateStringValuesAction action)
Definition: jsonfuncs.c:5370
void json_categorize_type(Oid typoid, bool is_jsonb, JsonTypeCategory *tcategory, Oid *outfuncoid)
Definition: jsonfuncs.c:5705
void iterate_json_values(text *json, uint32 flags, void *action_state, JsonIterateStringValuesAction action)
Definition: jsonfuncs.c:5438
void json_errsave_error(JsonParseErrorType error, JsonLexContext *lex, struct Node *escontext)
Definition: jsonfuncs.c:630
Datum datum_to_json(Datum val, JsonTypeCategory tcategory, Oid outfuncoid)
Definition: json.c:752
Datum datum_to_jsonb(Datum val, JsonTypeCategory tcategory, Oid outfuncoid)
Definition: jsonb.c:1117
text *(* JsonTransformStringValuesAction)(void *state, char *elem_value, int elem_len)
Definition: jsonfuncs.h:37
uintptr_t Datum
Definition: postgres.h:64
unsigned int Oid
Definition: postgres_ext.h:31
static void error(void)
Definition: sql-dyntest.c:147
Definition: jsonb.h:213
Definition: nodes.h:129
Definition: regguts.h:323
Definition: c.h:676