On Mon, Aug 26, 2024 at 6:41 PM Alena Rybakina <a.rybak...@postgrespro.ru> wrote: > > + /* Construct the list of nested OR arguments */ > + for (j = group_start; j < i; j++) > + { > + Node *arg = list_nth(orargs, matches[j].argindex); > + > + rargs = lappend(rargs, arg); > + if (IsA(arg, RestrictInfo)) > + args = lappend(args, ((RestrictInfo *) arg)->clause); > + else > + args = lappend(args, arg); > + } > the ELSE branch never reached? > > Reached - if your arg is BoolExpr type, for example if it consists "And" > expressions. > I added elog(INFO, "this part called"); all the tests still passed, that's where my confusion comes from.
> > +/* > + * Data structure representing information about OR-clause argument and its > + * matching index key. Used for grouping of similar OR-clause arguments in > + * group_similar_or_args(). > + */ > +typedef struct > +{ > + int indexnum; /* index of the matching index */ > + int colnum; /* index of the matching column */ > + Oid opno; /* OID of the OpClause operator */ > + Oid inputcollid; /* OID of the OpClause input collation */ > + int argindex; /* index of the clause in the list of > + * arguments */ > +} OrArgIndexMatch; > > I am not 100% sure about the comments. > indexnum: index of the matching index reside in rel->indexlist that > matches (counting from 0) > colnum: the column number of the matched index (counting from 0) > > To be honest, I'm not sure that I completely understand your point here. > I guess I want to make the comments more explicit, straightforward. does match_orclause_to_indexcol have a memory issue. current match_orclause_to_indexcol pattern is <<<<<<<<<<<<<<<<<< foreach(lc, orclause->args) { condition check, if fail, return null. consts = lappend(consts, constExpr); } if (have_param) { ArrayExpr *arrayExpr = makeNode(ArrayExpr); arrayExpr->elements = consts; } else { do other work. list_free(consts); } <<<<<<<<<<<<<<<<<< if have_param is false, first foreach fail at the last iteration then "list_free(consts);" will not get called? Will it be a problem?