From 91a054cfbe4e3aa34e596ca73435e8ee4547e51b Mon Sep 17 00:00:00 2001 From: jian he Date: Mon, 6 Jan 2025 15:29:07 +0800 Subject: [PATCH v1 1/2] minor refactoring set_session_variable --- src/backend/commands/session_variable.c | 28 ++++++------------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/src/backend/commands/session_variable.c b/src/backend/commands/session_variable.c index 00a1f371e0..9e3d13bcfd 100644 --- a/src/backend/commands/session_variable.c +++ b/src/backend/commands/session_variable.c @@ -210,13 +210,12 @@ setup_session_variable(SVariable svar, Oid varid) static void set_session_variable(SVariable svar, Datum value, bool isnull) { - Datum newval; - SVariableData locsvar, - *_svar; - Assert(svar); Assert(!isnull || value == (Datum) 0); + /* free svar->value and set svar->isnull to true */ + free_session_variable_value(svar); + /* * Use typbyval, typbylen from session variable only when they are * trustworthy (the invalidation message was not accepted for this @@ -226,37 +225,22 @@ set_session_variable(SVariable svar, Datum value, bool isnull) * that no error can be thrown. */ if (!svar->is_valid) - { - setup_session_variable(&locsvar, svar->varid); - _svar = &locsvar; - } - else - _svar = svar; + setup_session_variable(svar, svar->varid); if (!isnull) { MemoryContext oldcxt = MemoryContextSwitchTo(SVariableMemoryContext); - newval = datumCopy(value, _svar->typbyval, _svar->typlen); + svar->value = datumCopy(value, svar->typbyval, svar->typlen); + svar->isnull = isnull; MemoryContextSwitchTo(oldcxt); } - else - newval = value; - - free_session_variable_value(svar); elog(DEBUG1, "session variable \"%s.%s\" (oid:%u) has new value", get_namespace_name(get_session_variable_namespace(svar->varid)), get_session_variable_name(svar->varid), svar->varid); - - /* no more error expected, so we can overwrite the old variable now */ - if (svar != _svar) - memcpy(svar, _svar, sizeof(SVariableData)); - - svar->value = newval; - svar->isnull = isnull; } /* -- 2.34.1