mirror of
https://github.com/tgdrive/teldrive.git
synced 2025-01-10 17:19:56 +08:00
48 lines
1.5 KiB
MySQL
48 lines
1.5 KiB
MySQL
|
-- +goose Up
|
||
|
-- +goose StatementBegin
|
||
|
|
||
|
CREATE OR REPLACE FUNCTION teldrive.create_directories(
|
||
|
IN tg_id BIGINT,
|
||
|
IN long_path TEXT
|
||
|
) RETURNS SETOF teldrive.files AS $$
|
||
|
DECLARE
|
||
|
path_parts TEXT[];
|
||
|
current_directory_id TEXT;
|
||
|
new_directory_id TEXT;
|
||
|
directory_name TEXT;
|
||
|
path_so_far TEXT;
|
||
|
depth_dir integer;
|
||
|
begin
|
||
|
|
||
|
path_parts := string_to_array(regexp_replace(long_path, '^/+', ''), '/');
|
||
|
|
||
|
path_so_far := '';
|
||
|
depth_dir := 0;
|
||
|
|
||
|
SELECT id into current_directory_id FROM teldrive.files WHERE parent_id='root';
|
||
|
|
||
|
|
||
|
FOR directory_name IN SELECT unnest(path_parts) LOOP
|
||
|
path_so_far := CONCAT(path_so_far,'/', directory_name);
|
||
|
depth_dir := depth_dir +1;
|
||
|
SELECT id INTO new_directory_id
|
||
|
FROM teldrive.files
|
||
|
WHERE parent_id = current_directory_id
|
||
|
AND "name" = directory_name AND "user_id"=tg_id;
|
||
|
|
||
|
IF new_directory_id IS NULL THEN
|
||
|
INSERT INTO teldrive.files ("name", "type", mime_type, parent_id, "user_id",starred,"depth","path")
|
||
|
VALUES (directory_name, 'folder', 'drive/folder', current_directory_id, tg_id,false,depth_dir,path_so_far)
|
||
|
RETURNING id INTO new_directory_id;
|
||
|
END IF;
|
||
|
|
||
|
current_directory_id := new_directory_id;
|
||
|
END LOOP;
|
||
|
|
||
|
RETURN QUERY SELECT * FROM teldrive.files WHERE id = current_directory_id;
|
||
|
END;
|
||
|
$$ LANGUAGE plpgsql;
|
||
|
-- +goose StatementEnd
|
||
|
|
||
|
-- +goose Down
|
||
|
DROP FUNCTION IF EXISTS teldrive.create_directories;
|