BUG #16368: Incorrect function inlining in the presence of a window function

From: PG Bug reporting form <noreply(at)postgresql(dot)org>
To: pgsql-bugs(at)lists(dot)postgresql(dot)org
Cc: elprans(at)gmail(dot)com
Subject: BUG #16368: Incorrect function inlining in the presence of a window function
Date: 2020-04-15 17:50:46
Message-ID: 16368-0dd1d5ab02a3cbc0@postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

The following bug has been logged on the website:

Bug reference: 16368
Logged by: Elvis Pranskevichus
Email address: elprans(at)gmail(dot)com
PostgreSQL version: 12.2
Operating system: Gentoo Linux
Description:

Consider the following function:

CREATE OR REPLACE FUNCTION intfmt(input text, fmt text)
RETURNS bigint
LANGUAGE sql
AS $$
SELECT
CASE WHEN fmt IS NULL
THEN input::bigint
ELSE to_number(input, fmt)::bigint
END;
$$;

And the following query:

SELECT
intfmt('123,456', q.fmt) AS "out"
FROM
(SELECT
("v" = first_value("v") OVER ()),
'999,999' AS "fmt"
FROM
(SELECT 1 AS "v") AS "q2"
) AS "q";

The expected result is the integer 123456, but the query fails with:

ERROR: invalid input syntax for type bigint: "123,456"
CONTEXT: SQL function "intfmt" during inlining

Which means that somehow during inlining of "intfmt" Postgres incorrectly
takes the first branch in the `CASE` expression. This only happens in the
presence of the "first_value" window call in the nested query.

Elvis

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message David G. Johnston 2020-04-15 18:32:54 Re: BUG #16368: Incorrect function inlining in the presence of a window function
Previous Message KrishnaKanth BN 2020-04-15 17:09:19 Re: BUG #16352: Data corruption in few tables