From 3d76693340c767a2a6233af8b35a0dc80d0ea4bf Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Sat, 23 Nov 2013 05:47:49 +0000 Subject: [PATCH] Experimental: Remove TDBConnection.OnDBObjectsCleared, which was used to implicitly refresh db items and tree nodes after items were cleared somewhere. Callers already did a refresh in some cases, which lead to duplicated "SHOW xyz FROM db" blocks. This again caused the "Database" tab to forget its scroll position within refreshes. Should fix issue #3409. --- source/dbconnection.pas | 7 ------- source/main.pas | 33 +-------------------------------- 2 files changed, 1 insertion(+), 39 deletions(-) diff --git a/source/dbconnection.pas b/source/dbconnection.pas index f1410ea0..e2c490b1 100644 --- a/source/dbconnection.pas +++ b/source/dbconnection.pas @@ -257,7 +257,6 @@ type FOnLog: TDBLogEvent; FOnConnected: TDBEvent; FOnDatabaseChanged: TDBEvent; - FOnDBObjectsCleared: TDBEvent; FRowsFound: Int64; FRowsAffected: Int64; FWarningCount: Cardinal; @@ -389,7 +388,6 @@ type property OnLog: TDBLogEvent read FOnLog write FOnLog; property OnConnected: TDBEvent read FOnConnected write FOnConnected; property OnDatabaseChanged: TDBEvent read FOnDatabaseChanged write FOnDatabaseChanged; - property OnDBObjectsCleared: TDBEvent read FOnDBObjectsCleared write FOnDBObjectsCleared; end; TDBConnectionList = TObjectList; @@ -959,7 +957,6 @@ end; destructor TDBConnection.Destroy; begin if Active then Active := False; - FOnDBObjectsCleared := nil; ClearCache(True); FKeepAliveTimer.Free; FFavorites.Free; @@ -2840,15 +2837,11 @@ end; procedure TDBConnection.ClearDbObjects(db: String); var i: Integer; - TriggerClearEvent: Boolean; begin // Free cached database object list for i:=FDatabaseCache.Count-1 downto 0 do begin if FDatabaseCache[i].Database = db then begin - TriggerClearEvent := FDatabaseCache[i].OnlyNodeType=lntNone; FDatabaseCache.Delete(i); - if TriggerClearEvent and Assigned(FOnDBObjectsCleared) then - FOnDBObjectsCleared(Self, db); end; end; end; diff --git a/source/main.pas b/source/main.pas index 6d21432a..ad3652fc 100644 --- a/source/main.pas +++ b/source/main.pas @@ -995,7 +995,6 @@ type function ConfirmTabClose(PageIndex: Integer): Boolean; procedure UpdateFilterPanel(Sender: TObject); procedure ConnectionReady(Connection: TDBConnection; Database: String); - procedure DBObjectsCleared(Connection: TDBConnection; Database: String); procedure DatabaseChanged(Connection: TDBConnection; Database: String); procedure UpdateLineCharPanel; procedure SetSnippetFilenames; @@ -3013,6 +3012,7 @@ begin Conn.Query('SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS'); // Refresh ListTables + dbtree so the dropped tables are gone: Conn.ClearDbObjects(ActiveDatabase); + RefreshTree; SetActiveDatabase(Conn.Database, Conn); except on E:EDatabaseError do @@ -3397,7 +3397,6 @@ begin Connection := Params.CreateConnection(Self); Connection.OnLog := LogSQL; Connection.OnConnected := ConnectionReady; - Connection.OnDBObjectsCleared := DBObjectsCleared; Connection.OnDatabaseChanged := DatabaseChanged; Connection.ObjectNamesInSelectedDB := SynSQLSyn1.TableNames; try @@ -7738,36 +7737,6 @@ begin end; -procedure TMainForm.DBObjectsCleared(Connection: TDBConnection; Database: String); -var - Node: PVirtualNode; - WasExpanded: Boolean; -begin - // Avoid AVs while processing FormDestroy - if csDestroying in ComponentState then - Exit; - // Reload objects in ListTables ... - InvalidateVT(ListTables, VTREE_NOTLOADED, False); - // ... and in database tree - Node := FindDBNode(DBTree, Connection, Database); - if Assigned(Node) then begin - WasExpanded := DBTree.Expanded[Node]; - // Will trigger OnFocusChanged: - DBTree.ResetNode(Node); - DBtree.Expanded[Node] := WasExpanded; - { - // Earlier code, replaced by above ResetNode, not sure if that causes new errors. - // See issue #2645 - Tree.ReinitNode(Node, False); - if Tree.Expanded[Node] then - Tree.ReinitChildren(Node, False) - else - Tree.ResetNode(Node); - } - end; -end; - - procedure TMainForm.DatabaseChanged(Connection: TDBConnection; Database: String); begin // Immediately force db icons to repaint, so the user sees the active db state