diff --git a/00-tables.sql b/00-tables.sql index 90cd191a1b9f3a1d1dd0bcba9f107c0dc8fe9daa..eeeaeceb6da718972f70ed7e44b371478e075d60 100644 --- a/00-tables.sql +++ b/00-tables.sql @@ -8,8 +8,8 @@ CREATE EXTENSION IF NOT EXISTS ltree; CREATE TYPE NodeType AS ENUM ('container', 'data', 'link', 'structured'); -CREATE TYPE LocationType AS ENUM ('async', 'portal', 'user'); -CREATE TYPE StorageType AS ENUM ('cold', 'hot', 'local', 'portal'); +CREATE TYPE LocationType AS ENUM ('async', 'user'); +CREATE TYPE StorageType AS ENUM ('cold', 'hot', 'local'); CREATE TABLE linked_service ( service_id SERIAL NOT NULL, @@ -40,10 +40,8 @@ CREATE TABLE location ( CREATE TABLE node ( node_id BIGSERIAL NOT NULL, parent_path LTREE default NULL, - parent_relative_path LTREE default NULL, fs_path VARCHAR default NULL, name VARCHAR NOT NULL, - os_name VARCHAR default NULL, tstamp_wrapper_dir VARCHAR default NULL, type NodeType NOT NULL, location_id SMALLINT default NULL, @@ -81,10 +79,8 @@ CREATE INDEX file_name_idx ON node USING btree(name); CREATE TABLE deleted_node ( node_id BIGSERIAL NOT NULL, parent_path LTREE default NULL, - parent_relative_path LTREE default NULL, fs_path VARCHAR default NULL, name VARCHAR NOT NULL, - os_name VARCHAR default NULL, tstamp_wrapper_dir VARCHAR default NULL, type NodeType NOT NULL, location_id SMALLINT default NULL, diff --git a/01-paths-indexes.sql b/01-paths-indexes.sql index 9b6c2fc4e66fa57d50806dd2eabbbcfb46516ca1..8c5e0974cc973d5ce32c502e9185a64f87ea5258 100644 --- a/01-paths-indexes.sql +++ b/01-paths-indexes.sql @@ -33,11 +33,8 @@ ALTER TABLE node ADD COLUMN path ltree GENERATED ALWAYS AS (path(parent_path, no CREATE INDEX file_path_gist_idx ON node USING GIST(path); CREATE UNIQUE INDEX file_path_idx ON node USING btree(path); -ALTER TABLE node ADD COLUMN relative_path ltree GENERATED ALWAYS AS (path(parent_relative_path, node_id)) STORED; -CREATE INDEX file_rel_path_gist_idx ON node USING GIST(relative_path); - ALTER TABLE node ADD CONSTRAINT unique_path UNIQUE (parent_path, name); ALTER TABLE node ADD CONSTRAINT fk_parent_path FOREIGN KEY (parent_path) REFERENCES node(path); -- Create root node -INSERT INTO node (parent_path, parent_relative_path, name, type, creator_id, is_public) VALUES (NULL, NULL, '', 'container', '0', true); +INSERT INTO node (parent_path, name, type, creator_id, is_public) VALUES (NULL, '', 'container', '0', true); diff --git a/02-views.sql b/02-views.sql index a368d3e40125d3a50ee47710c8d071e6be556a3d..d9d7ddf7042072db8dcccfcdecaf7306f39ccde3 100644 --- a/02-views.sql +++ b/02-views.sql @@ -4,21 +4,6 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ --- View that maps node_id to os_path (relative path of file on disk) - -CREATE VIEW node_os_path AS -WITH RECURSIVE r_os_path AS ( - SELECT node_id, relative_path, COALESCE(os_name, name) AS os_path - FROM node - WHERE name = '' - UNION ALL - SELECT n.node_id, n.relative_path, p.os_path || '/' || COALESCE(os_name, name) - FROM node n - JOIN r_os_path p ON p.relative_path = n.parent_relative_path - WHERE n.parent_relative_path IS NOT NULL -) -SELECT node_id, (CASE WHEN os_path = '' THEN '/' ELSE os_path END) AS os_path FROM r_os_path; - -- View that maps node_id to vos_path (path in VOSpace) CREATE VIEW node_vos_path AS @@ -31,14 +16,4 @@ WITH RECURSIVE r_vos_path AS ( FROM node n JOIN r_vos_path p ON p.path = n.parent_path ) -SELECT node_id, (CASE WHEN path = '' THEN '/' ELSE vos_path END) AS vos_path FROM r_vos_path; - --- View that combines the two previous views to obtain the os_path from the vos_path and vice versa - -CREATE VIEW node_path AS -SELECT v.node_id, vos_path, os_path -FROM node_vos_path v -LEFT JOIN node_os_path o ON o.node_id = v.node_id; - --- Example query to obtain the the ltree_path from the os_path: --- SELECT path FROM node n JOIN node_os_path o ON n.node_id = o.node_id WHERE os_path = '/curban/store'; +SELECT node_id, (CASE WHEN path = '' THEN '/' ELSE vos_path END) AS vos_path FROM r_vos_path; \ No newline at end of file diff --git a/03-other-functions.sql b/03-other-functions.sql index fb75912511550f23e608466f8fc2851e2a30ad80..a4bf97798efa2b4f606a32014a82711aa23b3111 100644 --- a/03-other-functions.sql +++ b/03-other-functions.sql @@ -52,24 +52,6 @@ SELECT string_agg(name, '/') FROM ( ) AS names $func$ LANGUAGE sql; --- Returns os_path from node_id - -CREATE OR REPLACE FUNCTION get_os_path(input_id BIGINT) RETURNS VARCHAR AS -$func$ -SELECT '/' || string_agg(name, '/') FROM ( - WITH RECURSIVE paths AS ( - SELECT node_id, COALESCE(os_name, name) AS name, relative_path, parent_relative_path, 1 AS level - FROM node - WHERE node_id = input_id - UNION ALL - SELECT f.node_id, COALESCE(f.os_name, f.name) AS name, f.relative_path, f.parent_relative_path, p.level + 1 - FROM node f - INNER JOIN paths p ON p.parent_relative_path = f.relative_path - WHERE f.parent_relative_path IS NOT NULL - ) SELECT name FROM paths ORDER BY LEVEL DESC -) AS names -$func$ LANGUAGE sql; - -- Trigger function that automatically updates start time and end time of jobs at phase update. -- This could be performed by business logic of each application that handles jobs but relying directly on the database ensures a better uniformity.