Commit 11b5e3e3 authored by Robert Haas's avatar Robert Haas

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
parent ce0425b1
......@@ -44,6 +44,7 @@ OBJS = \
int.o \
int8.o \
json.o \
jsonapi.o \
jsonb.o \
jsonb_gin.o \
jsonb_op.o \
......
This diff is collapsed.
This diff is collapsed.
......@@ -103,6 +103,9 @@ typedef struct JsonSemAction
*/
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
* 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,
bool need_escapes);
/* lex one token */
extern void json_lex(JsonLexContext *lex);
/*
* Utility function to check if a string is a valid JSON number.
*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment