Skip to content

Commit

Permalink
Introduced ObjectResult to replace ResultMap (#5207)
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelstaib committed Jul 2, 2022
1 parent dc0cf94 commit 6a1a98d
Show file tree
Hide file tree
Showing 74 changed files with 1,610 additions and 1,842 deletions.
Expand Up @@ -32,8 +32,8 @@ public async Task Subgraph_SDL()
}");

// assert
Assert.IsType<ResultMap>(
Assert.IsType<ResultMap>(
Assert.IsType<ObjectResult>(
Assert.IsType<ObjectResult>(
Assert.IsType<QueryResult>(result).Data)
.GetValueOrDefault("_service"))
.GetValueOrDefault("sdl")
Expand Down
Expand Up @@ -32,8 +32,8 @@ public async Task Subgraph_SDL()
}");

// assert
Assert.IsType<ResultMap>(
Assert.IsType<ResultMap>(
Assert.IsType<ObjectResult>(
Assert.IsType<ObjectResult>(
Assert.IsType<QueryResult>(result).Data)
.GetValueOrDefault("_service"))
.GetValueOrDefault("sdl")
Expand Down

This file was deleted.

11 changes: 0 additions & 11 deletions src/HotChocolate/Core/src/Abstractions/Execution/IResultList.cs

This file was deleted.

11 changes: 0 additions & 11 deletions src/HotChocolate/Core/src/Abstractions/Execution/IResultMap.cs

This file was deleted.

11 changes: 0 additions & 11 deletions src/HotChocolate/Core/src/Abstractions/Execution/IResultMapList.cs

This file was deleted.

106 changes: 0 additions & 106 deletions src/HotChocolate/Core/src/Abstractions/Execution/ResultValue.cs

This file was deleted.

Expand Up @@ -43,14 +43,11 @@ internal static class InternalServiceCollectionExtensions

internal static IServiceCollection TryAddResultPool(
this IServiceCollection services,
int maximumRetained = 512)
int maximumRetained = ResultPoolDefaults.MaximumRetained,
int maximumArrayCapacity = ResultPoolDefaults.MaximumAllowedCapacity)
{
services.TryAddSingleton<ObjectPool<ResultObjectBuffer<ResultMap>>>(
_ => new ResultMapPool(maximumRetained));
services.TryAddSingleton<ObjectPool<ResultObjectBuffer<ResultMapList>>>(
_ => new ResultMapListPool(maximumRetained));
services.TryAddSingleton<ObjectPool<ResultObjectBuffer<ResultList>>>(
_ => new ResultListPool(maximumRetained));
services.TryAddSingleton(_ => new ObjectResultPool(maximumRetained, maximumArrayCapacity));
services.TryAddSingleton(_ => new ListResultPool(maximumRetained, maximumArrayCapacity));
services.TryAddSingleton<ResultPool>();
return services;
}
Expand All @@ -63,7 +60,6 @@ internal static class InternalServiceCollectionExtensions
_ => new ExecutionTaskPool<ResolverTask>(
new ResolverTaskPoolPolicy(),
maximumRetained));

return services;
}

Expand Down
Expand Up @@ -38,9 +38,9 @@ internal static class OperationContextExtensions

public static IOperationContext SetData(
this IOperationContext context,
ResultMap resultMap)
ObjectResult objectResult)
{
context.Result.SetData(resultMap);
context.Result.SetData(objectResult);
return context;
}

Expand Down
Expand Up @@ -156,6 +156,15 @@
<Compile Update="Processing\ValueCompletion.Tools.cs">
<DependentUpon>ValueCompletion.cs</DependentUpon>
</Compile>
<Compile Update="Processing\Result\ResultBuilder.NonNullHandling.cs">
<DependentUpon>ResultBuilder.cs</DependentUpon>
</Compile>
<Compile Update="Processing\Result\ResultBuilder.ObjectResult.cs">
<DependentUpon>ResultBuilder.cs</DependentUpon>
</Compile>
<Compile Update="Processing\Result\ResultBuilder.Pooling.cs">
<DependentUpon>ResultBuilder.cs</DependentUpon>
</Compile>
</ItemGroup>

<ItemGroup>
Expand Down
Expand Up @@ -12,10 +12,10 @@ internal class ApolloTracingResultBuilder
private readonly ConcurrentQueue<ApolloTracingResolverRecord> _resolverRecords =
new ConcurrentQueue<ApolloTracingResolverRecord>();
private TimeSpan _duration;
private ResultMap? _parsingResult;
private ObjectResult? _parsingResult;
private DateTimeOffset _startTime;
private long _startTimestamp;
private ResultMap? _validationResult;
private ObjectResult? _validationResult;

public void SetRequestStartTime(
DateTimeOffset startTime,
Expand All @@ -27,18 +27,18 @@ internal class ApolloTracingResultBuilder

public void SetParsingResult(long startTimestamp, long endTimestamp)
{
_parsingResult = new ResultMap();
_parsingResult = new ObjectResult();
_parsingResult.EnsureCapacity(2);
_parsingResult.SetValue(0, StartOffset, startTimestamp - _startTimestamp);
_parsingResult.SetValue(1, Duration, endTimestamp - startTimestamp);
_parsingResult.SetValueUnsafe(0, StartOffset, startTimestamp - _startTimestamp);
_parsingResult.SetValueUnsafe(1, Duration, endTimestamp - startTimestamp);
}

public void SetValidationResult(long startTimestamp, long endTimestamp)
{
_validationResult = new ResultMap();
_validationResult = new ObjectResult();
_validationResult.EnsureCapacity(2);
_validationResult.SetValue(0, StartOffset, startTimestamp - _startTimestamp);
_validationResult.SetValue(1, Duration, endTimestamp - startTimestamp);
_validationResult.SetValueUnsafe(0, StartOffset, startTimestamp - _startTimestamp);
_validationResult.SetValueUnsafe(1, Duration, endTimestamp - startTimestamp);
}

public void AddResolverResult(ApolloTracingResolverRecord record)
Expand All @@ -51,7 +51,7 @@ public void SetRequestDuration(TimeSpan duration)
_duration = duration;
}

