aboutsummaryrefslogtreecommitdiff
path: root/src/include/utils/jsonapi.h
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2020-01-29 10:19:24 -0500
committerRobert Haas <rhaas@postgresql.org>2020-01-29 10:22:51 -0500
commitbeb4699091e9fab1c5f465056bef35c9ddf7f9fc (patch)
tree49206e96c8840b42e6462cfed38302e03cd9130c /src/include/utils/jsonapi.h
parentdc788668bb269b10a108e87d14fefd1b9301b793 (diff)
downloadpostgresql-beb4699091e9fab1c5f465056bef35c9ddf7f9fc.tar.gz
postgresql-beb4699091e9fab1c5f465056bef35c9ddf7f9fc.zip
Move jsonapi.c and jsonapi.h to src/common.
To make this work, (1) makeJsonLexContextCstringLen now takes the encoding to be used as an argument; (2) check_stack_depth() is made to do nothing in frontend code, and (3) elog(ERROR, ...) is changed to pg_log_fatal + exit in frontend code. Mark Dilger, reviewed and slightly revised by me. Discussion: http://postgr.es/m/CA+TgmoYfOXhd27MUDGioVh6QtpD0C1K-f6ObSA10AWiHBAL5bA@mail.gmail.com
Diffstat (limited to 'src/include/utils/jsonapi.h')
-rw-r--r--src/include/utils/jsonapi.h167
1 files changed, 0 insertions, 167 deletions
diff --git a/src/include/utils/jsonapi.h b/src/include/utils/jsonapi.h
deleted file mode 100644
index 4d69b184951..00000000000
--- a/src/include/utils/jsonapi.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * jsonapi.h
- * Declarations for JSON API support.
- *
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * src/include/utils/jsonapi.h
- *
- *-------------------------------------------------------------------------
- */
-
-#ifndef JSONAPI_H
-#define JSONAPI_H
-
-#include "lib/stringinfo.h"
-
-typedef enum
-{
- JSON_TOKEN_INVALID,
- JSON_TOKEN_STRING,
- JSON_TOKEN_NUMBER,
- JSON_TOKEN_OBJECT_START,
- JSON_TOKEN_OBJECT_END,
- JSON_TOKEN_ARRAY_START,
- JSON_TOKEN_ARRAY_END,
- JSON_TOKEN_COMMA,
- JSON_TOKEN_COLON,
- JSON_TOKEN_TRUE,
- JSON_TOKEN_FALSE,
- JSON_TOKEN_NULL,
- JSON_TOKEN_END
-} JsonTokenType;
-
-typedef enum
-{
- JSON_SUCCESS,
- JSON_ESCAPING_INVALID,
- JSON_ESCAPING_REQUIRED,
- JSON_EXPECTED_ARRAY_FIRST,
- JSON_EXPECTED_ARRAY_NEXT,
- JSON_EXPECTED_COLON,
- JSON_EXPECTED_END,
- JSON_EXPECTED_JSON,
- JSON_EXPECTED_MORE,
- JSON_EXPECTED_OBJECT_FIRST,
- JSON_EXPECTED_OBJECT_NEXT,
- JSON_EXPECTED_STRING,
- JSON_INVALID_TOKEN,
- JSON_UNICODE_CODE_POINT_ZERO,
- JSON_UNICODE_ESCAPE_FORMAT,
- JSON_UNICODE_HIGH_ESCAPE,
- JSON_UNICODE_HIGH_SURROGATE,
- JSON_UNICODE_LOW_SURROGATE
-} JsonParseErrorType;
-
-
-/*
- * All the fields in this structure should be treated as read-only.
- *
- * If strval is not null, then it should contain the de-escaped value
- * of the lexeme if it's a string. Otherwise most of these field names
- * should be self-explanatory.
- *
- * line_number and line_start are principally for use by the parser's
- * error reporting routines.
- * token_terminator and prev_token_terminator point to the character
- * AFTER the end of the token, i.e. where there would be a nul byte
- * if we were using nul-terminated strings.
- */
-typedef struct JsonLexContext
-{
- char *input;
- int input_length;
- char *token_start;
- char *token_terminator;
- char *prev_token_terminator;
- JsonTokenType token_type;
- int lex_level;
- int line_number;
- char *line_start;
- StringInfo strval;
-} JsonLexContext;
-
-typedef void (*json_struct_action) (void *state);
-typedef void (*json_ofield_action) (void *state, char *fname, bool isnull);
-typedef void (*json_aelem_action) (void *state, bool isnull);
-typedef void (*json_scalar_action) (void *state, char *token, JsonTokenType tokentype);
-
-
-/*
- * Semantic Action structure for use in parsing json.
- * Any of these actions can be NULL, in which case nothing is done at that
- * point, Likewise, semstate can be NULL. Using an all-NULL structure amounts
- * to doing a pure parse with no side-effects, and is therefore exactly
- * what the json input routines do.
- *
- * The 'fname' and 'token' strings passed to these actions are palloc'd.
- * They are not free'd or used further by the parser, so the action function
- * is free to do what it wishes with them.
- */
-typedef struct JsonSemAction
-{
- void *semstate;
- json_struct_action object_start;
- json_struct_action object_end;
- json_struct_action array_start;
- json_struct_action array_end;
- json_ofield_action object_field_start;
- json_ofield_action object_field_end;
- json_aelem_action array_element_start;
- json_aelem_action array_element_end;
- json_scalar_action scalar;
-} JsonSemAction;
-
-/*
- * pg_parse_json will parse the string in the lex calling the
- * action functions in sem at the appropriate points. It is
- * up to them to keep what state they need in semstate. If they
- * need access to the state of the lexer, then its pointer
- * should be passed to them as a member of whatever semstate
- * points to. If the action pointers are NULL the parser
- * does nothing and just continues.
- */
-extern JsonParseErrorType 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
- * array_start action.
- *
- * The return value indicates whether any error occurred, while the number
- * of elements is stored into *elements (but only if the return value is
- * JSON_SUCCESS).
- */
-extern JsonParseErrorType json_count_array_elements(JsonLexContext *lex,
- int *elements);
-
-/*
- * constructor for JsonLexContext, with or without strval element.
- * If supplied, the strval element will contain a de-escaped version of
- * the lexeme. However, doing this imposes a performance penalty, so
- * it should be avoided if the de-escaped lexeme is not required.
- */
-extern JsonLexContext *makeJsonLexContextCstringLen(char *json,
- int len,
- bool need_escapes);
-
-/* lex one token */
-extern JsonParseErrorType json_lex(JsonLexContext *lex);
-
-/* construct an error detail string for a json error */
-extern char *json_errdetail(JsonParseErrorType error, JsonLexContext *lex);
-
-/*
- * Utility function to check if a string is a valid JSON number.
- *
- * str argument does not need to be nul-terminated.
- */
-extern bool IsValidJsonNumber(const char *str, int len);
-
-#endif /* JSONAPI_H */