Skip to content

Commit 403fb77

Browse files
committed
PostgreSQL provider compiler omits casts for sum/avg in case of columns
1 parent b5893d5 commit 403fb77

1 file changed

Lines changed: 11 additions & 2 deletions

File tree

Orm/Xtensive.Orm.PostgreSql/Orm.Providers.PostgreSql/SqlCompiler.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// Created by: Denis Krjuchkov
55
// Created: 2009.04.27
66

7+
using System;
78
using System.Collections.Generic;
89
using System.Linq;
910
using 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

Comments
 (0)