public IResultMap Build()
public ObjectResult Build()
{
if (_parsingResult is null)
{
Expand All @@ -67,37 +67,37 @@ public IResultMap Build()
SetValidationResult(_startTimestamp, _startTimestamp);
}

var executionResult = new ResultMap();
executionResult.EnsureCapacity(1);
executionResult.SetValue(0, ApolloTracingResultKeys.Resolvers, BuildResolverResults());
var result = new ObjectResult();
result.EnsureCapacity(1);
result.SetValueUnsafe(0, ApolloTracingResultKeys.Resolvers, BuildResolverResults());

var result = new ResultMap();
result.EnsureCapacity(7);
result.SetValue(0, ApolloTracingResultKeys.Version, _apolloTracingVersion);
result.SetValue(1, StartTime, _startTime.ToRfc3339DateTimeString());
result.SetValue(2, EndTime, _startTime.Add(_duration).ToRfc3339DateTimeString());
result.SetValue(3, Duration, _duration.Ticks * _ticksToNanosecondsMultiplicator);
result.SetValue(4, Parsing, _parsingResult);
result.SetValue(5, ApolloTracingResultKeys.Validation, _validationResult);
result.SetValue(6, ApolloTracingResultKeys.Execution, executionResult);
return result;
var details = new ObjectResult();
details.EnsureCapacity(7);
details.SetValueUnsafe(0, ApolloTracingResultKeys.Version, _apolloTracingVersion);
details.SetValueUnsafe(1, StartTime, _startTime.ToRfc3339DateTimeString());
details.SetValueUnsafe(2, EndTime, _startTime.Add(_duration).ToRfc3339DateTimeString());
details.SetValueUnsafe(3, Duration, _duration.Ticks * _ticksToNanosecondsMultiplicator);
details.SetValueUnsafe(4, Parsing, _parsingResult);
details.SetValueUnsafe(5, ApolloTracingResultKeys.Validation, _validationResult);
details.SetValueUnsafe(6, ApolloTracingResultKeys.Execution, result);
return details;
}

private ResultMap[] BuildResolverResults()
private ObjectResult[] BuildResolverResults()
{
var i = 0;
var results = new ResultMap[_resolverRecords.Count];
var results = new ObjectResult[_resolverRecords.Count];

foreach (var record in _resolverRecords)
{
var result = new ResultMap();
var result = new ObjectResult();
result.EnsureCapacity(6);
result.SetValue(0, ApolloTracingResultKeys.Path, record.Path);
result.SetValue(1, ParentType, record.ParentType);
result.SetValue(2, FieldName, record.FieldName);
result.SetValue(3, ReturnType, record.ReturnType);
result.SetValue(4, StartOffset, record.StartTimestamp - _startTimestamp);
result.SetValue(5, Duration, record.EndTimestamp - record.StartTimestamp);
result.SetValueUnsafe(0, ApolloTracingResultKeys.Path, record.Path);
result.SetValueUnsafe(1, ParentType, record.ParentType);
result.SetValueUnsafe(2, FieldName, record.FieldName);
result.SetValueUnsafe(3, ReturnType, record.ReturnType);
result.SetValueUnsafe(4, StartOffset, record.StartTimestamp - _startTimestamp);
result.SetValueUnsafe(5, Duration, record.EndTimestamp - record.StartTimestamp);
results[i++] = result;
}

Expand Down
14 changes: 8 additions & 6 deletions src/HotChocolate/Core/src/Execution/Processing/ArgumentMap.cs
Expand Up @@ -10,36 +10,38 @@ namespace HotChocolate.Execution.Processing;
internal sealed class ArgumentMap : IArgumentMap
{
private readonly IReadOnlyDictionary<string, ArgumentValue> _arguments;
private readonly bool _isFinal;
private readonly bool _hasErrors;

public ArgumentMap(IReadOnlyDictionary<string, ArgumentValue> arguments)
{
_arguments = arguments;
IsFinal = true;
_isFinal = true;

if (_arguments.Count > 0)
{
foreach (var argument in arguments.Values)
{
if (!argument.IsFullyCoerced)
{
IsFinal = false;
_isFinal = false;
}

if (argument.HasError)
{
HasErrors = true;
_hasErrors = true;
}
}
}
}

public ArgumentValue this[string key] => _arguments[key];

public bool IsFinalNoErrors => IsFinal && !HasErrors;
public bool IsFinalNoErrors => _isFinal && !_hasErrors;

public bool IsFinal { get; }
public bool IsFinal => _isFinal;

public bool HasErrors { get; }
public bool HasErrors => _hasErrors;

public IEnumerable<string> Keys => _arguments.Keys;

Expand Down
Expand Up @@ -64,7 +64,7 @@ internal sealed class DeferredFragment : IDeferredExecutionTask
/// <inheritdoc/>
public async Task<IQueryResult?> ExecuteAsync(IOperationContext operationContext)
{
var resultMap = EnqueueResolverTasks(
var parentResult = EnqueueResolverTasks(
operationContext,
Fragment.SelectionSet,
Parent,
Expand All @@ -77,7 +77,7 @@ internal sealed class DeferredFragment : IDeferredExecutionTask
.TrySetNext(true)
.SetLabel(Label)
.SetPath(Path)
.SetData(resultMap)
.SetData(parentResult)
.BuildResult();
}
}

0 comments on commit 6a1a98d

Please sign in to comment.