Skip to content

Commit 1a211fa

Browse files
author
Bart Koelman
committed
Added additional explaining comments as requested in review feedback. Renamed QueryParser to QueryExpressionParser, because that is the ultimate base expression type being produced.
1 parent c25c6c8 commit 1a211fa

9 files changed

+36
-9
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,34 @@
11
using System;
2+
using JsonApiDotNetCore.Models.Annotation;
23

34
namespace JsonApiDotNetCore.Internal.Queries.Parsing
45
{
6+
/// <summary>
7+
/// Used internally when parsing subexpressions in the query string parsers to indicate requirements when resolving a chain of fields.
8+
/// Note these may be interpreted differently or even discarded completely by the various parser implementations,
9+
/// as they tend to better understand the characteristics of the entire expression being parsed.
10+
/// </summary>
511
[Flags]
612
public enum FieldChainRequirements
713
{
14+
/// <summary>
15+
/// Indicates a single <see cref="AttrAttribute"/>, optionally preceded by a chain of <see cref="RelationshipAttribute"/>s.
16+
/// </summary>
817
EndsInAttribute = 1,
18+
19+
/// <summary>
20+
/// Indicates a single <see cref="HasOneAttribute"/>, optionally preceded by a chain of <see cref="RelationshipAttribute"/>s.
21+
/// </summary>
922
EndsInToOne = 2,
23+
24+
/// <summary>
25+
/// Indicates a single <see cref="HasManyAttribute"/>, optionally preceded by a chain of <see cref="RelationshipAttribute"/>s.
26+
/// </summary>
1027
EndsInToMany = 4,
1128

29+
/// <summary>
30+
/// Indicates one or a chain of <see cref="RelationshipAttribute"/>s.
31+
/// </summary>
1232
IsRelationship = EndsInToOne | EndsInToMany
1333
}
1434
}

src/JsonApiDotNetCore/Internal/Queries/Parsing/FilterParser.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
namespace JsonApiDotNetCore.Internal.Queries.Parsing
1212
{
13-
public class FilterParser : QueryParser
13+
public class FilterParser : QueryExpressionParser
1414
{
1515
private readonly IResourceFactory _resourceFactory;
1616
private readonly Action<ResourceFieldAttribute, ResourceContext, string> _validateSingleFieldCallback;

src/JsonApiDotNetCore/Internal/Queries/Parsing/IncludeParser.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace JsonApiDotNetCore.Internal.Queries.Parsing
99
{
10-
public class IncludeParser : QueryParser
10+
public class IncludeParser : QueryExpressionParser
1111
{
1212
private readonly Action<RelationshipAttribute, ResourceContext, string> _validateSingleRelationshipCallback;
1313
private ResourceContext _resourceContextInScope;

src/JsonApiDotNetCore/Internal/Queries/Parsing/PaginationParser.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace JsonApiDotNetCore.Internal.Queries.Parsing
99
{
10-
public class PaginationParser : QueryParser
10+
public class PaginationParser : QueryExpressionParser
1111
{
1212
private readonly Action<ResourceFieldAttribute, ResourceContext, string> _validateSingleFieldCallback;
1313
private ResourceContext _resourceContextInScope;

src/JsonApiDotNetCore/Internal/Queries/Parsing/QueryParser.cs renamed to src/JsonApiDotNetCore/Internal/Queries/Parsing/QueryExpressionParser.cs

+7-3
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,19 @@
77
namespace JsonApiDotNetCore.Internal.Queries.Parsing
88
{
99
/// <summary>
10-
/// Base class for parsing query string parameters.
10+
/// The base class for parsing query string parameters, using the Recursive Descent algorithm.
1111
/// </summary>
12-
public abstract class QueryParser
12+
/// <remarks>
13+
/// Uses a tokenizer to populate a stack of tokens, which is then manipulated from the various parsing routines for subexpressions.
14+
/// Implementations should throw <see cref="QueryParseException"/> on invalid input.
15+
/// </remarks>
16+
public abstract class QueryExpressionParser
1317
{
1418
private protected ResourceFieldChainResolver ChainResolver { get; }
1519

1620
protected Stack<Token> TokenStack { get; private set; }
1721

18-
protected QueryParser(IResourceContextProvider resourceContextProvider)
22+
protected QueryExpressionParser(IResourceContextProvider resourceContextProvider)
1923
{
2024
ChainResolver = new ResourceFieldChainResolver(resourceContextProvider);
2125
}

src/JsonApiDotNetCore/Internal/Queries/Parsing/QueryStringParameterScopeParser.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
namespace JsonApiDotNetCore.Internal.Queries.Parsing
88
{
9-
public class QueryStringParameterScopeParser : QueryParser
9+
public class QueryStringParameterScopeParser : QueryExpressionParser
1010
{
1111
private readonly FieldChainRequirements _chainRequirements;
1212
private readonly Action<ResourceFieldAttribute, ResourceContext, string> _validateSingleFieldCallback;

src/JsonApiDotNetCore/Internal/Queries/Parsing/ResourceFieldChainResolver.cs

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
namespace JsonApiDotNetCore.Internal.Queries.Parsing
88
{
9+
/// <summary>
10+
/// Provides helper methods to resolve a chain of fields (relationships and attributes) from the resource graph.
11+
/// </summary>
912
internal sealed class ResourceFieldChainResolver
1013
{
1114
private readonly IResourceContextProvider _resourceContextProvider;

src/JsonApiDotNetCore/Internal/Queries/Parsing/SortParser.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace JsonApiDotNetCore.Internal.Queries.Parsing
99
{
10-
public class SortParser : QueryParser
10+
public class SortParser : QueryExpressionParser
1111
{
1212
private readonly Action<ResourceFieldAttribute, ResourceContext, string> _validateSingleFieldCallback;
1313
private ResourceContext _resourceContextInScope;

src/JsonApiDotNetCore/Internal/Queries/Parsing/SparseFieldSetParser.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace JsonApiDotNetCore.Internal.Queries.Parsing
99
{
10-
public class SparseFieldSetParser : QueryParser
10+
public class SparseFieldSetParser : QueryExpressionParser
1111
{
1212
private readonly Action<AttrAttribute, ResourceContext, string> _validateSingleAttributeCallback;
1313
private ResourceContext _resourceContextInScope;

0 commit comments

Comments
 (0)