From df426a438150288e6275d16f93e55da6015dd890 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar <102276754+abhishekkumams@users.noreply.github.com> Date: Mon, 13 May 2024 12:46:21 +0800 Subject: [PATCH] Fix support for integer values in float/decimal type columns (#2205) ## Why make this change? - Closes #1629 - Unable to cast object of type 'HotChocolate.Language.IntValueNode' to type 'HotChocolate.Language.FloatValueNode', when using Integer values for float/decimal/single column types ## What is this change? - using `float.Parse()` and `decimal.Parse()` which automatically takes care of int values. ## How was this tested? - Added new test data points in the existing tests for insertion/updation of float/decimal/single type columns with Integer values ## Sample Request(s) ### Before: ![image](https://github.com/Azure/data-api-builder/assets/102276754/4d08254e-2fe0-458a-b0fc-9974c2e66caa) ![image](https://github.com/Azure/data-api-builder/assets/102276754/288c05aa-6f65-456f-9d81-29a71e5c6606) ### After: ![image](https://github.com/Azure/data-api-builder/assets/102276754/36da5645-8f51-45e2-9b46-bfa29c8802e1) ![image](https://github.com/Azure/data-api-builder/assets/102276754/15f9cd93-9f26-4b64-85d7-c79e2f1ad051) --------- Co-authored-by: Aniruddh Munde --- src/Core/Services/ExecutionHelper.cs | 6 +++--- .../GraphQLSupportedTypesTestsBase.cs | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/Core/Services/ExecutionHelper.cs b/src/Core/Services/ExecutionHelper.cs index 3a33a030cb..8f201b3012 100644 --- a/src/Core/Services/ExecutionHelper.cs +++ b/src/Core/Services/ExecutionHelper.cs @@ -318,9 +318,9 @@ private static bool TryGetPropertyFromParent( SupportedHotChocolateTypes.SHORT_TYPE => ((IntValueNode)value).ToInt16(), SupportedHotChocolateTypes.INT_TYPE => ((IntValueNode)value).ToInt32(), SupportedHotChocolateTypes.LONG_TYPE => ((IntValueNode)value).ToInt64(), - SupportedHotChocolateTypes.SINGLE_TYPE => ((FloatValueNode)value).ToSingle(), - SupportedHotChocolateTypes.FLOAT_TYPE => ((FloatValueNode)value).ToDouble(), - SupportedHotChocolateTypes.DECIMAL_TYPE => ((FloatValueNode)value).ToDecimal(), + SupportedHotChocolateTypes.SINGLE_TYPE => value is IntValueNode intValueNode ? intValueNode.ToSingle() : ((FloatValueNode)value).ToSingle(), + SupportedHotChocolateTypes.FLOAT_TYPE => value is IntValueNode intValueNode ? intValueNode.ToDouble() : ((FloatValueNode)value).ToDouble(), + SupportedHotChocolateTypes.DECIMAL_TYPE => value is IntValueNode intValueNode ? intValueNode.ToDecimal() : ((FloatValueNode)value).ToDecimal(), SupportedHotChocolateTypes.UUID_TYPE => Guid.TryParse(value.Value!.ToString(), out Guid guidValue) ? guidValue : value.Value, _ => value.Value }; diff --git a/src/Service.Tests/SqlTests/GraphQLSupportedTypesTests/GraphQLSupportedTypesTestsBase.cs b/src/Service.Tests/SqlTests/GraphQLSupportedTypesTests/GraphQLSupportedTypesTestsBase.cs index 0f121f21c1..da6a1d3257 100644 --- a/src/Service.Tests/SqlTests/GraphQLSupportedTypesTests/GraphQLSupportedTypesTestsBase.cs +++ b/src/Service.Tests/SqlTests/GraphQLSupportedTypesTests/GraphQLSupportedTypesTestsBase.cs @@ -325,6 +325,7 @@ public async Task TestTimeTypePrecisionCheck(string gqlValue, int count) [DataRow(STRING_TYPE, "null")] [DataRow(SINGLE_TYPE, "-3.33")] [DataRow(SINGLE_TYPE, "2E35")] + [DataRow(SINGLE_TYPE, "123")] [DataRow(SINGLE_TYPE, "null")] [DataRow(FLOAT_TYPE, "-3.33")] [DataRow(FLOAT_TYPE, "2E150")] @@ -413,8 +414,15 @@ public async Task InsertInvalidTimeIntoTimeTypeColumn(string type, string value) [DataRow(INT_TYPE, 9999)] [DataRow(LONG_TYPE, 9000000000000000000)] [DataRow(STRING_TYPE, "aaaaaaaaaa")] + [DataRow(SINGLE_TYPE, 123.1)] + [DataRow(SINGLE_TYPE, 123)] + [DataRow(SINGLE_TYPE, null)] [DataRow(FLOAT_TYPE, -3.33)] + [DataRow(FLOAT_TYPE, 123)] + [DataRow(FLOAT_TYPE, null)] [DataRow(DECIMAL_TYPE, 1222222.00000929292)] + [DataRow(DECIMAL_TYPE, 123)] + [DataRow(DECIMAL_TYPE, null)] [DataRow(BOOLEAN_TYPE, true)] [DataRow(DATETIMEOFFSET_TYPE, "1999-01-08 10:23:54+8:00")] [DataRow(DATETIME_TYPE, "1999-01-08 10:23:54")] @@ -464,13 +472,16 @@ public async Task InsertIntoTypeColumnWithArgument(string type, object value) [DataRow(STRING_TYPE, "null")] [DataRow(SINGLE_TYPE, "-3.33")] [DataRow(SINGLE_TYPE, "2E35")] + [DataRow(SINGLE_TYPE, "123")] [DataRow(SINGLE_TYPE, "null")] [DataRow(FLOAT_TYPE, "-3.33")] [DataRow(FLOAT_TYPE, "2E150")] [DataRow(FLOAT_TYPE, "null")] + [DataRow(FLOAT_TYPE, "123")] [DataRow(DECIMAL_TYPE, "-3.333333")] [DataRow(DECIMAL_TYPE, "1222222.00000929292")] [DataRow(DECIMAL_TYPE, "null")] + [DataRow(DECIMAL_TYPE, "123")] [DataRow(BOOLEAN_TYPE, "true")] [DataRow(BOOLEAN_TYPE, "false")] [DataRow(BOOLEAN_TYPE, "null")] @@ -512,8 +523,15 @@ public async Task UpdateTypeColumn(string type, string value) [DataRow(INT_TYPE, 9999)] [DataRow(LONG_TYPE, 9000000000000000000)] [DataRow(STRING_TYPE, "aaaaaaaaaa")] + [DataRow(SINGLE_TYPE, 2E35)] + [DataRow(SINGLE_TYPE, 123)] + [DataRow(SINGLE_TYPE, null)] [DataRow(FLOAT_TYPE, -3.33)] + [DataRow(FLOAT_TYPE, 123)] + [DataRow(FLOAT_TYPE, null)] [DataRow(DECIMAL_TYPE, 1222222.00000929292)] + [DataRow(DECIMAL_TYPE, 123)] + [DataRow(DECIMAL_TYPE, null)] [DataRow(BOOLEAN_TYPE, true)] [DataRow(DATETIME_TYPE, "1999-01-08 10:23:54")] [DataRow(DATETIMEOFFSET_TYPE, "1999-01-08 10:23:54+8:00")]