@@ -715,18 +715,8 @@ private Expression VisitAggregate(Expression source, MethodInfo method, LambdaEx
715
715
var originProjection = origin . First ;
716
716
var originColumnIndex = origin . Second ;
717
717
718
- // experiments
719
-
720
- var headerColumns = originProjection . ItemProjector . DataSource . Header . Columns ;
721
- var aggregatedColumn = headerColumns [ originColumnIndex ] ;
722
-
723
- // For decimal type we try to guess result precision and scale to avoid
724
- // usage of general values which can create some issues result reading
725
- ( int precision , int scale ) ? aggregateTypeHints = TryGuessDecimalPrecisionAndSclale ( aggregatedColumn , headerColumns , context . Model ) ;
726
-
727
- var aggregateDescriptor = aggregateTypeHints . HasValue
728
- ? new AggregateColumnDescriptor ( context . GetNextColumnAlias ( ) , originColumnIndex , aggregateType , aggregateTypeHints . Value )
729
- : new AggregateColumnDescriptor ( context . GetNextColumnAlias ( ) , originColumnIndex , aggregateType ) ;
718
+ var aggregateDescriptor = new AggregateColumnDescriptor (
719
+ context . GetNextColumnAlias ( ) , originColumnIndex , aggregateType ) ;
730
720
var originDataSource = originProjection . ItemProjector . DataSource ;
731
721
var resultDataSource = originDataSource . Aggregate ( null , aggregateDescriptor ) ;
732
722
@@ -808,55 +798,6 @@ private Expression VisitAggregate(Expression source, MethodInfo method, LambdaEx
808
798
return Expression . Convert ( result , resultType ) ;
809
799
}
810
800
return result ;
811
-
812
-
813
- static ( int , int ) ? TryGuessDecimalPrecisionAndSclale ( Column aggregatedColumn , Rse . ColumnCollection headerColumns , Orm . Model . DomainModel domainModel )
814
- {
815
- if ( aggregatedColumn . Type != WellKnownTypes . Decimal )
816
- return null ;
817
-
818
- if ( aggregatedColumn is MappedColumn mColumn ) {
819
- var resolvedColumn = mColumn . ColumnInfoRef . Resolve ( domainModel ) ;
820
- if ( resolvedColumn . Precision . HasValue && resolvedColumn . Scale . HasValue )
821
- return ( resolvedColumn . Precision . Value , resolvedColumn . Scale . Value ) ;
822
- }
823
- else if ( aggregatedColumn is CalculatedColumn cColumn ) {
824
- var expression = cColumn . Expression ;
825
- var usedColumns = new Rse . Transformation . TupleAccessGatherer ( ) . Gather ( expression ) ;
826
-
827
- var maxFloorDigits = - 1 ;
828
- var maxScaleDigits = - 1 ;
829
- foreach ( var cIndex in usedColumns . Distinct ( ) ) {
830
- var usedColumn = headerColumns [ cIndex ] ;
831
- if ( usedColumn is MappedColumn mmColumn ) {
832
- var resolvedColumn = mmColumn . ColumnInfoRef . Resolve ( domainModel ) ;
833
-
834
- ( int ? p , int ? s ) @params = Type . GetTypeCode ( resolvedColumn . ValueType ) switch {
835
- TypeCode . Decimal => ( resolvedColumn . Precision , resolvedColumn . Scale ) ,
836
- TypeCode . Int32 or TypeCode . UInt32 => ( 19 , 8 ) ,
837
- TypeCode . Int64 or TypeCode . UInt64 => ( 28 , 8 ) ,
838
- TypeCode . Byte or TypeCode . SByte => ( 8 , 5 ) ,
839
- TypeCode . Int16 or TypeCode . UInt16 => ( 10 , 5 ) ,
840
- _ => ( null , null ) ,
841
- } ;
842
-
843
- if ( @params . p . HasValue && @params . s . HasValue ) {
844
- if ( maxScaleDigits < @params . s . Value )
845
- maxScaleDigits = @params . s . Value ;
846
- var floorDigits = @params . p . Value - @params . s . Value ;
847
- if ( maxFloorDigits < floorDigits )
848
- maxFloorDigits = floorDigits ;
849
- }
850
- }
851
- }
852
- if ( maxFloorDigits == - 1 || maxScaleDigits == - 1 )
853
- return null ;
854
- if ( maxFloorDigits + maxScaleDigits <= 28 )
855
- return ( maxFloorDigits + maxScaleDigits , maxScaleDigits ) ;
856
- }
857
-
858
- return null ;
859
- }
860
801
}
861
802
862
803
private CompilableProvider ChooseSourceForAggregate ( CompilableProvider left , CompilableProvider right ,
0 commit comments