Le mardi 15 septembre 2009 à 06:54:59, Magnus Hagander a écrit : > On 15 sep 2009, at 00.48, Guillaume Lelarge <guilla...@lelarge.info> > > wrote: > > Le samedi 12 septembre 2009 à 14:49:04, Guillaume Lelarge a écrit : > >> Le mercredi 9 septembre 2009 à 20:46:00, Roger Niederland a écrit : > >>> First of all thanks for PGAdmin I've been using it for years now. > >>> > >> :) > >>> > >>> One small enhancement that would be very useful is: > >>> > >>> When viewing the Statistics tab for the server where the Current > >>> Executing Queries is available (along with the current user, > >>> database > >>> etc..) It would be good to be able to copy the sql of a current > >>> query. > >>> I realize that it is impractical to show the full query sql (and > >>> do not > >>> want this). But I would like to be able to copy the "full sql" of > >>> the > >>> current query. I know that I can log long running queries, but > >>> feel it > >>> would be useful to copy the query from the statistics, so I can > >>> paste it > >>> into a query window for further analysis. > >> > >> It's already possible in 1.10, but it copies the whole line (not > >> only the > >> query). Anyways, that's one item on my todolist. We also want to be > >> able to > >> launch the query tool with this query (see > >> http://code.pgadmin.org/trac/ticket/9). I hope all of these will be > >> in > >> 1.12. > > > > Here is a patch to lauch the query tool with the selected query. The > > icon is > > the copy one. Not great, but I don't really have design skills. I > > wonder if we > > can make the query tool icon smaller enough, so that it will fit in > > the > > toolbar. Anyways, with this patch, when you click on the toolbar > > button, the > > query tool opens a new connection on the selected database of the > > same server, > > displays the query and allows the user to modify/execute it. > > > > Comments? > > For long queries the whole string won't be available. Maybe we should > try to detect that and issue an error? >
Yeah, sure. This new version checks if the query size is at max size and displays a message if it is. The contents of the message probably need some work. -- Guillaume. http://www.postgresqlfr.org http://dalibo.com
Index: pgadmin/include/frm/frmStatus.h =================================================================== --- pgadmin/include/frm/frmStatus.h (révision 8034) +++ pgadmin/include/frm/frmStatus.h (copie de travail) @@ -47,6 +47,7 @@ MNU_TERMINATE, MNU_COMMIT, MNU_ROLLBACK, + MNU_COPY_QUERY, TIMER_REFRESHUI_ID, TIMER_STATUS_ID, TIMER_LOCKS_ID, @@ -138,6 +139,7 @@ void OnExit(wxCommandEvent& event); void OnCopy(wxCommandEvent& ev); + void OnCopyQuery(wxCommandEvent& ev); void OnToggleStatusPane(wxCommandEvent& event); void OnToggleLockPane(wxCommandEvent& event); Index: pgadmin/frm/frmStatus.cpp =================================================================== --- pgadmin/frm/frmStatus.cpp (révision 8034) +++ pgadmin/frm/frmStatus.cpp (copie de travail) @@ -26,6 +26,7 @@ #include "frm/frmStatus.h" #include "frm/frmHint.h" #include "frm/frmMain.h" +#include "frm/frmQuery.h" #include "utils/pgfeatures.h" #include "schema/pgServer.h" #include "ctl/ctlMenuToolbar.h" @@ -44,6 +45,7 @@ EVT_MENU(MNU_EXIT, frmStatus::OnExit) EVT_MENU(MNU_COPY, frmStatus::OnCopy) + EVT_MENU(MNU_COPY_QUERY, frmStatus::OnCopyQuery) EVT_MENU(MNU_HELP, frmStatus::OnHelp) EVT_MENU(MNU_STATUSPAGE, frmStatus::OnToggleStatusPane) @@ -218,6 +220,7 @@ toolBar->AddTool(MNU_REFRESH, _("Refresh"), wxBitmap(readdata_xpm), _("Refresh"), wxITEM_NORMAL); toolBar->AddSeparator(); toolBar->AddTool(MNU_COPY, _("Copy"), wxBitmap(clip_copy_xpm), _("Copy selected text to clipboard"), wxITEM_NORMAL); + toolBar->AddTool(MNU_COPY_QUERY, _("Open query tool"), wxBitmap(clip_copy_xpm), _("Open the query tool with the selected query"), wxITEM_NORMAL); toolBar->AddSeparator(); toolBar->AddTool(MNU_CANCEL, _("Cancel"), wxBitmap(query_cancel_xpm), _("Cancel query"), wxITEM_NORMAL); toolBar->AddTool(MNU_TERMINATE, _("Terminate"), wxBitmap(terminate_backend_xpm), _("Terminate backend"), wxITEM_NORMAL); @@ -702,6 +705,63 @@ } +void frmStatus::OnCopyQuery(wxCommandEvent& ev) +{ + ctlListView *list; + int row, col; + wxString text = wxT(""); + wxString dbname = wxT(""); + int maxlength; + + // Only the status list shows the query + list = statusList; + + // Get the database + row = list->GetFirstSelected(); + col = 1; + dbname.Append(list->GetText(row, col)); + + // Get the actual query + row = list->GetFirstSelected(); + col = list->GetColumnCount() - 1; + text.Append(list->GetText(row, col) + wxT("\t")); + + // Check if we have a query whose length is maximum + if (connection->BackendMinimumVersion(8, 4)) + { + pgSet *set; + set=connection->ExecuteSet(wxT("SELECT setting FROM pg_settings\n") + wxT(" WHERE name='track_activity_query_size'")); + if (set) + { + maxlength = set->GetLong(0); + } + delete set; + } + else + maxlength = 1024; + + if (text.Length() == maxlength) + wxLogError(wxT("The query you copied is at the maximum length.") + wxT("This means it's probably not complete.") + wxT("You should check this before running the query.")); + + // If we have some real query, launch the query tool + if (text.Length() > 0 && dbname.Length() > 0) + { + //pgDatabase *db=obj->GetDatabase(); + pgConn *conn = new pgConn(connection->GetHostAddress(), dbname, + connection->GetUser(), connection->GetPassword(), + connection->GetPort(), connection->GetSslMode(), connection->GetDbOid()); + if (conn) + { + frmQuery *fq = new frmQuery(mainForm, wxEmptyString, conn, text); + fq->Go(); + } + } +} + + void frmStatus::OnPaneClose(wxAuiManagerEvent& evt) { if (evt.pane->name == wxT("Activity")) @@ -2285,6 +2345,7 @@ btnRotateLog->Enable(false); editMenu->Enable(MNU_COPY, statusList->GetFirstSelected()>=0); + toolBar->EnableTool(MNU_COPY_QUERY, statusList->GetFirstSelected()>=0); } @@ -2319,6 +2380,7 @@ btnRotateLog->Enable(false); editMenu->Enable(MNU_COPY, lockList->GetFirstSelected()>=0); + toolBar->EnableTool(MNU_COPY_QUERY, false); } @@ -2349,6 +2411,7 @@ btnRotateLog->Enable(false); editMenu->Enable(MNU_COPY, xactList->GetFirstSelected()>=0); + toolBar->EnableTool(MNU_COPY_QUERY, false); } @@ -2376,6 +2439,7 @@ } editMenu->Enable(MNU_COPY, logList->GetFirstSelected()>=0); + toolBar->EnableTool(MNU_COPY_QUERY, false); }
-- Sent via pgadmin-support mailing list (pgadmin-support@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-support