1- // Copyright (C) 2019-2020 Xtensive LLC.
1+ // Copyright (C) 2019-2024 Xtensive LLC.
22// This code is distributed under MIT license terms.
33// See the License.txt file in the project root for more information.
44// Created by: Alexey Kulakov
55// Created: 2019.02.14
66
7- using System ;
8- using System . Data . SqlTypes ;
97using System . Linq ;
108using NUnit . Framework ;
119using Xtensive . Orm . Configuration ;
1210using Xtensive . Orm . Tests . Issues . IssueJira0761_ReadingAverageByDecimalFieldModel ;
13- using Xtensive . Sql . Drivers . SqlServer ;
1411
1512namespace Xtensive . Orm . Tests . Issues . IssueJira0761_ReadingAverageByDecimalFieldModel
1613{
14+ [ HierarchyRoot ]
15+ public class DecimalValueStructureEntityByRefCase : Entity
16+ {
17+ [ Field , Key ]
18+ public int Id { get ; private set ; }
19+
20+ [ Field ]
21+ public DecimalValueStructureCase Ref { get ; set ; }
22+
23+ public DecimalValueStructureEntityByRefCase ( Session session )
24+ : base ( session )
25+ {
26+ }
27+ }
28+
29+ public class DecimalValueStructure : Structure
30+ {
31+ [ Field ( Precision = 19 , Scale = 5 ) ]
32+ public decimal Value { get ; set ; }
33+
34+ [ Field ]
35+ public int Code { get ; set ; }
36+
37+ public DecimalValueStructure ( Session session )
38+ : base ( session )
39+ {
40+ }
41+ }
42+
43+ [ HierarchyRoot ]
44+ public class DecimalValueStructureCase : Entity
45+ {
46+ [ Field , Key ]
47+ public int Id { get ; private set ; }
48+
49+ [ Field ]
50+ public DecimalValueStructure Struct { get ; set ; }
51+
52+ [ Field ( Precision = 19 , Scale = 5 ) ]
53+ public decimal AdditionalValue { get ; set ; }
54+
55+ public DecimalValueStructureCase ( Session session )
56+ : base ( session )
57+ {
58+ }
59+ }
60+
61+ [ HierarchyRoot ]
62+ public class KeyValueByEntityRefCase : Entity
63+ {
64+ [ Field , Key ]
65+ public int Id { get ; private set ; }
66+
67+ [ Field ]
68+ public KeyExpressionCase Ref { get ; set ; }
69+
70+ public KeyValueByEntityRefCase ( Session session )
71+ : base ( session )
72+ {
73+ }
74+ }
75+
76+ [ HierarchyRoot ]
77+ public class KeyExpressionCase : Entity
78+ {
79+ [ Field ( Precision = 19 , Scale = 5 ) , Key ]
80+ public decimal Id { get ; private set ; }
81+
82+ [ Field ]
83+ public int SomeValue { get ; set ; }
84+
85+ [ Field ( Precision = 19 , Scale = 5 ) ]
86+ public decimal AdditionalValue { get ; set ; }
87+
88+ public KeyExpressionCase ( Session session , decimal id )
89+ : base ( session , id )
90+ {
91+ }
92+ }
93+
94+ [ HierarchyRoot ]
95+ public class ValueByEntityRefCase : Entity
96+ {
97+ [ Field , Key ]
98+ public int Id { get ; private set ; }
99+
100+ [ Field ]
101+ public DirectFieldValueCase Ref { get ; set ; }
102+
103+ public ValueByEntityRefCase ( Session session )
104+ : base ( session )
105+ {
106+ }
107+ }
108+
109+ [ HierarchyRoot ]
110+ public class DirectFieldValueCase : Entity
111+ {
112+ [ Field , Key ]
113+ public int Id { get ; private set ; }
114+
115+ [ Field ( Precision = 19 , Scale = 5 ) ]
116+ public decimal Accepted { get ; set ; }
117+
118+ [ Field ( Precision = 19 , Scale = 5 ) ]
119+ public decimal AdditionalValue { get ; set ; }
120+
121+ public DirectFieldValueCase ( Session session )
122+ : base ( session )
123+ {
124+ }
125+ }
126+
17127 [ HierarchyRoot ]
18128 public class Order : Entity
19129 {
@@ -91,12 +201,33 @@ protected override void PopulateData()
91201 } ;
92202 }
93203
204+ foreach ( var i in Enumerable . Range ( 1 , 1000 ) ) {
205+ _ = new ValueByEntityRefCase ( session ) {
206+ Ref = new DirectFieldValueCase ( session ) {
207+ Accepted = 163767
208+ }
209+ } ;
210+
211+ _ = new KeyValueByEntityRefCase ( session ) {
212+ Ref = new KeyExpressionCase ( session , 163767 + i )
213+ } ;
214+
215+ _ = new DecimalValueStructureEntityByRefCase ( session ) {
216+ Ref = new DecimalValueStructureCase ( session ) {
217+ Struct = new DecimalValueStructure ( session ) {
218+ Value = 163767 ,
219+ Code = i
220+ }
221+ }
222+ } ;
223+ }
224+
94225 tx . Complete ( ) ;
95226 }
96227 }
97228
98229 [ Test ]
99- public void AverageTest ( )
230+ public void AverageComplexTest ( )
100231 {
101232 using ( var session = Domain . OpenSession ( ) )
102233 using ( var tx = session . OpenTransaction ( ) ) {
@@ -143,7 +274,7 @@ public void AverageTest()
143274 }
144275
145276 [ Test ]
146- public void SumTest ( )
277+ public void SumComplexTest ( )
147278 {
148279 using ( var session = Domain . OpenSession ( ) )
149280 using ( var tx = session . OpenTransaction ( ) ) {
@@ -188,5 +319,61 @@ public void SumTest()
188319 Assert . That ( queryResult , Is . EqualTo ( localResult ) ) ;
189320 }
190321 }
322+
323+ [ Test ]
324+ public void DirectFieldValueCase ( )
325+ {
326+ using ( var session = Domain . OpenSession ( ) )
327+ using ( var tx = session . OpenTransaction ( ) ) {
328+ var results = session . Query . All < DirectFieldValueCase > ( ) . Sum ( a => a . Accepted ) ;
329+ results = session . Query . All < DirectFieldValueCase > ( ) . Sum ( a => a . Accepted + a . AdditionalValue ) ;
330+ results = session . Query . All < DirectFieldValueCase > ( ) . Sum ( a => a . Accepted + 1m ) ;
331+ }
332+ }
333+
334+ [ Test ]
335+ public void ValueByEntityRefCase ( )
336+ {
337+ using ( var session = Domain . OpenSession ( ) )
338+ using ( var tx = session . OpenTransaction ( ) ) {
339+ var results = session . Query . All < ValueByEntityRefCase > ( ) . Sum ( a => a . Ref . Accepted ) ;
340+ }
341+ }
342+
343+ [ Test ]
344+ public void KeyExpressionCase ( )
345+ {
346+ using ( var session = Domain . OpenSession ( ) )
347+ using ( var tx = session . OpenTransaction ( ) ) {
348+ var results = session . Query . All < KeyExpressionCase > ( ) . Sum ( a => a . Id ) ;
349+ }
350+ }
351+
352+ [ Test ]
353+ public void KeyValueByEntityRefCase ( )
354+ {
355+ using ( var session = Domain . OpenSession ( ) )
356+ using ( var tx = session . OpenTransaction ( ) ) {
357+ var results = session . Query . All < KeyValueByEntityRefCase > ( ) . Sum ( a => a . Ref . Id ) ;
358+ }
359+ }
360+
361+ [ Test ]
362+ public void DecimalValueStructureCase ( )
363+ {
364+ using ( var session = Domain . OpenSession ( ) )
365+ using ( var tx = session . OpenTransaction ( ) ) {
366+ var results = session . Query . All < DecimalValueStructureCase > ( ) . Sum ( a => a . Struct . Value ) ;
367+ }
368+ }
369+
370+ [ Test ]
371+ public void DecimalValueStructureEntityByRefCase ( )
372+ {
373+ using ( var session = Domain . OpenSession ( ) )
374+ using ( var tx = session . OpenTransaction ( ) ) {
375+ var results = session . Query . All < DecimalValueStructureEntityByRefCase > ( ) . Sum ( a => a . Ref . Struct . Value ) ;
376+ }
377+ }
191378 }
192379}
0 commit comments