Split JSON lexer/parser from 'json' data type support.
Keep the code that pertains to the 'json' data type in json.c, but move the lexing and parsing code to a new file jsonapi.c, a name I chose because the corresponding prototypes are in jsonapi.h. This seems like a logical division, because the JSON lexer and parser are also used by the 'jsonb' data type, but the SQL-callable functions in json.c are a separate thing. Also, the new jsonapi.c file needs to include far fewer header files than json.c, which seems like a good sign that this is an appropriate place to insert an abstraction boundary. I took the opportunity to remove a few apparently-unneeded includes from json.c at the same time. Patch by me, reviewed by David Steele, Mark Dilger, and Andrew Dunstan. The previous commit was, too, but I forgot to note it in the commit message. Discussion: http://postgr.es/m/CA+TgmoYfOXhd27MUDGioVh6QtpD0C1K-f6ObSA10AWiHBAL5bA@mail.gmail.com
This commit is contained in:
parent
ce0425b162
commit
11b5e3e35d
@ -44,6 +44,7 @@ OBJS = \
|
|||||||
int.o \
|
int.o \
|
||||||
int8.o \
|
int8.o \
|
||||||
json.o \
|
json.o \
|
||||||
|
jsonapi.o \
|
||||||
jsonb.o \
|
jsonb.o \
|
||||||
jsonb_gin.o \
|
jsonb_gin.o \
|
||||||
jsonb_op.o \
|
jsonb_op.o \
|
||||||
|
File diff suppressed because it is too large
Load Diff
1216
src/backend/utils/adt/jsonapi.c
Normal file
1216
src/backend/utils/adt/jsonapi.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -103,6 +103,9 @@ typedef struct JsonSemAction
|
|||||||
*/
|
*/
|
||||||
extern void pg_parse_json(JsonLexContext *lex, JsonSemAction *sem);
|
extern void pg_parse_json(JsonLexContext *lex, JsonSemAction *sem);
|
||||||
|
|
||||||
|
/* the null action object used for pure validation */
|
||||||
|
extern JsonSemAction nullSemAction;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* json_count_array_elements performs a fast secondary parse to determine the
|
* json_count_array_elements performs a fast secondary parse to determine the
|
||||||
* number of elements in passed array lex context. It should be called from an
|
* number of elements in passed array lex context. It should be called from an
|
||||||
@ -124,6 +127,9 @@ extern JsonLexContext *makeJsonLexContextCstringLen(char *json,
|
|||||||
int len,
|
int len,
|
||||||
bool need_escapes);
|
bool need_escapes);
|
||||||
|
|
||||||
|
/* lex one token */
|
||||||
|
extern void json_lex(JsonLexContext *lex);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Utility function to check if a string is a valid JSON number.
|
* Utility function to check if a string is a valid JSON number.
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user