Thread: Small improvement to tlist_matches_tupdesc()

Small improvement to tlist_matches_tupdesc()

From
David Rowley
Date:
I just found myself in execScan.c. I noticed that tlist_matches_tupdesc() is a bit wasteful in some cases as it goes to the trouble of matching the tlist to the TupleDesc item by item until it runs out of tlist items or finds a non-match. Once the loop completes it ensures that all tlist items were consumed, so basically in other words, it checks the lengths match.

I think likely this was just not made optimal originally in d0b4399 when the length property etc were added to List

The attached patch adds a fast path so that no list items are compared if the lengths don't match.

Is this worth fixing?

--
 David Rowley                   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services
Attachment

Re: Small improvement to tlist_matches_tupdesc()

From
Tom Lane
Date:
David Rowley <david.rowley@2ndquadrant.com> writes:
> I just found myself in execScan.c. I noticed that tlist_matches_tupdesc()
> is a bit wasteful in some cases as it goes to the trouble of matching the
> tlist to the TupleDesc item by item until it runs out of tlist items
> or finds a non-match. Once the loop completes it ensures that all tlist
> items were consumed, so basically in other words, it checks the lengths
> match.

> I think likely this was just not made optimal originally in d0b4399 when
> the length property etc were added to List

No, it's modeled after other places that allow for ignoring dropped
columns in one or both lists.  While this code doesn't currently allow
that, the patch you suggest would prevent it from ever doing so (at least
not without reverting the patch first).  I'd be okay with that if there
were evidence of a meaningful performance gain from it ... but you've
not provided any.
        regards, tom lane