mirror of
https://gitlab.com/depesz/explain.depesz.com.git
synced 2025-02-21 19:48:37 +02:00
38 lines
1.4 KiB
MySQL
38 lines
1.4 KiB
MySQL
|
-- Patch that adds ability to delete plan
|
||
|
|
||
|
alter table plans add column delete_key text;
|
||
|
alter table plans add column is_deleted bool NOT NULL DEFAULT false;
|
||
|
|
||
|
CREATE type register_plan_return as (
|
||
|
id TEXT,
|
||
|
delete_key TEXT
|
||
|
);
|
||
|
|
||
|
DROP FUNCTION register_plan(in_plan text, in_is_public boolean);
|
||
|
DROP FUNCTION register_plan(in_plan text, in_is_public boolean, in_is_anonymized boolean);
|
||
|
|
||
|
DROP FUNCTION register_plan(in_title text, in_plan text, in_is_public boolean, in_is_anonymized boolean);
|
||
|
CREATE FUNCTION register_plan(in_title text, in_plan text, in_is_public boolean, in_is_anonymized boolean) RETURNS register_plan_return
|
||
|
LANGUAGE plpgsql
|
||
|
AS $$
|
||
|
DECLARE
|
||
|
use_hash_length int4 := 2;
|
||
|
reply register_plan_return;
|
||
|
BEGIN
|
||
|
reply.delete_key := get_random_string( 50 );
|
||
|
LOOP
|
||
|
reply.id := get_random_string(use_hash_length);
|
||
|
BEGIN
|
||
|
INSERT INTO plans (id, title, plan, is_public, entered_on, is_anonymized, delete_key) values (reply.id, in_title, in_plan, in_is_public, now(), in_is_anonymized, reply.delete_key );
|
||
|
RETURN reply;
|
||
|
EXCEPTION WHEN unique_violation THEN
|
||
|
-- do nothing
|
||
|
END;
|
||
|
use_hash_length := use_hash_length + 1;
|
||
|
IF use_hash_length >= 30 THEN
|
||
|
raise exception 'Random string of length == 30 requested. something''s wrong.';
|
||
|
END IF;
|
||
|
END LOOP;
|
||
|
END;
|
||
|
$$;
|