42 lines
979 B
MySQL
42 lines
979 B
MySQL
|
-- Deploy camper:edit_media to pg
|
||
|
-- requires: roles
|
||
|
-- requires: schema_camper
|
||
|
-- requires: media_content
|
||
|
-- requires: media
|
||
|
-- requires: media_type
|
||
|
|
||
|
begin;
|
||
|
|
||
|
set search_path to camper, public;
|
||
|
|
||
|
create or replace function edit_media(media_id integer, filename text, media_type media_type default null, content bytea default null) returns integer as
|
||
|
$$
|
||
|
declare
|
||
|
hash bytea;
|
||
|
begin
|
||
|
if content is not null then
|
||
|
insert into media_content (media_type, bytes)
|
||
|
values (media_type, content)
|
||
|
on conflict (content_hash) do update
|
||
|
set media_type = excluded.media_type
|
||
|
returning content_hash into hash
|
||
|
;
|
||
|
end if;
|
||
|
|
||
|
update media
|
||
|
set original_filename = filename
|
||
|
, content_hash = coalesce(hash, content_hash)
|
||
|
where media.media_id = edit_media.media_id
|
||
|
;
|
||
|
|
||
|
return media_id;
|
||
|
end
|
||
|
$$
|
||
|
language plpgsql
|
||
|
;
|
||
|
|
||
|
revoke execute on function edit_media(integer, text, media_type, bytea) from public;
|
||
|
grant execute on function edit_media(integer, text, media_type, bytea) to admin;
|
||
|
|
||
|
commit;
|