Re: Add RESPECT/IGNORE NULLS and FROM FIRST/LAST options - Mailing list pgsql-hackers

From Tatsuo Ishii
Subject Re: Add RESPECT/IGNORE NULLS and FROM FIRST/LAST options
Date
Msg-id 20251019.093831.1684444745027170849.ishii@postgresql.org
Whole thread Raw
In response to Re: Add RESPECT/IGNORE NULLS and FROM FIRST/LAST options  (Tatsuo Ishii <ishii@postgresql.org>)
List pgsql-hackers
> 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



pgsql-hackers by date:

Previous
From: Corey Huinker
Date:
Subject: Re: Import Statistics in postgres_fdw before resorting to sampling.
Next
From: Tatsuo Ishii
Date:
Subject: Re: Add RESPECT/IGNORE NULLS and FROM FIRST/LAST options