mirror of https://github.com/citusdata/citus.git
152 lines
4.8 KiB
PL/PgSQL
152 lines
4.8 KiB
PL/PgSQL
-- 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');
|
|
|
|
-- 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);
|
|
|
|
-- 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);
|
|
|
|
-- 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;
|
|
|
|
-- 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;
|
|
|
|
-- 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);
|
|
|
|
-- drop the namespace with all its objects
|
|
DROP SCHEMA citus_dependend_object CASCADE;
|