On Thu, Jan 20, 2022 at 2:29 PM Amit Kapila <amit.kapil...@gmail.com> wrote: > > On Thu, Jan 20, 2022 at 7:51 AM Peter Smith <smithpb2...@gmail.com> wrote: > > > > Here are some review comments for v68-0001. > > > > > > 3. src/backend/replication/pgoutput/pgoutput.c - pgoutput_row_filter_init > > > > + /* If no filter found, clean up the memory and return */ > > + if (!has_filter) > > + { > > + if (entry->cache_expr_cxt != NULL) > > + MemoryContextDelete(entry->cache_expr_cxt); > > + > > + entry->exprstate_valid = true; > > + return; > > + } > > > > IMO this should be refactored to have if/else, so the function has > > just a single point of return and a single point where the > > exprstate_valid is set. e.g. > > > > if (!has_filter) > > { > > /* If no filter found, clean up the memory and return */ > > ... > > } > > else > > { > > /* Create or reset the memory context for row filters */ > > ... > > /* > > * Now all the filters for all pubactions are known. Combine them when > > * their pubactions are same. > > ... > > } > > > > entry->exprstate_valid = true; > > > > This part of the code is changed in v68 which makes the current code > more suitable as we don't need to deal with memory context in if part. > I am not sure if it is good to add the else block here but I think > that is just a matter of personal preference. >
Sorry, my mistake - I quoted the v67 source instead of the v68 source. There is no else needed now at all. My suggestion becomes. e.g. if (has_filter) { // deal with mem ctx ... // combine filters ... } entry->exprstate_valid = true; return; ------ Kind Regards, Peter Smith Fujitsu Australia