multicolumns sort query result, vacuum opt

Add multicolumns sort
Vacuum opt and reindex opt
This commit is contained in:
levinsv 2020-04-11 20:55:49 +05:00
parent 4e01ba92c4
commit ae8ca667e7
10 changed files with 478 additions and 125 deletions

View file

@ -70,9 +70,12 @@ This text Russian language.
10.09.2019 10.09.2019
Окно Server Status Окно Server Status
* иправлено падение окна Server Status при аварийном завершении СУБД
* исправлено падение окна Server Status при аварийном завершении СУБД
- добавлена расцветка процессов которые блокируют другие процессы - добавлена расцветка процессов которые блокируют другие процессы
Окно Query Окно Query
- добавлен фильтр в окно результатов запроса. Активируется двойным щелчком мыши по ячейке, текст которой и будет являтся условием фильтра. Снимается из контекстного меню. - добавлен фильтр в окно результатов запроса. Активируется двойным щелчком мыши по ячейке, текст которой и будет являтся условием фильтра. Снимается из контекстного меню.
При нажатом Alt условие отбора инвертируется (Скрыть строки содержащие значение). При нажатом Alt условие отбора инвертируется (Скрыть строки содержащие значение).
- Для избегания ожиданий при получении информации об объектах. Выставляется клиентский параметр SET lock_timeout=15000 для служебного соединения. - Для избегания ожиданий при получении информации об объектах. Выставляется клиентский параметр SET lock_timeout=15000 для служебного соединения.
@ -95,6 +98,20 @@ This text Russian language.
- добавлен вывод CREATE STATISTICS для таблиц - добавлен вывод CREATE STATISTICS для таблиц
* исправлен вывод SQL команды для создания задания для комманд заданных в виде массива * исправлен вывод SQL команды для создания задания для комманд заданных в виде массива
28.03.2020
- добавлена информация о фрагментации таблицы (cfs_fragmentation)
* убрано предупреждение о версии сервера
11.04.2020
- добавлена многоколоночная сортировка результатов выполнения запроса. Порядок сортировки колонок и направление отмечается цветными индикаторами (RED,YELLOW,GREEN,BLUE,GREY).
Максимальное число колонок сортировки 5. Для выполнения сортировки нужно щелкнуть по заголовку колонки удерживая клавишу Alt.
- добавлены новые опции для Vaccum ( DISABLE_PAGE_SKIPPING ) и Reindex ( CONCURRENTLY )
* ускорена работа фильтра в окне результав запроса.

Binary file not shown.

View file

@ -20,7 +20,7 @@
#include "utils/sysSettings.h" #include "utils/sysSettings.h"
#include "frm/frmExport.h" #include "frm/frmExport.h"
#include <wx/regex.h> #include <wx/regex.h>
#include "ctl/ctlSQLResult.h"
#define EXTRAEXTENT_HEIGHT 6 #define EXTRAEXTENT_HEIGHT 6
#define EXTRAEXTENT_WIDTH 6 #define EXTRAEXTENT_WIDTH 6
@ -56,10 +56,94 @@ ctlSQLGrid::ctlSQLGrid(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
SetDefaultCellOverflow(false); SetDefaultCellOverflow(false);
//SetDefaultRenderer(new wxGridCellAutoWrapStringRenderer); //SetDefaultRenderer(new wxGridCellAutoWrapStringRenderer);
SetDefaultRenderer(new CursorCellRenderer); SetDefaultRenderer(new CursorCellRenderer);
//SetUseNativeColLabels(true);
//UseNativeColHeader(true);
grp=NULL; grp=NULL;
Connect(wxID_ANY, wxEVT_GRID_LABEL_LEFT_DCLICK, wxGridEventHandler(ctlSQLGrid::OnLabelDoubleClick)); Connect(wxID_ANY, wxEVT_GRID_LABEL_LEFT_DCLICK, wxGridEventHandler(ctlSQLGrid::OnLabelDoubleClick));
}
#include "wx/renderer.h"
#include "wx/headerctrl.h"
void ctlSQLGrid::DrawColLabel( wxDC& dc, int col ) {
wxGrid::DrawColLabel(dc,col);
int colLeft = GetColLeft(col);
wxRect rect(colLeft, 0, GetColWidth(col), m_colLabelHeight);
sqlResultTable *t=(sqlResultTable *)GetTable();
wxHeaderSortIconType sortArrow=t->getSortColumn(col)!=0
? t->getSortColumn(col)>0
? wxHDR_SORT_ICON_UP
: wxHDR_SORT_ICON_DOWN
: wxHDR_SORT_ICON_NONE;
if (sortArrow != wxHDR_SORT_ICON_NONE )
{
wxRect ar = rect;
// make a rect for the arrow
ar.height = 4;
ar.width = 8;
ar.y += (rect.height - ar.height)/2;
ar.x = ar.x + rect.width - 3*ar.width/2;
int arrowSpace = 0;
arrowSpace = 3*ar.width/2; // space to preserve when drawing the label
wxPoint triPt[3];
if ( sortArrow & wxHDR_SORT_ICON_UP )
{
triPt[0].x = ar.width / 2;
triPt[0].y = 0;
triPt[1].x = ar.width;
triPt[1].y = ar.height;
triPt[2].x = 0;
triPt[2].y = ar.height;
}
else
{
triPt[0].x = 0;
triPt[0].y = 0;
triPt[1].x = ar.width;
triPt[1].y = 0;
triPt[2].x = ar.width / 2;
triPt[2].y = ar.height;
}
wxColour c;
c = wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW);
for (int k=0;k<MAX_COL_SORT;k++) {
int cl=t->colsortnumber[k];
if (cl!=-1) {
if (cl==col) {
if (k==0) c=wxColor(155,17,48); // red
if (k==1) c=wxColor(255,255,0); // yellow
if (k==2) c=wxColor(34,199,76); // green
if (k==3) c=wxColor(12,38,160); // blue
}
} else break;
}
wxDCPenChanger setPen(dc, c);
wxDCBrushChanger setBrush(dc, c);
wxDCClipper clip(dc, rect);
dc.DrawPolygon( 3, triPt, ar.x, ar.y);
}
//wxRendererNative::Get().DrawHeaderButton
// (m_colWindow,
// //GetColLabelWindow(),
// dc,
// rect,
// 0,
// IsSortingBy(col)
// ? IsSortOrderAscending()
// ? wxHDR_SORT_ICON_UP
// : wxHDR_SORT_ICON_DOWN
// : wxHDR_SORT_ICON_NONE
// );
} }
void ctlSQLGrid::OnGridColSize(wxGridSizeEvent &event) void ctlSQLGrid::OnGridColSize(wxGridSizeEvent &event)
{ {
@ -429,8 +513,15 @@ void ctlSQLGrid::OnLabelClick(wxGridEvent &event)
grp->VisibleGroup(row,GetRowSize(row+1)==0); grp->VisibleGroup(row,GetRowSize(row+1)==0);
return; return;
} }
if ( col >= 0 && (event.AltDown() ) )
{
// continue for sort event
sqlResultTable *t=(sqlResultTable *)GetTable();
t->setSortColumn(col);
return;
}
// add support for (de)selecting multiple rows and cols with Control pressed // add support for (de)selecting multiple rows and cols with Control pressed
if ( row >= 0 && (event.ControlDown() || event.CmdDown()) ) else if ( row >= 0 && (event.ControlDown() || event.CmdDown()) )
{ {
if (GetSelectedRows().Index(row) == wxNOT_FOUND) if (GetSelectedRows().Index(row) == wxNOT_FOUND)
SelectRow(row, true); SelectRow(row, true);
@ -443,6 +534,7 @@ void ctlSQLGrid::OnLabelClick(wxGridEvent &event)
SelectCol(col, true); SelectCol(col, true);
else else
DeselectCol(col); DeselectCol(col);
event.Skip();
} }
else else
event.Skip(); event.Skip();

View file

