@@ -19,7 +19,7 @@ namespace Xtensive.Orm.Tests.Issues
19
19
namespace IssueGithub0224_DelayedQueryCapture_Model
20
20
{
21
21
[ HierarchyRoot ]
22
- class Item : Entity
22
+ public class Item : Entity
23
23
{
24
24
[ Field , Key ]
25
25
public int Id { get ; private set ; }
@@ -32,50 +32,139 @@ class Item : Entity
32
32
[ Serializable ]
33
33
public class IssueGithub0224_DelayedQueryCapture : AutoBuildTest
34
34
{
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
36
73
{
37
74
public static volatile int InstanceCount ;
38
75
39
76
public int N ;
40
77
41
- public OtherService ( )
78
+ public OtherService3 ( )
42
79
{
43
- Interlocked . Increment ( ref InstanceCount ) ;
80
+ _ = Interlocked . Increment ( ref InstanceCount ) ;
44
81
}
45
82
46
- ~ OtherService ( )
83
+ ~ OtherService3 ( )
47
84
{
48
- Interlocked . Decrement ( ref InstanceCount ) ;
85
+ _ = Interlocked . Decrement ( ref InstanceCount ) ;
49
86
}
50
87
}
51
88
89
+ #endregion
52
90
53
91
protected override DomainConfiguration BuildConfiguration ( )
54
92
{
55
93
var config = base . BuildConfiguration ( ) ;
56
- config . Types . Register ( typeof ( Item ) . Assembly , typeof ( Item ) . Namespace ) ;
94
+ config . Types . Register ( typeof ( Item ) ) ;
57
95
return config ;
58
96
}
59
97
60
98
[ 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 ( )
62
131
{
132
+ var cachedItems = Domain . QueryCache . Count ;
63
133
using ( var session = Domain . OpenSession ( ) )
64
134
using ( var t = session . OpenTransaction ( ) ) {
65
135
var item = new Item ( ) { Tag = 10 } ;
66
- DelayedQuery ( session ) ;
136
+ DelayedQueryWithEquality ( session ) ;
67
137
t . Complete ( ) ;
68
138
}
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
+ } ) ;
73
162
}
74
163
75
- private void DelayedQuery ( Session session )
164
+ private void DelayedQueryWithInclude ( Session session )
76
165
{
77
166
var ids = new [ ] { 1 , 2 } ;
78
- var otherService = new OtherService ( ) ;
167
+ var otherService = new OtherService1 ( ) ;
79
168
80
169
var items = session . Query . CreateDelayedQuery ( q =>
81
170
from t in q . All < Item > ( )
@@ -90,5 +179,24 @@ where t.Id.In(ids)
90
179
} ,
91
180
} ) ;
92
181
}
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
+ }
93
201
}
94
202
}
0 commit comments