| /*------------------------------------------------------------------------- | |
| * | |
| * jsonfuncs.h | |
| * Functions to process JSON data types. | |
| * | |
| * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group | |
| * Portions Copyright (c) 1994, Regents of the University of California | |
| * | |
| * src/include/utils/jsonfuncs.h | |
| * | |
| *------------------------------------------------------------------------- | |
| */ | |
| #ifndef JSONFUNCS_H | |
| #define JSONFUNCS_H | |
| #include "common/jsonapi.h" | |
| #include "utils/jsonb.h" | |
| /* | |
| * Flag types for iterate_json(b)_values to specify what elements from a | |
| * json(b) document we want to iterate. | |
| */ | |
| typedef enum JsonToIndex | |
| { | |
| jtiKey = 0x01, | |
| jtiString = 0x02, | |
| jtiNumeric = 0x04, | |
| jtiBool = 0x08, | |
| jtiAll = jtiKey | jtiString | jtiNumeric | jtiBool | |
| } JsonToIndex; | |
| /* an action that will be applied to each value in iterate_json(b)_values functions */ | |
| typedef void (*JsonIterateStringValuesAction) (void *state, char *elem_value, int elem_len); | |
| /* an action that will be applied to each value in transform_json(b)_values functions */ | |
| typedef text *(*JsonTransformStringValuesAction) (void *state, char *elem_value, int elem_len); | |
| /* build a JsonLexContext from a text datum */ | |
| extern JsonLexContext *makeJsonLexContext(text *json, bool need_escapes); | |
| /* try to parse json, and ereport(ERROR) on failure */ | |
| 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); | |
| extern uint32 parse_jsonb_index_flags(Jsonb *jb); | |
| extern void iterate_jsonb_values(Jsonb *jb, uint32 flags, void *state, | |
| JsonIterateStringValuesAction action); | |
| extern void iterate_json_values(text *json, uint32 flags, void *action_state, | |
| JsonIterateStringValuesAction action); | |
| extern Jsonb *transform_jsonb_string_values(Jsonb *jsonb, void *action_state, | |
| JsonTransformStringValuesAction transform_action); | |
| extern text *transform_json_string_values(text *json, void *action_state, | |
| JsonTransformStringValuesAction transform_action); | |
| #endif |