Log Message:
-----------
Make sure IsAlive check isn't affected by dead transactions

Tags:
----
REL-1_2_0_PATCHES

Modified Files:
--------------
    pgadmin3/src/db:
        pgConn.cpp (r1.60.2.1 -> r1.60.2.2)

Index: pgConn.cpp
===================================================================
RCS file: /projects/pgadmin3/src/db/pgConn.cpp,v
retrieving revision 1.60.2.1
retrieving revision 1.60.2.2
diff -Lsrc/db/pgConn.cpp -Lsrc/db/pgConn.cpp -u -w -r1.60.2.1 -r1.60.2.2
--- src/db/pgConn.cpp
+++ src/db/pgConn.cpp
@@ -237,7 +237,24 @@
 
 wxString pgConn::SystemNamespaceRestriction(const wxString &nsp)
 {
-    return wxT("(") + nsp + wxT(" NOT LIKE 'pg\\_%' AND ") + nsp + wxT(" NOT 
LIKE 'information_schema')");
+    if (reservedNamespaces.IsEmpty())
+    {
+        reservedNamespaces = wxT("'information_schema'");
+        pgSet *set=ExecuteSet(
+                wxT("SELECT nspname FROM pg_namespace nsp\n")
+                wxT("  JOIN pg_proc pr ON pronamespace=nsp.oid\n")
+                wxT(" WHERE proname IN ('slonyversion')"));
+        if (set)
+        {
+            while (!set->Eof())
+            {
+                reservedNamespaces += wxT(", ") + 
qtString(set->GetVal(wxT("nspname")));
+                set->MoveNext();
+            }
+            delete set;
+        }
+    }
+    return wxT("(") + nsp + wxT(" NOT LIKE 'pg\\_%' AND ") + nsp + wxT(" NOT 
in (") + reservedNamespaces + wxT("))");
 }
 
 
@@ -412,6 +429,12 @@
 
     PGresult *qryRes = PQexec(conn, "SELECT 1;");
     lastResultStatus = PQresultStatus(qryRes);
+    if (lastResultStatus != PGRES_TUPLES_OK)
+    {
+        PQclear(qryRes);
+        qryRes = PQexec(conn, "ROLLBACK TRANSACTION; SELECT 1;");
+        lastResultStatus = PQresultStatus(qryRes);
+    }
     PQclear(qryRes);
 
     // Check for errors
---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
    (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])

Reply via email to