Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 75e3cca

Browse filesBrowse files
committed
Don't add bailout adjustment for non-strict deserialize calls.
When building aggregate expression steps, strict checks need a bailout jump for when a null value is encountered, so there is a list of steps that require later adjustment. Adding entries to that list for steps that aren't actually strict would be harmless, except that there is an Assert which catches them. This leads to spurious errors on asserts builds, for data sets that trigger parallel aggregation of an aggregate with a non-strict deserialization function (no such aggregates exist in the core system). Repair by not adding the adjustment entry when it's not needed. Backpatch back to 11 where the code was introduced. Per a report from Darafei (Komzpa) of the PostGIS project; analysis and patch by me. Discussion: https://postgr.es/m/87mty7peb3.fsf@news-spur.riddles.org.uk
1 parent bfda0a0 commit 75e3cca
Copy full SHA for 75e3cca

File tree

Expand file treeCollapse file tree

1 file changed

+4
-2
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+4
-2
lines changed

‎src/backend/executor/execExpr.c

Copy file name to clipboardExpand all lines: src/backend/executor/execExpr.c
+4-2Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3060,8 +3060,10 @@ ExecBuildAggTrans(AggState *aggstate, AggStatePerPhase phase,
30603060
scratch.resnull = &trans_fcinfo->args[argno + 1].isnull;
30613061

30623062
ExprEvalPushStep(state, &scratch);
3063-
adjust_bailout = lappend_int(adjust_bailout,
3064-
state->steps_len - 1);
3063+
/* don't add an adjustment unless the function is strict */
3064+
if (pertrans->deserialfn.fn_strict)
3065+
adjust_bailout = lappend_int(adjust_bailout,
3066+
state->steps_len - 1);
30653067

30663068
/* restore normal settings of scratch fields */
30673069
scratch.resvalue = &state->resvalue;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.