@@ -14,95 +14,90 @@ public class QueryKeyFixture : TestCase
1414 private readonly SqlString SqlAll =
1515 new SqlString ( "select entitywith0_.id as id0_, entitywith0_.Description as Descript2_0_, entitywith0_.Value as Value0_ from EntityWithFilters entitywith0_" ) ;
1616
17- protected override string MappingsAssembly
18- {
19- get { return "NHibernate.Test" ; }
20- }
17+ protected override string MappingsAssembly => "NHibernate.Test" ;
2118
22- protected override IList Mappings
23- {
24- get { return new [ ] { "CacheTest.EntityWithFilters.hbm.xml" } ; }
25- }
19+ protected override IList Mappings => new [ ] { "CacheTest.EntityWithFilters.hbm.xml" } ;
2620
2721 [ Test ]
2822 public void EqualityWithFilters ( )
2923 {
30- QueryKey qk , qk1 ;
31- QueryKeyFilterDescLikeToCompare ( out qk , out qk1 ) ;
32- Assert . That ( qk , Is . EqualTo ( qk1 ) ) ;
24+ QueryKeyFilterDescLikeToCompare ( out var qk , out var qk1 , true ) ;
25+ Assert . That ( qk , Is . EqualTo ( qk1 ) , "Like" ) ;
3326
34- QueryKeyFilterDescValueToCompare ( out qk , out qk1 ) ;
35- Assert . That ( qk , Is . EqualTo ( qk1 ) ) ;
27+ QueryKeyFilterDescValueToCompare ( out qk , out qk1 , true ) ;
28+ Assert . That ( qk , Is . EqualTo ( qk1 ) , "Value" ) ;
3629 }
3730
38- private void QueryKeyFilterDescLikeToCompare ( out QueryKey qk , out QueryKey qk1 )
31+ private void QueryKeyFilterDescLikeToCompare ( out QueryKey qk , out QueryKey qk1 , bool sameValue )
3932 {
4033 const string filterName = "DescriptionLike" ;
4134 var f = new FilterImpl ( Sfi . GetFilterDefinition ( filterName ) ) ;
4235 f . SetParameter ( "pLike" , "so%" ) ;
43- var fk = new FilterKey ( filterName , f . Parameters , f . FilterDefinition . ParameterTypes ) ;
36+ var fk = new FilterKey ( f ) ;
4437 ISet < FilterKey > fks = new HashSet < FilterKey > { fk } ;
4538 qk = new QueryKey ( Sfi , SqlAll , new QueryParameters ( ) , fks , null ) ;
4639
4740 var f1 = new FilterImpl ( Sfi . GetFilterDefinition ( filterName ) ) ;
48- f1 . SetParameter ( "pLike" , "%ing" ) ;
49- var fk1 = new FilterKey ( filterName , f . Parameters , f . FilterDefinition . ParameterTypes ) ;
41+ f1 . SetParameter ( "pLike" , sameValue ? "so%" : "%ing" ) ;
42+ var fk1 = new FilterKey ( f1 ) ;
5043 fks = new HashSet < FilterKey > { fk1 } ;
5144 qk1 = new QueryKey ( Sfi , SqlAll , new QueryParameters ( ) , fks , null ) ;
5245 }
5346
54- private void QueryKeyFilterDescValueToCompare ( out QueryKey qk , out QueryKey qk1 )
47+ private void QueryKeyFilterDescValueToCompare ( out QueryKey qk , out QueryKey qk1 , bool sameValue )
5548 {
5649 const string filterName = "DescriptionEqualAndValueGT" ;
5750
5851 var f = new FilterImpl ( Sfi . GetFilterDefinition ( filterName ) ) ;
5952 f . SetParameter ( "pDesc" , "something" ) . SetParameter ( "pValue" , 10 ) ;
60- var fk = new FilterKey ( filterName , f . Parameters , f . FilterDefinition . ParameterTypes ) ;
53+ var fk = new FilterKey ( f ) ;
6154 ISet < FilterKey > fks = new HashSet < FilterKey > { fk } ;
6255 qk = new QueryKey ( Sfi , SqlAll , new QueryParameters ( ) , fks , null ) ;
6356
6457 var f1 = new FilterImpl ( Sfi . GetFilterDefinition ( filterName ) ) ;
65- f1 . SetParameter ( "pDesc" , "something" ) . SetParameter ( "pValue" , 11 ) ;
66- var fk1 = new FilterKey ( filterName , f . Parameters , f . FilterDefinition . ParameterTypes ) ;
58+ f1 . SetParameter ( "pDesc" , "something" ) . SetParameter ( "pValue" , sameValue ? 10 : 11 ) ;
59+ var fk1 = new FilterKey ( f1 ) ;
6760 fks = new HashSet < FilterKey > { fk1 } ;
6861 qk1 = new QueryKey ( Sfi , SqlAll , new QueryParameters ( ) , fks , null ) ;
6962 }
7063
7164 [ Test ]
7265 public void NotEqualityWithFilters ( )
7366 {
74- QueryKey qk , qk1 ;
75- QueryKeyFilterDescLikeToCompare ( out qk , out qk1 ) ;
67+ QueryKeyFilterDescLikeToCompare ( out var qk , out var qk1 , false ) ;
68+ Assert . That ( qk , Is . Not . EqualTo ( qk1 ) , "qk & qk1" ) ;
7669
77- QueryKey qvk , qvk1 ;
78- QueryKeyFilterDescValueToCompare ( out qvk , out qvk1 ) ;
70+ QueryKeyFilterDescValueToCompare ( out var qvk , out var qvk1 , false ) ;
71+ Assert . That ( qvk , Is . Not . EqualTo ( qvk1 ) , "qvk & qvk1" ) ;
7972
80- Assert . That ( qk , Is . Not . EqualTo ( qvk ) ) ;
81- Assert . That ( qk1 , Is . Not . EqualTo ( qvk1 ) ) ;
73+ Assert . That ( qk , Is . Not . EqualTo ( qvk ) , "qk & qvk" ) ;
74+ Assert . That ( qk1 , Is . Not . EqualTo ( qvk1 ) , "qk1 & qvk1" ) ;
8275 }
8376
8477 [ Test ]
8578 public void HashCodeWithFilters ( )
8679 {
87- QueryKey qk , qk1 ;
88- QueryKeyFilterDescLikeToCompare ( out qk , out qk1 ) ;
89- Assert . That ( qk . GetHashCode ( ) , Is . EqualTo ( qk1 . GetHashCode ( ) ) ) ;
80+ QueryKeyFilterDescLikeToCompare ( out var qk , out var qk1 , true ) ;
81+ Assert . That ( qk . GetHashCode ( ) , Is . EqualTo ( qk1 . GetHashCode ( ) ) , "Like" ) ;
9082
91- QueryKeyFilterDescValueToCompare ( out qk , out qk1 ) ;
92- Assert . That ( qk . GetHashCode ( ) , Is . EqualTo ( qk1 . GetHashCode ( ) ) ) ;
83+ QueryKeyFilterDescValueToCompare ( out qk , out qk1 , true ) ;
84+ Assert . That ( qk . GetHashCode ( ) , Is . EqualTo ( qk1 . GetHashCode ( ) ) , "Value" ) ;
9385 }
9486
9587 [ Test ]
9688 public void NotEqualHashCodeWithFilters ( )
9789 {
98- QueryKey qk , qk1 ;
99- QueryKeyFilterDescLikeToCompare ( out qk , out qk1 ) ;
90+ // GetHashCode semantic does not guarantee no collision may ever occur, but the algorithm should
91+ // generates different hashcodes for similar but inequal cases. These tests check that cache keys
92+ // for a query generated for different parameters values are no more equal.
93+ QueryKeyFilterDescLikeToCompare ( out var qk , out var qk1 , false ) ;
94+ Assert . That ( qk . GetHashCode ( ) , Is . Not . EqualTo ( qk1 . GetHashCode ( ) ) , "qk & qk1" ) ;
10095
101- QueryKey qvk , qvk1 ;
102- QueryKeyFilterDescValueToCompare ( out qvk , out qvk1 ) ;
96+ QueryKeyFilterDescValueToCompare ( out var qvk , out var qvk1 , false ) ;
97+ Assert . That ( qvk . GetHashCode ( ) , Is . Not . EqualTo ( qvk1 . GetHashCode ( ) ) , "qvk & qvk1" ) ;
10398
104- Assert . That ( qk . GetHashCode ( ) , Is . Not . EqualTo ( qvk . GetHashCode ( ) ) ) ;
105- Assert . That ( qk1 . GetHashCode ( ) , Is . Not . EqualTo ( qvk1 . GetHashCode ( ) ) ) ;
99+ Assert . That ( qk . GetHashCode ( ) , Is . Not . EqualTo ( qvk . GetHashCode ( ) ) , "qk & qvk" ) ;
100+ Assert . That ( qk1 . GetHashCode ( ) , Is . Not . EqualTo ( qvk1 . GetHashCode ( ) ) , "qk1 & qvk1" ) ;
106101 }
107102
108103 [ Test ]
@@ -111,18 +106,18 @@ public void ToStringWithFilters()
111106 string filterName = "DescriptionLike" ;
112107 var f = new FilterImpl ( Sfi . GetFilterDefinition ( filterName ) ) ;
113108 f . SetParameter ( "pLike" , "so%" ) ;
114- var fk = new FilterKey ( filterName , f . Parameters , f . FilterDefinition . ParameterTypes ) ;
109+ var fk = new FilterKey ( f ) ;
115110 ISet < FilterKey > fks = new HashSet < FilterKey > { fk } ;
116111 var qk = new QueryKey ( Sfi , SqlAll , new QueryParameters ( ) , fks , null ) ;
117- Assert . That ( qk . ToString ( ) , Does . Contain ( string . Format ( "filters: ['{0 }']" , fk ) ) ) ;
112+ Assert . That ( qk . ToString ( ) , Does . Contain ( $ "filters: ['{ fk } ']") , "Like" ) ;
118113
119114 filterName = "DescriptionEqualAndValueGT" ;
120115 f = new FilterImpl ( Sfi . GetFilterDefinition ( filterName ) ) ;
121116 f . SetParameter ( "pDesc" , "something" ) . SetParameter ( "pValue" , 10 ) ;
122- fk = new FilterKey ( filterName , f . Parameters , f . FilterDefinition . ParameterTypes ) ;
117+ fk = new FilterKey ( f ) ;
123118 fks = new HashSet < FilterKey > { fk } ;
124119 qk = new QueryKey ( Sfi , SqlAll , new QueryParameters ( ) , fks , null ) ;
125- Assert . That ( qk . ToString ( ) , Does . Contain ( string . Format ( "filters: ['{0 }']" , fk ) ) ) ;
120+ Assert . That ( qk . ToString ( ) , Does . Contain ( $ "filters: ['{ fk } ']") , "Value" ) ;
126121 }
127122
128123 [ Test ]
@@ -131,16 +126,16 @@ public void ToStringWithMoreFilters()
131126 string filterName = "DescriptionLike" ;
132127 var f = new FilterImpl ( Sfi . GetFilterDefinition ( filterName ) ) ;
133128 f . SetParameter ( "pLike" , "so%" ) ;
134- var fk = new FilterKey ( filterName , f . Parameters , f . FilterDefinition . ParameterTypes ) ;
129+ var fk = new FilterKey ( f ) ;
135130
136131 filterName = "DescriptionEqualAndValueGT" ;
137132 var fv = new FilterImpl ( Sfi . GetFilterDefinition ( filterName ) ) ;
138133 fv . SetParameter ( "pDesc" , "something" ) . SetParameter ( "pValue" , 10 ) ;
139- var fvk = new FilterKey ( filterName , f . Parameters , f . FilterDefinition . ParameterTypes ) ;
134+ var fvk = new FilterKey ( fv ) ;
140135
141136 ISet < FilterKey > fks = new HashSet < FilterKey > { fk , fvk } ;
142137 var qk = new QueryKey ( Sfi , SqlAll , new QueryParameters ( ) , fks , null ) ;
143- Assert . That ( qk . ToString ( ) , Does . Contain ( string . Format ( "filters: ['{0 }', '{1 }']" , fk , fvk ) ) ) ;
138+ Assert . That ( qk . ToString ( ) , Does . Contain ( $ "filters: ['{ fk } ', '{ fvk } ']") ) ;
144139 }
145140 }
146141}
0 commit comments