Skip to content

Commit 2e0d80c

Browse files
committed
Improve coverage of ruleutils.c for SQLValueFunctions
While looking at how these are handled in the parser and the executor, I have noticed that there is no test coverage for most of these when reverse-engineering an expression for a SQLValueFunction node in ruleutils.c, including how these are reparsed when included in a FROM clause. Some hacking in this area has showed me that these could break easily, so add some coverage to track the existing compatibility. Extracted from a much larger patch by me. Discussion: https://postgr.es/m/YzaG3MoryCguUOym@paquier.xyz
1 parent 3cf2f7a commit 2e0d80c

File tree

2 files changed

+112
-3
lines changed

2 files changed

+112
-3
lines changed

src/test/regress/expected/create_view.out

Lines changed: 80 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1941,7 +1941,38 @@ select
19411941
trim(E'\\000'::bytea from E'\\000Tom\\000'::bytea) as btb,
19421942
trim(leading E'\\000'::bytea from E'\\000Tom\\000'::bytea) as ltb,
19431943
trim(trailing E'\\000'::bytea from E'\\000Tom\\000'::bytea) as rtb,
1944-
SYSTEM_USER as su;
1944+
CURRENT_DATE as cd,
1945+
(select * from CURRENT_DATE) as cd2,
1946+
CURRENT_TIME as ct,
1947+
(select * from CURRENT_TIME) as ct2,
1948+
CURRENT_TIME (1) as ct3,
1949+
(select * from CURRENT_TIME (1)) as ct4,
1950+
CURRENT_TIMESTAMP as ct5,
1951+
(select * from CURRENT_TIMESTAMP) as ct6,
1952+
CURRENT_TIMESTAMP (1) as ct7,
1953+
(select * from CURRENT_TIMESTAMP (1)) as ct8,
1954+
LOCALTIME as lt1,
1955+
(select * from LOCALTIME) as lt2,
1956+
LOCALTIME (1) as lt3,
1957+
(select * from LOCALTIME (1)) as lt4,
1958+
LOCALTIMESTAMP as lt5,
1959+
(select * from LOCALTIMESTAMP) as lt6,
1960+
LOCALTIMESTAMP (1) as lt7,
1961+
(select * from LOCALTIMESTAMP (1)) as lt8,
1962+
CURRENT_CATALOG as ca,
1963+
(select * from CURRENT_CATALOG) as ca2,
1964+
CURRENT_ROLE as cr,
1965+
(select * from CURRENT_ROLE) as cr2,
1966+
CURRENT_SCHEMA as cs,
1967+
(select * from CURRENT_SCHEMA) as cs2,
1968+
CURRENT_USER as cu,
1969+
(select * from CURRENT_USER) as cu2,
1970+
USER as us,
1971+
(select * from USER) as us2,
1972+
SESSION_USER seu,
1973+
(select * from SESSION_USER) as seu2,
1974+
SYSTEM_USER as su,
1975+
(select * from SYSTEM_USER) as su2;
19451976
select pg_get_viewdef('tt201v', true);
19461977
pg_get_viewdef
19471978
-----------------------------------------------------------------------------------------------
@@ -1963,7 +1994,54 @@ select pg_get_viewdef('tt201v', true);
19631994
TRIM(BOTH '\x00'::bytea FROM '\x00546f6d00'::bytea) AS btb, +
19641995
TRIM(LEADING '\x00'::bytea FROM '\x00546f6d00'::bytea) AS ltb, +
19651996
TRIM(TRAILING '\x00'::bytea FROM '\x00546f6d00'::bytea) AS rtb, +
1966-
SYSTEM_USER AS su;
1997+
CURRENT_DATE AS cd, +
1998+
( SELECT "current_date"."current_date" +
1999+
FROM CURRENT_DATE "current_date"("current_date")) AS cd2, +
2000+
CURRENT_TIME AS ct, +
2001+
( SELECT "current_time"."current_time" +
2002+
FROM CURRENT_TIME "current_time"("current_time")) AS ct2, +
2003+
CURRENT_TIME(1) AS ct3, +
2004+
( SELECT "current_time"."current_time" +
2005+
FROM CURRENT_TIME(1) "current_time"("current_time")) AS ct4, +
2006+
CURRENT_TIMESTAMP AS ct5, +
2007+
( SELECT "current_timestamp"."current_timestamp" +
2008+
FROM CURRENT_TIMESTAMP "current_timestamp"("current_timestamp")) AS ct6, +
2009+
CURRENT_TIMESTAMP(1) AS ct7, +
2010+
( SELECT "current_timestamp"."current_timestamp" +
2011+
FROM CURRENT_TIMESTAMP(1) "current_timestamp"("current_timestamp")) AS ct8, +
2012+
LOCALTIME AS lt1, +
2013+
( SELECT "localtime"."localtime" +
2014+
FROM LOCALTIME "localtime"("localtime")) AS lt2, +
2015+
LOCALTIME(1) AS lt3, +
2016+
( SELECT "localtime"."localtime" +
2017+
FROM LOCALTIME(1) "localtime"("localtime")) AS lt4, +
2018+
LOCALTIMESTAMP AS lt5, +
2019+
( SELECT "localtimestamp"."localtimestamp" +
2020+
FROM LOCALTIMESTAMP "localtimestamp"("localtimestamp")) AS lt6, +
2021+
LOCALTIMESTAMP(1) AS lt7, +
2022+
( SELECT "localtimestamp"."localtimestamp" +
2023+
FROM LOCALTIMESTAMP(1) "localtimestamp"("localtimestamp")) AS lt8, +
2024+
CURRENT_CATALOG AS ca, +
2025+
( SELECT "current_catalog"."current_catalog" +
2026+
FROM CURRENT_CATALOG "current_catalog"("current_catalog")) AS ca2, +
2027+
CURRENT_ROLE AS cr, +
2028+
( SELECT "current_role"."current_role" +
2029+
FROM CURRENT_ROLE "current_role"("current_role")) AS cr2, +
2030+
CURRENT_SCHEMA AS cs, +
2031+
( SELECT "current_schema"."current_schema" +
2032+
FROM CURRENT_SCHEMA "current_schema"("current_schema")) AS cs2, +
2033+
CURRENT_USER AS cu, +
2034+
( SELECT "current_user"."current_user" +
2035+
FROM CURRENT_USER "current_user"("current_user")) AS cu2, +
2036+
USER AS us, +
2037+
( SELECT "user"."user" +
2038+
FROM USER "user"("user")) AS us2, +
2039+
SESSION_USER AS seu, +
2040+
( SELECT "session_user"."session_user" +
2041+
FROM SESSION_USER "session_user"("session_user")) AS seu2, +
2042+
SYSTEM_USER AS su, +
2043+
( SELECT "system_user"."system_user" +
2044+
FROM SYSTEM_USER "system_user"("system_user")) AS su2;
19672045
(1 row)
19682046

