diff --git a/src/jsonb_utils.c b/src/jsonb_utils.c index 8037f6dab..5a7e6c35a 100644 --- a/src/jsonb_utils.c +++ b/src/jsonb_utils.c @@ -34,6 +34,7 @@ ts_jsonb_add_str(JsonbParseState *state, const char *key, const char *value) { JsonbValue json_value; + Assert(value != NULL); /* If there is a null entry, don't add it to the JSON */ if (value == NULL) return; @@ -91,8 +92,8 @@ ts_jsonb_add_pair(JsonbParseState *state, JsonbValue *key, JsonbValue *value) pushJsonbValue(&state, WJB_VALUE, value); } -text * -ts_jsonb_get_text_field(Jsonb *json, text *field_name) +char * +ts_jsonb_get_str_field(Jsonb *jsonb, const char *key) { /* * `jsonb_object_field_text` returns NULL when the field is not found so @@ -103,33 +104,22 @@ ts_jsonb_get_text_field(Jsonb *json, text *field_name) InitFunctionCallInfoData(*fcinfo, NULL, 2, InvalidOid, NULL, NULL); - FC_SET_ARG(fcinfo, 0, PointerGetDatum(json)); - FC_SET_ARG(fcinfo, 1, PointerGetDatum(field_name)); + FC_SET_ARG(fcinfo, 0, PointerGetDatum(jsonb)); + FC_SET_ARG(fcinfo, 1, PointerGetDatum(cstring_to_text(key))); result = jsonb_object_field_text(fcinfo); if (fcinfo->isnull) return NULL; - return DatumGetTextP(result); -} - -char * -ts_jsonb_get_str_field(Jsonb *license, text *field_name) -{ - text *text_str = ts_jsonb_get_text_field(license, field_name); - - if (text_str == NULL) - return NULL; - - return text_to_cstring(text_str); + return text_to_cstring(DatumGetTextP(result)); } TimestampTz -ts_jsonb_get_time_field(Jsonb *license, text *field_name, bool *field_found) +ts_jsonb_get_time_field(Jsonb *jsonb, const char *key, bool *field_found) { Datum time_datum; - text *time_str = ts_jsonb_get_text_field(license, field_name); + char *time_str = ts_jsonb_get_str_field(jsonb, key); if (time_str == NULL) { @@ -138,7 +128,7 @@ ts_jsonb_get_time_field(Jsonb *license, text *field_name, bool *field_found) } time_datum = DirectFunctionCall3(timestamptz_in, - /* str= */ CStringGetDatum(text_to_cstring(time_str)), + /* str= */ CStringGetDatum(time_str), /* unused */ Int32GetDatum(-1), /* typmod= */ Int32GetDatum(-1)); @@ -147,10 +137,10 @@ ts_jsonb_get_time_field(Jsonb *license, text *field_name, bool *field_found) } int32 -ts_jsonb_get_int32_field(Jsonb *json, text *field_name, bool *field_found) +ts_jsonb_get_int32_field(Jsonb *json, const char *key, bool *field_found) { Datum int_datum; - char *int_str = ts_jsonb_get_str_field(json, field_name); + char *int_str = ts_jsonb_get_str_field(json, key); if (int_str == NULL) { diff --git a/src/jsonb_utils.h b/src/jsonb_utils.h index b00b09298..ef6892b7c 100644 --- a/src/jsonb_utils.h +++ b/src/jsonb_utils.h @@ -22,10 +22,9 @@ extern TSDLLEXPORT void ts_jsonb_add_numeric(JsonbParseState *state, const char extern void ts_jsonb_add_value(JsonbParseState *state, const char *key, JsonbValue *value); -extern TSDLLEXPORT text *ts_jsonb_get_text_field(Jsonb *json, text *field_name); -extern TSDLLEXPORT char *ts_jsonb_get_str_field(Jsonb *license, text *field_name); -extern TSDLLEXPORT TimestampTz ts_jsonb_get_time_field(Jsonb *license, text *field_name, +extern TSDLLEXPORT char *ts_jsonb_get_str_field(Jsonb *jsonb, const char *key); +extern TSDLLEXPORT TimestampTz ts_jsonb_get_time_field(Jsonb *jsonb, const char *key, bool *field_found); -extern TSDLLEXPORT int32 ts_jsonb_get_int32_field(Jsonb *json, text *field_name, bool *field_found); +extern TSDLLEXPORT int32 ts_jsonb_get_int32_field(Jsonb *json, const char *key, bool *field_found); #endif /* TIMESCALEDB_JSONB_UTILS_H */ diff --git a/tsl/src/license.c b/tsl/src/license.c index f410810d7..f4765adf5 100644 --- a/tsl/src/license.c +++ b/tsl/src/license.c @@ -264,21 +264,20 @@ license_info_init_from_jsonb(Jsonb *json_license, LicenseInfo *out) static char * json_get_id(Jsonb *license) { - return ts_jsonb_get_str_field(license, cstring_to_text(ID_FIELD)); + return ts_jsonb_get_str_field(license, ID_FIELD); } static char * json_get_kind(Jsonb *license) { - return ts_jsonb_get_str_field(license, cstring_to_text(KIND_FIELD)); + return ts_jsonb_get_str_field(license, KIND_FIELD); } static TimestampTz json_get_start_time(Jsonb *license) { bool found = false; - TimestampTz start_time = - ts_jsonb_get_time_field(license, cstring_to_text(START_TIME_FIELD), &found); + TimestampTz start_time = ts_jsonb_get_time_field(license, START_TIME_FIELD, &found); if (!found) elog(ERRCODE_FEATURE_NOT_SUPPORTED, FIELD_NOT_FOUND_ERRSTRING, START_TIME_FIELD); @@ -289,8 +288,7 @@ static TimestampTz json_get_end_time(Jsonb *license) { bool found = false; - TimestampTz end_time = - ts_jsonb_get_time_field(license, cstring_to_text(END_TIME_FIELD), &found); + TimestampTz end_time = ts_jsonb_get_time_field(license, END_TIME_FIELD, &found); if (!found) elog(ERRCODE_FEATURE_NOT_SUPPORTED, FIELD_NOT_FOUND_ERRSTRING, END_TIME_FIELD);