On Wed, Oct 14, 2020 at 11:26 AM Andy Fan <zhihui.fan1...@gmail.com> wrote:
> > > On Mon, Oct 12, 2020 at 4:37 PM Amit Langote <amitlangot...@gmail.com> > wrote: > >> Hi, >> >> On Thu, Oct 8, 2020 at 6:56 PM Andy Fan <zhihui.fan1...@gmail.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. >> >> > This changes LGTM, and "make check" PASSED, thanks for the patch! > > I created https://commitfest.postgresql.org/30/2771/ so that this patch will not be lost. Thanks! -- Best Regards Andy Fan