19692047
-- corner cases with empty join conditions

src/test/regress/sql/create_view.sql

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -722,7 +722,38 @@ select
722722
trim(E'\\000'::bytea from E'\\000Tom\\000'::bytea) as btb,
723723
trim(leading E'\\000'::bytea from E'\\000Tom\\000'::bytea) as ltb,
724724
trim(trailing E'\\000'::bytea from E'\\000Tom\\000'::bytea) as rtb,
725-
SYSTEM_USER as su;
725+
CURRENT_DATE as cd,
726+
(select * from CURRENT_DATE) as cd2,
727+
CURRENT_TIME as ct,
728+
(select * from CURRENT_TIME) as ct2,
729+
CURRENT_TIME (1) as ct3,
730+
(select * from CURRENT_TIME (1)) as ct4,
731+
CURRENT_TIMESTAMP as ct5,
732+
(select * from CURRENT_TIMESTAMP) as ct6,
733+
CURRENT_TIMESTAMP (1) as ct7,
734+
(select * from CURRENT_TIMESTAMP (1)) as ct8,
735+
LOCALTIME as lt1,
736+
(select * from LOCALTIME) as lt2,
737+
LOCALTIME (1) as lt3,
738+
(select * from LOCALTIME (1)) as lt4,
739+
LOCALTIMESTAMP as lt5,
740+
(select * from LOCALTIMESTAMP) as lt6,
741+
LOCALTIMESTAMP (1) as lt7,
742+
(select * from LOCALTIMESTAMP (1)) as lt8,
743+
CURRENT_CATALOG as ca,
744+
(select * from CURRENT_CATALOG) as ca2,
745+
CURRENT_ROLE as cr,
746+
(select * from CURRENT_ROLE) as cr2,
747+
CURRENT_SCHEMA as cs,
748+
(select * from CURRENT_SCHEMA) as cs2,
749+
CURRENT_USER as cu,
750+
(select * from CURRENT_USER) as cu2,
751+
USER as us,
752+
(select * from USER) as us2,
753+
SESSION_USER seu,
754+
(select * from SESSION_USER) as seu2,
755+
SYSTEM_USER as su,
756+
(select * from SYSTEM_USER) as su2;
726757
select pg_get_viewdef('tt201v', true);
727758

728759
-- corner cases with empty join conditions

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy