> 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/






Reply via email to