add new files
authorMarko Kreen <markokr@gmail.com>
Wed, 30 Apr 2008 14:28:42 +0000 (14:28 +0000)
committerMarko Kreen <markokr@gmail.com>
Wed, 30 Apr 2008 14:28:42 +0000 (14:28 +0000)
sql/pgq/functions/pgq.seq_funcs.sql [new file with mode: 0644]
sql/pgq_set/functions/pgq_set.get_subscriber_info.sql [new file with mode: 0644]

diff --git a/sql/pgq/functions/pgq.seq_funcs.sql b/sql/pgq/functions/pgq.seq_funcs.sql
new file mode 100644 (file)
index 0000000..985f638
--- /dev/null
@@ -0,0 +1,48 @@
+
+create or replace function pgq.seq_getval(i_seq_name text)
+returns bigint as $$
+-- ----------------------------------------------------------------------
+-- Function: pgq.seq_getval(1)
+--
+--      read current last_val from seq, without offecting it.
+--
+-- Parameters:
+--      i_seq_name     - Name of the sequence
+--
+-- Returns:
+--      last value.
+-- ----------------------------------------------------------------------
+declare
+    res  int8;
+begin
+    execute 'select last_value from ' || i_seq_name into res;
+    return res;
+end;
+$$ language plpgsql;
+
+create or replace function pgq.seq_setval(i_seq_name text, i_new_value int8)
+returns bigint as $$
+-- ----------------------------------------------------------------------
+-- Function: pgq.seq_setval(2)
+--
+--      Like setval() but does not allow going back.
+--
+-- Parameters:
+--      i_seq_name      - Name of the sequence
+--      i_new_value     - new value
+--
+-- Returns:
+--      current last value.
+-- ----------------------------------------------------------------------
+declare
+    res  int8;
+begin
+    res := pgq.seq_getval(i_seq_name);
+    if res < i_new_value then
+        perform setval(i_seq_name, i_new_value);
+        return i_new_value;
+    end if;
+    return res;
+end;
+$$ language plpgsql;
+
diff --git a/sql/pgq_set/functions/pgq_set.get_subscriber_info.sql b/sql/pgq_set/functions/pgq_set.get_subscriber_info.sql
new file mode 100644 (file)
index 0000000..33662ab
--- /dev/null
@@ -0,0 +1,32 @@
+
+create or replace function pgq_set.get_subscriber_info(
+    in i_set_name text,
+
+    out node_name text,
+    out local_watermark int8)
+returns setof record as $$
+-- ----------------------------------------------------------------------
+-- Function: pgq_set.get_subscriber_info(1)
+--
+--      Get subscriber list for the set.
+--
+-- Parameters:
+--      i_set_name  - set name
+--
+-- Returns:
+--      node_name       - node name
+--      local_watermark - lowest tick_id on subscriber
+-- ----------------------------------------------------------------------
+begin
+    for node_name, local_watermark in
+        select s.node_name, s.local_watermark
+          from pgq_set.subscriber_info s
+         where s.set_name = i_set_name
+         order by 1
+    loop
+        return next;
+    end loop;
+    return;
+end;
+$$ language plpgsql security definer;
+