You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
1.2 KiB

-- This is a set of functions not intended to be used in production
-- but useful to explore the database without rails ORM.
-- They are thought to be loosely coupled to the models and just rely on FK relations.
--
-- To install:
-- \i metadata-goodies.psql
-- To uninstall:
-- DROP SCHEMA goodies CASCADE;
CREATE SCHEMA IF NOT EXISTS goodies AUTHORIZATION postgres;
CREATE OR REPLACE FUNCTION goodies.related_layer_ids(table_id uuid)
RETURNS SETOF uuid AS $$
BEGIN
RETURN QUERY SELECT DISTINCT(layer_id) FROM layers_user_tables WHERE layers_user_tables.user_table_id = table_id;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION goodies.related_map_ids(table_id uuid)
RETURNS SETOF uuid AS $$
BEGIN
RETURN QUERY SELECT DISTINCT(map_id) FROM layers_maps WHERE layers_maps.layer_id
IN (SELECT goodies.related_layer_ids(table_id));
END;
$$ LANGUAGE plpgsql;
-- E.g: SELECT id, name, type FROM goodies.related_vizs('6eb62d84-c4bc-446b-89dd-5435f6cc9346');
CREATE OR REPLACE FUNCTION goodies.related_vizs(table_id uuid)
RETURNS SETOF visualizations AS $$
BEGIN
RETURN QUERY SELECT * FROM visualizations WHERE visualizations.map_id
IN (SELECT goodies.related_map_ids(table_id));
END;
$$ LANGUAGE plpgsql;