diff options
Diffstat (limited to 'src/backend/executor')
-rw-r--r-- | src/backend/executor/execQual.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c index 4ea0cbadadb..494208a0320 100644 --- a/src/backend/executor/execQual.c +++ b/src/backend/executor/execQual.c @@ -1801,12 +1801,20 @@ restart: pgstat_end_function_usage(&fcusage, rsinfo.isDone != ExprMultipleResult); } - else + else if (fcache->func.fn_retset) { + /* for a strict SRF, result for NULL is an empty set */ result = (Datum) 0; *isNull = true; *isDone = ExprEndResult; } + else + { + /* for a strict non-SRF, result for NULL is a NULL */ + result = (Datum) 0; + *isNull = true; + *isDone = ExprSingleResult; + } /* Which protocol does function want to use? */ if (rsinfo.returnMode == SFRM_ValuePerCall) |