mirror of
https://github.com/levinsv/pgadmin3.git
synced 2026-05-15 14:15:49 -06:00
Fix generate Insert SQL instruction. Copying result lines based on a template.
1. При некоторых настройках при генерации Insert инструкций, пустые строки заменялись на null.
Этот коммит исправлет проблему.
2. Результаты запросов можно оформить произвольным образом используя шаблоны указанные в однострочных
коментариях.
Формат шаблона: --@gen:Имя шаблона в контестном меню результата:Тут текст шаблона - cols = @colname@,@colname2,a@\n
Для добавлнения перевода строк в вывод можно использовать \n.
Коментарии указывается в теле запроса (можно указать перед запросом).
Можно указать строку из которой нужно сделать выбрать содержимое:
@colname[-1]@ - содержимое колонки colname предыдущей строки(относительная адресация).
@colname[0]@ - содержимое колонки colname 1 строки (или выделенного диапазона строк).
Адресация с начинается с 0. Это абсолютная адресация строк.
@colname2,a@ - Указание что результат нужно будет выровнять.
Флаг "а" глобальный его можно указать у любой колонки.
Флаги указываются в самом конце определения колонки после запятой. Пример: @col1[-1],a@
Если перечень имен колонок запроса не совпадает со списком полей шаблона то шаблон не будет добавлен
в контекстное меню Generate.
Полученный текст копируется в буфер обмена.
При генерации текста используются настройки "Вид кавычек" и "Что брать в кавычки".
Шаблоны сохраняются перед выполнением SQL команды и после редактирования шаблона
запрос нужно выполнить повторно.
This commit is contained in:
parent
087ad55c34
commit
a8ddbc4999
8 changed files with 235 additions and 10 deletions
|
|
@ -182,6 +182,7 @@ BEGIN_EVENT_TABLE(frmQuery, pgFrame)
|
|||
EVT_MENU(MNU_AUTOEDITOBJECT, frmQuery::OnAutoEditObject)
|
||||
EVT_MENU_RANGE(MNU_FAVOURITES_MANAGE + 1, MNU_FAVOURITES_MANAGE + 999, frmQuery::OnSelectFavourite)
|
||||
EVT_MENU_RANGE(MNU_MACROS_MANAGE + 1, MNU_MACROS_MANAGE + 99, frmQuery::OnMacroInvoke)
|
||||
EVT_MENU_RANGE(MNU_GENERATESQL + 1, MNU_GENERATESQL + 199, frmQuery::OnGenerateInvoke)
|
||||
EVT_ACTIVATE( frmQuery::OnActivate)
|
||||
EVT_STC_MODIFIED(CTL_SQLQUERY, frmQuery::OnChangeStc)
|
||||
EVT_STC_UPDATEUI(CTL_SQLQUERY, frmQuery::OnPositionStc)
|
||||
|
|
@ -2228,6 +2229,21 @@ void frmQuery::OnLabelRightClick(wxGridEvent &event)
|
|||
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_COPY_TABLEHTML, _("Copy table html format"), _("Copy table html format."));
|
||||
if (body_template.Count()>0) {
|
||||
//MNU_GENERATE_TEMPLATE
|
||||
wxMenu *submenu = new wxMenu();
|
||||
//wxString t="begin @obj_id@ end";
|
||||
int cnt=0;
|
||||
for(int i=0;i<body_template.Count();i++) {
|
||||
wxString s=sqlResult->GenerateTemplate(body_template[i],1);
|
||||
if (s=="OK")
|
||||
{
|
||||
cnt++;
|
||||
submenu->Append(MNU_GENERATESQL+cnt,title_template[i],body_template[i]);
|
||||
}
|
||||
}
|
||||
if (cnt>0) xmenu->Append(MNU_GENERATESQL,"Generate",submenu);
|
||||
}
|
||||
xmenu->AppendSeparator();
|
||||
xmenu->Append(MNU_AUTOCOLSPLOT, _("Draw plot LY(bar) or LXY or XYYY..."), _("Draw plot LY(bar) LXY or XYYY..."));
|
||||
xmenu->Append(MNU_SUMMARY_COL, _("Summary"), _("Summary selected cells."));
|
||||
|
|
@ -2288,6 +2304,19 @@ void frmQuery::OnCopy_WhereList(wxCommandEvent& ev)
|
|||
SetStatusText(s, STATUSPOS_MSGS);
|
||||
}
|
||||
}
|
||||
|
||||
void frmQuery::OnGenerateInvoke(wxCommandEvent& ev)
|
||||
{
|
||||
// if (currentControl() == sqlResult)
|
||||
int id=ev.GetId();
|
||||
wxMenu* mi = static_cast<wxMenu*>(ev.GetEventObject());
|
||||
wxString templ = mi->GetHelpString(id);
|
||||
{
|
||||
wxString s = wxT("Where list format copy buffer.");
|
||||
s=sqlResult->GenerateTemplate(templ,0);
|
||||
SetStatusText(s, STATUSPOS_MSGS);
|
||||
}
|
||||
}
|
||||
void frmQuery::OnCopy_TableToHtml(wxCommandEvent& ev)
|
||||
{
|
||||
// if (currentControl() == sqlResult)
|
||||
|
|
@ -3063,6 +3092,8 @@ void frmQuery::OnExecute(wxCommandEvent &event)
|
|||
FSQL::view_item v;
|
||||
bool isddm = false;
|
||||
std::vector<var_query> v_list;
|
||||
body_template.Clear();
|
||||
title_template.Clear();
|
||||
while (f.GetNextPositionSqlParse() < query.length() && f.ParseSql(0) >= 0) { // many querys
|
||||
|
||||
int i = 0;
|
||||
|
|
@ -3075,6 +3106,14 @@ void frmQuery::OnExecute(wxCommandEvent &event)
|
|||
}
|
||||
n_check++;
|
||||
}
|
||||
if (v.type == FSQL::type_item::comment) {
|
||||
wxString kw = v.txt;
|
||||
if (kw.Find("@gen:")>0) {
|
||||
wxString t=kw.AfterFirst(':');
|
||||
body_template.Add(t.AfterFirst(':'));
|
||||
title_template.Add(t.BeforeFirst(':'));
|
||||
}
|
||||
}
|
||||
// check bindarg
|
||||
if (n_check == 1 && v.type == FSQL::type_item::bindarg) {
|
||||
if (!isddm) break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue