44// Created by: Denis Krjuchkov
55// Created: 2009.04.27
66
7+ using System ;
78using System . Collections . Generic ;
89using System . Linq ;
910using Xtensive . Core ;
@@ -18,6 +19,8 @@ namespace Xtensive.Orm.Providers.PostgreSql
1819{
1920 internal class SqlCompiler : Providers . SqlCompiler
2021 {
22+ private static readonly Type DecimalType = typeof ( decimal ) ;
23+
2124 protected override SqlProvider VisitFreeText ( FreeTextProvider provider )
2225 {
2326 var rankColumnName = provider . Header . Columns [ provider . Header . Columns . Count - 1 ] . Name ;
@@ -55,13 +58,19 @@ protected override SqlProvider VisitFreeText(FreeTextProvider provider)
5558 protected override SqlExpression ProcessAggregate ( SqlProvider source , List < SqlExpression > sourceColumns , AggregateColumn aggregateColumn )
5659 {
5760 var result = base . ProcessAggregate ( source , sourceColumns , aggregateColumn ) ;
58- if ( aggregateColumn . AggregateType == AggregateType . Sum || aggregateColumn . AggregateType == AggregateType . Avg ) {
61+ var aggregateType = aggregateColumn . AggregateType ;
62+ var originCalculateColumn = source . Origin . Header . Columns [ aggregateColumn . SourceIndex ] ;
63+ if ( aggregateType == AggregateType . Sum || aggregateType == AggregateType . Avg ) {
64+ if ( ! IsCalculatedColumn ( originCalculateColumn ) && aggregateColumn . Type == DecimalType ) {
65+ return result ;
66+ }
5967 result = SqlDml . Cast ( result , Driver . MapValueType ( aggregateColumn . Type ) ) ;
6068 }
61-
6269 return result ;
6370 }
6471
72+ private bool IsCalculatedColumn ( Column column ) => column is CalculatedColumn ;
73+
6574 public SqlCompiler ( HandlerAccessor handlers , CompilerConfiguration configuration )
6675 : base ( handlers , configuration )
6776 {
0 commit comments