@@ -715,18 +715,8 @@ private Expression VisitAggregate(Expression source, MethodInfo method, LambdaEx
715715 var originProjection = origin . First ;
716716 var originColumnIndex = origin . Second ;
717717
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 ) ;
730720 var originDataSource = originProjection . ItemProjector . DataSource ;
731721 var resultDataSource = originDataSource . Aggregate ( null , aggregateDescriptor ) ;
732722
@@ -808,55 +798,6 @@ private Expression VisitAggregate(Expression source, MethodInfo method, LambdaEx
808798 return Expression . Convert ( result , resultType ) ;
809799 }
810800 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- }
860801 }
861802
862803 private CompilableProvider ChooseSourceForAggregate ( CompilableProvider left , CompilableProvider right ,
0 commit comments