From: Heikki Linnakangas Date: Tue, 6 Aug 2024 20:04:22 +0000 (+0300) Subject: Make nullSemAction const, add 'const' decorators to related functions X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=85829c973cb33592dbc0b0f3aaf9132f5dea6953;p=postgresql.git Make nullSemAction const, add 'const' decorators to related functions To make it more clear that these should never be modified. Reviewed-by: Andres Freund Discussion: https://www.postgresql.org/message-id/54c29fb0-edf2-48ea-9814-44e918bbd6e8@iki.fi --- diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c index 7076b344b7b..5ecb9fffae2 100644 --- a/src/backend/utils/adt/jsonfuncs.c +++ b/src/backend/utils/adt/jsonfuncs.c @@ -514,7 +514,7 @@ static JsonParseErrorType transform_string_values_scalar(void *state, char *toke * returned when escontext is an ErrorSaveContext). */ bool -pg_parse_json_or_errsave(JsonLexContext *lex, JsonSemAction *sem, +pg_parse_json_or_errsave(JsonLexContext *lex, const JsonSemAction *sem, Node *escontext) { JsonParseErrorType result; diff --git a/src/common/jsonapi.c b/src/common/jsonapi.c index 2527dbe1da9..2ffcaaa6fd1 100644 --- a/src/common/jsonapi.c +++ b/src/common/jsonapi.c @@ -213,15 +213,15 @@ static char JSON_PROD_GOAL[] = {JSON_TOKEN_END, JSON_NT_JSON, 0}; static inline JsonParseErrorType json_lex_string(JsonLexContext *lex); static inline JsonParseErrorType json_lex_number(JsonLexContext *lex, const char *s, bool *num_err, size_t *total_len); -static inline JsonParseErrorType parse_scalar(JsonLexContext *lex, JsonSemAction *sem); -static JsonParseErrorType parse_object_field(JsonLexContext *lex, JsonSemAction *sem); -static JsonParseErrorType parse_object(JsonLexContext *lex, JsonSemAction *sem); -static JsonParseErrorType parse_array_element(JsonLexContext *lex, JsonSemAction *sem); -static JsonParseErrorType parse_array(JsonLexContext *lex, JsonSemAction *sem); +static inline JsonParseErrorType parse_scalar(JsonLexContext *lex, const JsonSemAction *sem); +static JsonParseErrorType parse_object_field(JsonLexContext *lex, const JsonSemAction *sem); +static JsonParseErrorType parse_object(JsonLexContext *lex, const JsonSemAction *sem); +static JsonParseErrorType parse_array_element(JsonLexContext *lex, const JsonSemAction *sem); +static JsonParseErrorType parse_array(JsonLexContext *lex, const JsonSemAction *sem); static JsonParseErrorType report_parse_error(JsonParseContext ctx, JsonLexContext *lex); /* the null action object used for pure validation */ -JsonSemAction nullSemAction = +const JsonSemAction nullSemAction = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL @@ -519,7 +519,7 @@ freeJsonLexContext(JsonLexContext *lex) * other differences. */ JsonParseErrorType -pg_parse_json(JsonLexContext *lex, JsonSemAction *sem) +pg_parse_json(JsonLexContext *lex, const JsonSemAction *sem) { #ifdef FORCE_JSON_PSTACK @@ -648,7 +648,7 @@ json_count_array_elements(JsonLexContext *lex, int *elements) */ JsonParseErrorType pg_parse_json_incremental(JsonLexContext *lex, - JsonSemAction *sem, + const JsonSemAction *sem, const char *json, size_t len, bool is_last) @@ -1005,7 +1005,7 @@ pg_parse_json_incremental(JsonLexContext *lex, * - object field */ static inline JsonParseErrorType -parse_scalar(JsonLexContext *lex, JsonSemAction *sem) +parse_scalar(JsonLexContext *lex, const JsonSemAction *sem) { char *val = NULL; json_scalar_action sfunc = sem->scalar; @@ -1049,7 +1049,7 @@ parse_scalar(JsonLexContext *lex, JsonSemAction *sem) } static JsonParseErrorType -parse_object_field(JsonLexContext *lex, JsonSemAction *sem) +parse_object_field(JsonLexContext *lex, const JsonSemAction *sem) { /* * An object field is "fieldname" : value where value can be a scalar, @@ -1111,7 +1111,7 @@ parse_object_field(JsonLexContext *lex, JsonSemAction *sem) } static JsonParseErrorType -parse_object(JsonLexContext *lex, JsonSemAction *sem) +parse_object(JsonLexContext *lex, const JsonSemAction *sem) { /* * an object is a possibly empty sequence of object fields, separated by @@ -1185,7 +1185,7 @@ parse_object(JsonLexContext *lex, JsonSemAction *sem) } static JsonParseErrorType -parse_array_element(JsonLexContext *lex, JsonSemAction *sem) +parse_array_element(JsonLexContext *lex, const JsonSemAction *sem) { json_aelem_action astart = sem->array_element_start; json_aelem_action aend = sem->array_element_end; @@ -1229,7 +1229,7 @@ parse_array_element(JsonLexContext *lex, JsonSemAction *sem) } static JsonParseErrorType -parse_array(JsonLexContext *lex, JsonSemAction *sem) +parse_array(JsonLexContext *lex, const JsonSemAction *sem) { /* * an array is a possibly empty sequence of array elements, separated by diff --git a/src/include/common/jsonapi.h b/src/include/common/jsonapi.h index 71a491d72dc..a995fdbe081 100644 --- a/src/include/common/jsonapi.h +++ b/src/include/common/jsonapi.h @@ -153,16 +153,16 @@ typedef struct JsonSemAction * does nothing and just continues. */ extern JsonParseErrorType pg_parse_json(JsonLexContext *lex, - JsonSemAction *sem); + const JsonSemAction *sem); extern JsonParseErrorType pg_parse_json_incremental(JsonLexContext *lex, - JsonSemAction *sem, + const JsonSemAction *sem, const char *json, size_t len, bool is_last); /* the null action object used for pure validation */ -extern PGDLLIMPORT JsonSemAction nullSemAction; +extern PGDLLIMPORT const JsonSemAction nullSemAction; /* * json_count_array_elements performs a fast secondary parse to determine the diff --git a/src/include/utils/jsonfuncs.h b/src/include/utils/jsonfuncs.h index 93384d900a0..1f14ab7ddfe 100644 --- a/src/include/utils/jsonfuncs.h +++ b/src/include/utils/jsonfuncs.h @@ -41,7 +41,7 @@ typedef text *(*JsonTransformStringValuesAction) (void *state, char *elem_value, extern JsonLexContext *makeJsonLexContext(JsonLexContext *lex, text *json, bool need_escapes); /* try to parse json, and errsave(escontext) on failure */ -extern bool pg_parse_json_or_errsave(JsonLexContext *lex, JsonSemAction *sem, +extern bool pg_parse_json_or_errsave(JsonLexContext *lex, const JsonSemAction *sem, struct Node *escontext); #define pg_parse_json_or_ereport(lex, sem) \ diff --git a/src/test/modules/test_json_parser/test_json_parser_incremental.c b/src/test/modules/test_json_parser/test_json_parser_incremental.c index 47040e1e421..294e5f74eac 100644 --- a/src/test/modules/test_json_parser/test_json_parser_incremental.c +++ b/src/test/modules/test_json_parser/test_json_parser_incremental.c @@ -84,7 +84,7 @@ main(int argc, char **argv) size_t chunk_size = DEFAULT_CHUNK_SIZE; struct stat statbuf; off_t bytes_left; - JsonSemAction *testsem = &nullSemAction; + const JsonSemAction *testsem = &nullSemAction; char *testfile; int c; bool need_strings = false;