diff --git a/src/test/regress/expected/single_shard_table_udfs.out b/src/test/regress/expected/single_shard_table_udfs.out index f56e1baf2..3b7dd5034 100644 --- a/src/test/regress/expected/single_shard_table_udfs.out +++ b/src/test/regress/expected/single_shard_table_udfs.out @@ -24,6 +24,18 @@ CREATE OR REPLACE FUNCTION get_foreign_key_connected_relations(IN table_name reg RETURNS SETOF RECORD LANGUAGE C STRICT AS 'citus', $$get_foreign_key_connected_relations$$; +CREATE OR REPLACE FUNCTION citus_get_all_dependencies_for_object(classid oid, objid oid, objsubid int) +RETURNS SETOF RECORD +LANGUAGE C STRICT +AS 'citus', $$citus_get_all_dependencies_for_object$$; +CREATE OR REPLACE FUNCTION citus_get_dependencies_for_object(classid oid, objid oid, objsubid int) +RETURNS SETOF RECORD +LANGUAGE C STRICT +AS 'citus', $$citus_get_dependencies_for_object$$; +CREATE OR REPLACE FUNCTION pg_catalog.is_citus_depended_object(oid,oid) +RETURNS bool +LANGUAGE C +AS 'citus', $$is_citus_depended_object$$; -- test some other udf's with single shard tables CREATE TABLE null_dist_key_table(a int); SELECT create_distributed_table('null_dist_key_table', null, colocate_with=>'none', distribution_type=>null); @@ -870,5 +882,75 @@ SELECT oid::regclass::text FROM get_foreign_key_connected_relations('fkey_s1'::r fkey_s3 (4 rows) +--test dependency functions +CREATE TYPE dep_type AS (a INT); +CREATE TABLE dep_tbl(a INT, b dep_type); +SELECT create_distributed_table('dep_tbl', NULL, colocate_with:='none'); + create_distributed_table +--------------------------------------------------------------------- + +(1 row) + +CREATE VIEW dep_view AS SELECT * FROM dep_tbl; +-- find all the dependencies of table dep_tbl +SELECT + pg_identify_object(t.classid, t.objid, t.objsubid) +FROM + (SELECT * FROM pg_get_object_address('table', '{dep_tbl}', '{}')) as addr +JOIN LATERAL + citus_get_all_dependencies_for_object(addr.classid, addr.objid, addr.objsubid) as t(classid oid, objid oid, objsubid int) +ON TRUE + ORDER BY 1; + pg_identify_object +--------------------------------------------------------------------- + ("composite type",null_dist_key_udfs,dep_type,null_dist_key_udfs.dep_type) + (schema,,null_dist_key_udfs,null_dist_key_udfs) + (type,null_dist_key_udfs,dep_type,null_dist_key_udfs.dep_type) +(3 rows) + +-- find all the dependencies of view dep_view +SELECT + pg_identify_object(t.classid, t.objid, t.objsubid) +FROM + (SELECT * FROM pg_get_object_address('view', '{dep_view}', '{}')) as addr +JOIN LATERAL + citus_get_all_dependencies_for_object(addr.classid, addr.objid, addr.objsubid) as t(classid oid, objid oid, objsubid int) +ON TRUE + ORDER BY 1; + pg_identify_object +--------------------------------------------------------------------- + ("composite type",null_dist_key_udfs,dep_type,null_dist_key_udfs.dep_type) + (schema,,null_dist_key_udfs,null_dist_key_udfs) + (table,null_dist_key_udfs,dep_tbl,null_dist_key_udfs.dep_tbl) + (type,null_dist_key_udfs,dep_type,null_dist_key_udfs.dep_type) +(4 rows) + +-- find non-distributed dependencies of table dep_tbl +SELECT + pg_identify_object(t.classid, t.objid, t.objsubid) +FROM + (SELECT * FROM pg_get_object_address('table', '{dep_tbl}', '{}')) as addr +JOIN LATERAL + citus_get_dependencies_for_object(addr.classid, addr.objid, addr.objsubid) as t(classid oid, objid oid, objsubid int) +ON TRUE + ORDER BY 1; + pg_identify_object +--------------------------------------------------------------------- +(0 rows) + +SET citus.hide_citus_dependent_objects TO true; +CREATE TABLE citus_dep_tbl (a noderole); +SELECT create_distributed_table('citus_dep_tbl', NULL, colocate_with:='none'); + create_distributed_table +--------------------------------------------------------------------- + +(1 row) + +SELECT is_citus_depended_object('pg_class'::regclass, 'citus_dep_tbl'::regclass); + is_citus_depended_object +--------------------------------------------------------------------- + t +(1 row) + SET client_min_messages TO WARNING; DROP SCHEMA null_dist_key_udfs CASCADE; diff --git a/src/test/regress/sql/single_shard_table_udfs.sql b/src/test/regress/sql/single_shard_table_udfs.sql index a392252c2..1f8f7e8b9 100644 --- a/src/test/regress/sql/single_shard_table_udfs.sql +++ b/src/test/regress/sql/single_shard_table_udfs.sql @@ -24,6 +24,21 @@ RETURNS SETOF RECORD LANGUAGE C STRICT AS 'citus', $$get_foreign_key_connected_relations$$; +CREATE OR REPLACE FUNCTION citus_get_all_dependencies_for_object(classid oid, objid oid, objsubid int) +RETURNS SETOF RECORD +LANGUAGE C STRICT +AS 'citus', $$citus_get_all_dependencies_for_object$$; + +CREATE OR REPLACE FUNCTION citus_get_dependencies_for_object(classid oid, objid oid, objsubid int) +RETURNS SETOF RECORD +LANGUAGE C STRICT +AS 'citus', $$citus_get_dependencies_for_object$$; + +CREATE OR REPLACE FUNCTION pg_catalog.is_citus_depended_object(oid,oid) +RETURNS bool +LANGUAGE C +AS 'citus', $$is_citus_depended_object$$; + -- test some other udf's with single shard tables CREATE TABLE null_dist_key_table(a int); SELECT create_distributed_table('null_dist_key_table', null, colocate_with=>'none', distribution_type=>null); @@ -380,5 +395,47 @@ SELECT get_referenced_relation_id_list::regclass::text FROM get_referenced_relat SELECT oid::regclass::text FROM get_foreign_key_connected_relations('fkey_s1'::regclass) AS f(oid oid) ORDER BY 1; +--test dependency functions +CREATE TYPE dep_type AS (a INT); +CREATE TABLE dep_tbl(a INT, b dep_type); +SELECT create_distributed_table('dep_tbl', NULL, colocate_with:='none'); +CREATE VIEW dep_view AS SELECT * FROM dep_tbl; + +-- find all the dependencies of table dep_tbl +SELECT + pg_identify_object(t.classid, t.objid, t.objsubid) +FROM + (SELECT * FROM pg_get_object_address('table', '{dep_tbl}', '{}')) as addr +JOIN LATERAL + citus_get_all_dependencies_for_object(addr.classid, addr.objid, addr.objsubid) as t(classid oid, objid oid, objsubid int) +ON TRUE + ORDER BY 1; + +-- find all the dependencies of view dep_view +SELECT + pg_identify_object(t.classid, t.objid, t.objsubid) +FROM + (SELECT * FROM pg_get_object_address('view', '{dep_view}', '{}')) as addr +JOIN LATERAL + citus_get_all_dependencies_for_object(addr.classid, addr.objid, addr.objsubid) as t(classid oid, objid oid, objsubid int) +ON TRUE + ORDER BY 1; + +-- find non-distributed dependencies of table dep_tbl +SELECT + pg_identify_object(t.classid, t.objid, t.objsubid) +FROM + (SELECT * FROM pg_get_object_address('table', '{dep_tbl}', '{}')) as addr +JOIN LATERAL + citus_get_dependencies_for_object(addr.classid, addr.objid, addr.objsubid) as t(classid oid, objid oid, objsubid int) +ON TRUE + ORDER BY 1; + +SET citus.hide_citus_dependent_objects TO true; +CREATE TABLE citus_dep_tbl (a noderole); +SELECT create_distributed_table('citus_dep_tbl', NULL, colocate_with:='none'); + +SELECT is_citus_depended_object('pg_class'::regclass, 'citus_dep_tbl'::regclass); + SET client_min_messages TO WARNING; DROP SCHEMA null_dist_key_udfs CASCADE;