Search Postgresql Archives

Re: Why is my function inlined only when STABLE?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Philip Semanchuk <philip@xxxxxxxxxxxxxxxxxxxxx> writes:
> I have a function that isn't being inlined, and I would appreciate help to understand why that's the case. 

The example you show *is* inline-able, as you can easily prove with EXPLAIN.

regression=# CREATE OR REPLACE FUNCTION f(foo text)
 RETURNS text
 AS $$
     SELECT substring(foo FROM 1 FOR 2)
 $$ LANGUAGE sql IMMUTABLE PARALLEL SAFE;
CREATE FUNCTION

regression=# explain verbose select f(f1) from text_tbl;
                           QUERY PLAN                           
----------------------------------------------------------------
 Seq Scan on public.text_tbl  (cost=0.00..1.02 rows=2 width=32)
   Output: "substring"(f1, 1, 2)
(2 rows)

No f() anywhere there.

I think the test methodology you used is faulty, because it does not
distinguish between "inline-able" and "foldable to a constant".
Given an immutable function applied to constant(s), the planner prefers
to fold to a constant by just executing the function.  The inline-ing
transformation is considered only when that case doesn't apply.

			regards, tom lane






[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux