Skip to content

Commit 55fc504

Browse files
committed
Revert changes of guessing precision and scale
1 parent 670995a commit 55fc504

File tree

1 file changed

+2
-61
lines changed

1 file changed

+2
-61
lines changed

Orm/Xtensive.Orm/Orm/Linq/Translator.Queryable.cs

Lines changed: 2 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)