Thread
-
Re: Add RESPECT/IGNORE NULLS and FROM FIRST/LAST options
Tatsuo Ishii <ishii@postgresql.org> — 2025-10-19T00:38:31Z
> Thanks for the report. > >> Coverity thinks that this code has still some incorrect bits, and I >> think that it is right to think so even on today's HEAD at >> 02c171f63fca. >> >> In WinGetFuncArgInPartition()@nodeWindowAgg.c, we have the following >> loop (keeping only the relevant parts: >> do >> { >> [...] >> else /* need to check NULL or not */ >> { >> /* get tuple and evaluate in partition */ >> datum = gettuple_eval_partition(winobj, argno, >> abs_pos, isnull, &myisout); >> if (myisout) /* out of partition? */ >> break; >> if (!*isnull) >> notnull_offset++; >> /* record the row status */ >> put_notnull_info(winobj, abs_pos, *isnull); >> } >> } while (notnull_offset < notnull_relpos); >> >> /* get tuple and evaluate in partition */ >> datum = gettuple_eval_partition(winobj, argno, >> abs_pos, isnull, &myisout); >> >> And Coverity is telling that there is no point in setting a datum in >> this else condition to just override its value when we exit the while >> loop. To me, it's a sigh that this code's logic could be simplified. > > To fix the issue, I think we can change: > >> datum = gettuple_eval_partition(winobj, argno, >> abs_pos, isnull, &myisout); > > to: > > (void) gettuple_eval_partition(winobj, argno, > abs_pos, isnull, &myisout); > > This explicitely stats that we ignore the return value from > gettuple_eval_partition. I hope coverity understands this. > >> In passing, gettuple_eval_partition() is under-documented for me. Its >> name refers to the fact that it gets a tuple and evaluates a >> partition. Its top comment tells the same thing as the name of the >> function, so it's a bit hard to say why it is useful with the code >> written this way, and how others many benefit when attempting to reuse >> it, or if it even makes sense to reuse it for other purposes. > > What about changing the comment this way? > > /* gettuple_eval_partition > * get tuple in a patition and evaluate the window function's argument > * expression on it. > */ > > Attached is the patch for above. Patch pushed with minor comment tweaks. Thanks. -- Tatsuo Ishii SRA OSS K.K. English: http://www.sraoss.co.jp/index_en/ Japanese:http://www.sraoss.co.jp