jsonfuncs.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*-------------------------------------------------------------------------
  2. *
  3. * jsonfuncs.h
  4. * Functions to process JSON data types.
  5. *
  6. * Portions Copyright (c) 1996-2022, 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. #ifndef JSONFUNCS_H
  14. #define JSONFUNCS_H
  15. #include "common/jsonapi.h"
  16. #include "utils/jsonb.h"
  17. /*
  18. * Flag types for iterate_json(b)_values to specify what elements from a
  19. * json(b) document we want to iterate.
  20. */
  21. typedef enum JsonToIndex
  22. {
  23. jtiKey = 0x01,
  24. jtiString = 0x02,
  25. jtiNumeric = 0x04,
  26. jtiBool = 0x08,
  27. jtiAll = jtiKey | jtiString | jtiNumeric | jtiBool
  28. } JsonToIndex;
  29. /* an action that will be applied to each value in iterate_json(b)_values functions */
  30. typedef void (*JsonIterateStringValuesAction) (void *state, char *elem_value, int elem_len);
  31. /* an action that will be applied to each value in transform_json(b)_values functions */
  32. typedef text *(*JsonTransformStringValuesAction) (void *state, char *elem_value, int elem_len);
  33. /* build a JsonLexContext from a text datum */
  34. extern JsonLexContext *makeJsonLexContext(text *json, bool need_escapes);
  35. /* try to parse json, and ereport(ERROR) on failure */
  36. extern void pg_parse_json_or_ereport(JsonLexContext *lex, JsonSemAction *sem);
  37. /* report an error during json lexing or parsing */
  38. extern void json_ereport_error(JsonParseErrorType error, JsonLexContext *lex);
  39. extern uint32 parse_jsonb_index_flags(Jsonb *jb);
  40. extern void iterate_jsonb_values(Jsonb *jb, uint32 flags, void *state,
  41. JsonIterateStringValuesAction action);
  42. extern void iterate_json_values(text *json, uint32 flags, void *action_state,
  43. JsonIterateStringValuesAction action);
  44. extern Jsonb *transform_jsonb_string_values(Jsonb *jsonb, void *action_state,
  45. JsonTransformStringValuesAction transform_action);
  46. extern text *transform_json_string_values(text *json, void *action_state,
  47. JsonTransformStringValuesAction transform_action);
  48. #endif