Le mardi 15 septembre 2009 à 06:54:59, Magnus Hagander a écrit :
> On 15 sep 2009, at 00.48, Guillaume Lelarge <[email protected]>
>
> 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 ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-support