diff options
-rw-r--r-- | sql/pgq_coop/expected/pgq_coop_test.out | 22 | ||||
-rw-r--r-- | sql/pgq_coop/functions/pgq_coop.next_batch.sql | 10 | ||||
-rw-r--r-- | sql/pgq_coop/sql/pgq_coop_test.sql | 4 |
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(); |