From e515746f8ed7e6361d20800dabf250a0151c4bfe Mon Sep 17 00:00:00 2001
From: Bart Koelman <10324372+bkoelman@users.noreply.github.com>
Date: Wed, 22 Nov 2023 03:59:46 +0100
Subject: [PATCH 01/91] Increment version to 5.5.1 (used for pre-release builds
from ci)
---
Directory.Build.props | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Directory.Build.props b/Directory.Build.props
index cdd3c5d232..0c2b51e13b 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -27,6 +27,6 @@
false
$(MSBuildThisFileDirectory)CodingGuidelines.ruleset
$(MSBuildThisFileDirectory)tests.runsettings
- 5.5.0
+ 5.5.1
From ded32a720d517ad541ba4636770661f31ec30537 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Harrtell?=
Date: Thu, 23 Nov 2023 01:14:31 +0100
Subject: [PATCH 02/91] Allow to override valueconverter on FilterParser
(#1401)
---
.../Queries/Parsing/ConstantValueConverter.cs | 15 +++++++++++++++
.../Queries/Parsing/FilterParser.cs | 16 ++++++++--------
2 files changed, 23 insertions(+), 8 deletions(-)
create mode 100644 src/JsonApiDotNetCore/Queries/Parsing/ConstantValueConverter.cs
diff --git a/src/JsonApiDotNetCore/Queries/Parsing/ConstantValueConverter.cs b/src/JsonApiDotNetCore/Queries/Parsing/ConstantValueConverter.cs
new file mode 100644
index 0000000000..d624964ddd
--- /dev/null
+++ b/src/JsonApiDotNetCore/Queries/Parsing/ConstantValueConverter.cs
@@ -0,0 +1,15 @@
+namespace JsonApiDotNetCore.Queries.Parsing;
+
+///
+/// Converts a constant value within a query string parameter to an .
+///
+///
+/// The constant value to convert from.
+///
+///
+/// The zero-based position of in the query string parameter value.
+///
+///
+/// The converted object instance.
+///
+public delegate object ConstantValueConverter(string value, int position);
diff --git a/src/JsonApiDotNetCore/Queries/Parsing/FilterParser.cs b/src/JsonApiDotNetCore/Queries/Parsing/FilterParser.cs
index cbd6ee4b21..19757bbd08 100644
--- a/src/JsonApiDotNetCore/Queries/Parsing/FilterParser.cs
+++ b/src/JsonApiDotNetCore/Queries/Parsing/FilterParser.cs
@@ -252,13 +252,13 @@ private QueryExpression ParseComparisonRightTerm(QueryExpression leftTerm)
var leftAttribute = (AttrAttribute)leftLastField;
- Func constantValueConverter = GetConstantValueConverterForAttribute(leftAttribute);
+ ConstantValueConverter constantValueConverter = GetConstantValueConverterForAttribute(leftAttribute);
return ParseTypedComparisonRightTerm(leftAttribute.Property.PropertyType, constantValueConverter);
}
if (leftTerm is FunctionExpression leftFunction)
{
- Func constantValueConverter = GetConstantValueConverterForType(leftFunction.ReturnType);
+ ConstantValueConverter constantValueConverter = GetConstantValueConverterForType(leftFunction.ReturnType);
return ParseTypedComparisonRightTerm(leftFunction.ReturnType, constantValueConverter);
}
@@ -266,7 +266,7 @@ private QueryExpression ParseComparisonRightTerm(QueryExpression leftTerm)
$"Internal error: Expected left term to be a function or field chain, instead of '{leftTerm.GetType().Name}': '{leftTerm}'.");
}
- private QueryExpression ParseTypedComparisonRightTerm(Type leftType, Func constantValueConverter)
+ private QueryExpression ParseTypedComparisonRightTerm(Type leftType, ConstantValueConverter constantValueConverter)
{
bool allowNull = RuntimeTypeConverter.CanContainNull(leftType);
@@ -329,7 +329,7 @@ protected virtual MatchTextExpression ParseTextMatch(string operatorName)
EatSingleCharacterToken(TokenKind.Comma);
- Func constantValueConverter = GetConstantValueConverterForAttribute(targetAttribute);
+ ConstantValueConverter constantValueConverter = GetConstantValueConverterForAttribute(targetAttribute);
LiteralConstantExpression constant = ParseConstant(constantValueConverter);
EatSingleCharacterToken(TokenKind.CloseParen);
@@ -352,7 +352,7 @@ protected virtual AnyExpression ParseAny()
ImmutableHashSet.Builder constantsBuilder = ImmutableHashSet.CreateBuilder();
- Func constantValueConverter = GetConstantValueConverterForAttribute(targetAttribute);
+ ConstantValueConverter constantValueConverter = GetConstantValueConverterForAttribute(targetAttribute);
LiteralConstantExpression constant = ParseConstant(constantValueConverter);
constantsBuilder.Add(constant);
@@ -489,7 +489,7 @@ private static ResourceType ResolveDerivedType(ResourceType baseType, string der
return filter;
}
- private LiteralConstantExpression ParseConstant(Func constantValueConverter)
+ private LiteralConstantExpression ParseConstant(ConstantValueConverter constantValueConverter)
{
int position = GetNextTokenPositionOrEnd();
@@ -514,7 +514,7 @@ private NullConstantExpression ParseNull()
throw new QueryParseException("null expected.", position);
}
- private static Func GetConstantValueConverterForType(Type destinationType)
+ protected virtual ConstantValueConverter GetConstantValueConverterForType(Type destinationType)
{
return (stringValue, position) =>
{
@@ -529,7 +529,7 @@ private static Func GetConstantValueConverterForType(Type d
};
}
- private Func GetConstantValueConverterForAttribute(AttrAttribute attribute)
+ private ConstantValueConverter GetConstantValueConverterForAttribute(AttrAttribute attribute)
{
if (attribute is { Property.Name: nameof(Identifiable