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
pgq_ext.sql: $(SRCS)
cat $(SRCS) > $@
+test: pgq_ext.sql
+ make installcheck || { less regression.diffs ; exit 1; }
+
+ack:
+ cp results/* expected/
+
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)
+
--- /dev/null
+
+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;
+
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');