wxWidgets 3.0

add plan view unexpand/expand
This commit is contained in:
levinsv 2018-12-28 22:38:43 +05:00
parent 8cb8ff6af8
commit 2d9e76f826
34 changed files with 1259 additions and 1003 deletions

16
.gitignore vendored
View file

@ -20,3 +20,19 @@ Release/hist.log
Release/1.sql
Release/1.xml
Release/33.xml
Release_(3.0)/pgAdmin3.Build.CppClean.log
Release_(3.0)/pgAdmin3.ilk
Release_(3.0)/pgAdmin3.log
Release_(3.0)/pgAdmin3.map
Release_(3.0)/pgAdmin3.pch
Release_(3.0)/pgAdmin3.pdb
Release_(3.0)/pgAdmin3.res
Release_(3.0)/vc110.pdb
Release_(3.0)/Win32/libssh2/vc110.pdb
Release_(3.0)/x64/libssh2/vc110.pdb
Release_(3.0)/pgAdmin3.lastbuildstate
Release_(3.0)/hist.log
Release_(3.0)/pgAdmin3.exe.*
Release_(3.0)/*.pdb
Release_(3.0)/*.rc
*.pdb

View file

@ -46,3 +46,9 @@ This text Russian language.
09.12.2018
- autocomplite: добавлены имена функций, и возможность подставлять имена колонок таблиц из поля FROM
- при наборе имени функции появляется перечень параметров этой функции
28.12.2010
- выполнен переход на wxWidgets 3.0 версия exe файла будет находиться Release_(3.0)
- в текстовом представлении плана можно сворачивать узлы
- построении плана с замерами в заголовках строк указывается процент времени выполнения узла (только операции узла но не вложенных узлов)
-

BIN
Release_(3.0)/libeay32.dll Normal file

Binary file not shown.

Binary file not shown.

BIN
Release_(3.0)/libiconv.dll Normal file

Binary file not shown.

BIN
Release_(3.0)/libintl-8.dll Normal file

Binary file not shown.

BIN
Release_(3.0)/libintl.dll Normal file

Binary file not shown.

BIN
Release_(3.0)/libpq.dll Normal file

Binary file not shown.

BIN
Release_(3.0)/libxml2.dll Normal file

Binary file not shown.

BIN
Release_(3.0)/libxslt.dll Normal file

Binary file not shown.

BIN
Release_(3.0)/pgAdmin3.exe Normal file

Binary file not shown.

BIN
Release_(3.0)/ssleay32.dll Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -19,6 +19,7 @@
#include "ctl/ctlSQLGrid.h"
#include "utils/sysSettings.h"
#include "frm/frmExport.h"
#include <wx/regex.h>
#define EXTRAEXTENT_HEIGHT 6
@ -55,6 +56,7 @@ ctlSQLGrid::ctlSQLGrid(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
//SetDefaultRenderer(new wxGridCellAutoWrapStringRenderer);
SetDefaultRenderer(new CursorCellRenderer);
grp=NULL;
Connect(wxID_ANY, wxEVT_GRID_LABEL_LEFT_DCLICK, wxGridEventHandler(ctlSQLGrid::OnLabelDoubleClick));
}
@ -400,12 +402,18 @@ void ctlSQLGrid::OnLabelDoubleClick(wxGridEvent &event)
{
int row = event.GetRow();
int col = event.GetCol();
//SetRowLabelValue(row-1,);
//HideRow(row);
}
void ctlSQLGrid::OnLabelClick(wxGridEvent &event)
{
int row = event.GetRow();
int col = event.GetCol();
if (row >= 0 && grp) {
grp->VisibleGroup(row,GetRowSize(row+1)==0);
return;
}
// add support for (de)selecting multiple rows and cols with Control pressed
if ( row >= 0 && (event.ControlDown() || event.CmdDown()) )
{
@ -561,3 +569,87 @@ wxSize ctlSQLGrid::GetBestSize(int row, int col)
return size;
}
int recurse(ctlSQLGrid *g, int pos,int row, double &transfer) {
wxString text;
double leveltime=0; //actual time level
double lastnode=0;
while (row<g->GetNumberRows()) {
text = g->GetCellValue(row, 0);
int p=0;
while (text.at(p)==' ' )
{
p++;
}
if (p==pos) {
//
lastnode=0;
if (text.at(p)=='-') {
// ïîñ÷èòàåì âðåìÿ ðàáîòû óçëà
double m=1;
// -> Nested Loop (cost=205.13..273.44 rows=4 width=188) (actual time=13.157..13.157 rows=0 loops=1)
wxRegEx foundstr(wxT("actual time=.*?\\.\\.([0-9.]+).*?loops=([0-9]+)"),wxRE_ADVANCED);
if (foundstr.Matches(text)) {
wxString v=foundstr.GetMatch(text,1);
v.ToCDouble(&lastnode);
v=foundstr.GetMatch(text,2);
v.ToDouble(&m);
lastnode=lastnode*m;
leveltime=leveltime+lastnode;
}
g->grp->ColoriseRow(row,wxColour(248,240,130));
} else
{
g->grp->ColoriseRow(row,wxColour(224,255,224));
g->GetTable()->SetRowLabelValue(row,wxEmptyString);
}
row++;
continue;
} if (p<pos) {
// end level
// leveltime ñîäåðæèò âðåìÿ ñóìàððíîå âðåìÿ ðàáîòû óçëîâ ýòîãî óðîâíÿ
transfer=leveltime;
return row;
} if (p>pos) {
// nested level
//g->SetRowGroup(row-1);
wxString s;
int newrow=recurse(g,p,row,transfer);
//
//leveltime=leveltime+transfer;
//GroupRows *u=g->getgroup();
g->grp->AddGroup(row-1,newrow-1,lastnode-transfer);
s << (lastnode-transfer) ;
s=s+wxT("-");
g->GetTable()->SetRowLabelValue(row-1,s);
row=newrow;
}
}
return row;
}
void ctlSQLGrid::SetRowGroup(int row) { };
bool ctlSQLGrid::FullArrayCollapseRowsPlan()
{
//wxString colKey = wxString::Format(wxT("%d:"), col) + GetColLabelValue(col);
wxString text;
//for(int row = 0; row < GetNumberRows(); ++row)
if (grp) { delete grp;}
grp = new GroupRows(this);
double transfersum=0;
int r= recurse(this,0,0,transfersum);
grp->CalcTime();
//for(int row = 0; row < GetNumberRows(); ++row) {
// text = GetCellValue(row, 0);
// //if (row%2==0) SetRowAttr(row,pAttr);
//}
return true;
}

View file

@ -111,6 +111,7 @@ int ctlSQLResult::Execute(const wxString &query, int resultToRetrieve, wxWindow
{
wxGridTableMessage *msg;
sqlResultTable *table = (sqlResultTable *)GetTable();
msg = new wxGridTableMessage(table, wxGRIDTABLE_NOTIFY_ROWS_DELETED, 0, GetNumberRows());
ProcessTableMessage(*msg);
delete msg;
@ -177,6 +178,8 @@ void ctlSQLResult::DisplayData(bool single)
*/
wxGridTableMessage *msg;
sqlResultTable *table = (sqlResultTable *)GetTable();
msg = new wxGridTableMessage(table, wxGRIDTABLE_NOTIFY_ROWS_DELETED, 0, GetNumberRows());
ProcessTableMessage(*msg);
delete msg;
@ -190,10 +193,13 @@ void ctlSQLResult::DisplayData(bool single)
ProcessTableMessage(*msg);
delete msg;
if (NumRows()<1000) {
wxGridCellAttr* pAttr = new wxGridCellAttr;
pAttr->SetBackgroundColour(wxColour(224,255,224));
for(int row = 0; row < NumRows(); ++row) {
if (row%2==0) SetRowAttr(row,pAttr);
if (row%2==0) {
wxGridCellAttr* pAttr = new wxGridCellAttr;
pAttr->SetBackgroundColour(wxColour(224,255,224));
SetRowAttr(row,pAttr);
}
}
}
if (single)
@ -201,6 +207,12 @@ void ctlSQLResult::DisplayData(bool single)
colNames.Add(thread->DataSet()->ColName(0));
colTypes.Add(wxT(""));
colTypClasses.Add(0L);
wxString c=thread->DataSet()->ColName(0);
if (c==wxT("QUERY PLAN")) {
//
isplan=true;
FullArrayCollapseRowsPlan();
}
AutoSizeColumn(0, false, false);
}
@ -215,7 +227,6 @@ void ctlSQLResult::DisplayData(bool single)
colNames.Add(thread->DataSet()->ColName(col));
colTypes.Add(thread->DataSet()->ColFullType(col));
colTypClasses.Add(thread->DataSet()->ColTypClass(col));
if (thread->DataSet()->ColTypClass(col) == PGTYPCLASS_NUMERIC)
{
/*

View file

@ -63,7 +63,7 @@ wxTreeItemId ctlTree::FindItem(const wxTreeItemId &idParent, const wxString &pre
( ( GetItemText(id) == wxT("Dummy") && !GetItemData(id) ) ||
!( (!full&&GetItemText(id).Lower().StartsWith(prefix)) ||
(full && //GetItemText(id).Lower().StartsWith(prefix) && GetItemText(id).length()==le)
GetObject(id)->GetName()==prefix )
GetObject(id)!=NULL&&GetObject(id)->GetName()==prefix )
)
))
{
@ -116,7 +116,7 @@ wxTreeItemId ctlTree::FindItem(const wxTreeItemId &idParent, const wxString &pre
(( GetItemText(id) == wxT("Dummy") && !GetItemData(id) ) ||
!((!full&&GetItemText(id).Lower().StartsWith(prefix)) ||
(full && //GetItemText(id).Lower().StartsWith(prefix) && GetItemText(id).length()==le)
GetObject(id)->GetName()==prefix )
GetObject(id)!=NULL&&GetObject(id)->GetName()==prefix )
)
))
{

View file

@ -340,8 +340,12 @@ int dlgFunction::Go(bool modal)
}
txtArguments->SetValue(function->GetArgListWithNames());
if (!isProcedure)
{
cbReturntype->Append(function->GetReturnType());
cbReturntype->SetValue(function->GetReturnType());
cbReturntype->SetSelection(0);
//cbReturntype->SetValue(function->GetReturnType());
}
cbLanguage->SetValue(function->GetLanguage());
cbVolatility->SetValue(function->GetVolatility());

View file

@ -258,7 +258,13 @@ wxString textEscapeXml(wxString &text)
wxString xmltext=wxEmptyString;
for ( i = text.begin(); i != text.end(); ++i )
{
switch (*i) {
#if wxCHECK_VERSION(3, 0, 0)
char c=*i;
switch (c)
#else
switch (*i)
#endif
{
case '&': xmltext+= wxT("&amp;"); break;
case '\'': xmltext+= wxT("&apos;"); break;
case '"': xmltext+= wxT("&quot;"); break;

View file

@ -15,6 +15,7 @@
// wxWindows headers
#include <wx/grid.h>
class GroupRows;
class ctlSQLGrid : public wxGrid
{
@ -34,20 +35,23 @@ public:
virtual bool CheckRowPresent(int row)
{
return true;
}
};
wxSize GetBestSize(int row, int col);
void OnLabelDoubleClick(wxGridEvent &event);
void OnLabelClick(wxGridEvent &event);
void OnCellRightClick(wxGridEvent &event);
bool FullArrayCollapseRowsPlan();
void AutoSizeColumn(int col, bool setAsMin = false, bool doLimit = true);
void AutoSizeColumns(bool setAsMin);
wxString GetRowLabelValue( int row );
void SetRowGroup(int row);
GroupRows *grp;
WX_DECLARE_STRING_HASH_MAP( int, ColKeySizeHashMap );
DECLARE_DYNAMIC_CLASS(ctlSQLGrid)
DECLARE_EVENT_TABLE()
private:
void OnCopy(wxCommandEvent &event);
void OnMouseWheel(wxMouseEvent &event);
@ -61,6 +65,115 @@ private:
ColKeySizeHashMap colSizes;
// Max size for each column
wxArrayInt colMaxSizes;
};
class GroupRows
{
public:
GroupRows( ctlSQLGrid *grid) {
g=grid;
rowsGroup.Clear();
rowsGroup.Add(0,g->GetNumberRows());
end.Clear();
end.Add(-1,g->GetNumberRows());
run.Clear();
run.Add(0.0,g->GetNumberRows());
};
void AddGroup( int rowgroup, int lastrowgroup, double actualtime) {
// default group open
rowsGroup[rowgroup]=-rowgroup;
//beg[rowgroup]=rowgroup;
wxASSERT(lastrowgroup>end.Count()," out of bounds");
end[rowgroup]=lastrowgroup;
run[rowgroup]=actualtime;
};
void VisibleGroup(int row, bool visible) {
int endg=end[row];
int grp=IsGroupRow(row);
int gg;
int r=row+1;
if (grp!=0) {
if (!visible) {
// hide group
rowsGroup[row]*=-1;
for(int i=r;i<(endg+1);i++) {
g->HideRow(i);
}
wxGridCellAttr* pAttrg = new wxGridCellAttr;
pAttrg->SetBackgroundColour(wxColour(200,191,232));
g->SetRowAttr(row,pAttrg);
} else
{
// show group
rowsGroup[row]*=-1;
int sizerow=g->GetDefaultRowSize();
//pAttr->SetBackgroundColour(wxColour(0,162,232));
wxGridCellAttr* pAttrg = new wxGridCellAttr;
pAttrg->SetBackgroundColour(wxColour(248,240,130));
g->SetRowAttr(row,pAttrg);
for(int i=r;i<(endg+1);i++) {
gg=IsGroupRow(i);
if (gg<=0) {
g->SetRowSize(i,sizerow);
}
else
{
g->SetRowSize(i,sizerow);
i=end[i];
}
}
}
}
};
// 0 - no group, -int - open group ,+int - close gruop
int IsGroupRow(int row) {
if (end[row]!=-1) {
// is group
return rowsGroup[row];
} else return 0;
};
void ColoriseRow(int row,const wxColour& color) {
//g->GetTable()->SetRowLabelValue(row-1,s);
wxGridCellAttr* pAttr = new wxGridCellAttr;
pAttr->SetBackgroundColour(color);
g->SetRowAttr(row,pAttr);
};
void CalcTime() {
//g->GetTable()->SetRowLabelValue(row-1,s);
double sum=0;
double total=1;
for(int i=0;i<run.Count();i++) {
double t=run[i];
if (i==0) {
total=abs(t);
g->GetTable()->SetRowLabelValue(i,"100");
} else
{
wxString str;
if (total==0||t==0) {
str="";
} else
{
t=(t/total)*100;
str.Printf(wxT("%5.2f"), t);
}
g->GetTable()->SetRowLabelValue(i,str);
}
}
};
private:
ctlSQLGrid *g;
wxArrayInt rowsGroup, end;
wxArrayDouble run;
};
class CursorCellRenderer : public wxGridCellStringRenderer

View file

@ -77,9 +77,10 @@ private:
pgQueryThread *thread;
pgConn *conn;
bool rowcountSuppressed;
bool isplan;
};
class sqlResultTable : public wxGridTableBase
class sqlResultTable : public wxGridStringTable//wxGridTableBase
{
public:
sqlResultTable();

View file

@ -284,7 +284,7 @@ void pgproJob::ShowStatistics(frmMain *form, ctlListView *statistics)
if (wxDTend.IsEmpty()) wxDTend=DateToAnsiStr(wxDateTime::Now());
sql=wxT("select log_time,detail critical,message,application_name from pg_log l where l.log_time>'") + DateToAnsiStr(GetStarted())+
wxT("'::timestamp - interval '1min' and l.log_time<='")+ wxDTend +
wxT("'::timestamp and hint='")+GetTryName()+wxT("'");
wxT("'::timestamp + interval '1min' and hint='")+GetTryName()+wxT("'");
pgSet *stats = GetConnection()->ExecuteSet(sql);
wxString critical;

View file

@ -142,7 +142,7 @@
<cols>1</cols>
<vgap>5</vgap>
<hgap>5</hgap>
<growablerows>0,1,2</growablerows>
<growablerows>0</growablerows>
<growablecols>0</growablecols>
<object class="sizeritem">
<object class="wxPanel" name="pnlDefinitionComposite">

View file

@ -196,7 +196,6 @@
<vgap>2</vgap>
<hgap>1</hgap>
<growablecols>1</growablecols>
<growablerows>1</growablerows>
</object>
</object>
<object class="sizeritem">
@ -253,7 +252,6 @@
<flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
<border>4</border>
</object>
<growablerows>3</growablerows>
</object>
</object>
</object>

13
ui/embed-xrc_v3.bat Normal file
View file

@ -0,0 +1,13 @@
@echo off
REM #######################################################################
REM #
REM # pgAdmin III - PostgreSQL Tools
REM # Copyright (C) 2002 - 2016, The pgAdmin Development Team
REM # This software is released under the PostgreSQL Licence
REM #
REM # embed-xrc.bat - convert xrc files to c++ files
REM #
REM #######################################################################
"D:\PostgreSQL\pgadmin3\pgadmin\Debug_(3.0)\wxrc.exe" -c -o xrcDialogs.cpp *.xrc

File diff suppressed because it is too large Load diff