summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/pgq_coop/expected/pgq_coop_test.out22
-rw-r--r--sql/pgq_coop/functions/pgq_coop.next_batch.sql10
-rw-r--r--sql/pgq_coop/sql/pgq_coop_test.sql4
3 files changed, 36 insertions, 0 deletions
diff --git a/sql/pgq_coop/expected/pgq_coop_test.out b/sql/pgq_coop/expected/pgq_coop_test.out
index 958ae7b9..f821d766 100644
--- a/sql/pgq_coop/expected/pgq_coop_test.out
+++ b/sql/pgq_coop/expected/pgq_coop_test.out
@@ -155,3 +155,25 @@ select pgq_coop.unregister_subconsumer('testqueue', 'maincons', 'subcons2', 0);
0
(1 row)
+-- test auto-creation
+select pgq_coop.next_batch('testqueue', 'cmain', 'sc1');
+ next_batch
+------------
+
+(1 row)
+
+select pgq_coop.next_batch('testqueue', 'cmain', 'sc2');
+ next_batch
+------------
+
+(1 row)
+
+select consumer_name, last_tick from pgq.get_consumer_info();
+ consumer_name | last_tick
+---------------+-----------
+ cmain | 3
+ cmain.sc1 |
+ cmain.sc2 |
+ maincons | 3
+(4 rows)
+
diff --git a/sql/pgq_coop/functions/pgq_coop.next_batch.sql b/sql/pgq_coop/functions/pgq_coop.next_batch.sql
index 4e6934ad..5d7b63ea 100644
--- a/sql/pgq_coop/functions/pgq_coop.next_batch.sql
+++ b/sql/pgq_coop/functions/pgq_coop.next_batch.sql
@@ -120,6 +120,16 @@ declare
_sub_id integer;
_dead record;
begin
+ -- automatically register subconsumers
+ perform 1 from pgq.subscription s, pgq.consumer c, pgq.queue q
+ where q.queue_name = i_queue_name
+ and s.sub_queue = q.queue_id
+ and s.sub_consumer = c.co_id
+ and c.co_name = i_consumer_name || '.' || i_subconsumer_name;
+ if not found then
+ perform pgq_coop.register_subconsumer(i_queue_name, i_consumer_name, i_subconsumer_name);
+ end if;
+
-- fetch master consumer details, lock the row
select q.queue_id, c.co_id, s.sub_next_tick
into _queue_id, _consumer_id, _cur_tick
diff --git a/sql/pgq_coop/sql/pgq_coop_test.sql b/sql/pgq_coop/sql/pgq_coop_test.sql
index 2a6ae616..93f583f1 100644
--- a/sql/pgq_coop/sql/pgq_coop_test.sql
+++ b/sql/pgq_coop/sql/pgq_coop_test.sql
@@ -44,3 +44,7 @@ select pgq_coop.unregister_subconsumer('testqueue', 'maincons', 'subcons2', 0);
select pgq_coop.unregister_subconsumer('testqueue', 'maincons', 'subcons2', 1);
select pgq_coop.unregister_subconsumer('testqueue', 'maincons', 'subcons2', 0);
+-- test auto-creation
+select pgq_coop.next_batch('testqueue', 'cmain', 'sc1');
+select pgq_coop.next_batch('testqueue', 'cmain', 'sc2');
+select consumer_name, last_tick from pgq.get_consumer_info();