From 006859b3b6611706a0cc35a92973bf2d7b52e832 Mon Sep 17 00:00:00 2001 From: Kolar David Date: Wed, 22 Jan 2025 07:37:02 +0100 Subject: [PATCH 1/2] Appending possible datatypes for average aggregation function during expresion creation. --- src/Microsoft.OData.Core/UriParser/Aggregation/ApplyBinder.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Microsoft.OData.Core/UriParser/Aggregation/ApplyBinder.cs b/src/Microsoft.OData.Core/UriParser/Aggregation/ApplyBinder.cs index a01d4c2ae7..ae8a17d7b4 100644 --- a/src/Microsoft.OData.Core/UriParser/Aggregation/ApplyBinder.cs +++ b/src/Microsoft.OData.Core/UriParser/Aggregation/ApplyBinder.cs @@ -176,6 +176,9 @@ private IEdmTypeReference CreateAggregateExpressionTypeReference(SingleValueNode EdmPrimitiveTypeKind expressionPrimitiveKind = expressionType.PrimitiveKind(); switch (expressionPrimitiveKind) { + case EdmPrimitiveTypeKind.SByte: + case EdmPrimitiveTypeKind.Byte: + case EdmPrimitiveTypeKind.Int16: case EdmPrimitiveTypeKind.Int32: case EdmPrimitiveTypeKind.Int64: case EdmPrimitiveTypeKind.Double: From 8e40347b07b019848d8515acae8ae1052da8ab6d Mon Sep 17 00:00:00 2001 From: Kolar David Date: Fri, 24 Jan 2025 07:17:58 +0100 Subject: [PATCH 2/2] Adding test. --- .../Extensions/Binders/ApplyBinderTests.cs | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/test/UnitTests/Microsoft.OData.Core.Tests/UriParser/Extensions/Binders/ApplyBinderTests.cs b/test/UnitTests/Microsoft.OData.Core.Tests/UriParser/Extensions/Binders/ApplyBinderTests.cs index 30dcc3f62f..9270680070 100644 --- a/test/UnitTests/Microsoft.OData.Core.Tests/UriParser/Extensions/Binders/ApplyBinderTests.cs +++ b/test/UnitTests/Microsoft.OData.Core.Tests/UriParser/Extensions/Binders/ApplyBinderTests.cs @@ -838,6 +838,27 @@ public void BindApplyWithGroupByComplexAndTypeCastShouldReturnApplyClause() Assert.Empty(homeNode.ChildTransformations); } + [Fact] + public void BindApplyWithAverageWithInt16PropertyShouldReturnApplyClause() + { + IEnumerable tokens = _parser.ParseApply("aggregate(FavoriteNumber with average as AverageFavoriteNumber)"); + + ApplyBinder binder = new ApplyBinder(FakeBindMethods.BindMethodReturningASingleFloatPrimitive, _bindingState); + ApplyClause actual = binder.BindApply(tokens); + + Assert.NotNull(actual); + AggregateTransformationNode aggregate = Assert.IsType(Assert.Single(actual.Transformations)); + + Assert.Equal(TransformationNodeKind.Aggregate, aggregate.Kind); + Assert.NotNull(aggregate.AggregateExpressions); + + AggregateExpression statement = Assert.IsType(Assert.Single(aggregate.AggregateExpressions)); + Assert.NotNull(statement.Expression); + Assert.Same(FakeBindMethods.FakeSingleFloatPrimitive, statement.Expression); + Assert.Equal(AggregationMethod.Average, statement.Method); + Assert.Equal("AverageFavoriteNumber", statement.Alias); + } + private static ConstantNode _booleanPrimitiveNode = new ConstantNode(true); private static SingleValueNode BindMethodReturnsBooleanPrimitive(QueryToken token)