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