From cd7a3b6c0d61431e33f22ab00aeda009af5faa90 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sat, 14 Sep 2002 22:00:59 +0000
Subject: [PATCH] Simplify handling of second database for dblink tests.

---
 contrib/dblink/expected/dblink.out | 64 +++++++++++-------------------
 contrib/dblink/sql/dblink.sql      | 58 ++++++++++-----------------
 2 files changed, 43 insertions(+), 79 deletions(-)

diff --git a/contrib/dblink/expected/dblink.out b/contrib/dblink/expected/dblink.out
index d00056677ce..de6c7568e1d 100644
--- a/contrib/dblink/expected/dblink.out
+++ b/contrib/dblink/expected/dblink.out
@@ -1,10 +1,30 @@
 --
--- First, create a slave database and define the functions.
--- Turn off echoing so that expected file does not depend on
--- contents of dblink.sql.
+-- First, create a slave database and define the functions and test data
+-- therein.
+--
+-- This initial hackery is to allow successive runs without failures.
 --
+CREATE OR REPLACE FUNCTION conditional_drop() RETURNS text AS '
+DECLARE
+    dbname    text;
+BEGIN
+    SELECT INTO dbname datname FROM pg_database WHERE datname = ''regression_slave'';
+    IF FOUND THEN
+        DROP DATABASE regression_slave;
+    END IF;
+    RETURN ''OK'';
+END;
+' LANGUAGE 'plpgsql';
+SELECT conditional_drop();
+ conditional_drop 
+------------------
+ OK
+(1 row)
+
 CREATE DATABASE regression_slave;
 \connect regression_slave
+-- Turn off echoing so that expected file does not depend on
+-- contents of dblink.sql.
 \set ECHO none
 create table foo(f1 int, f2 text, f3 text[], primary key (f1,f2));
 NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index 'foo_pkey' for table 'foo'
@@ -219,41 +239,3 @@ select dblink_disconnect();
  OK
 (1 row)
 
--- now wait for the connection to the slave to be cleared before
--- we try to drop the database
-CREATE FUNCTION wait() RETURNS TEXT AS '
-DECLARE
-	rec           record;
-    cntr          int;
-BEGIN
-    cntr = 0;
-
-    select into rec d.datname
-    from pg_database d,
-        (select pg_stat_get_backend_dbid(pg_stat_get_backend_idset()) AS dbid) b
-    where d.oid = b.dbid and d.datname = ''regression_slave'';
-
-    WHILE FOUND LOOP
-        cntr = cntr + 1;
-
-        select into rec d.datname
-        from pg_database d,
-            (select pg_stat_get_backend_dbid(pg_stat_get_backend_idset()) AS dbid) b
-        where d.oid = b.dbid and d.datname = ''regression_slave'';
-
-        -- safety valve
-        if cntr > 1000 THEN
-            EXIT;
-        end if;
-	END LOOP;
-	RETURN ''OK'';
-END;
-' LANGUAGE 'plpgsql';
-SELECT wait();
- wait 
-------
- OK
-(1 row)
-
--- OK, safe to drop the slave
-DROP DATABASE regression_slave;
diff --git a/contrib/dblink/sql/dblink.sql b/contrib/dblink/sql/dblink.sql
index cfc2684348c..2d9dae33173 100644
--- a/contrib/dblink/sql/dblink.sql
+++ b/contrib/dblink/sql/dblink.sql
@@ -1,10 +1,27 @@
 --
--- First, create a slave database and define the functions.
--- Turn off echoing so that expected file does not depend on
--- contents of dblink.sql.
+-- First, create a slave database and define the functions and test data
+-- therein.
+--
+-- This initial hackery is to allow successive runs without failures.
 --
+CREATE OR REPLACE FUNCTION conditional_drop() RETURNS text AS '
+DECLARE
+    dbname    text;
+BEGIN
+    SELECT INTO dbname datname FROM pg_database WHERE datname = ''regression_slave'';
+    IF FOUND THEN
+        DROP DATABASE regression_slave;
+    END IF;
+    RETURN ''OK'';
+END;
+' LANGUAGE 'plpgsql';
+SELECT conditional_drop();
+
 CREATE DATABASE regression_slave;
 \connect regression_slave
+
+-- Turn off echoing so that expected file does not depend on
+-- contents of dblink.sql.
 \set ECHO none
 \i dblink.sql
 \set ECHO all
@@ -112,38 +129,3 @@ select * from dblink('select * from foo') as t(a int, b text, c text[]) where a
 
 -- close the persistent connection
 select dblink_disconnect();
-
--- now wait for the connection to the slave to be cleared before
--- we try to drop the database
-CREATE FUNCTION wait() RETURNS TEXT AS '
-DECLARE
-	rec           record;
-    cntr          int;
-BEGIN
-    cntr = 0;
-
-    select into rec d.datname
-    from pg_database d,
-        (select pg_stat_get_backend_dbid(pg_stat_get_backend_idset()) AS dbid) b
-    where d.oid = b.dbid and d.datname = ''regression_slave'';
-
-    WHILE FOUND LOOP
-        cntr = cntr + 1;
-
-        select into rec d.datname
-        from pg_database d,
-            (select pg_stat_get_backend_dbid(pg_stat_get_backend_idset()) AS dbid) b
-        where d.oid = b.dbid and d.datname = ''regression_slave'';
-
-        -- safety valve
-        if cntr > 1000 THEN
-            EXIT;
-        end if;
-	END LOOP;
-	RETURN ''OK'';
-END;
-' LANGUAGE 'plpgsql';
-SELECT wait();
-
--- OK, safe to drop the slave
-DROP DATABASE regression_slave;
-- 
GitLab