On Fri, Jan 22, 2021 at 1:16 PM Hou, Zhijie <houzj.f...@cn.fujitsu.com> wrote:
>
>
> 4.
> +                       ListCell   *index_expr_item = 
> list_head(index_info->ii_Expressions);
> ...
> +                                       index_expr = (Node *) 
> lfirst(index_expr_item);
> +                                       index_expr = (Node *) 
> expression_planner((Expr *) index_expr);
>
> It seems BuildIndexInfo has already called eval_const_expressions for 
> ii_Expressions,
> Like the flow: BuildIndexInfo--> RelationGetIndexExpressions--> 
> eval_const_expressions
>
> So, IMO, we do not need to call expression_planner for the expr again.
>

Thanks. You are right. I debugged it, and found that BuildIndexInfo-->
RelationGetIndexExpressions executes the same expression evaluation
code as expression_planner().
So I'll remove the redundant call to expression_planner() here.

>
> And there seems another solution for this:
>
> In the patch, We only use the { ii_Expressions , ii_NumIndexAttrs , 
> ii_IndexAttrNumbers } from the IndexInfo,
> which seems can get from "Relation-> rd_index".
>
> Based on above, May be we do not need to call BuildIndexInfo to build the 
> IndexInfo.
> It can avoid some unnecessary cost.
> And in this solution we do not need to remove expression_planner.
>

Hmmm, when I debugged my simple test case, I found rel->rd_index was
NULL, so it seems that the call to BuildIndexInfo is needed.
(have I understood your suggestion correctly?)

Regards,
Greg Nancarrow
Fujitsu Australia


Reply via email to