mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-06 18:24:26 +08:00
Implement snippet generator for INSERT, UPDATE and DELETE statement using selected table. Clickable via query helpers columns tab, which then only involves selected column names. Fixes issue #1288.
This commit is contained in:
@ -6676,6 +6676,24 @@ object MainForm: TMainForm
|
|||||||
object menuHelp: TMenuItem
|
object menuHelp: TMenuItem
|
||||||
Action = actSQLhelp
|
Action = actSQLhelp
|
||||||
end
|
end
|
||||||
|
object menuQueryHelpersGenerateInsert: TMenuItem
|
||||||
|
Caption = 'Generate INSERT ...'
|
||||||
|
Enabled = False
|
||||||
|
ImageIndex = 114
|
||||||
|
OnClick = menuQueryHelpersGenerateStatementClick
|
||||||
|
end
|
||||||
|
object menuQueryHelpersGenerateUpdate: TMenuItem
|
||||||
|
Caption = 'Generate UPDATE ...'
|
||||||
|
Enabled = False
|
||||||
|
ImageIndex = 114
|
||||||
|
OnClick = menuQueryHelpersGenerateStatementClick
|
||||||
|
end
|
||||||
|
object menuQueryHelpersGenerateDelete: TMenuItem
|
||||||
|
Caption = 'Generate DELETE ...'
|
||||||
|
Enabled = False
|
||||||
|
ImageIndex = 114
|
||||||
|
OnClick = menuQueryHelpersGenerateStatementClick
|
||||||
|
end
|
||||||
end
|
end
|
||||||
object popupFilter: TPopupMenu
|
object popupFilter: TPopupMenu
|
||||||
Images = PngImageListMain
|
Images = PngImageListMain
|
||||||
|
@ -441,6 +441,9 @@ type
|
|||||||
Findtextonserver1: TMenuItem;
|
Findtextonserver1: TMenuItem;
|
||||||
actBulkTableEdit: TAction;
|
actBulkTableEdit: TAction;
|
||||||
menuBulkTableEdit: TMenuItem;
|
menuBulkTableEdit: TMenuItem;
|
||||||
|
menuQueryHelpersGenerateInsert: TMenuItem;
|
||||||
|
menuQueryHelpersGenerateUpdate: TMenuItem;
|
||||||
|
menuQueryHelpersGenerateDelete: TMenuItem;
|
||||||
procedure refreshMonitorConfig;
|
procedure refreshMonitorConfig;
|
||||||
procedure loadWindowConfig;
|
procedure loadWindowConfig;
|
||||||
procedure saveWindowConfig;
|
procedure saveWindowConfig;
|
||||||
@ -699,6 +702,7 @@ type
|
|||||||
procedure actFilterPanelExecute(Sender: TObject);
|
procedure actFilterPanelExecute(Sender: TObject);
|
||||||
procedure TimerFilterVTTimer(Sender: TObject);
|
procedure TimerFilterVTTimer(Sender: TObject);
|
||||||
procedure PageControlMainContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
|
procedure PageControlMainContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
|
||||||
|
procedure menuQueryHelpersGenerateStatementClick(Sender: TObject);
|
||||||
private
|
private
|
||||||
ReachedEOT : Boolean;
|
ReachedEOT : Boolean;
|
||||||
FDelimiter: String;
|
FDelimiter: String;
|
||||||
@ -4973,6 +4977,9 @@ begin
|
|||||||
// By default sorted alpabetically
|
// By default sorted alpabetically
|
||||||
ActiveQueryHelpers.Sorted := True;
|
ActiveQueryHelpers.Sorted := True;
|
||||||
// By default disable all items in popupmenu, enable them when needed
|
// By default disable all items in popupmenu, enable them when needed
|
||||||
|
menuQueryHelpersGenerateInsert.Enabled := False;
|
||||||
|
menuQueryHelpersGenerateUpdate.Enabled := False;
|
||||||
|
menuQueryHelpersGenerateDelete.Enabled := False;
|
||||||
menuInsertSnippetAtCursor.Enabled := False;
|
menuInsertSnippetAtCursor.Enabled := False;
|
||||||
menuLoadSnippet.Enabled := False;
|
menuLoadSnippet.Enabled := False;
|
||||||
menuDeleteSnippet.Enabled := False;
|
menuDeleteSnippet.Enabled := False;
|
||||||
@ -4985,13 +4992,14 @@ begin
|
|||||||
begin
|
begin
|
||||||
// Keep native order of columns
|
// Keep native order of columns
|
||||||
ActiveQueryHelpers.Sorted := False;
|
ActiveQueryHelpers.Sorted := False;
|
||||||
if (SelectedTable.Text <> '') and Assigned(SelectedTableColumns) then begin
|
menuQueryHelpersGenerateInsert.Enabled := True;
|
||||||
|
menuQueryHelpersGenerateUpdate.Enabled := True;
|
||||||
|
menuQueryHelpersGenerateDelete.Enabled := True;
|
||||||
for i:=0 to SelectedTableColumns.Count-1 do begin
|
for i:=0 to SelectedTableColumns.Count-1 do begin
|
||||||
Col := TTableColumn(SelectedTableColumns[i]);
|
Col := TTableColumn(SelectedTableColumns[i]);
|
||||||
ActiveQueryHelpers.Items.Add(Col.Name);
|
ActiveQueryHelpers.Items.Add(Col.Name);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
|
||||||
|
|
||||||
1: // SQL functions
|
1: // SQL functions
|
||||||
begin
|
begin
|
||||||
@ -8843,5 +8851,75 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TMainForm.menuQueryHelpersGenerateStatementClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
MenuItem: TMenuItem;
|
||||||
|
sql, Val, WhereClause: WideString;
|
||||||
|
i, idx: Integer;
|
||||||
|
ColumnNames, DefaultValues, KeyColumns: TWideStringlist;
|
||||||
|
Column: TTableColumn;
|
||||||
|
begin
|
||||||
|
// Generate INSERT, UPDATE or DELETE query using selected columns
|
||||||
|
MenuItem := (Sender as TMenuItem);
|
||||||
|
ColumnNames := TWideStringlist.Create;
|
||||||
|
DefaultValues := TWideStringlist.Create;
|
||||||
|
for i:=0 to ActiveQueryHelpers.Items.Count-1 do begin
|
||||||
|
if ActiveQueryHelpers.Selected[i] then begin
|
||||||
|
ColumnNames.Add(mask(ActiveQueryHelpers.Items[i]));
|
||||||
|
Column := SelectedTableColumns[i] as TTableColumn;
|
||||||
|
case Column.DataType.Category of
|
||||||
|
dtcInteger, dtcReal: Val := '0';
|
||||||
|
dtcText, dtcIntegerNamed, dtcSetNamed: begin
|
||||||
|
Val := esc(Column.DefaultText);
|
||||||
|
if Column.DefaultType in [cdtNull, cdtNullUpdateTS] then
|
||||||
|
Val := esc('')
|
||||||
|
else
|
||||||
|
Val := esc(Column.DefaultText);
|
||||||
|
end;
|
||||||
|
dtcTemporal: Val := 'NOW()';
|
||||||
|
else Val := 'NULL';
|
||||||
|
end;
|
||||||
|
if Column.DefaultType = cdtAutoInc then
|
||||||
|
Val := 'NULL';
|
||||||
|
DefaultValues.Add(Val);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
KeyColumns := GetKeyColumns;
|
||||||
|
if KeyColumns.Count > 0 then begin
|
||||||
|
WhereClause := '';
|
||||||
|
for i:=0 to KeyColumns.Count-1 do begin
|
||||||
|
idx := ColumnNames.IndexOf(mask(KeyColumns[i]));
|
||||||
|
if idx > -1 then
|
||||||
|
WhereClause := WhereClause + mask(KeyColumns[i])+'='+DefaultValues[idx] + ' AND ';
|
||||||
|
end;
|
||||||
|
Delete(WhereClause, Length(sql)-3, 4);
|
||||||
|
end else
|
||||||
|
WhereClause := '??? # No primary or unique key available!';
|
||||||
|
|
||||||
|
if MenuItem = menuQueryHelpersGenerateInsert then begin
|
||||||
|
sql := 'INSERT INTO '+mask(SelectedTable.Text)+CRLF+
|
||||||
|
#9'('+ImplodeStr(', ', ColumnNames)+')'+CRLF+
|
||||||
|
#9'VALUES ('+ImplodeStr(', ', DefaultValues)+')';
|
||||||
|
|
||||||
|
end else if MenuItem = menuQueryHelpersGenerateUpdate then begin
|
||||||
|
sql := 'UPDATE '+mask(SelectedTable.Text)+CRLF+#9'SET'+CRLF;
|
||||||
|
if ColumnNames.Count > 0 then begin
|
||||||
|
for i:=0 to ColumnNames.Count-1 do begin
|
||||||
|
sql := sql + #9#9 + ColumnNames[i] + '=' + DefaultValues[i] + ',' + CRLF;
|
||||||
|
end;
|
||||||
|
Delete(sql, Length(sql)-2, 1);
|
||||||
|
end else
|
||||||
|
sql := sql + #9#9'??? # No column names selected!'+CRLF;
|
||||||
|
sql := sql + #9'WHERE ' + WhereClause;
|
||||||
|
|
||||||
|
end else if MenuItem = menuQueryHelpersGenerateDelete then begin
|
||||||
|
sql := 'DELETE FROM '+mask(SelectedTable.Text)+' WHERE ' + WhereClause;
|
||||||
|
|
||||||
|
end;
|
||||||
|
ActiveQueryMemo.UndoList.AddGroupBreak;
|
||||||
|
ActiveQueryMemo.SelText := sql;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user