@@ -5,6 +5,8 @@ local Addon = select(2, ...)
5
5
6
6
Addon .DATA_VERSION = 12
7
7
8
+ local upgradeData = {}
9
+
8
10
-- Local support functions
9
11
10
12
local function errorhandler (err )
@@ -890,6 +892,37 @@ local function Upgrade(db, from)
890
892
binding .action .stopSpellTarget = true
891
893
end
892
894
end
895
+
896
+ if from < 13 then
897
+ upgradeData [13 ] = upgradeData [13 ] or {}
898
+ upgradeData [13 ].seen = upgradeData [13 ].seen or {}
899
+
900
+ local orphans = {}
901
+
902
+ for i , binding in ipairs (db .bindings ) do
903
+ local function HasParent (group )
904
+ return binding .parent == group .uid
905
+ end
906
+
907
+ if upgradeData [13 ].seen [binding .uid ] then
908
+ if binding .parent == nil or FindInTableIf (db .groups , HasParent ) then
909
+ binding .uid = Addon .db .global .nextUid
910
+ Addon .db .global .nextUid = binding .uid + 1
911
+ else
912
+ table.insert (orphans , i )
913
+ end
914
+ elseif binding .parent ~= nil and not FindInTableIf (db .groups , HasParent ) then
915
+ binding .parent = nil
916
+ end
917
+
918
+ upgradeData [13 ].seen [binding .uid ] = true
919
+ end
920
+
921
+ table.sort (orphans , function (a , b ) return a > b end )
922
+ for _ , i in ipairs (orphans ) do
923
+ table.remove (db .bindings , i )
924
+ end
925
+ end
893
926
end
894
927
895
928
-- Private addon API
@@ -909,6 +942,8 @@ function Addon:UpgradeDatabase(from)
909
942
-- when the value of a constant changes. Always use direct values that are
910
943
-- read from the database.
911
944
945
+ table .wipe (upgradeData )
946
+
912
947
if not Addon .DISABLE_GLOBAL_SCOPE then
913
948
local src = from or Addon .db .global .version or Addon .DATA_VERSION
914
949
0 commit comments