From c1d5a2a118bf57d7d4a6758107802ba774486dbf Mon Sep 17 00:00:00 2001 From: Mark Dilger Date: Tue, 21 Jan 2020 07:44:52 -0800 Subject: [PATCH 05/11] Moving backend functions out of src/include/common/jsonapi.h Functions that rely on backend datatypes (text, Datum, etc) are now moved out of jsonapi.h into either json.h or jsonb.h, except for functions which work for both json and jsonb which are moved into a new header named jsonfuncs.h. --- src/backend/tsearch/to_tsany.c | 2 ++ src/backend/tsearch/wparser.c | 1 + src/include/common/jsonapi.h | 17 ----------------- src/include/utils/json.h | 5 +++++ src/include/utils/jsonb.h | 7 +++++++ src/include/utils/jsonfuncs.h | 28 ++++++++++++++++++++++++++++ 6 files changed, 43 insertions(+), 17 deletions(-) create mode 100644 src/include/utils/jsonfuncs.h diff --git a/src/backend/tsearch/to_tsany.c b/src/backend/tsearch/to_tsany.c index 9c356cbfd5..824df69cd1 100644 --- a/src/backend/tsearch/to_tsany.c +++ b/src/backend/tsearch/to_tsany.c @@ -17,6 +17,8 @@ #include "tsearch/ts_cache.h" #include "tsearch/ts_utils.h" #include "utils/builtins.h" +#include "utils/json.h" +#include "utils/jsonb.h" typedef struct MorphOpaque diff --git a/src/backend/tsearch/wparser.c b/src/backend/tsearch/wparser.c index 25ef79ac6d..ef8ec445c6 100644 --- a/src/backend/tsearch/wparser.c +++ b/src/backend/tsearch/wparser.c @@ -21,6 +21,7 @@ #include "tsearch/ts_cache.h" #include "tsearch/ts_utils.h" #include "utils/builtins.h" +#include "utils/jsonb.h" #include "utils/varlena.h" /******sql-level interface******/ diff --git a/src/include/common/jsonapi.h b/src/include/common/jsonapi.h index 6f7a810172..2aa35dbb3c 100644 --- a/src/include/common/jsonapi.h +++ b/src/include/common/jsonapi.h @@ -14,7 +14,6 @@ #ifndef JSONAPI_H #define JSONAPI_H -#include "utils/jsonb.h" #include "lib/stringinfo.h" typedef enum @@ -148,20 +147,4 @@ typedef enum 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); - -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); - -extern char *JsonEncodeDateTime(char *buf, Datum value, Oid typid, - const int *tzp); - #endif /* JSONAPI_H */ diff --git a/src/include/utils/json.h b/src/include/utils/json.h index 20b5294491..b12f5ae049 100644 --- a/src/include/utils/json.h +++ b/src/include/utils/json.h @@ -14,9 +14,14 @@ #ifndef JSON_H #define JSON_H +#include "common/jsonapi.h" #include "lib/stringinfo.h" +#include "utils/jsonfuncs.h" /* functions in json.c */ extern void escape_json(StringInfo buf, const char *str); +extern void iterate_json_values(text *json, uint32 flags, void *action_state, + JsonIterateStringValuesAction action); + #endif /* JSON_H */ diff --git a/src/include/utils/jsonb.h b/src/include/utils/jsonb.h index 5860011693..39bc734a5e 100644 --- a/src/include/utils/jsonb.h +++ b/src/include/utils/jsonb.h @@ -12,8 +12,10 @@ #ifndef __JSONB_H__ #define __JSONB_H__ +#include "common/jsonapi.h" #include "lib/stringinfo.h" #include "utils/array.h" +#include "utils/jsonfuncs.h" #include "utils/numeric.h" /* Tokens used when sequentially processing a jsonb value */ @@ -374,6 +376,11 @@ typedef struct JsonbIterator struct JsonbIterator *parent; } JsonbIterator; +extern uint32 parse_jsonb_index_flags(Jsonb *jb); +extern void iterate_jsonb_values(Jsonb *jb, uint32 flags, void *state, + JsonIterateStringValuesAction action); +extern Jsonb *transform_jsonb_string_values(Jsonb *jsonb, void *action_state, + JsonTransformStringValuesAction transform_action); /* Support functions */ extern uint32 getJsonbOffset(const JsonbContainer *jc, int index); diff --git a/src/include/utils/jsonfuncs.h b/src/include/utils/jsonfuncs.h new file mode 100644 index 0000000000..8d7abe73e6 --- /dev/null +++ b/src/include/utils/jsonfuncs.h @@ -0,0 +1,28 @@ +/*------------------------------------------------------------------------- + * + * jsonfuncs.h + * Declarations for JSON and JSONB functional support. + * + * Portions Copyright (c) 1996-2020, 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 "lib/stringinfo.h" + +/* 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); + +extern char *JsonEncodeDateTime(char *buf, Datum value, Oid typid, + const int *tzp); +extern text *transform_json_string_values(text *json, void *action_state, + JsonTransformStringValuesAction transform_action); + +#endif /* JSONFUNCS_H */ -- 2.21.1 (Apple Git-122.3)