v1-0001-minor-refactoring-set_session_variable.no-cfbot
application/octet-stream
Filename: v1-0001-minor-refactoring-set_session_variable.no-cfbot
Type: application/octet-stream
Part: 0
Message:
Re: Re: proposal: schema variables
From 91a054cfbe4e3aa34e596ca73435e8ee4547e51b Mon Sep 17 00:00:00 2001
From: jian he <jian.universality@gmail.com>
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