+++ /dev/null
---
--- Test foreign-data wrapper file_fdw.
---
--- Clean up in case a prior regression run failed
--- Suppress NOTICE messages when roles don't exist
-SET client_min_messages TO 'error';
-DROP ROLE IF EXISTS file_fdw_superuser, file_fdw_user, no_priv_user, no_mapping_user;
-RESET client_min_messages;
-CREATE ROLE file_fdw_superuser LOGIN SUPERUSER; -- is a superuser
-CREATE ROLE file_fdw_user LOGIN; -- has priv and user mapping
-CREATE ROLE no_priv_user LOGIN; -- has priv but no user mapping
-CREATE ROLE no_mapping_user LOGIN; -- has user mapping but no priv
--- file_fdw_superuser owns fdw-related objects
-SET ROLE file_fdw_superuser;
-CREATE FOREIGN DATA WRAPPER file_fdw VALIDATOR file_fdw_validator HANDLER file_fdw_handler;
-CREATE SERVER file_server FOREIGN DATA WRAPPER file_fdw;
--- privilege tests
-SET ROLE file_fdw_user;
-CREATE FOREIGN DATA WRAPPER file_fdw2 VALIDATOR file_fdw_validator HANDLER file_fdw_handler; -- ERROR
-ERROR: permission denied to create foreign-data wrapper "file_fdw2"
-HINT: Must be superuser to create a foreign-data wrapper.
-CREATE SERVER file_server2 FOREIGN DATA WRAPPER file_fdw; -- ERROR
-ERROR: permission denied for foreign-data wrapper file_fdw
-CREATE USER MAPPING FOR file_fdw_user SERVER file_server; -- ERROR
-ERROR: permission denied for foreign server file_server
-SET ROLE file_fdw_superuser;
-GRANT USAGE ON FOREIGN SERVER file_server TO file_fdw_user;
-SET ROLE file_fdw_user;
-CREATE USER MAPPING FOR file_fdw_user SERVER file_server;
--- create user mappings and grant privilege to test users
-SET ROLE file_fdw_superuser;
-CREATE USER MAPPING FOR file_fdw_superuser SERVER file_server;
-GRANT USAGE ON FOREIGN SERVER file_server TO no_mapping_user;
-CREATE USER MAPPING FOR no_priv_user SERVER file_server;
--- validator tests
-CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'xml'); -- ERROR
-ERROR: format must be csv or text
-CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', delimiter 'a'); -- ERROR
-ERROR: delimiter cannot be "a"
-CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', escape '-'); -- ERROR
-ERROR: escape available only in CSV mode
-CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', quote '-', null '=-='); -- ERROR
-ERROR: quote must not appear in the NULL specification
-CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', delimiter '-', null '=-='); -- ERROR
-ERROR: delimiter must not appear in the NULL specification
-CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', delimiter '-', quote '-'); -- ERROR
-ERROR: delimiter and quote must be different
-CREATE FOREIGN TABLE agg_text (
- a int2,
- b float4
-) SERVER file_server
-OPTIONS (format 'text', filename '/home/hanada/src/postgresql/src/test/regress/data/agg.data', delimiter ' ', null '\N');
-GRANT SELECT ON agg_text TO file_fdw_user;
-GRANT SELECT ON agg_text TO no_mapping_user;
--- create csv data file and foreign table for the file
-COPY (SELECT * FROM agg_text) TO '/home/hanada/src/postgresql/src/test/regress/data/agg.csv' WITH (format CSV, delimiter ';', quote '@', force_quote (b));
-CREATE FOREIGN TABLE agg_csv (
- a int2,
- b float4
-) SERVER file_server
-OPTIONS (format 'csv', filename '/home/hanada/src/postgresql/src/test/regress/data/agg.csv', header 'true', delimiter ';', quote '@', escape '"', null '');
--- basic query tests
-SELECT * FROM agg_text WHERE b > 10.0 ORDER BY a;
- a | b
------+--------
- 42 | 324.78
- 100 | 99.097
-(2 rows)
-
-SELECT * FROM agg_csv ORDER BY a;
- a | b
------+---------
- 0 | 0.09561
- 42 | 324.78
- 100 | 99.097
-(3 rows)
-
--- privilege tests
-SET ROLE file_fdw_superuser;
-SELECT * FROM agg_text ORDER BY a;
- a | b
------+---------
- 0 | 0.09561
- 42 | 324.78
- 56 | 7.8
- 100 | 99.097
-(4 rows)
-
-SET ROLE file_fdw_user;
-SELECT * FROM agg_text ORDER BY a; -- ERROR
-ERROR: must be superuser to read from a file
-SET ROLE no_priv_user;
-SELECT * FROM agg_text ORDER BY a; -- ERROR
-ERROR: permission denied for relation agg_text
-SET ROLE no_mapping_user;
-SELECT * FROM agg_text ORDER BY a; -- ERROR
-ERROR: user mapping not found for "no_mapping_user"
--- cleanup
-RESET ROLE;
-DROP FOREIGN DATA WRAPPER file_fdw CASCADE;
-NOTICE: drop cascades to 6 other objects
-DETAIL: drop cascades to server file_server
-drop cascades to user mapping for file_fdw_user
-drop cascades to user mapping for file_fdw_superuser
-drop cascades to user mapping for no_priv_user
-drop cascades to foreign table agg_text
-drop cascades to foreign table agg_csv
-DROP ROLE IF EXISTS file_fdw_superuser, file_fdw_user, no_priv_user, no_mapping_user;
+++ /dev/null
---
--- Test foreign-data wrapper file_fdw.
---
-
--- Clean up in case a prior regression run failed
-
--- Suppress NOTICE messages when roles don't exist
-SET client_min_messages TO 'error';
-
-DROP ROLE IF EXISTS file_fdw_superuser, file_fdw_user, no_priv_user, no_mapping_user;
-
-RESET client_min_messages;
-
-CREATE ROLE file_fdw_superuser LOGIN SUPERUSER; -- is a superuser
-CREATE ROLE file_fdw_user LOGIN; -- has priv and user mapping
-CREATE ROLE no_priv_user LOGIN; -- has priv but no user mapping
-CREATE ROLE no_mapping_user LOGIN; -- has user mapping but no priv
-
--- file_fdw_superuser owns fdw-related objects
-SET ROLE file_fdw_superuser;
-CREATE FOREIGN DATA WRAPPER file_fdw VALIDATOR file_fdw_validator HANDLER file_fdw_handler;
-CREATE SERVER file_server FOREIGN DATA WRAPPER file_fdw;
-
--- privilege tests
-SET ROLE file_fdw_user;
-CREATE FOREIGN DATA WRAPPER file_fdw2 VALIDATOR file_fdw_validator HANDLER file_fdw_handler; -- ERROR
-CREATE SERVER file_server2 FOREIGN DATA WRAPPER file_fdw; -- ERROR
-CREATE USER MAPPING FOR file_fdw_user SERVER file_server; -- ERROR
-
-SET ROLE file_fdw_superuser;
-GRANT USAGE ON FOREIGN SERVER file_server TO file_fdw_user;
-
-SET ROLE file_fdw_user;
-CREATE USER MAPPING FOR file_fdw_user SERVER file_server;
-
--- create user mappings and grant privilege to test users
-SET ROLE file_fdw_superuser;
-CREATE USER MAPPING FOR file_fdw_superuser SERVER file_server;
-GRANT USAGE ON FOREIGN SERVER file_server TO no_mapping_user;
-CREATE USER MAPPING FOR no_priv_user SERVER file_server;
-
--- validator tests
-CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'xml'); -- ERROR
-CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', delimiter 'a'); -- ERROR
-CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', escape '-'); -- ERROR
-CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', quote '-', null '=-='); -- ERROR
-CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', delimiter '-', null '=-='); -- ERROR
-CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', delimiter '-', quote '-'); -- ERROR
-CREATE FOREIGN TABLE agg_text (
- a int2,
- b float4
-) SERVER file_server
-OPTIONS (format 'text', filename '/home/hanada/src/postgresql/src/test/regress/data/agg.data', delimiter ' ', null '\N');
-GRANT SELECT ON agg_text TO file_fdw_user;
-GRANT SELECT ON agg_text TO no_mapping_user;
--- create csv data file and foreign table for the file
-COPY (SELECT * FROM agg_text) TO '/home/hanada/src/postgresql/src/test/regress/data/agg.csv' WITH (format CSV, delimiter ';', quote '@', force_quote (b));
-CREATE FOREIGN TABLE agg_csv (
- a int2,
- b float4
-) SERVER file_server
-OPTIONS (format 'csv', filename '/home/hanada/src/postgresql/src/test/regress/data/agg.csv', header 'true', delimiter ';', quote '@', escape '"', null '');
-
--- basic query tests
-SELECT * FROM agg_text WHERE b > 10.0 ORDER BY a;
-SELECT * FROM agg_csv ORDER BY a;
-
--- privilege tests
-SET ROLE file_fdw_superuser;
-SELECT * FROM agg_text ORDER BY a;
-SET ROLE file_fdw_user;
-SELECT * FROM agg_text ORDER BY a; -- ERROR
-SET ROLE no_priv_user;
-SELECT * FROM agg_text ORDER BY a; -- ERROR
-SET ROLE no_mapping_user;
-SELECT * FROM agg_text ORDER BY a; -- ERROR
-
--- cleanup
-RESET ROLE;
-DROP FOREIGN DATA WRAPPER file_fdw CASCADE;
-DROP ROLE IF EXISTS file_fdw_superuser, file_fdw_user, no_priv_user, no_mapping_user;