citus/src/test/regress/expected/citus_depended_object.out

196 lines
6.9 KiB
Plaintext

-- create the udf is_citus_depended_object that is needed for the tests
CREATE OR REPLACE FUNCTION
pg_catalog.is_citus_depended_object(oid,oid)
RETURNS bool
LANGUAGE C
AS 'citus', $$is_citus_depended_object$$;
-- execute tests in a separate namespace
CREATE SCHEMA citus_dependend_object;
SET search_path TO citus_dependend_object;
-- PG_CLASS VISIBILITY
-- check if we correctly determine whether a relation is citus dependent or not.
CREATE TABLE no_hide_pg_class(relname text);
CREATE TABLE hide_pg_class(relname text);
-- create a relation that depends on noderole type which is a citus object
CREATE TABLE citus_depended_class(nrole noderole);
-- create a relation that depends on columnar access method which is a citus object
CREATE TABLE citus_depended_class2(id int);
SELECT alter_table_set_access_method('citus_depended_class2', 'columnar');
NOTICE: creating a new table for citus_dependend_object.citus_depended_class2
NOTICE: moving the data of citus_dependend_object.citus_depended_class2
NOTICE: dropping the old citus_dependend_object.citus_depended_class2
NOTICE: renaming the new table to citus_dependend_object.citus_depended_class2
alter_table_set_access_method
---------------------------------------------------------------------
(1 row)
-- create a relation that does not depend on citus
CREATE TABLE citus_independed_class(id int);
-- store all relations
SET citus.hide_citus_dependent_objects TO false;
INSERT INTO no_hide_pg_class SELECT relname FROM pg_class;
-- store all relations except citus relations
SET citus.hide_citus_dependent_objects TO true;
INSERT INTO hide_pg_class SELECT relname FROM pg_class;
-- prove that some relations are hidden or not
SELECT relname,
CASE
WHEN relname IN
(
SELECT relname FROM no_hide_pg_class
EXCEPT
SELECT relname FROM hide_pg_class
) THEN true
ELSE false
END AS is_hidden
FROM (VALUES ('pg_dist_shard'), ('pg_dist_placement'), ('pg_type'), ('pg_proc'),
('citus_depended_class'), ('citus_depended_class2'), ('citus_independed_class')) rels(relname);
relname | is_hidden
---------------------------------------------------------------------
pg_dist_shard | t
pg_dist_placement | t
pg_type | f
pg_proc | f
citus_depended_class | t
citus_depended_class2 | t
citus_independed_class | f
(7 rows)
-- PG_TYPE VISIBILITY
-- check if we correctly determine whether a type is citus dependent or not.
CREATE TABLE no_hide_pg_type(typname text);
CREATE TABLE hide_pg_type(typname text);
-- create a type that depends on noderole type which is a citus object
CREATE TYPE citus_depended_type AS (nrole noderole);
-- create a relation that does not depend on citus
CREATE TYPE citus_independed_type AS (id int);
-- store all types
SET citus.hide_citus_dependent_objects TO false;
INSERT INTO no_hide_pg_type SELECT typname FROM pg_type;
-- store all types except citus types
SET citus.hide_citus_dependent_objects TO true;
INSERT INTO hide_pg_type SELECT typname FROM pg_type;
-- prove that some types are hidden or not
SELECT typname,
CASE
WHEN typname IN
(
SELECT typname FROM no_hide_pg_type
EXCEPT
SELECT typname FROM hide_pg_type
) THEN true
ELSE false
END AS is_hidden
FROM (VALUES ('noderole'), ('_noderole'), ('int'), ('_int'),
('citus_depended_type'), ('citus_independed_type')) types(typname);
typname | is_hidden
---------------------------------------------------------------------
noderole | t
_noderole | t
int | f
_int | f
citus_depended_type | t
citus_independed_type | f
(6 rows)
-- PG_AM VISIBILITY
-- check if we correctly determine whether an access method is citus dependent or not.
CREATE TABLE no_hide_pg_am(amname text);
CREATE TABLE hide_pg_am(amname text);
-- store all access methods
SET citus.hide_citus_dependent_objects TO false;
INSERT INTO no_hide_pg_am SELECT amname FROM pg_am;
-- store all access methods except citus access methods
SET citus.hide_citus_dependent_objects TO true;
INSERT INTO hide_pg_am SELECT amname FROM pg_am;
-- show all hidden access methods
SELECT amname AS hidden_am FROM no_hide_pg_am
EXCEPT
SELECT amname AS hidden_am FROM hide_pg_am
ORDER BY 1;
hidden_am
---------------------------------------------------------------------
columnar
(1 row)
-- show all unhidden access methods
SELECT amname AS unhidden_am FROM no_hide_pg_am
EXCEPT
(
SELECT amname FROM no_hide_pg_am
EXCEPT
SELECT amname FROM hide_pg_am
)
ORDER BY 1;
unhidden_am
---------------------------------------------------------------------
brin
btree
gin
gist
hash
heap
spgist
(7 rows)
-- PG_PROC VISIBILITY
-- check if we correctly determine whether a procedure is citus dependent or not.
CREATE TABLE no_hide_pg_proc(proname text);
CREATE TABLE hide_pg_proc(proname text);
-- create a procedure that depends on noderole type which is a citus object
CREATE OR REPLACE PROCEDURE citus_depended_proc(nrole noderole)
LANGUAGE SQL
AS $$
$$;
-- create a procedure that does not depend on citus
CREATE OR REPLACE PROCEDURE citus_independed_proc(id int)
LANGUAGE SQL
AS $$
$$;
-- store all access procedures
SET citus.hide_citus_dependent_objects TO false;
INSERT INTO no_hide_pg_proc SELECT proname FROM pg_proc;
-- store all access procedures except citus procedures
SET citus.hide_citus_dependent_objects TO true;
INSERT INTO hide_pg_proc SELECT proname FROM pg_proc;
-- prove that some procedures are hidden or not
SELECT proname,
CASE
WHEN proname IN
(
SELECT proname FROM no_hide_pg_proc
EXCEPT
SELECT proname FROM hide_pg_proc
) THEN true
ELSE false
END AS is_hidden
FROM (VALUES ('master_add_node'), ('format'),
('citus_depended_proc'), ('citus_independed_proc')) procs(proname);
proname | is_hidden
---------------------------------------------------------------------
master_add_node | t
format | f
citus_depended_proc | t
citus_independed_proc | f
(4 rows)
-- drop the namespace with all its objects
DROP SCHEMA citus_dependend_object CASCADE;
NOTICE: drop cascades to 15 other objects
DETAIL: drop cascades to table no_hide_pg_class
drop cascades to table hide_pg_class
drop cascades to table citus_depended_class
drop cascades to table citus_depended_class2
drop cascades to table citus_independed_class
drop cascades to table no_hide_pg_type
drop cascades to table hide_pg_type
drop cascades to type citus_depended_type
drop cascades to type citus_independed_type
drop cascades to table no_hide_pg_am
drop cascades to table hide_pg_am
drop cascades to table no_hide_pg_proc
drop cascades to table hide_pg_proc
drop cascades to function citus_depended_proc(noderole)
drop cascades to function citus_independed_proc(integer)