On 05/02/2011 10:09 PM, Guillaume Lelarge wrote:
> On 05/02/2011 10:20 AM, Dave Page wrote:
>> On Sun, May 1, 2011 at 4:32 PM, Guillaume Lelarge
>> <guilla...@lelarge.info> wrote:
>>> Hi,
>>>
>>> On 04/26/2011 12:46 PM, Piotr Czekalski wrote:
>>>> [...]
>>>> I'd would appreciate such feature, because working over GSM modem, which
>>>> is common to the administrators novadays (I think) is a nightmare ;-).
>>>>
>>>
>>> Got a patch that works. See the attachment. If the query fails, it
>>> checks if it's because of a bad connection. If connection is bad, it
>>> resets it, and executes once again the query. If it still fails, you
>>> have the usual error message. If it succeeds, you won't even notice that
>>> it had to reset the connection.
>>>
>>> I don't see any issue with this patch, but would like others to get a
>>> look. It's wxThread and that kind of stuff is not really my thing
>>> (threading... eeks).
>>>
>>> And one more question, we're really early in beta stage. Usually, it
>>> would have to wait a few months to get commited in next dev cycle. But
>>> it is so early in this stage (actually, beta 1 is not even announced
>>> yet), and it would be a so much welcomed patch that I think it could be
>>> commited for this release (ie, 1.14).
>>>
>>> Any opinions, objections, ideas?
>>
>> You cannot just reconnect silently in a patch like this - the user may
>> have created temp tables or otherwise modified the connection-specific
>> environment before the connection was lost. Blindly reconnecting and
>> then executing the query could have disastrous effects.
>>
> 
> Indeed, you're right. I knew I forgot something important with this patch :)
> 
> Too bad, because I really liked the silent reconnection. Well, I suppose
> I'll have to change this to make it verbose.
> 

Something more like this, then?


-- 
Guillaume
 http://www.postgresql.fr
 http://dalibo.com
diff --git a/pgadmin/db/pgConn.cpp b/pgadmin/db/pgConn.cpp
index a40782b..8f20b47 100644
--- a/pgadmin/db/pgConn.cpp
+++ b/pgadmin/db/pgConn.cpp
@@ -865,6 +865,12 @@ int pgConn::GetStatus() const
 }
 
 
+void pgConn::Reset()
+{
+	PQreset(conn);
+}
+
+
 wxString pgConn::GetVersionString()
 {
 	return ExecuteScalar(wxT("SELECT version();"));
diff --git a/pgadmin/frm/frmQuery.cpp b/pgadmin/frm/frmQuery.cpp
index 6f0fe40..b26d7ec 100644
--- a/pgadmin/frm/frmQuery.cpp
+++ b/pgadmin/frm/frmQuery.cpp
@@ -2416,15 +2416,27 @@ void frmQuery::OnQueryComplete(wxCommandEvent &ev)
 		}
 		else
 		{
-			pgError err = sqlResult->GetResultError();
-			wxString errMsg = err.formatted_msg;
-			wxLogQuietError(wxT("%s"), conn->GetLastError().Trim().c_str());
-
+            wxString errMsg, errMsg2;
 			long errPos;
-			err.statement_pos.ToLong(&errPos);
+
+            if (sqlResult->RunStatus() != CONNECTION_OK)
+            {
+                if (wxMessageBox(_("Connection is down. Do you want to reset it?"), _("Reset connection?"), wxICON_QUESTION | wxYES_NO) == wxYES)
+                {
+                    conn->Reset();
+                    errMsg2 = _("Connection resetted.");
+                }
+            }
+
+            pgError err = sqlResult->GetResultError();
+            errMsg = err.formatted_msg;
+            wxLogQuietError(wxT("%s"), conn->GetLastError().Trim().c_str());
+            err.statement_pos.ToLong(&errPos);
 
 			showMessage(wxString::Format(wxT("********** %s **********\n"), _("Error")));
 			showMessage(errMsg);
+            if (!errMsg2.IsEmpty())
+                showMessage(errMsg2);
 
 			if (errPos > 0)
 			{
diff --git a/pgadmin/include/db/pgConn.h b/pgadmin/include/db/pgConn.h
index 5236fa7..ab764e9 100644
--- a/pgadmin/include/db/pgConn.h
+++ b/pgadmin/include/db/pgConn.h
@@ -241,6 +241,8 @@ public:
 	pgNotification *GetNotification();
 	int GetTxStatus();
 
+    void Reset();
+
 	bool TableHasColumn(wxString schemaname, wxString tblname, const wxString &colname);
 
 protected:
-- 
Sent via pgadmin-support mailing list (pgadmin-support@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-support

Reply via email to