@@ -2,15 +2,12 @@ namespace AgDatabaseMove
22{
33 using System ;
44 using System . Collections . Generic ;
5+ using System . Linq ;
56 using SmoFacade ;
67
7- public class BackupMetadataEqualityComparer : IEqualityComparer < BackupMetadata >
8+ public class StripedBackupEqualityComparer : IEqualityComparer < BackupMetadata >
89 {
9- /// <summary>
10- /// This is used for checking similar backups (like striped backups)
11- /// </summary>
12- /// <returns>bool</returns>
13- public bool EqualsExceptForPhysicalDeviceName ( BackupMetadata x , BackupMetadata y )
10+ public bool Equals ( BackupMetadata x , BackupMetadata y )
1411 {
1512 return x . LastLsn == y . LastLsn &&
1613 x . FirstLsn == y . FirstLsn &&
@@ -20,21 +17,10 @@ public bool EqualsExceptForPhysicalDeviceName(BackupMetadata x, BackupMetadata y
2017 x . DatabaseBackupLsn == x . DatabaseBackupLsn ;
2118 }
2219
23- /// <summary>
24- /// This is used for checking exactly the same backup (like finding duplicates)
25- /// </summary>
26- /// <returns>bool</returns>
27- public bool Equals ( BackupMetadata x , BackupMetadata y )
28- {
29- return EqualsExceptForPhysicalDeviceName ( x , y )
30- && x . PhysicalDeviceName == y . PhysicalDeviceName ;
31- }
32-
3320 public int GetHashCode ( BackupMetadata obj )
3421 {
3522 var hashCode = - 1277603921 ;
3623 hashCode = hashCode * - 1521134295 + EqualityComparer < string > . Default . GetHashCode ( obj . DatabaseName ) ;
37- hashCode = hashCode * - 1521134295 + EqualityComparer < string > . Default . GetHashCode ( obj . PhysicalDeviceName ) ;
3824 hashCode = hashCode * - 1521134295 +
3925 EqualityComparer < BackupFileTools . BackupType > . Default . GetHashCode ( obj . BackupType ) ;
4026 hashCode = hashCode * - 1521134295 + obj . FirstLsn . GetHashCode ( ) ;
@@ -43,6 +29,28 @@ public int GetHashCode(BackupMetadata obj)
4329 hashCode = hashCode * - 1521134295 + obj . DatabaseBackupLsn . GetHashCode ( ) ;
4430 return hashCode ;
4531 }
32+
33+ }
34+
35+ /// <summary>
36+ /// Two BackupMetadatas are the same, if they are like striped backups but also have the same `PhysicalDeviceName`
37+ /// </summary>
38+ public class BackupMetadataEqualityComparer : IEqualityComparer < BackupMetadata >
39+ {
40+ private readonly StripedBackupEqualityComparer _stripedBackupEqualityComparer = new StripedBackupEqualityComparer ( ) ;
41+
42+ public bool Equals ( BackupMetadata x , BackupMetadata y )
43+ {
44+ return _stripedBackupEqualityComparer . Equals ( x , y )
45+ && x . PhysicalDeviceName == y . PhysicalDeviceName ;
46+ }
47+
48+ public int GetHashCode ( BackupMetadata obj )
49+ {
50+ var hashCode = _stripedBackupEqualityComparer . GetHashCode ( obj ) ;
51+ hashCode = hashCode * - 1521134295 + EqualityComparer < string > . Default . GetHashCode ( obj . PhysicalDeviceName ) ;
52+ return hashCode ;
53+ }
4654 }
4755
4856 /// <summary>
@@ -72,4 +80,22 @@ public object Clone()
7280 return MemberwiseClone ( ) ;
7381 }
7482 }
83+
84+ public class StripedBackupSet
85+ {
86+ public IEnumerable < BackupMetadata > StripedBackups { get ; private set ; }
87+
88+ private StripedBackupSet ( IEnumerable < BackupMetadata > stripedBackups )
89+ {
90+ StripedBackups = stripedBackups ;
91+ }
92+
93+ public static IEnumerable < StripedBackupSet > GetStripedBackupSetChain ( IEnumerable < BackupMetadata > backups )
94+ {
95+ var chain = backups
96+ . GroupBy ( b => b , new StripedBackupEqualityComparer ( ) )
97+ . Select ( group => new StripedBackupSet ( group ) ) ;
98+ return chain ;
99+ }
100+ }
75101}
0 commit comments