From: | Amit Langote <amitlangote09(at)gmail(dot)com> |
---|---|
To: | Andy Fan <zhihui(dot)fan1213(at)gmail(dot)com> |
Cc: | PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: Wired if-statement in gen_partprune_steps_internal |
Date: | 2020-10-12 08:36:48 |
Message-ID: | CA+HiwqFzbX+u4xMrecKHsQx0eUKbVr-Y7pUyV1VbLmF+SjqDMA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi,
On Thu, Oct 8, 2020 at 6:56 PM Andy Fan <zhihui(dot)fan1213(at)gmail(dot)com> wrote:
>
> Hi:
>
> I found the following code in gen_partprune_steps_internal, which
> looks the if-statement to be always true since list_length(results) > 1;
> I added an Assert(step_ids != NIL) and all the test cases passed.
> if the if-statement is always true, shall we remove it to avoid confusion?
>
>
> gen_partprune_steps_internal(GeneratePruningStepsContext *context,
>
>
> if (list_length(result) > 1)
> {
> List *step_ids = NIL;
>
> foreach(lc, result)
> {
> PartitionPruneStep *step = lfirst(lc);
>
> step_ids = lappend_int(step_ids, step->step_id);
> }
> Assert(step_ids != NIL);
> if (step_ids != NIL) // This should always be true.
> {
> PartitionPruneStep *step;
>
> step = gen_prune_step_combine(context, step_ids,
> PARTPRUNE_COMBINE_INTERSECT);
> result = lappend(result, step);
> }
> }
That seems fine to me.
Looking at this piece of code, I remembered that exactly the same
piece of logic is also present in gen_prune_steps_from_opexps(), which
looks like this:
/* Lastly, add a combine step to mutually AND these op steps, if needed */
if (list_length(opsteps) > 1)
{
List *opstep_ids = NIL;
foreach(lc, opsteps)
{
PartitionPruneStep *step = lfirst(lc);
opstep_ids = lappend_int(opstep_ids, step->step_id);
}
if (opstep_ids != NIL)
return gen_prune_step_combine(context, opstep_ids,
PARTPRUNE_COMBINE_INTERSECT);
return NULL;
}
else if (opsteps != NIL)
return linitial(opsteps);
I think we should remove this duplicative logic and return the
generated steps in a list from this function, which the code in
gen_partprune_steps_internal() then "combines" using an INTERSECT
step. See attached a patch to show what I mean.
--
Amit Langote
EDB: http://www.enterprisedb.com
Attachment | Content-Type | Size |
---|---|---|
partprune-code-tweaks.patch | application/octet-stream | 3.9 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Ashutosh Bapat | 2020-10-12 08:44:03 | Re: Remove some unnecessary if-condition |
Previous Message | Julien Rouhaud | 2020-10-12 08:20:05 | Re: Feature improvement: can we add queryId for pg_catalog.pg_stat_activity view? |