BUG #16368: Incorrect function inlining in the presence of a window function
От | PG Bug reporting form |
---|---|
Тема | BUG #16368: Incorrect function inlining in the presence of a window function |
Дата | |
Msg-id | 16368-0dd1d5ab02a3cbc0@postgresql.org обсуждение исходный текст |
Ответы |
Re: BUG #16368: Incorrect function inlining in the presence of awindow function
|
Список | pgsql-bugs |
The following bug has been logged on the website: Bug reference: 16368 Logged by: Elvis Pranskevichus Email address: elprans@gmail.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
В списке pgsql-bugs по дате отправления: