mirror of
https://github.com/tgdrive/teldrive.git
synced 2025-01-11 01:28:27 +08:00
50 lines
1.2 KiB
MySQL
50 lines
1.2 KiB
MySQL
|
-- +goose Up
|
||
|
-- +goose StatementBegin
|
||
|
CREATE OR REPLACE FUNCTION teldrive.get_file_from_path(full_path text,u_id bigint)
|
||
|
RETURNS setof teldrive.files AS $$
|
||
|
DECLARE
|
||
|
target_id text;
|
||
|
begin
|
||
|
|
||
|
IF full_path = '/' then
|
||
|
RETURN QUERY select * from teldrive.files as root where root.parent_id = 'root' and root.user_id = u_id;
|
||
|
END IF;
|
||
|
|
||
|
WITH RECURSIVE dir_hierarchy AS (
|
||
|
SELECT
|
||
|
root.id,
|
||
|
root.name,
|
||
|
root.parent_id,
|
||
|
0 AS depth,
|
||
|
'' as path
|
||
|
FROM
|
||
|
teldrive.files as root
|
||
|
WHERE
|
||
|
root.parent_id = 'root' AND root.user_id = u_id
|
||
|
|
||
|
UNION ALL
|
||
|
|
||
|
SELECT
|
||
|
f.id,
|
||
|
f.name,
|
||
|
f.parent_id,
|
||
|
dh.depth + 1 AS depth,
|
||
|
dh.path || '/' || f.name
|
||
|
FROM
|
||
|
teldrive.files f
|
||
|
JOIN
|
||
|
dir_hierarchy dh ON dh.id = f.parent_id
|
||
|
WHERE f.type = 'folder' AND f.user_id = u_id
|
||
|
)
|
||
|
|
||
|
SELECT id into target_id FROM dir_hierarchy dh
|
||
|
WHERE dh.path = full_path
|
||
|
ORDER BY dh.depth DESC
|
||
|
LIMIT 1;
|
||
|
|
||
|
RETURN QUERY select * from teldrive.files where id=target_id;
|
||
|
|
||
|
END;
|
||
|
$$ LANGUAGE plpgsql;
|
||
|
-- +goose StatementEnd
|