diff --git a/ctl/ctlSQLBox.cpp b/ctl/ctlSQLBox.cpp
index bc191ae..4c98be1 100644
--- a/ctl/ctlSQLBox.cpp
+++ b/ctl/ctlSQLBox.cpp
@@ -43,6 +43,7 @@ wxString pgscriptKeywords = wxT(" assert break columns continue date datetime fi
BEGIN_EVENT_TABLE(ctlSQLBox, wxStyledTextCtrl)
EVT_KEY_DOWN(ctlSQLBox::OnKeyDown)
EVT_MENU(MNU_FIND, ctlSQLBox::OnSearchReplace)
+ EVT_MENU(MNU_COPY, ctlSQLBox::OnCopy)
EVT_MENU(MNU_AUTOCOMPLETE, ctlSQLBox::OnAutoComplete)
EVT_KILL_FOCUS(ctlSQLBox::OnKillFocus)
// EVT_ERASE_BACKGROUND(ctlSQLBox::OnBackGround)
@@ -192,10 +193,11 @@ void ctlSQLBox::Create(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
SetFoldFlags(16);
// Setup accelerators
- wxAcceleratorEntry entries[2];
+ wxAcceleratorEntry entries[3];
entries[0].Set(wxACCEL_CTRL, (int)'F', MNU_FIND);
entries[1].Set(wxACCEL_CTRL, WXK_SPACE, MNU_AUTOCOMPLETE);
- wxAcceleratorTable accel(2, entries);
+ entries[2].Set(wxACCEL_CTRL, (int)'C', MNU_COPY);
+ wxAcceleratorTable accel(3, entries);
SetAcceleratorTable(accel);
// Autocompletion configuration
@@ -483,6 +485,9 @@ void ctlSQLBox::SetDefFunction(wxArrayString &name, wxArrayString &def) {
m_name=&name;
m_def=&def;
}
+void ctlSQLBox::OnCopy(wxCommandEvent& ev) {
+ Copy();
+}
void ctlSQLBox::OnKeyDown(wxKeyEvent &event)
{
@@ -1296,14 +1301,14 @@ void ctlSQLBox::Copy() {
l=1;
if (!selText[k].IsAscii()) l++;
int s=0;
- if (selText[k].GetValue()==9) s=5;
- if (selText[k].GetValue()==32) s=1;
+ char c = selText[k].GetValue();
+ if (c == '\r') { startp = startp + l; k++; continue; };
+ if (c == '\n') { str += wxT("
"); startp = startp + l; k++; continue; };
+ if (c==9) s=5;
+ if (c==32) s=1;
if (s>0) for (int tt=0;tt");
- startp=startp+l;
- k++;
+ startp=startp+l; k++;
}
str=str+wxT("");
diff --git a/ctl/ctlSQLGrid.cpp b/ctl/ctlSQLGrid.cpp
index 0b0d6dd..f1feb43 100644
--- a/ctl/ctlSQLGrid.cpp
+++ b/ctl/ctlSQLGrid.cpp
@@ -405,28 +405,43 @@ int ctlSQLGrid::Copy(int gensql)
if (sql.Len() == j) break;
c = sql[j];
}
- if (j>i) tn = sql.SubString(i, j - 1); // alias name
+ if (j > i) {
+ wxString al = sql.SubString(i, j - 1); // alias name
+ if (al.StartsWith("where")
+ || al.StartsWith("order")
+ || al.StartsWith("limit")
+ ) break;
+ tn = al;
+ }
break;
}
if (gensql == 2) linedelim = ",";
else if(gensql == 3) linedelim = " or ";
+ int lenrow = 0;
if (GetSelectedRows().GetCount())
{
AppendColumnHeader(str, 0, (GetNumberCols() - 1));
wxArrayInt rows = GetSelectedRows();
-
for (i = 0 ; i < rows.GetCount() ; i++)
{
tmp=GetExportLine(rows.Item(i));
+ lenrow += tmp.Len()+linedelim.Len();
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)
- str.Append(END_OF_LINE);
+ {
+ bool delim = true;
+ if ((generatesql > 1) && (lenrow < 50))
+ delim = false;
+ else
+ { lenrow = 0;}
+ if (delim) str.Append(END_OF_LINE);
+ }
}
copied = rows.GetCount();
@@ -441,11 +456,21 @@ int ctlSQLGrid::Copy(int gensql)
for (i = 0 ; i < numRows ; i++)
{
tmp = GetExportLine(i, cols);
+ lenrow += tmp.Len() + linedelim.Len();
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);
+ {
+ bool delim = true;
+ if ((generatesql > 1) && (lenrow < 50))
+ delim = false;
+ else
+ {
+ lenrow = 0;
+ }
+ if (delim) str.Append(END_OF_LINE);
+ }
}
copied = numRows;
}
@@ -475,11 +500,21 @@ int ctlSQLGrid::Copy(int gensql)
for (i = y1; i <= y2; i++)
{
tmp = GetExportLine(i, x1, x2);
+ lenrow += tmp.Len() + linedelim.Len();
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);
+ {
+ bool delim = true;
+ if ((generatesql > 1) && (lenrow < 50))
+ delim = false;
+ else
+ {
+ lenrow = 0;
+ }
+ if (delim) str.Append(END_OF_LINE);
+ }
}
}
@@ -533,10 +568,21 @@ int ctlSQLGrid::Copy(int gensql)
}
colsNum.Sort(compare_int);
if (generatesql == 2) AppendColumnHeader(str, colsNum);
- str.Append(GetExportLine(curr_row, colsNum));
+ tmp = GetExportLine(curr_row, colsNum);
+ str.Append(tmp);
+ lenrow += tmp.Len() + linedelim.Len();
if ((next_row != 1000000000) && (generatesql == 3)) str.Append(linedelim);
if ((next_row != 1000000000) && (generatesql == 2)) str.Append(") or ");
- str.Append(END_OF_LINE);
+ {
+ bool delim = true;
+ if ((generatesql > 1) && (lenrow < 50))
+ delim = false;
+ else
+ {
+ lenrow = 0;
+ }
+ if (delim) str.Append(END_OF_LINE);
+ }
curr_row = next_row;
copied++;
}
diff --git a/include/ctl/ctlSQLBox.h b/include/ctl/ctlSQLBox.h
index 93fb6e8..5d8b2d5 100644
--- a/include/ctl/ctlSQLBox.h
+++ b/include/ctl/ctlSQLBox.h
@@ -55,6 +55,7 @@ public:
void OnKeyDown(wxKeyEvent &event);
void OnAutoComplete(wxCommandEvent &event);
void OnSearchReplace(wxCommandEvent &event);
+ void OnCopy(wxCommandEvent& ev);
void OnKillFocus(wxFocusEvent &event);
// void OnBackGround(wxEraseEvent &event);
void SetQueryBook(ctlAuiNotebook *query_book);
diff --git a/x64/Release_(3.0)/pgAdmin3.exe b/x64/Release_(3.0)/pgAdmin3.exe
index eb8dfcd..b84c29d 100644
Binary files a/x64/Release_(3.0)/pgAdmin3.exe and b/x64/Release_(3.0)/pgAdmin3.exe differ