@ -30,11 +30,12 @@ ctlSQLResult::ctlSQLResult(wxWindow *parent, pgConn *_conn, wxWindowID id, const
thread = NULL; thread = NULL;
SetTable(new sqlResultTable(), true); SetTable(new sqlResultTable(), true);
EnableEditing(false); EnableEditing(false);
SetSizer(new wxBoxSizer(wxVERTICAL)); SetSizer(new wxBoxSizer(wxVERTICAL));
cg=GetGridLineColour(); cg=GetGridLineColour();
Connect(wxID_ANY, wxEVT_GRID_RANGE_SELECT, wxGridRangeSelectEventHandler(ctlSQLResult::OnGridSelect)); Connect(wxID_ANY, wxEVT_GRID_RANGE_SELECT, wxGridRangeSelectEventHandler(ctlSQLResult::OnGridSelect));
Connect(wxID_ANY, wxEVT_GRID_COL_SORT, wxGridEventHandler(ctlSQLResult::OnGridColSort));
} }
@ -179,7 +180,6 @@ void ctlSQLResult::DisplayData(bool single)
*/ */
wxGridTableMessage *msg; wxGridTableMessage *msg;
sqlResultTable *table = (sqlResultTable *)GetTable(); sqlResultTable *table = (sqlResultTable *)GetTable();
msg = new wxGridTableMessage(table, wxGRIDTABLE_NOTIFY_ROWS_DELETED, 0, GetNumberRows()); msg = new wxGridTableMessage(table, wxGRIDTABLE_NOTIFY_ROWS_DELETED, 0, GetNumberRows());
ProcessTableMessage(*msg); ProcessTableMessage(*msg);
@ -193,6 +193,7 @@ void ctlSQLResult::DisplayData(bool single)
msg = new wxGridTableMessage(table, wxGRIDTABLE_NOTIFY_COLS_APPENDED, thread->DataSet()->NumCols()); msg = new wxGridTableMessage(table, wxGRIDTABLE_NOTIFY_COLS_APPENDED, thread->DataSet()->NumCols());
ProcessTableMessage(*msg); ProcessTableMessage(*msg);
delete msg; delete msg;
table->initSort();
if (NumRows()<1000) { if (NumRows()<1000) {
for(int row = 0; row < NumRows(); ++row) { for(int row = 0; row < NumRows(); ++row) {
if (row%2==0) { if (row%2==0) {
@ -318,14 +319,17 @@ wxString ctlSQLResult::OnGetItemText(long item, long col) const
} }
if (item >= 0) if (item >= 0)
{ {
thread->DataSet()->Locate(item + 1); //thread->DataSet()->Locate(item + 1);
return thread->DataSet()->GetVal(col); //return thread->DataSet()->GetVal(col);
sqlResultTable *t=(sqlResultTable *)GetTable();
return t->GetValueFast(item,col);
} }
else else
return thread->DataSet()->ColName(col); return thread->DataSet()->ColName(col);
} }
return wxEmptyString; return wxEmptyString;
} }
wxString ctlSQLResult::SummaryColumn() wxString ctlSQLResult::SummaryColumn()
{ {
//ce=cells.Item(0); //ce=cells.Item(0);
@ -404,6 +408,11 @@ wxString ctlSQLResult::SummaryColumn()
result.Printf(wxT("%f"), sum); result.Printf(wxT("%f"), sum);
return result; return result;
} }
void ctlSQLResult::OnGridColSort(wxGridEvent& event)
{
const int col = event.GetCol();
//m_table->Sort(col, !(m_grid->IsSortingBy(col) && m_grid->IsSortOrderAscending()));
}
void ctlSQLResult::OnGridSelect(wxGridRangeSelectEvent &event) void ctlSQLResult::OnGridSelect(wxGridRangeSelectEvent &event)
{ {
@ -413,7 +422,7 @@ void ctlSQLResult::ClearFilter()
{ {
size_t numRows = GetNumberRows(); size_t numRows = GetNumberRows();
int sizerow=GetDefaultRowSize(); int sizerow=GetDefaultRowSize();
for (int i = 0 ; i < numRows; i++) for (size_t i = 0 ; i < numRows; i++)
{ {
if (GetRowSize(i)>0) continue; if (GetRowSize(i)>0) continue;
//SetRowSize(i,sizerow); //SetRowSize(i,sizerow);
@ -424,18 +433,23 @@ void ctlSQLResult::ClearFilter()
} }
wxString ctlSQLResult::SetFilter(int row,int col,bool reverse) wxString ctlSQLResult::SetFilter(int row,int col,bool reverse)
{ {
wxString fltval=GetCellValue(row,col); wxString result=wxEmptyString;
sqlResultTable *t=(sqlResultTable *)GetTable();
if (!(thread && thread->DataValid())) {result.Printf(wxT("Error thread not valid"));return result; }
//wxString fltval=GetCellValue(row,col);
wxString fltval=t->GetValueFast(row,col);
wxString text; wxString text;
bool eq; bool eq;
size_t numRows = GetNumberRows(); size_t numRows = GetNumberRows();
int all=0,show=0,hide=0; int all=0,show=0,hide=0;
for (int i = 0 ; i < numRows; i++) for (size_t i = 0 ; i < numRows; i++)
{ {
//str.Append(GetExportLine(i, cols)); //str.Append(GetExportLine(i, cols));
//SetRowSize(i,sizerow); //SetRowSize(i,sizerow);
if (GetRowSize(i)==0) continue; if (GetRowSize(i)==0) continue;
eq=(fltval==GetCellValue(i, col));
eq=(fltval==t->GetValueFast(i,col));
if (reverse) eq=!eq; if (reverse) eq=!eq;
if (!eq) { if (!eq) {
HideRow(i); HideRow(i);
@ -445,18 +459,173 @@ wxString ctlSQLResult::SetFilter(int row,int col,bool reverse)
} }
SetGridLineColour(wxColor(0,0,255)); SetGridLineColour(wxColor(0,0,255));
wxString result;
result.Printf(wxT("Show rows:%d hide:%d all:%d"), show,hide,all); result.Printf(wxT("Show rows:%d hide:%d all:%d"), show,hide,all);
return result; return result;
} }
#include <map>
int sqlResultTable::sortColumns()
{
bool no_sort=colsortnumber[0]==-1;
if (!maplines) {
maplines = new int[GetNumberRows()];
for(int i=0;i<GetNumberRows();i++) maplines[i]=i;
}
if (no_sort) {
for(int i=0;i<GetNumberRows();i++) maplines[i]=i;
use_map=true;
return 0;
}
use_map=false;
int *cols[MAX_COL_SORT];
for (int i=0;i<MAX_COL_SORT;i++) cols[i]=NULL;
int col;
for (int k=0;k<MAX_COL_SORT;k++) {
col=colsortnumber[k];
if (col!=-1) {
if (thread && thread->DataSet()->ColTypClass(col) == PGTYPCLASS_NUMERIC)
{
//sort numeric column
std::multimap<double, int> mp;
double d;
for (int i=0;i<GetNumberRows();i++) {
thread->DataSet()->Locate(i+1);
d=thread->DataSet()->GetDouble(col);
mp.insert(std::pair<double, int>(d, i));
}
std::multimap<double, int>::iterator it = mp.begin();
double prev;
int row;
int minval=0;
cols[k] = new int[GetNumberRows()];
for (int i = 0; it != mp.end(); it++, i++) { // âûâîäèì èõ
row=it->second; // row
if (i>0) if (prev!=it->first) minval++;
cols[k][row]=minval;
prev=it->first;
}
} else {
//no numeric sort as string
std::multimap<wxString, int> mp;
wxString s;
for (int i=0;i<GetNumberRows();i++) {
thread->DataSet()->Locate(i+1);
s=thread->DataSet()->GetVal(col);
mp.insert(std::pair<wxString, int>(s, i));
}
std::multimap<wxString, int>::iterator it = mp.begin();
wxString prev;
int row;
int minval=0;
cols[k] = new int[GetNumberRows()];
for (int i = 0; it != mp.end(); it++, i++) {
row=it->second; // row
if (i>0) if (prev!=it->first) minval++;
cols[k][row]=minval;
prev=it->first;
}
}
} else break;
}
class sorter {
int **cols;
sqlResultTable *m;
public:
sorter(int *_cols[], sqlResultTable *my_obj) { cols=_cols;m=my_obj;}
bool operator() (int i,int j) {
bool rez=true;
int a;
int b;
int col,ord;
for (int k=0;k<MAX_COL_SORT;k++) {
col=m->colsortnumber[k];
if (col!=-1) {
ord=m->colorder[col];
if (ord==0) continue;
a=cols[k][i];
b=cols[k][j];
if (a!=b) {
rez=a<b;
} else
{
rez=false;
continue;
}
if (ord==-1) rez=!rez;
}
break;
}
return rez;
}
};
std::sort(maplines,maplines+GetNumberRows(),sorter(cols,this));
for (int i=0;i<MAX_COL_SORT;i++) if (cols[i]!=NULL) delete cols[i];
use_map=true;
return 0;
}
int sqlResultTable::getSortColumn(int col)
{
return colorder[col];
}
int sqlResultTable::setSortColumn(int col)
{
if (col<GetNumberCols()) {
if (colorder[col]==0) colorder[col]=1;
else if (colorder[col]==1) colorder[col]=-1;
else if (colorder[col]==-1) colorder[col]=0; // no sort
int pos=-1,poszero=-1;
for (int i=0;i<MAX_COL_SORT;i++) if (colsortnumber[i]==col) {pos=i; break;}
else if (colsortnumber[i]==-1) { poszero=i; break;}
if (pos==-1 && poszero==-1) { colorder[col]=0; return 0;} // limit sort columns
if (pos==-1 && poszero!=-1) colsortnumber[poszero]=col; // add sort column
if (colorder[col]==0 && pos!=-1) {
// shift array (remove sort for column)
for (int i=pos;i<MAX_COL_SORT-1;i++) colsortnumber[i]=colsortnumber[i+1];
colsortnumber[MAX_COL_SORT-1]=-1;
}
sortColumns();
return colorder[col];
}
return 0;
}
int sqlResultTable::initSort()
{
if (colorder) delete [] colorder;
if (maplines) delete [] maplines;
maplines=NULL;
colorder = new int[GetNumberCols()];
for (int i=0;i<GetNumberCols();i++) colorder[i]=0;
for (int i=0;i<MAX_COL_SORT;i++) colsortnumber[i]=-1;
//maplines = new int[GetNumberRows()];
use_map=false;
return 0;
}
wxString sqlResultTable::GetValueFast(int row, int col)
{
wxString s;
if (thread && thread->DataValid())
{
if (col >= 0)
{
if (use_map) row=maplines[row];
thread->DataSet()->Locate(row + 1);
wxString s = thread->DataSet()->GetVal(col);
return s;
}
}
return "";
}
wxString sqlResultTable::GetValue(int row, int col) wxString sqlResultTable::GetValue(int row, int col)
{ {
if (thread && thread->DataValid()) if (thread && thread->DataValid())
{ {
if (col >= 0) if (col >= 0)
{ {
if (use_map) row=maplines[row];
thread->DataSet()->Locate(row + 1); thread->DataSet()->Locate(row + 1);
if (settings->GetIndicateNull() && thread->DataSet()->IsNull(col)) if (settings->GetIndicateNull() && thread->DataSet()->IsNull(col))
return wxT("<NULL>"); return wxT("<NULL>");
@ -508,6 +677,8 @@ wxString sqlResultTable::GetValue(int row, int col)
sqlResultTable::sqlResultTable() sqlResultTable::sqlResultTable()
{ {
thread = NULL; thread = NULL;
colorder=NULL;
maplines=NULL;
} }
int sqlResultTable::GetNumberRows() int sqlResultTable::GetNumberRows()

View file

@ -38,6 +38,9 @@ END_EVENT_TABLE()
#define chkFreeze CTRL_CHECKBOX("chkFreeze") #define chkFreeze CTRL_CHECKBOX("chkFreeze")
#define chkAnalyze CTRL_CHECKBOX("chkAnalyze") #define chkAnalyze CTRL_CHECKBOX("chkAnalyze")
#define chkVerbose CTRL_CHECKBOX("chkVerbose") #define chkVerbose CTRL_CHECKBOX("chkVerbose")
#define chkDISABLE_PAGE_SKIPPING CTRL_CHECKBOX("chkDISABLE_PAGE_SKIPPING")
#define chkCONCURRENTLY CTRL_CHECKBOX("chkCONCURRENTLY")
#define stBitmap CTRL("stBitmap", wxStaticBitmap) #define stBitmap CTRL("stBitmap", wxStaticBitmap)
@ -109,10 +112,13 @@ void frmMaintenance::OnAction(wxCommandEvent &ev)
chkFull->Enable(isVacuum); chkFull->Enable(isVacuum);
chkFreeze->Enable(isVacuum); chkFreeze->Enable(isVacuum);
chkAnalyze->Enable(isVacuum); chkAnalyze->Enable(isVacuum);
chkDISABLE_PAGE_SKIPPING->Enable(isVacuum && conn->BackendMinimumVersion(10, 0));
bool isReindex = (rbxAction->GetSelection() == 2); bool isReindex = (rbxAction->GetSelection() == 2);
chkCONCURRENTLY->Enable(isReindex && conn->BackendMinimumVersion(12, 0));
bool isCluster = (rbxAction->GetSelection() == 3); bool isCluster = (rbxAction->GetSelection() == 3);
if (isReindex || (isCluster && !conn->BackendMinimumVersion(8, 4))) if ((isCluster && !conn->BackendMinimumVersion(8, 4)))
{ {
chkVerbose->SetValue(false); chkVerbose->SetValue(false);
chkVerbose->Enable(false); chkVerbose->Enable(false);
@ -142,16 +148,18 @@ wxString frmMaintenance::GetSql()
return wxEmptyString; return wxEmptyString;
} }
sql = wxT("VACUUM "); sql = wxT("VACUUM ");
wxString opt = "";
if (chkFull->GetValue()) if (chkFull->GetValue())
sql += wxT("FULL "); AppendIfFilled(opt,",",wxT("FULL"));
if (chkFreeze->GetValue()) if (chkFreeze->GetValue())
sql += wxT("FREEZE "); AppendIfFilled(opt,",",wxT("FREEZE"));
if (chkVerbose->GetValue()) if (chkVerbose->GetValue())
sql += wxT("VERBOSE "); AppendIfFilled(opt,",",wxT("VERBOSE"));
if (chkAnalyze->GetValue()) if (chkAnalyze->GetValue())
sql += wxT("ANALYZE "); AppendIfFilled(opt,",",wxT("ANALYZE"));
if (chkDISABLE_PAGE_SKIPPING->GetValue())
AppendIfFilled(opt,",",wxT("DISABLE_PAGE_SKIPPING"));
sql += opt.IsNull() ? "" : "("+opt.Mid(1)+")";
if (object->GetMetaType() != PGM_DATABASE) if (object->GetMetaType() != PGM_DATABASE)
sql += object->GetQuotedFullIdentifier(); sql += object->GetQuotedFullIdentifier();
@ -170,14 +178,20 @@ wxString frmMaintenance::GetSql()
} }
case 2: case 2:
{ {
sql = wxT("REINDEX ");
if (chkVerbose->GetValue())
sql += wxT("(VERBOSE) ");
if (object->GetMetaType() == PGM_UNIQUE || object->GetMetaType() == PGM_PRIMARYKEY) if (object->GetMetaType() == PGM_UNIQUE || object->GetMetaType() == PGM_PRIMARYKEY)
{ {
sql = wxT("REINDEX INDEX ") + object->GetQuotedFullIdentifier(); sql += wxT("INDEX ") + chkCONCURRENTLY->GetValue() ? "CONCURRENTLY ": "";
sql += object->GetQuotedFullIdentifier();
} }
else // Database, Tables, and Index (but not Constraintes ones) else // Database, Tables, and Index (but not Constraintes ones)
{ {
sql = wxT("REINDEX ") + object->GetTypeName().Upper() sql += object->GetTypeName().Upper();
+ wxT(" ") + object->GetQuotedFullIdentifier(); sql += chkCONCURRENTLY->GetValue() ? " CONCURRENTLY ": " ";
sql += object->GetQuotedFullIdentifier();
} }
break; break;
} }

View file

@ -56,6 +56,7 @@ private:
void OnCopy(wxCommandEvent &event); void OnCopy(wxCommandEvent &event);
void OnMouseWheel(wxMouseEvent &event); void OnMouseWheel(wxMouseEvent &event);
void OnGridColSize(wxGridSizeEvent &event); void OnGridColSize(wxGridSizeEvent &event);
void DrawColLabel( wxDC& dc, int col );
wxString GetColumnName(int colNum); wxString GetColumnName(int colNum);
wxString GetColKeyValue(int col); wxString GetColKeyValue(int col);
void AppendColumnHeader(wxString &str, int start, int end); void AppendColumnHeader(wxString &str, int start, int end);

View file

@ -69,6 +69,7 @@ public:
void SetMaxRows(int rows); void SetMaxRows(int rows);
void ResultsFinished(); void ResultsFinished();
void OnGridSelect(wxGridRangeSelectEvent &event); void OnGridSelect(wxGridRangeSelectEvent &event);
void OnGridColSort(wxGridEvent& event);
wxString SetFilter(int row,int col,bool reverse); wxString SetFilter(int row,int col,bool reverse);
wxArrayString colNames; wxArrayString colNames;
@ -86,10 +87,20 @@ class sqlResultTable : public wxGridStringTable//wxGridTableBase
public: public:
sqlResultTable(); sqlResultTable();
wxString GetValue(int row, int col); wxString GetValue(int row, int col);
wxString GetValueFast(int row, int col);
wxString GetRowLabelValue( int row ) ; wxString GetRowLabelValue( int row ) ;
int GetNumberRows(); int GetNumberRows();
int GetNumberCols(); int GetNumberCols();
bool isplan; bool isplan;
bool use_map; // use maplines for GetValue
int *maplines; // maplines[visible_row]=real_row
int *colorder; // array order type -1 desc , 0 no sort, 1 asc
#define MAX_COL_SORT 5
int colsortnumber[MAX_COL_SORT];
int sortColumns(); //
int setSortColumn(int col); // set order for column (cycle change value -1,0,1)
int getSortColumn(int col);
int initSort(); // allocate memory
bool IsEmptyCell(int row, int col) bool IsEmptyCell(int row, int col)
{ {
return false; return false;

View file

@ -13,7 +13,7 @@
#define VERSION_H #define VERSION_H
// Application Versions // Application Versions
#define VERSION_STR wxT("1.25.0 Dev ASUTP version with support PG11") #define VERSION_STR wxT("1.25.0 Dev ASUTP version with support PG12")
#define VERSION_NUM 1,25,0,0 #define VERSION_NUM 1,25,0,0
#define VERSION_PACKAGE 1.25.0-dev #define VERSION_PACKAGE 1.25.0-dev

View file

@ -37,7 +37,7 @@
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticBoxSizer"> <object class="wxStaticBoxSizer">
<label>VACUUM options</label> <label>VACUUM options</label>
<cols>3</cols> <cols>5</cols>
<vgap>5</vgap> <vgap>5</vgap>
<hgap>5</hgap> <hgap>5</hgap>
<growablecols>0</growablecols> <growablecols>0</growablecols>
@ -63,6 +63,20 @@
<flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag> <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
<border>4</border> <border>4</border>
</object> </object>
<object class="sizeritem">
<object class="wxCheckBox" name="chkDISABLE_PAGE_SKIPPING">
<label>DISABLE_PAGE_SKIPPING</label>
</object>
<flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
<border>4</border>
</object>
<object class="sizeritem">
<object class="wxCheckBox" name="chkCONCURRENTLY">
<label>CONCURRENTLY</label>
</object>
<flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
<border>4</border>
</object>
</object> </object>
<flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag> <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
<border>4</border> <border>4</border>

View file

@ -35378,7 +35378,7 @@ static unsigned char xml_res_file_76[] = {
99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47, 99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,
111,98,106,101,99,116,62,10,60,47,114,101,115,111,117,114,99,101,62,10}; 111,98,106,101,99,116,62,10,60,47,114,101,115,111,117,114,99,101,62,10};
static size_t xml_res_size_77 = 5178; static size_t xml_res_size_77 = 5924;
static unsigned char xml_res_file_77[] = { static unsigned char xml_res_file_77[] = {
60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101, 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,
110,99,111,100,105,110,103,61,34,73,83,79,45,56,56,53,57,45,49,34,63,62, 110,99,111,100,105,110,103,61,34,73,83,79,45,56,56,53,57,45,49,34,63,62,
@ -35456,7 +35456,7 @@ static unsigned char xml_res_file_77[] = {
32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,
86,65,67,85,85,77,32,111,112,116,105,111,110,115,60,47,108,97,98,101,108, 86,65,67,85,85,77,32,111,112,116,105,111,110,115,60,47,108,97,98,101,108,
62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,
111,108,115,62,51,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32, 111,108,115,62,53,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,53,60,47,118,103, 32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,53,60,47,118,103,
97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
60,104,103,97,112,62,53,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32, 60,104,103,97,112,62,53,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,
@ -35512,111 +35512,144 @@ static unsigned char xml_res_file_77[] = {
32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,52,60,47,98, 32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,52,60,47,98,
111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,
32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,
69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,
69,82,84,73,67,65,76,124,119,120,84,79,80,124,119,120,76,69,70,84,124,119, 101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,
120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, 120,34,32,110,97,109,101,61,34,99,104,107,68,73,83,65,66,76,69,95,80,65,
32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,52,60,47,98,111, 71,69,95,83,75,73,80,80,73,78,71,34,62,10,32,32,32,32,32,32,32,32,32,32,
114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,73,
47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 83,65,66,76,69,95,80,65,71,69,95,83,75,73,80,80,73,78,71,60,47,108,97,98,
32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,
32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, 32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,
67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,99,104,107,86,101, 80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,
114,98,111,115,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 84,73,67,65,76,124,119,120,84,79,80,124,119,120,76,69,70,84,124,119,120,
32,32,32,32,32,60,108,97,98,101,108,62,86,101,114,98,111,115,101,32,109, 82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,
101,115,115,97,103,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,52,60,
32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, 47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,
62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,
108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,
32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,
101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,
120,34,32,110,97,109,101,61,34,99,104,107,67,79,78,67,85,82,82,69,78,84,
76,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
32,32,32,32,32,60,108,97,98,101,108,62,67,79,78,67,85,82,82,69,78,84,76,
89,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,
69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, 62,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,
69,82,84,73,67,65,76,124,119,120,84,79,80,124,119,120,76,69,70,84,124,119, 69,82,95,86,69,82,84,73,67,65,76,124,119,120,84,79,80,124,119,120,76,69,
70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,
101,114,62,52,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,
32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,
99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,
108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,
69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,84,79,80,124,119,
120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,
32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,
114,62,52,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,
115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,
97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,
101,61,34,99,104,107,86,101,114,98,111,115,101,34,62,10,32,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,
101,114,98,111,115,101,32,109,101,115,115,97,103,101,115,60,47,108,97,98,
101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,
10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,
101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,
78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,84,79,80,
124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,
62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,
100,101,114,62,52,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,
32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,
32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,
32,32,32,32,32,32,32,32,32,60,115,101,108,101,99,116,101,100,62,49,60,47,
115,101,108,101,99,116,101,100,62,10,32,32,32,32,32,32,32,32,32,32,60,47,
111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,
101,99,116,32,99,108,97,115,115,61,34,110,111,116,101,98,111,111,107,112,
97,103,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,
108,62,77,101,115,115,97,103,101,115,60,47,108,97,98,101,108,62,10,32,32,
32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,
115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,
34,116,120,116,77,101,115,115,97,103,101,115,34,62,10,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,77,85,
76,84,73,76,73,78,69,124,119,120,84,69,95,82,69,65,68,79,78,76,89,124,119,
120,72,83,67,82,79,76,76,60,47,115,116,121,108,101,62,10,32,32,32,32,32,
32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,
32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,
47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,
62,119,120,84,79,80,124,119,120,66,79,84,84,79,77,124,119,120,76,69,70,
84,124,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,124,119,120,
71,82,79,87,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,60,47,102,108,
97,103,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,
32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,
122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,
106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,
105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,99,
111,108,115,62,52,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,
32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,
114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,
98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,
110,34,32,110,97,109,101,61,34,119,120,73,68,95,72,69,76,80,34,62,10,32,
32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,
112,59,72,101,108,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,60,112,111,115,62,50,44,49,51,53,100,60,47,112,111,
115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,
62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,
84,79,80,124,119,120,66,79,84,84,79,77,124,119,120,76,69,70,84,124,119,
120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, 120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,52,60,47,98,111, 32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,
114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,
47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,
47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,
101,108,101,99,116,101,100,62,49,60,47,115,101,108,101,99,116,101,100,62,
10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,
32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,
34,110,111,116,101,98,111,111,107,112,97,103,101,34,62,10,32,32,32,32,32, 34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,
32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,101,115,115,97,103,101, 115,105,122,101,62,48,44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,
115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,
111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,
67,116,114,108,34,32,110,97,109,101,61,34,116,120,116,77,101,115,115,97, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,
103,101,115,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,
121,108,101,62,119,120,84,69,95,77,85,76,84,73,76,73,78,69,124,119,120, 110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,
84,69,95,82,69,65,68,79,78,76,89,124,119,120,72,83,67,82,79,76,76,60,47, 32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,112,
115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, 59,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,
98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 32,32,32,60,100,101,102,97,117,108,116,62,49,60,47,100,101,102,97,117,108,
101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,112,111,115,62,57,
10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119, 51,44,49,51,53,100,60,47,112,111,115,62,10,32,32,32,32,32,32,32,32,32,32,
120,66,79,84,84,79,77,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,
124,119,120,69,88,80,65,78,68,124,119,120,71,82,79,87,124,119,120,65,76, 32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,66,79,84,84,79,77,
73,71,78,95,67,69,78,84,82,69,60,47,102,108,97,103,62,10,32,32,32,32,32, 124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,
32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,
99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, 53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,
62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,
115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122,101,114,34,62, 106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,
10,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,52,60,47,99,111,108, 109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,
115,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,
108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, 109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,112,59,67,
115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119, 97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,
120,73,68,95,72,69,76,80,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,112,111,115,62,49,52,54,44,49,51,53,100,60,47,112,
32,60,108,97,98,101,108,62,38,97,109,112,59,72,101,108,112,60,47,108,97,
98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,112,111,115,
62,50,44,49,51,53,100,60,47,112,111,115,62,10,32,32,32,32,32,32,32,32,32,
32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,
32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,66,79,84,84,79,
77,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,
103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,
62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,
60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,
98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,
10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,48,60,
47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,
101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,
32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,
32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,
97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,
34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,
32,32,60,108,97,98,101,108,62,38,97,109,112,59,79,75,60,47,108,97,98,101,
108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,100,101,102,97,117,
108,116,62,49,60,47,100,101,102,97,117,108,116,62,10,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,60,112,111,115,62,57,51,44,49,51,53,100,60,47,112,
111,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, 111,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,
99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, 99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,
120,84,79,80,124,119,120,66,79,84,84,79,77,124,119,120,76,69,70,84,124, 120,84,79,80,124,119,120,66,79,84,84,79,77,124,119,120,76,69,70,84,124,
119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, 119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,124,119,120,71,82,
32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, 79,87,124,119,120,65,76,73,71,78,95,82,73,71,72,84,60,47,102,108,97,103,
114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,
10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,
115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,103,114,
32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 111,119,97,98,108,101,99,111,108,115,62,49,60,47,103,114,111,119,97,98,
34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73, 108,101,99,111,108,115,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,
68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,
32,60,108,97,98,101,108,62,38,97,109,112,59,67,97,110,99,101,108,60,47, 80,65,78,68,124,119,120,71,82,79,87,60,47,102,108,97,103,62,10,32,32,32,
108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,112, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,
111,115,62,49,52,54,44,49,51,53,100,60,47,112,111,115,62,10,32,32,32,32, 101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,60,47,114,101,
32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 115,111,117,114,99,101,62,10};
32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,
66,79,84,84,79,77,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,
119,120,69,88,80,65,78,68,124,119,120,71,82,79,87,124,119,120,65,76,73,
71,78,95,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,
32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,
114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,
10,32,32,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98,108,101,99,111,
108,115,62,49,60,47,103,114,111,119,97,98,108,101,99,111,108,115,62,10,
32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,
32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,71,
82,79,87,60,47,102,108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106,
101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,
47,111,98,106,101,99,116,62,10,60,47,114,101,115,111,117,114,99,101,62,
10};
static size_t xml_res_size_78 = 70018; static size_t xml_res_size_78 = 70018;
static unsigned char xml_res_file_78[] = { static unsigned char xml_res_file_78[] = {