Le mardi 15 septembre 2009 à 18:47:24, Guillaume Lelarge a écrit :
> Le mardi 15 septembre 2009 à 09:57:55, Magnus Hagander a écrit :
> > On Tue, Sep 15, 2009 at 07:34, Guillaume Lelarge <[email protected]>
>
> wrote:
> > > 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.
> >
> > Should we bother copying at all if it's short?
>
> Don't understand this one ?!?!
>
> > If we keep that, how about:
> > "The query is longer than the maximum length, and has been truncated. "
>
> Well, we don't really know if it has been truncated. All we know is that
> the query is at the maximum length.
>
New version of the patch:
* Previously, only the first 250 characters of the query were displayed.
* We won't launch the query tool if the selected process is in <IDLE> or
<IDLE in transaction> state.
--
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,64 @@
}
+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
+ && text.Trim() != wxT("<IDLE>") && text.Trim() != wxT("<IDLE in transaction>"))
+ {
+ //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"))
@@ -1023,7 +1084,7 @@
statusList->SetItem(row, colpos++, dataSet1->GetVal(wxT("xact_start")));
statusList->SetItem(row, colpos++, dataSet1->GetVal(wxT("blockedby")));
- statusList->SetItem(row, colpos, qry.Left(250));
+ statusList->SetItem(row, colpos, qry);
row++;
}
dataSet1->MoveNext();
@@ -2285,6 +2346,7 @@
btnRotateLog->Enable(false);
editMenu->Enable(MNU_COPY, statusList->GetFirstSelected()>=0);
+ toolBar->EnableTool(MNU_COPY_QUERY, statusList->GetFirstSelected()>=0);
}
@@ -2319,6 +2381,7 @@
btnRotateLog->Enable(false);
editMenu->Enable(MNU_COPY, lockList->GetFirstSelected()>=0);
+ toolBar->EnableTool(MNU_COPY_QUERY, false);
}
@@ -2349,6 +2412,7 @@
btnRotateLog->Enable(false);
editMenu->Enable(MNU_COPY, xactList->GetFirstSelected()>=0);
+ toolBar->EnableTool(MNU_COPY_QUERY, false);
}
@@ -2376,6 +2440,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