mirror of
https://github.com/levinsv/pgadmin3.git
synced 2026-09-04 22:02:34 -06:00
check the sequence of dates.
Добавлена проверка последовательности дат в результате запроса. По первым двум строкам вычисляется разница дат и все последующие строки должны иметь такую же разнизу в датах. Строки нарушающие это правило отмечаются желтым цветом.
This commit is contained in:
parent
6287243d5b
commit
73c1eeafe5
7 changed files with 151 additions and 10 deletions
|
|
@ -372,6 +372,43 @@ int ctlSQLGrid::Copy(int gensql)
|
|||
int copied = 0;
|
||||
size_t i;
|
||||
generatesql=gensql;
|
||||
//sqlResultTable* t = (sqlResultTable*)GetTable();
|
||||
wxString sql = sqlquerytext.Lower();
|
||||
int j = 0;
|
||||
wxChar c;
|
||||
wxString tn=wxEmptyString;
|
||||
while ((j = sql.find("from", j)) > -1) {
|
||||
j = j + 4;
|
||||
c = sql[j];
|
||||
i = j;
|
||||
while (c == ' ' || c == '\t' || c == '\n' || c == '\r') {
|
||||
i++;
|
||||
c = sql[i];
|
||||
}
|
||||
j = i;
|
||||
if (c == '(') {
|
||||
continue;
|
||||
}
|
||||
while (c != ' ' && c != '\t' && c != '\n' && c != '\r' && c != ',' && c != '(' && c != ')') {
|
||||
j++;
|
||||
if (sql.Len() == j) break;
|
||||
c = sql[j];
|
||||
}
|
||||
tn = sql.SubString(i,j-1); // table name
|
||||
if (sql.Len() == j) break;
|
||||
j = j+1;
|
||||
i = j;
|
||||
if (sql.Len() == j) break;
|
||||
c = sql[j];
|
||||
while (c > ' ' && c != ',' && c != '(' && c != ')') {
|
||||
j++;
|
||||
if (sql.Len() == j) break;
|
||||
c = sql[j];
|
||||
}
|
||||
if (j>i) tn = sql.SubString(i, j - 1); // alias name
|
||||
break;
|
||||
}
|
||||
|
||||
if (gensql == 2) linedelim = ",";
|
||||
else if(gensql == 3) linedelim = " or ";
|
||||
|
||||
|
|
@ -385,6 +422,7 @@ int ctlSQLGrid::Copy(int gensql)
|
|||
{
|
||||
tmp=GetExportLine(rows.Item(i));
|
||||
if (tmp.IsEmpty()) continue;
|
||||
if (!tn.IsEmpty() && (generatesql == 1)) tmp.Replace("tbl", tn, false);
|
||||
str.Append(tmp);
|
||||
if (i < rows.GetCount() - 1 && (generatesql > 1)) str.Append(linedelim);
|
||||
if (rows.GetCount() > 1)
|
||||
|
|
@ -402,7 +440,9 @@ int ctlSQLGrid::Copy(int gensql)
|
|||
|
||||
for (i = 0 ; i < numRows ; i++)
|
||||
{
|
||||
str.Append(GetExportLine(i, cols));
|
||||
tmp = GetExportLine(i, cols);
|
||||
if (!tn.IsEmpty() && (generatesql == 1)) tmp.Replace("tbl", tn, false);
|
||||
str.Append(tmp);
|
||||
if (i<(numRows-1) && (generatesql > 1)) str.Append(linedelim);
|
||||
if (numRows > 1)
|
||||
str.Append(END_OF_LINE);
|
||||
|
|
@ -434,8 +474,9 @@ int ctlSQLGrid::Copy(int gensql)
|
|||
{
|
||||
for (i = y1; i <= y2; i++)
|
||||
{
|
||||
|
||||
str.Append(GetExportLine(i, x1, x2));
|
||||
tmp = GetExportLine(i, x1, x2);
|
||||
if (!tn.IsEmpty() && (generatesql==1)) tmp.Replace("tbl", tn, false);
|
||||
str.Append(tmp);
|
||||
if (i < y2 && (generatesql > 1)) str.Append(linedelim);
|
||||
if (y2 > y1)
|
||||
str.Append(END_OF_LINE);
|
||||
|
|
@ -505,8 +546,9 @@ int ctlSQLGrid::Copy(int gensql)
|
|||
col = GetGridCursorCol();
|
||||
|
||||
AppendColumnHeader(str, col, col);
|
||||
|
||||
str.Append(GetExportLine(row, col, col));
|
||||
tmp = GetExportLine(row, col, col);
|
||||
if (!tn.IsEmpty() && (generatesql == 1)) tmp.Replace("tbl", tn, false);
|
||||
str.Append(tmp);
|
||||
copied = 1;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -330,7 +330,88 @@ wxString ctlSQLResult::OnGetItemText(long item, long col) const
|
|||
}
|
||||
return wxEmptyString;
|
||||
}
|
||||
wxString ctlSQLResult::CheckSelColumnDate()
|
||||
{
|
||||
size_t i;
|
||||
wxString ss = wxEmptyString;
|
||||
if (GetSelectedCols().GetCount()) {
|
||||
wxArrayInt cols = GetSelectedCols();
|
||||
size_t numRows = GetNumberRows();
|
||||
int err = 0;
|
||||
int noformat = 0;
|
||||
int dtType = -1;
|
||||
//AppendColumnHeader(str, cols);
|
||||
//str.Append(GetExportLine(i, cols));
|
||||
for (size_t col = 0; col < cols.Count(); col++)
|
||||
{
|
||||
int cl = cols[col];
|
||||
bool isDt = false;
|
||||
switch (colTypClasses.Item(cl))
|
||||
{
|
||||
case PGTYPCLASS_DATE:
|
||||
isDt= true;
|
||||
}
|
||||
wxDateTime dt((time_t)-1);
|
||||
wxDateTime dt_prev;
|
||||
wxTimeSpan sp,tmp;
|
||||
bool parseDT = false;
|
||||
int k = 0;
|
||||
for (i = 0; i < numRows; i++)
|
||||
{
|
||||
if (!isDt) break;
|
||||
wxString text = GetCellValue(i, cl);
|
||||
if (GetRowSize(i) > 0) {
|
||||
|
||||
if (dtType == -1) {
|
||||
if (dt.ParseISOCombined(text, ' ')) {
|
||||
dtType = 0;
|
||||
}
|
||||
else if (dt.ParseDateTime(text)) {
|
||||
dtType = 1;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
if (dtType>=0) {
|
||||
parseDT = false;
|
||||
if (dtType == 0 && dt.ParseISOCombined(text, ' ')) parseDT = true;
|
||||
if (dtType == 1 && dt.ParseDateTime(text)) parseDT = true;
|
||||
if (parseDT) {
|
||||
if (k == 0) { dt_prev = dt; k++; continue; }
|
||||
tmp = dt - dt_prev;
|
||||
if (k == 1) { sp = tmp; dt_prev = dt; k++; continue; }
|
||||
if (tmp.GetMilliseconds() != sp.GetMilliseconds()) {
|
||||
wxGridCellAttr* pAttr = new wxGridCellAttr;
|
||||
|
||||
pAttr->SetBackgroundColour(*wxYELLOW);
|
||||
SetRowAttr(i, pAttr);
|
||||
err++;
|
||||
}
|
||||
dt_prev = dt;
|
||||
}
|
||||
else noformat++;
|
||||
};
|
||||
k++;
|
||||
};
|
||||
if (tmp.GetDays()>0) ss = tmp.Format("delta Days %D Hours:%H Min:%M Sec:%S");
|
||||
else if (tmp.GetHours() > 0) ss = tmp.Format("delta Hours:%H Min:%M Sec:%S");
|
||||
else if (tmp.GetMinutes() > 0) ss = tmp.Format("delta Min:%M Sec:%S");
|
||||
else if (tmp.GetSeconds() > 0) ss = tmp.Format("delta Sec:%S");
|
||||
else ss = tmp.Format("delta MSec:%l");
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (dtType==-1) ss= wxString::Format("No timestamp(date) column type",err);
|
||||
else {
|
||||
ss = wxString::Format("Unsequence rows: %d,bad format rows: %d,%s", err, noformat,ss);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
return ss;
|
||||
}
|
||||
wxString ctlSQLResult::SummaryColumn()
|
||||
{
|
||||
//ce=cells.Item(0);
|
||||
|
|
|
|||
|
|
@ -124,6 +124,7 @@ BEGIN_EVENT_TABLE(frmQuery, pgFrame)
|
|||
EVT_MENU(MNU_COPY_INLIST, frmQuery::OnCopy_InList)
|
||||
EVT_MENU(MNU_COPY_WHERELIST, frmQuery::OnCopy_WhereList)
|
||||
EVT_MENU(MNU_CLEAR_FILTER, frmQuery::OnClear_Filter)
|
||||
EVT_MENU(MNU_CHECK_COLUMN_DATE, frmQuery::OnCheck_Column_Date)
|
||||
EVT_MENU(MNU_FIND, frmQuery::OnSearchReplace)
|
||||
EVT_MENU(MNU_UNDO, frmQuery::OnUndo)
|
||||
EVT_MENU(MNU_REDO, frmQuery::OnRedo)
|
||||
|
|
@ -2092,17 +2093,23 @@ void frmQuery::OnLabelRightClick(wxGridEvent &event)
|
|||
xmenu->Append(MNU_PASTE, _("&Paste"), _("Paste data from the clipboard."));
|
||||
xmenu->Append(MNU_DELETE, _("&Delete"), _("Delete selected rows."));
|
||||
xmenu->Append(MNU_SUMMARY_COL, _("Summary"), _("Summary selected cells."));
|
||||
xmenu->Append(MNU_CHECK_COLUMN_DATE, _("Check the sequence of dates"), _("Check the sequence of dates"));
|
||||
xmenu->Append(MNU_COPY_INSERT, _("Copy Insert format"), _("Copy Insert format."));
|
||||
xmenu->Append(MNU_COPY_INLIST, _("IN LIST format copy"), _("Copy In list format."));
|
||||
xmenu->Append(MNU_COPY_WHERELIST, _("WHERE LIST format copy"), _("Copy where list format."));
|
||||
|
||||
xmenu->Append(MNU_CLEAR_FILTER, _("Clear filter"), _("Clear filter"));
|
||||
|
||||
xmenu->Enable(MNU_CHECK_COLUMN_DATE, sqlResult->GetSelectedCols().GetCount() > 0);
|
||||
xmenu->Enable(MNU_SUMMARY_COL, sqlResult->IsSelection());
|
||||
xmenu->Enable(MNU_COPY_INLIST, sqlResult->IsSelection());
|
||||
xmenu->Enable(MNU_COPY_WHERELIST, sqlResult->IsSelection());
|
||||
|
||||
if ((rows.GetCount()))
|
||||
{
|
||||
xmenu->Enable(MNU_COPY, true);
|
||||
xmenu->Enable(MNU_DELETE, true);
|
||||
xmenu->Enable(MNU_PASTE, true);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -2119,7 +2126,7 @@ void frmQuery::OnCopy_Insert(wxCommandEvent &ev)
|
|||
{
|
||||
wxString s=wxT("Insert into format copy buffer.");
|
||||
sqlResult->Copy(1);
|
||||
SetStatusText(s, STATUSPOS_POS);
|
||||
SetStatusText(s, STATUSPOS_MSGS);
|
||||
}
|
||||
}
|
||||
void frmQuery::OnCopy_InList(wxCommandEvent& ev)
|
||||
|
|
@ -2128,7 +2135,7 @@ void frmQuery::OnCopy_InList(wxCommandEvent& ev)
|
|||
{
|
||||
wxString s = wxT("In list format copy buffer.");
|
||||
sqlResult->Copy(2);
|
||||
SetStatusText(s, STATUSPOS_POS);
|
||||
SetStatusText(s, STATUSPOS_MSGS);
|
||||
}
|
||||
}
|
||||
void frmQuery::OnCopy_WhereList(wxCommandEvent& ev)
|
||||
|
|
@ -2137,7 +2144,7 @@ void frmQuery::OnCopy_WhereList(wxCommandEvent& ev)
|
|||
{
|
||||
wxString s = wxT("Where list format copy buffer.");
|
||||
sqlResult->Copy(3);
|
||||
SetStatusText(s, STATUSPOS_POS);
|
||||
SetStatusText(s, STATUSPOS_MSGS);
|
||||
}
|
||||
}
|
||||
void frmQuery::OnCellLeftDClick(wxGridEvent &event)
|
||||
|
|
@ -2162,6 +2169,14 @@ void frmQuery::OnClear_Filter(wxCommandEvent &ev)
|
|||
isfilterresult=false;
|
||||
}
|
||||
}
|
||||
void frmQuery::OnCheck_Column_Date(wxCommandEvent& ev)
|
||||
{
|
||||
// if (currentControl() == sqlResult)
|
||||
{
|
||||
wxString s = sqlResult->CheckSelColumnDate();
|
||||
SetStatusText(s, STATUSPOS_MSGS);
|
||||
}
|
||||
}
|
||||
|
||||
void frmQuery::OnSummary_Column(wxCommandEvent &ev)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ public:
|
|||
void SetRowGroup(int row);
|
||||
GroupRows *grp;
|
||||
int generatesql; // 0 -íåò, 1 - insert , 2 - in_list
|
||||
wxString sqlquerytext;
|
||||
WX_DECLARE_STRING_HASH_MAP( int, ColKeySizeHashMap );
|
||||
|
||||
DECLARE_DYNAMIC_CLASS(ctlSQLGrid)
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ public:
|
|||
|
||||
wxString OnGetItemText(long item, long col) const;
|
||||
wxString SummaryColumn();
|
||||
wxString CheckSelColumnDate();
|
||||
void ClearFilter();
|
||||
bool IsColText(int col);
|
||||
bool hasRowNumber()
|
||||
|
|
@ -75,7 +76,6 @@ public:
|
|||
wxArrayString colNames;
|
||||
wxArrayString colTypes;
|
||||
wxArrayLong colTypClasses;
|
||||
wxString sqlquerytext;
|
||||
private:
|
||||
pgQueryThread *thread;
|
||||
pgConn *conn;
|
||||
|
|
|
|||
|
|
@ -217,6 +217,7 @@ private:
|
|||
void OnCopy_InList(wxCommandEvent& event);
|
||||
void OnCopy_WhereList(wxCommandEvent& event);
|
||||
void OnClear_Filter(wxCommandEvent &event);
|
||||
void OnCheck_Column_Date(wxCommandEvent& ev);
|
||||
void OnSearchReplace(wxCommandEvent &event);
|
||||
void OnUndo(wxCommandEvent &event);
|
||||
void OnRedo(wxCommandEvent &event);
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@ enum
|
|||
MNU_COPY_INLIST,
|
||||
MNU_COPY_WHERELIST,
|
||||
MNU_CLEAR_FILTER,
|
||||
MNU_CHECK_COLUMN_DATE,
|
||||
MNU_AUTOROLLBACK,
|
||||
MNU_AUTOCOMMIT,
|
||||
MNU_CLEARHISTORY,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue