mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-06 18:24:26 +08:00
Triggers need to be exported after tables, just like views. Fixes issue #2077.
This commit is contained in:
@ -434,7 +434,7 @@ end;
|
|||||||
procedure TfrmTableTools.Execute(Sender: TObject);
|
procedure TfrmTableTools.Execute(Sender: TObject);
|
||||||
var
|
var
|
||||||
DBNode, TableNode: PVirtualNode;
|
DBNode, TableNode: PVirtualNode;
|
||||||
DBObjects, Views: TDBObjectList;
|
DBObjects, LateObjects: TDBObjectList;
|
||||||
DBObj: TDBObject;
|
DBObj: TDBObject;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
ProcessNodeFunc: procedure(DBObj: TDBObject) of Object;
|
ProcessNodeFunc: procedure(DBObj: TDBObject) of Object;
|
||||||
@ -450,15 +450,15 @@ begin
|
|||||||
FToolMode := tmBulkTableEdit;
|
FToolMode := tmBulkTableEdit;
|
||||||
ResultGrid.Clear;
|
ResultGrid.Clear;
|
||||||
FResults.Clear;
|
FResults.Clear;
|
||||||
Views := TDBObjectList.Create;
|
LateObjects := TDBObjectList.Create;
|
||||||
Views.OwnsObjects := False; // So we can .Free that object afterwards without loosing the contained objects
|
LateObjects.OwnsObjects := False; // So we can .Free that object afterwards without loosing the contained objects
|
||||||
TreeObjects.SetFocus;
|
TreeObjects.SetFocus;
|
||||||
ProcessNodeFunc := nil;
|
ProcessNodeFunc := nil;
|
||||||
FHeaderCreated := False;
|
FHeaderCreated := False;
|
||||||
DBNode := TreeObjects.GetFirstChild(TreeObjects.GetFirst);
|
DBNode := TreeObjects.GetFirstChild(TreeObjects.GetFirst);
|
||||||
while Assigned(DBNode) do begin
|
while Assigned(DBNode) do begin
|
||||||
if not (DBNode.CheckState in [csUncheckedNormal, csUncheckedPressed]) then begin
|
if not (DBNode.CheckState in [csUncheckedNormal, csUncheckedPressed]) then begin
|
||||||
Views.Clear;
|
LateObjects.Clear;
|
||||||
TableNode := TreeObjects.GetFirstChild(DBNode);
|
TableNode := TreeObjects.GetFirstChild(DBNode);
|
||||||
while Assigned(TableNode) do begin
|
while Assigned(TableNode) do begin
|
||||||
if (csCheckedNormal in [TableNode.CheckState, DBNode.CheckState]) and (TableNode.CheckType <> ctNone) then begin
|
if (csCheckedNormal in [TableNode.CheckState, DBNode.CheckState]) and (TableNode.CheckType <> ctNone) then begin
|
||||||
@ -473,8 +473,8 @@ begin
|
|||||||
tmBulkTableEdit: ProcessNodeFunc := DoBulkTableEdit;
|
tmBulkTableEdit: ProcessNodeFunc := DoBulkTableEdit;
|
||||||
end;
|
end;
|
||||||
// Views have to be exported at the very end so at least all needed tables are ready when a view gets imported
|
// Views have to be exported at the very end so at least all needed tables are ready when a view gets imported
|
||||||
if DBObj.NodeType = lntView then
|
if DBObj.NodeType in [lntView, lntTrigger] then
|
||||||
Views.Add(DBObj)
|
LateObjects.Add(DBObj)
|
||||||
else
|
else
|
||||||
ProcessNodeFunc(DBObj);
|
ProcessNodeFunc(DBObj);
|
||||||
except on E:EDatabaseError do
|
except on E:EDatabaseError do
|
||||||
@ -489,11 +489,11 @@ begin
|
|||||||
end; // End of db object node loop in db
|
end; // End of db object node loop in db
|
||||||
|
|
||||||
// Special block for late created views in export mode
|
// Special block for late created views in export mode
|
||||||
for i:=0 to Views.Count-1 do begin
|
for i:=0 to LateObjects.Count-1 do begin
|
||||||
try
|
try
|
||||||
ProcessNodeFunc(Views[i]);
|
ProcessNodeFunc(LateObjects[i]);
|
||||||
except on E:EDatabaseError do
|
except on E:EDatabaseError do
|
||||||
AddNotes(Views[i].Database, Views[i].Name, 'error', E.Message);
|
AddNotes(LateObjects[i].Database, LateObjects[i].Name, 'error', E.Message);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user