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
>> <[email protected]> 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 ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-support