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

+80-2
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

+32-1
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)