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