db support for --skip-truncate
authorMarko Kreen <markokr@gmail.com>
Mon, 9 Apr 2007 10:47:31 +0000 (10:47 +0000)
committerMarko Kreen <markokr@gmail.com>
Mon, 9 Apr 2007 10:47:31 +0000 (10:47 +0000)
sql/londiste/Makefile
sql/londiste/expected/londiste_subscriber.out
sql/londiste/functions/londiste.subscriber_set_skip_truncate.sql [new file with mode: 0644]
sql/londiste/functions/londiste.subscriber_set_table_state.sql
sql/londiste/sql/londiste_subscriber.sql
sql/londiste/structure/tables.sql

index 154da0715d2932bb6445c8bbb40c7f6aa2d1e108..3c740f4bbf1eb9fcbf09658d64898b9d724d0f27 100644 (file)
@@ -18,3 +18,6 @@ londiste.sql: $(SRCS)
 londiste.upgrade.sql: $(FUNCS)
        cat $(FUNCS) > $@
 
+test: londiste.sql
+       make installcheck || { less regression.diffs; exit 1; }
+
index 7ec6944ee5089f8de86ec7ee412a37ce72c20b24..fb2846436f209a6182b0f13f7fc71205e35e6456 100644 (file)
@@ -126,3 +126,54 @@ select londiste.subscriber_add_seq('pqueue', 'public.testdata_id_seq');
 
 select londiste.subscriber_remove_seq('pqueue', 'public.testdata_seq');
 ERROR:  no such seq?
+--
+-- skip-truncate, set_table_state
+--
+select londiste.subscriber_add_table('pqueue', 'public.skiptest');
+ subscriber_add_table 
+----------------------
+                    0
+(1 row)
+
+select skip_truncate from londiste.subscriber_table where table_name = 'public.skiptest';
+ skip_truncate 
+---------------
+(1 row)
+
+select londiste.subscriber_set_skip_truncate('pqueue', 'public.skiptest', true);
+ subscriber_set_skip_truncate 
+------------------------------
+                            1
+(1 row)
+
+select skip_truncate from londiste.subscriber_table where table_name = 'public.skiptest';
+ skip_truncate 
+---------------
+ t
+(1 row)
+
+select londiste.subscriber_set_table_state('pqueue', 'public.skiptest', 'snap1', 'in-copy');
+ subscriber_set_table_state 
+----------------------------
+                          1
+(1 row)
+
+select skip_truncate, snapshot from londiste.subscriber_table where table_name = 'public.skiptest';
+ skip_truncate | snapshot 
+---------------+----------
+ t             | snap1
+(1 row)
+
+select londiste.subscriber_set_table_state('pqueue', 'public.skiptest', null, 'ok');
+ subscriber_set_table_state 
+----------------------------
+                          1
+(1 row)
+
+select skip_truncate, snapshot from londiste.subscriber_table where table_name = 'public.skiptest';
+ skip_truncate | snapshot 
+---------------+----------
+               | 
+(1 row)
+
diff --git a/sql/londiste/functions/londiste.subscriber_set_skip_truncate.sql b/sql/londiste/functions/londiste.subscriber_set_skip_truncate.sql
new file mode 100644 (file)
index 0000000..cddebff
--- /dev/null
@@ -0,0 +1,19 @@
+
+create or replace function londiste.subscriber_set_skip_truncate(
+    i_queue text,
+    i_table text,
+    i_value bool)
+returns integer as $$
+begin
+    update londiste.subscriber_table
+       set skip_truncate = i_value
+     where queue_name = i_queue
+       and table_name = i_table;
+    if not found then
+        raise exception 'table not found';
+    end if;
+
+    return 1;
+end;
+$$ language plpgsql security definer;
+
index cab124446d3fa18404ff6b913a2ad17be3f18eba..cf161f0eae6c37157359a8b04092840b7de2dc2e 100644 (file)
@@ -11,7 +11,12 @@ declare
 begin
     update londiste.subscriber_table
         set snapshot = i_snapshot,
-            merge_state = i_merge_state
+            merge_state = i_merge_state,
+            -- reset skip_snapshot when table is copied over
+            skip_truncate = case when i_merge_state = 'ok'
+                                 then null
+                                 else skip_truncate
+                            end
       where queue_name = i_queue_name
         and table_name = i_table_name;
     if not found then
index 0583a395ad390968f4048e8292f910c10c22f3e3..55de29a0242c65d0b3263ac588385db14558f38e 100644 (file)
@@ -50,4 +50,17 @@ select londiste.subscriber_remove_table('pqueue', 'public.testdata');
 select londiste.subscriber_add_seq('pqueue', 'public.testdata_id_seq');
 select londiste.subscriber_remove_seq('pqueue', 'public.testdata_seq');
 
+--
+-- skip-truncate, set_table_state
+--
+
+select londiste.subscriber_add_table('pqueue', 'public.skiptest');
+select skip_truncate from londiste.subscriber_table where table_name = 'public.skiptest';
+select londiste.subscriber_set_skip_truncate('pqueue', 'public.skiptest', true);
+select skip_truncate from londiste.subscriber_table where table_name = 'public.skiptest';
+select londiste.subscriber_set_table_state('pqueue', 'public.skiptest', 'snap1', 'in-copy');
+select skip_truncate, snapshot from londiste.subscriber_table where table_name = 'public.skiptest';
+select londiste.subscriber_set_table_state('pqueue', 'public.skiptest', null, 'ok');
+select skip_truncate, snapshot from londiste.subscriber_table where table_name = 'public.skiptest';
+
 
index 83ac24f4eb0aa018533473e69e21f533ddbec57b..226eafd987cb2d6650d6068666b642e7e7ecf64c 100644 (file)
@@ -40,6 +40,8 @@ create table londiste.subscriber_table (
     merge_state         text,
     trigger_name        text,
 
+    skip_truncate       bool,
+
     primary key (queue_name, table_name)
 );