diff options
-rw-r--r-- | sql/londiste/functions/londiste.set_add_table.sql | 48 | ||||
-rw-r--r-- | sql/londiste/functions/londiste.set_remove_table.sql | 39 |
2 files changed, 87 insertions, 0 deletions
diff --git a/sql/londiste/functions/londiste.set_add_table.sql b/sql/londiste/functions/londiste.set_add_table.sql new file mode 100644 index 00000000..7e11a84c --- /dev/null +++ b/sql/londiste/functions/londiste.set_add_table.sql @@ -0,0 +1,48 @@ + +create or replace function londiste.set_add_table( + in i_set_name text, + in i_table_name text, + out ret_code int4, + out ret_desc text) +as $$ +-- ---------------------------------------------------------------------- +-- Function: londiste.node_add_table(x) +-- +-- Register table on Londiste set. +-- +-- This means its available from root, events for it appear +-- in queue and nodes can attach to it. +-- +-- Called by: +-- on root - londiste.node_add_table() +-- elsewhere - londiste consumer when receives new table event +-- +-- Returns: +-- 200 - Ok +-- 400 - No such set +-- ---------------------------------------------------------------------- +declare + col_types text; + fq_table_name text; +begin + fq_table_name := londiste.make_fqname(i_table_name); + + perform 1 from pgq_set.set_info where set_name = i_set_name; + if not found then + select 400, 'No such set: ' || i_set_name into ret_code, ret_desc; + return; + end if; + + perform 1 from londiste.set_table where set_name = i_set_name and table_name = fq_table_name; + if found then + select 200, 'OK, already added: ' || fq_table_name into ret_code, ret_desc; + return; + end if; + + insert into londiste.set_table (set_name, table_name) + values (i_set_name, fq_table_name); + select 200, 'OK' into ret_code, ret_desc; + return; +end; +$$ language plpgsql strict; + diff --git a/sql/londiste/functions/londiste.set_remove_table.sql b/sql/londiste/functions/londiste.set_remove_table.sql new file mode 100644 index 00000000..080785a4 --- /dev/null +++ b/sql/londiste/functions/londiste.set_remove_table.sql @@ -0,0 +1,39 @@ + +create or replace function londiste.set_remove_table( + in i_set_name text, in i_table_name text, + out ret_code int4, out ret_desc text) +as $$ +-- ---------------------------------------------------------------------- +-- Function: londiste.set_remove_table(2) +-- +-- Removes tables registration in set. +-- +-- Means that nodes cannot attach to this table anymore. +-- +-- Called by: +-- - On root by londiste.node_remove_table() +-- - Elsewhere by consumer receiving table remove event +-- +-- Returns: +-- 200 - OK +-- 400 - not found +-- ---------------------------------------------------------------------- +declare + fq_table_name text; +begin + fq_table_name := londiste.make_fqname(i_table_name); + if not pgq_set.is_root(i_set_name) then + perform londiste.node_remove_table(i_set_name, fq_table_name); + end if; + delete from londiste.set_table + where set_name = i_set_name + and table_name = fq_table_name; + if not found then + select 400, 'Not found: '||fq_table_name into ret_code, ret_desc; + return; + end if; + select 200, 'OK' into ret_code, ret_desc; + return; +end; +$$ language plpgsql strict; + |