@@ -19,7 +19,7 @@ namespace Xtensive.Orm.Tests.Issues
1919 namespace IssueGithub0224_DelayedQueryCapture_Model
2020 {
2121 [ HierarchyRoot ]
22- class Item : Entity
22+ public class Item : Entity
2323 {
2424 [ Field , Key ]
2525 public int Id { get ; private set ; }
@@ -32,50 +32,139 @@ class Item : Entity
3232 [ Serializable ]
3333 public class IssueGithub0224_DelayedQueryCapture : AutoBuildTest
3434 {
35- public class OtherService
35+
36+ #region Services
37+
38+ public class OtherService1
39+ {
40+ public static volatile int InstanceCount ;
41+
42+ public int N ;
43+
44+ public OtherService1 ( )
45+ {
46+ _ = Interlocked . Increment ( ref InstanceCount ) ;
47+ }
48+
49+ ~ OtherService1 ( )
50+ {
51+ _ = Interlocked . Decrement ( ref InstanceCount ) ;
52+ }
53+ }
54+
55+ public class OtherService2
56+ {
57+ public static volatile int InstanceCount ;
58+
59+ public int N ;
60+
61+ public OtherService2 ( )
62+ {
63+ _ = Interlocked . Increment ( ref InstanceCount ) ;
64+ }
65+
66+ ~ OtherService2 ( )
67+ {
68+ _ = Interlocked . Decrement ( ref InstanceCount ) ;
69+ }
70+ }
71+
72+ public class OtherService3
3673 {
3774 public static volatile int InstanceCount ;
3875
3976 public int N ;
4077
41- public OtherService ( )
78+ public OtherService3 ( )
4279 {
43- Interlocked . Increment ( ref InstanceCount ) ;
80+ _ = Interlocked . Increment ( ref InstanceCount ) ;
4481 }
4582
46- ~ OtherService ( )
83+ ~ OtherService3 ( )
4784 {
48- Interlocked . Decrement ( ref InstanceCount ) ;
85+ _ = Interlocked . Decrement ( ref InstanceCount ) ;
4986 }
5087 }
5188
89+ #endregion
5290
5391 protected override DomainConfiguration BuildConfiguration ( )
5492 {
5593 var config = base . BuildConfiguration ( ) ;
56- config . Types . Register ( typeof ( Item ) . Assembly , typeof ( Item ) . Namespace ) ;
94+ config . Types . Register ( typeof ( Item ) ) ;
5795 return config ;
5896 }
5997
6098 [ Test ]
61- public void DelayedQueryCapture ( )
99+ public void DelayedQueryWithIncludeTest ( )
100+ {
101+ var cachedItems = Domain . QueryCache . Count ;
102+ using ( var session = Domain . OpenSession ( ) )
103+ using ( var t = session . OpenTransaction ( ) ) {
104+ var item = new Item ( ) { Tag = 10 } ;
105+ DelayedQueryWithInclude ( session ) ;
106+ t . Complete ( ) ;
107+ }
108+ TestHelper . CollectGarbage ( true ) ;
109+ Assert . AreEqual ( 0 , OtherService1 . InstanceCount ) ;
110+ Assert . That ( Domain . QueryCache . Count , Is . EqualTo ( cachedItems ) ) ;
111+ }
112+
113+ [ Test ]
114+ public void DelayedQueryWithContainsTest ( )
115+ {
116+ var cachedItems = Domain . QueryCache . Count ;
117+ using ( var session = Domain . OpenSession ( ) )
118+ using ( var t = session . OpenTransaction ( ) ) {
119+ var item = new Item ( ) { Tag = 10 } ;
120+ DelayedQueryWithContains ( session ) ;
121+ t . Complete ( ) ;
122+ }
123+
124+ TestHelper . CollectGarbage ( true ) ;
125+ Assert . AreEqual ( 0 , OtherService2 . InstanceCount ) ;
126+ Assert . That ( Domain . QueryCache . Count , Is . EqualTo ( cachedItems ) ) ;
127+ }
128+
129+ [ Test ]
130+ public void DelayedQueryWithEqualityTest ( )
62131 {
132+ var cachedItems = Domain . QueryCache . Count ;
63133 using ( var session = Domain . OpenSession ( ) )
64134 using ( var t = session . OpenTransaction ( ) ) {
65135 var item = new Item ( ) { Tag = 10 } ;
66- DelayedQuery ( session ) ;
136+ DelayedQueryWithEquality ( session ) ;
67137 t . Complete ( ) ;
68138 }
69- GC . Collect ( ) ;
70- Thread . Sleep ( 1000 ) ;
71- GC . Collect ( ) ;
72- Assert . AreEqual ( 0 , OtherService . InstanceCount ) ;
139+
140+ TestHelper . CollectGarbage ( true ) ;
141+ Assert . AreEqual ( 0 , OtherService3 . InstanceCount ) ;
142+ Assert . That ( Domain . QueryCache . Count , Is . EqualTo ( cachedItems + 1 ) ) ;
143+ }
144+
145+ private void DelayedQueryWithEquality ( Session session )
146+ {
147+ var id = 1 ;
148+ var otherService = new OtherService3 ( ) ;
149+
150+ var items = session . Query . CreateDelayedQuery ( "ABC" , q =>
151+ from t in q . All < Item > ( )
152+ where t . Id == id
153+ select t ) . ToArray ( ) ;
154+
155+ var bb1 = items
156+ . Select ( a => new {
157+ a . Id ,
158+ A = new {
159+ B = otherService . N == a . Id
160+ } ,
161+ } ) ;
73162 }
74163
75- private void DelayedQuery ( Session session )
164+ private void DelayedQueryWithInclude ( Session session )
76165 {
77166 var ids = new [ ] { 1 , 2 } ;
78- var otherService = new OtherService ( ) ;
167+ var otherService = new OtherService1 ( ) ;
79168
80169 var items = session . Query . CreateDelayedQuery ( q =>
81170 from t in q . All < Item > ( )
@@ -90,5 +179,24 @@ where t.Id.In(ids)
90179 } ,
91180 } ) ;
92181 }
182+
183+ private void DelayedQueryWithContains ( Session session )
184+ {
185+ var ids = new [ ] { 1 , 2 } ;
186+ var otherService = new OtherService2 ( ) ;
187+
188+ var items = session . Query . CreateDelayedQuery ( q =>
189+ from t in q . All < Item > ( )
190+ where ids . Contains ( t . Id )
191+ select t ) . ToArray ( ) ;
192+
193+ var bb1 = items
194+ . Select ( a => new {
195+ a . Id ,
196+ A = new {
197+ B = otherService . N == a . Id
198+ } ,
199+ } ) ;
200+ }
93201 }
94202}
0 commit comments