From 9aaec14a0601625bc2c4a5e1225bb58fa7237e4a Mon Sep 17 00:00:00 2001 From: Ranier Vilela Date: Thu, 31 Aug 2023 10:59:54 -0300 Subject: [PATCH 2/2] Avoid unecessary calls to strlen function. cstring_to_text call strlen to calculate the size of string parameter. Where we can know the size, we can avoid. Author: Ranier Vilela (ranier.vf@gmail.com) --- src/backend/commands/event_trigger.c | 2 +- src/backend/utils/adt/arrayfuncs.c | 2 +- src/backend/utils/adt/misc.c | 3 +-- src/backend/utils/adt/quote.c | 2 +- src/backend/utils/adt/timestamp.c | 5 +++-- src/backend/utils/adt/tsquery.c | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c index d4b00d1a82..a487abbd59 100644 --- a/src/backend/commands/event_trigger.c +++ b/src/backend/commands/event_trigger.c @@ -347,7 +347,7 @@ filter_list_to_array(List *filterlist) result = pstrdup(value); for (p = result; *p; p++) *p = pg_ascii_toupper((unsigned char) *p); - data[i++] = PointerGetDatum(cstring_to_text(result)); + data[i++] = PointerGetDatum(cstring_to_text_with_len(result, p - result)); pfree(result); } diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c index 7828a6264b..b4b1fe37c3 100644 --- a/src/backend/utils/adt/arrayfuncs.c +++ b/src/backend/utils/adt/arrayfuncs.c @@ -1708,7 +1708,7 @@ array_dims(PG_FUNCTION_ARGS) p += strlen(p); } - PG_RETURN_TEXT_P(cstring_to_text(buf)); + PG_RETURN_TEXT_P(cstring_to_text_with_len(buf, p - buf)); } /* diff --git a/src/backend/utils/adt/misc.c b/src/backend/utils/adt/misc.c index 7cc2bc4e39..f0349e1e91 100644 --- a/src/backend/utils/adt/misc.c +++ b/src/backend/utils/adt/misc.c @@ -358,9 +358,8 @@ pg_tablespace_location(PG_FUNCTION_ARGS) (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg("symbolic link \"%s\" target is too long", sourcepath))); - targetpath[rllen] = '\0'; - PG_RETURN_TEXT_P(cstring_to_text(targetpath)); + PG_RETURN_TEXT_P(cstring_to_text_with_len(targetpath, rllen)); } /* diff --git a/src/backend/utils/adt/quote.c b/src/backend/utils/adt/quote.c index f2f633befa..441f94581a 100644 --- a/src/backend/utils/adt/quote.c +++ b/src/backend/utils/adt/quote.c @@ -125,7 +125,7 @@ Datum quote_nullable(PG_FUNCTION_ARGS) { if (PG_ARGISNULL(0)) - PG_RETURN_TEXT_P(cstring_to_text("NULL")); + PG_RETURN_TEXT_P(cstring_to_text_with_len("NULL", 4)); else PG_RETURN_DATUM(DirectFunctionCall1(quote_literal, PG_GETARG_DATUM(0))); diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index 0e50aaec5a..4a91e4cf75 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -1632,14 +1632,15 @@ timeofday(PG_FUNCTION_ARGS) char templ[128]; char buf[128]; pg_time_t tt; + int len; gettimeofday(&tp, NULL); tt = (pg_time_t) tp.tv_sec; pg_strftime(templ, sizeof(templ), "%a %b %d %H:%M:%S.%%06d %Y %Z", pg_localtime(&tt, session_timezone)); - snprintf(buf, sizeof(buf), templ, tp.tv_usec); + len = snprintf(buf, sizeof(buf), templ, tp.tv_usec); - PG_RETURN_TEXT_P(cstring_to_text(buf)); + PG_RETURN_TEXT_P(cstring_to_text_with_len(buf, len)); } /* diff --git a/src/backend/utils/adt/tsquery.c b/src/backend/utils/adt/tsquery.c index 67ad876a27..3855677f0d 100644 --- a/src/backend/utils/adt/tsquery.c +++ b/src/backend/utils/adt/tsquery.c @@ -1382,7 +1382,7 @@ tsquerytree(PG_FUNCTION_ARGS) if (!q) { - res = cstring_to_text("T"); + res = cstring_to_text_with_len("T", 1); } else { -- 2.32.0.windows.1