@@ -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,133 @@ 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+ using ( var session = Domain . OpenSession ( ) )
102+ using ( var t = session . OpenTransaction ( ) ) {
103+ var item = new Item ( ) { Tag = 10 } ;
104+ DelayedQueryWithInclude ( session ) ;
105+ t . Complete ( ) ;
106+ }
107+ TestHelper . CollectGarbage ( true ) ;
108+ Assert . AreEqual ( 0 , OtherService1 . InstanceCount ) ;
109+ }
110+
111+ [ Test ]
112+ public void DelayedQueryWithContainsTest ( )
113+ {
114+ using ( var session = Domain . OpenSession ( ) )
115+ using ( var t = session . OpenTransaction ( ) ) {
116+ var item = new Item ( ) { Tag = 10 } ;
117+ DelayedQueryWithContains ( session ) ;
118+ t . Complete ( ) ;
119+ }
120+
121+ TestHelper . CollectGarbage ( true ) ;
122+ Assert . AreEqual ( 0 , OtherService2 . InstanceCount ) ;
123+ }
124+
125+ [ Test ]
126+ public void DelayedQueryWithEqualityTest ( )
62127 {
63128 using ( var session = Domain . OpenSession ( ) )
64129 using ( var t = session . OpenTransaction ( ) ) {
65130 var item = new Item ( ) { Tag = 10 } ;
66- DelayedQuery ( session ) ;
131+ DelayedQueryWithEquality ( session ) ;
67132 t . Complete ( ) ;
68133 }
69- GC . Collect ( ) ;
70- Thread . Sleep ( 1000 ) ;
71- GC . Collect ( ) ;
72- Assert . AreEqual ( 0 , OtherService . InstanceCount ) ;
134+
135+ TestHelper . CollectGarbage ( true ) ;
136+ Assert . AreEqual ( 0 , OtherService3 . InstanceCount ) ;
137+ }
138+
139+ private void DelayedQueryWithEquality ( Session session )
140+ {
141+ var id = 1 ;
142+ var otherService = new OtherService3 ( ) ;
143+
144+ var items = session . Query . CreateDelayedQuery ( "ABC" , q =>
145+ from t in q . All < Item > ( )
146+ where t . Id == id
147+ select t ) . ToArray ( ) ;
148+
149+ var bb1 = items
150+ . Select ( a => new {
151+ a . Id ,
152+ A = new {
153+ B = otherService . N == a . Id
154+ } ,
155+ } ) ;
73156 }
74157
75- private void DelayedQuery ( Session session )
158+ private void DelayedQueryWithInclude ( Session session )
76159 {
77160 var ids = new [ ] { 1 , 2 } ;
78- var otherService = new OtherService ( ) ;
161+ var otherService = new OtherService1 ( ) ;
79162
80163 var items = session . Query . CreateDelayedQuery ( q =>
81164 from t in q . All < Item > ( )
@@ -90,5 +173,24 @@ where t.Id.In(ids)
90173 } ,
91174 } ) ;
92175 }
176+
177+ private void DelayedQueryWithContains ( Session session )
178+ {
179+ var ids = new [ ] { 1 , 2 } ;
180+ var otherService = new OtherService2 ( ) ;
181+
182+ var items = session . Query . CreateDelayedQuery ( q =>
183+ from t in q . All < Item > ( )
184+ where ids . Contains ( t . Id )
185+ select t ) . ToArray ( ) ;
186+
187+ var bb1 = items
188+ . Select ( a => new {
189+ a . Id ,
190+ A = new {
191+ B = otherService . N == a . Id
192+ } ,
193+ } ) ;
194+ }
93195 }
94196}
0 commit comments