teldrive/database/migrations/20230817172329_functions.sql

116 lines
1.4 KiB
MySQL
Raw Normal View History

-- +goose Up
-- +goose StatementBegin
create procedure teldrive.update_size() language plpgsql as $$
declare rec record;
total_size bigint;
begin
for rec in
select
id
from
files
where
type = 'folder'
order by
depth desc loop total_size := (
select
sum(size) as total_size
from
teldrive.files
where
parent_id = rec.id
);
update
teldrive.files
set
size = total_size
where
id = rec.id;
end loop;
end;
$$;
-- +goose StatementEnd
-- +goose StatementBegin
create procedure teldrive.delete_files(in file_ids text[],
in op text default 'bulk')
language plpgsql
as $$
declare
rec record;
begin
if op = 'bulk' then
for rec in
select
id,
type
from
teldrive.files
where
id = any (file_ids)
loop
if rec.type = 'folder' then
call teldrive.delete_files(array [rec.id],
'single');
delete
from
teldrive.files
where
id = rec.id;
else
update
teldrive.files
set
status = 'pending_deletion'
where
id = rec.id;
end if;
end loop;
else
for rec in
select
id,
type
from
teldrive.files
where
parent_id = file_ids[1]
loop
if rec.type = 'folder' then
call teldrive.delete_files(array [rec.id],
'single');
delete
from
teldrive.files
where
id = rec.id;
else
update
teldrive.files
set
status = 'pending_deletion'
where
id = rec.id;
end if;
end loop;
end if;
end;
$$
;
-- +goose StatementEnd
-- +goose Down
drop procedure if exists teldrive.update_size;
drop procedure if exists teldrive.delete_files;