pgq_ext: functions for tick tracking
authorMarko Kreen <markokr@gmail.com>
Fri, 20 Jul 2007 13:10:28 +0000 (13:10 +0000)
committerMarko Kreen <markokr@gmail.com>
Fri, 20 Jul 2007 13:10:28 +0000 (13:10 +0000)
sql/pgq_ext/Makefile
sql/pgq_ext/expected/test_pgq_ext.out
sql/pgq_ext/functions/track_tick.sql [new file with mode: 0644]
sql/pgq_ext/sql/test_pgq_ext.sql

index dc82492400614ad77acc0970a695dc3d81d4d500..695926fbdcb85ca48b351bdb5bfcf1a50b9d64fd 100644 (file)
@@ -2,7 +2,7 @@
 DOCS = README.pgq_ext
 DATA_built = pgq_ext.sql
 
-SRCS = structure/tables.sql functions/track_batch.sql functions/track_event.sql
+SRCS = structure/tables.sql functions/track_batch.sql functions/track_event.sql functions/track_tick.sql
 
 REGRESS = test_pgq_ext
 REGRESS_OPTS = --load-language=plpgsql
@@ -14,3 +14,9 @@ include $(PGXS)
 pgq_ext.sql: $(SRCS)
        cat $(SRCS) > $@
 
+test: pgq_ext.sql
+       make installcheck || { less regression.diffs ; exit 1; }
+
+ack:
+       cp results/* expected/
+
index ccced8561f9102a78ec083c57b01b4e5e40582c7..e455223ec00f8070194cb0683e4524e26608780c 100644 (file)
@@ -83,3 +83,48 @@ select * from pgq_ext.completed_event order by 1,2;
  c           |        3 |      101
 (1 row)
 
+--
+-- test tick tracking
+--
+select pgq_ext.get_last_tick('c');
+ get_last_tick 
+---------------
+              
+(1 row)
+
+select pgq_ext.set_last_tick('c', 1);
+ set_last_tick 
+---------------
+ t
+(1 row)
+
+select pgq_ext.get_last_tick('c');
+ get_last_tick 
+---------------
+             1
+(1 row)
+
+select pgq_ext.set_last_tick('c', 2);
+ set_last_tick 
+---------------
+ t
+(1 row)
+
+select pgq_ext.get_last_tick('c');
+ get_last_tick 
+---------------
+             2
+(1 row)
+
+select pgq_ext.set_last_tick('c', NULL);
+ set_last_tick 
+---------------
+ t
+(1 row)
+
+select pgq_ext.get_last_tick('c');
+ get_last_tick 
+---------------
+              
+(1 row)
+
diff --git a/sql/pgq_ext/functions/track_tick.sql b/sql/pgq_ext/functions/track_tick.sql
new file mode 100644 (file)
index 0000000..0e6af84
--- /dev/null
@@ -0,0 +1,33 @@
+
+create or replace function pgq_ext.get_last_tick(a_consumer text)
+returns int8 as $$
+declare
+    res   int8;
+begin
+    select last_tick_id into res
+      from pgq_ext.completed_tick
+     where consumer_id = a_consumer;
+    return res;
+end;
+$$ language plpgsql security definer;
+
+create or replace function pgq_ext.set_last_tick(a_consumer text, a_tick_id bigint)
+returns boolean as $$
+begin
+    if a_tick_id is null then
+        delete from pgq_ext.completed_tick
+         where consumer_id = a_consumer;
+    else   
+        update pgq_ext.completed_tick
+           set last_tick_id = a_tick_id
+         where consumer_id = a_consumer;
+        if not found then
+            insert into pgq_ext.completed_tick (consumer_id, last_tick_id)
+                values (a_consumer, a_tick_id);
+        end if;
+    end if;
+
+    return true;
+end;
+$$ language plpgsql security definer;
+
index d6f4eeaa5213fe4ed18378a6dbf270a45e043336..c254d84da45510a1e51f2bf0f06faf46b58ea225 100644 (file)
@@ -23,4 +23,14 @@ select pgq_ext.set_event_done('c', 3, 101);
 select pgq_ext.set_batch_done('c', 3);
 select * from pgq_ext.completed_event order by 1,2;
 
+--
+-- test tick tracking
+--
+select pgq_ext.get_last_tick('c');
+select pgq_ext.set_last_tick('c', 1);
+select pgq_ext.get_last_tick('c');
+select pgq_ext.set_last_tick('c', 2);
+select pgq_ext.get_last_tick('c');
+select pgq_ext.set_last_tick('c', NULL);
+select pgq_ext.get_last_tick('c');