]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Use ereport rather than elog in WinCheckAndInitializeNullTreatment.
authorTatsuo Ishii <ishii@postgresql.org>
Tue, 14 Oct 2025 10:15:24 +0000 (19:15 +0900)
committerTatsuo Ishii <ishii@postgresql.org>
Tue, 14 Oct 2025 10:15:24 +0000 (19:15 +0900)
Previously WinCheckAndInitializeNullTreatment() used elog() to emit an
error message. ereport() should be used instead because it's a
user-facing error. Also use existing get_func_name() to get a
function's name, rather than own implementation.

Moreover add an assertion to validate winobj parameter, just like
other window function API.

Reported-by: Tom Lane <tgl@sss.pgh.pa.us>
Author: Tatsuo Ishii <ishii@postgresql.org>
Reviewed-by: Chao Li <lic@highgo.com>
Discussion: https://postgr.es/m/2952409.1760023154%40sss.pgh.pa.us

src/backend/executor/nodeWindowAgg.c

index e6a53f9539158447828f35225a8c718e3a5a90d6..47e00be7b49cce3c196caefc4f3eb8a1dae92a33 100644 (file)
@@ -3538,24 +3538,20 @@ WinCheckAndInitializeNullTreatment(WindowObject winobj,
                                                                   bool allowNullTreatment,
                                                                   FunctionCallInfo fcinfo)
 {
+       Assert(WindowObjectIsValid(winobj));
        if (winobj->ignore_nulls != NO_NULLTREATMENT && !allowNullTreatment)
        {
-               HeapTuple       proctup;
-               Form_pg_proc procform;
-               Oid                     funcid;
+               const char *funcname = get_func_name(fcinfo->flinfo->fn_oid);
 
-               funcid = fcinfo->flinfo->fn_oid;
-               proctup = SearchSysCache1(PROCOID,
-                                                                 ObjectIdGetDatum(funcid));
-               if (!HeapTupleIsValid(proctup))
-                       elog(ERROR, "cache lookup failed for function %u", funcid);
-               procform = (Form_pg_proc) GETSTRUCT(proctup);
-               elog(ERROR, "function %s does not allow RESPECT/IGNORE NULLS",
-                        NameStr(procform->proname));
+               if (!funcname)
+                       elog(ERROR, "could not get function name");
+               ereport(ERROR,
+                               (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+                                errmsg("function %s does not allow RESPECT/IGNORE NULLS",
+                                               funcname)));
        }
        else if (winobj->ignore_nulls == PARSER_IGNORE_NULLS)
                winobj->ignore_nulls = IGNORE_NULLS;
-
 }
 
 /*