On Tue, Feb 24, 2026 at 5:43 PM Chao Li <[email protected]> wrote:
>
>
>
> > On Feb 24, 2026, at 23:09, zengman <[email protected]> wrote:
> >
> > Hi all,
> >
> > I noticed that ExecWithoutOverlapsNotEmpty() accepts an atttypid parameter 
> > that isn't actually used. The function only needs typtype to distinguish 
> > between range and multirange types.
> > Currently lookup_type_cache() is called just to extract typtype, but I 
> > think using get_typtype() directly seems more appropriate.
> >
> > ```
> > static void ExecWithoutOverlapsNotEmpty(Relation rel, NameData attname, 
> > Datum attval,
> > -                                                                           
> >     char typtype, Oid atttypid);
> > +                                                                           
> >     char typtype);
> >
> > /* ----------------------------------------------------------------
> >  *             ExecOpenIndices
> > @@ -753,11 +754,10 @@ check_exclusion_or_unique_constraint(Relation heap, 
> > Relation index,
> >                {
> >                        TupleDesc       tupdesc = RelationGetDescr(heap);
> >                        Form_pg_attribute att = TupleDescAttr(tupdesc, attno 
> > - 1);
> > -                       TypeCacheEntry *typcache = 
> > lookup_type_cache(att->atttypid, 0);
> >
> >                        ExecWithoutOverlapsNotEmpty(heap, att->attname,
> >                                                                             
> >    values[indnkeyatts - 1],
> > -                                                                           
> >     typcache->typtype, att->atttypid);
> > +                                                                           
> >     get_typtype(att->atttypid));
> >                }
> >        }
> >
> > @@ -1149,7 +1149,7 @@ index_expression_changed_walker(Node *node, Bitmapset 
> > *allUpdatedCols)
> >  * range or multirange in the given attribute.
> >  */
> > static void
> > -ExecWithoutOverlapsNotEmpty(Relation rel, NameData attname, Datum attval, 
> > char typtype, Oid atttypid)
> > +ExecWithoutOverlapsNotEmpty(Relation rel, NameData attname, Datum attval, 
> > char typtype)
> > {
> >        bool            isempty;
> >        RangeType  *r;
> > ```
> >
> > --
> > regards,
> > Man Zeng<0001-refactor-Simplify-ExecWithoutOverlapsNotEmpty-functi.patch>
>
> Removing the parameter atttypid from ExecWithoutOverlapsNotEmpty looks okay 
> as it’s a static function and is only called once.
>
> For the other change, I see a difference between lookup_type_cache and 
> get_typtype, where lookup_type_cache never returns NULL but ereport(ERROR) 
> when oid is invalid; while get_typtype will return ‘\0'. Though 
> ExecWithoutOverlapsNotEmpty() will end up also elog(ERROR), the log message 
> is changed.
>
> I am not sure if there could be some edge cases where att->atttypid could be 
> invalid. If yes, then this change will lead to a small behavior change.
>
> Best regards,
> --
> Chao Li (Evan)
> HighGo Software Co., Ltd.
> https://www.highgo.com/
>
>
>
>
>
>

That patch looks good to me.

Thanks,
Shihao


Reply via email to