Log Message:
-----------
Allow query cancel/terminate

Modified Files:
--------------
    pgadmin3/src/ui:
        frmStatus.cpp (r1.23 -> r1.24)

Index: frmStatus.cpp
===================================================================
RCS file: /projects/pgadmin3/src/ui/frmStatus.cpp,v
retrieving revision 1.23
retrieving revision 1.24
diff -Lsrc/ui/frmStatus.cpp -Lsrc/ui/frmStatus.cpp -u -w -r1.23 -r1.24
--- src/ui/frmStatus.cpp
+++ src/ui/frmStatus.cpp
@@ -28,11 +28,15 @@
 BEGIN_EVENT_TABLE(frmStatus, pgDialog)
     EVT_BUTTON(XRCID("btnRefresh"),         frmStatus::OnRefresh)
     EVT_BUTTON (XRCID("btnClose"),          frmStatus::OnCloseBtn)
+    EVT_BUTTON(XRCID("btnCancel"),                                     
frmStatus::OnCancelBtn)
+    EVT_BUTTON(XRCID("btnTerminate"),                          
frmStatus::OnTerminateBtn)
     EVT_CLOSE(                              frmStatus::OnClose)
     EVT_SPINCTRL(XRCID("spnRefreshRate"),   frmStatus::OnRateChangeSpin)
     EVT_TEXT(XRCID("spnRefreshRate"),       frmStatus::OnRateChange)
        EVT_NOTEBOOK_PAGE_CHANGING(XRCID("nbStatus"),       
frmStatus::OnNotebookPageChanged)
     EVT_TIMER(TIMER_ID,                     frmStatus::OnRefreshTimer)
+       EVT_LIST_ITEM_SELECTED(XRCID("lstStatus"),              
frmStatus::OnSelStatusItem)
+       EVT_LIST_ITEM_DESELECTED(XRCID("lstStatus"),    frmStatus::OnSelStatusItem)
 END_EVENT_TABLE();
 
 
@@ -41,6 +45,8 @@
 #define logList         CTRL_LISTVIEW("lstLog")
 #define spnRefreshRate  CTRL_SPIN("spnRefreshRate")
 #define nbStatus               CTRL_NOTEBOOK("nbStatus")
+#define btnCancel              CTRL_BUTTON("btnCancel")
+#define btnTerminate   CTRL_BUTTON("btnTerminate")
 
 void frmStatus::OnCloseBtn(wxCommandEvent &event)
 {
@@ -125,6 +131,9 @@
     spnRefreshRate->SetValue(rate);
     timer=new wxTimer(this, TIMER_ID);
 
+       btnCancel->Enable(false);
+       btnTerminate->Enable(false);
+
        loaded = TRUE;
 }
 
@@ -445,3 +454,67 @@
         }
     }
 }
+
+void frmStatus::OnCancelBtn(wxCommandEvent &event)
+{
+       wxString spid = statusList->GetItemText(statusList->GetNextItem(-1, 
wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED));
+       long lpid = StrToLong(spid);
+
+       if(backend_pid == lpid)
+       {
+               wxMessageBox(_("You cannot cancel a query running on your own server 
process."), _("Cancel query"), wxOK | wxICON_EXCLAMATION);
+               return;
+       }
+
+       if (wxMessageBox(_("Are you sure you wish to cancel the selected query?"), 
+                                        _("Cancel query?"), 
+                                        wxYES_NO | wxICON_QUESTION) == wxNO)
+               return;
+
+       wxString sql = wxT("SELECT pg_cancel_backend(") + spid + wxT(");");
+
+       connection->ExecuteScalar(sql);
+
+       OnRefresh(*(wxCommandEvent*)&event);
+       wxMessageBox(_("A cancel signal was sent to the selected server process."), 
_("Cancel query"), wxOK | wxICON_INFORMATION);
+}
+
+void frmStatus::OnTerminateBtn(wxCommandEvent &event)
+{
+       wxString spid = statusList->GetItemText(statusList->GetNextItem(-1, 
wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED));
+       long lpid = StrToLong(spid);
+
+       if(backend_pid == lpid)
+       {
+               wxMessageBox(_("You cannot terminate your own server process."), 
_("Terminate query"), wxOK | wxICON_EXCLAMATION);
+               return;
+       }
+
+       if (wxMessageBox(_("Are you sure you wish to terminate the selected server 
process?"), 
+                                        _("Terminate query?"), wxYES_NO | 
wxICON_QUESTION) == wxNO)
+               return;
+
+       wxString sql = wxT("SELECT pg_terminate_backend(") + spid +     wxT(");");
+
+       connection->ExecuteScalar(sql);
+
+       OnRefresh(*(wxCommandEvent*)&event);
+       wxMessageBox(_("A terminate signal was sent to the selected server process."), 
_("Terminate query"), wxOK | wxICON_INFORMATION);
+}
+
+void frmStatus::OnSelStatusItem(wxCommandEvent &event)
+{
+       if (connection->BackendMinimumVersion(7, 5))
+       {
+               if(statusList->GetSelectedItemCount() >= 0) 
+               {
+                       btnCancel->Enable(true);
+                       btnTerminate->Enable(true);
+               } 
+               else 
+               {
+                       btnCancel->Enable(false);
+                       btnTerminate->Enable(false);
+               }
+       }
+}
\ No newline at end of file
---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]

Reply via email to