diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Convention/Extensions/SpatialFilterConventionDescriptorExtensions.cs b/src/HotChocolate/Spatial/src/Data/Filters/Convention/Extensions/SpatialFilterConventionDescriptorExtensions.cs index 3167b9ba204..f35142d84c7 100644 --- a/src/HotChocolate/Spatial/src/Data/Filters/Convention/Extensions/SpatialFilterConventionDescriptorExtensions.cs +++ b/src/HotChocolate/Spatial/src/Data/Filters/Convention/Extensions/SpatialFilterConventionDescriptorExtensions.cs @@ -46,6 +46,11 @@ public static class SpatialFilterConventionDescriptorExtensions descriptor.Operation(SpatialFilterOperations.Within).Name("within"); descriptor.Operation(SpatialFilterOperations.Buffer).Name("buffer"); descriptor.Operation(SpatialFilterOperations.Geometry).Name("geometry"); + descriptor.Operation(SpatialFilterOperations.NotContains).Name("ncontains"); + descriptor.Operation(SpatialFilterOperations.NotIntersects).Name("nintersects"); + descriptor.Operation(SpatialFilterOperations.NotOverlaps).Name("noverlaps"); + descriptor.Operation(SpatialFilterOperations.NotTouches).Name("ntouches"); + descriptor.Operation(SpatialFilterOperations.NotWithin).Name("nwithin"); return descriptor; } diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Convention/SpatialFilterOperations.cs b/src/HotChocolate/Spatial/src/Data/Filters/Convention/SpatialFilterOperations.cs index c8de437aca3..6f888a85bf6 100644 --- a/src/HotChocolate/Spatial/src/Data/Filters/Convention/SpatialFilterOperations.cs +++ b/src/HotChocolate/Spatial/src/Data/Filters/Convention/SpatialFilterOperations.cs @@ -6,12 +6,24 @@ namespace HotChocolate.Data.Filters.Spatial public static class SpatialFilterOperations { public const int Buffer = 513; + public const int Geometry = 514; + public const int Contains = 515; - public const int Distance = 516; - public const int Intersects = 517; - public const int Overlaps = 518; - public const int Touches = 519; - public const int Within = 520; + public const int NotContains = 516; + + public const int Distance = 517; + + public const int Intersects = 518; + public const int NotIntersects = 519; + + public const int Overlaps = 520; + public const int NotOverlaps = 521; + + public const int Touches = 522; + public const int NotTouches = 523; + + public const int Within = 524; + public const int NotWithin = 525; } } diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Extensions/SpatialFilterProviderDescriptorQueryableExtensions.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Extensions/SpatialFilterProviderDescriptorQueryableExtensions.cs index 04b334605c3..3d24bc32a83 100644 --- a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Extensions/SpatialFilterProviderDescriptorQueryableExtensions.cs +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Extensions/SpatialFilterProviderDescriptorQueryableExtensions.cs @@ -12,10 +12,15 @@ public static class SpatialFilterProviderDescriptorQueryableExtensions .AddFieldHandler() .AddFieldHandler() .AddFieldHandler() + .AddFieldHandler() .AddFieldHandler() .AddFieldHandler() + .AddFieldHandler() .AddFieldHandler() + .AddFieldHandler() .AddFieldHandler() - .AddFieldHandler(); + .AddFieldHandler() + .AddFieldHandler() + .AddFieldHandler(); } } diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialBooleanMethodHandler.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialBooleanMethodHandler.cs new file mode 100644 index 00000000000..a4fe9695bfd --- /dev/null +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialBooleanMethodHandler.cs @@ -0,0 +1,112 @@ +using System.Diagnostics.CodeAnalysis; +using System.Linq.Expressions; +using System.Reflection; +using HotChocolate.Configuration; +using HotChocolate.Data.Filters.Expressions; +using HotChocolate.Internal; +using HotChocolate.Language; +using HotChocolate.Language.Visitors; +using HotChocolate.Types.Descriptors; + +namespace HotChocolate.Data.Filters.Spatial +{ + public abstract class QueryableSpatialBooleanMethodHandler + : FilterFieldHandler + { + private readonly IExtendedType _runtimeType; + + protected abstract int Operation { get; } + + protected abstract bool IsTrue { get; } + protected string GeometryFieldName { get; } + protected string BufferFieldName { get; } + + protected QueryableSpatialBooleanMethodHandler( + IFilterConvention convention, + ITypeInspector inspector, + MethodInfo method) + { + _runtimeType = inspector.GetReturnType(method); + GeometryFieldName = convention.GetOperationName(SpatialFilterOperations.Geometry); + BufferFieldName = convention.GetOperationName(SpatialFilterOperations.Buffer); + } + + public override bool CanHandle( + ITypeCompletionContext context, + IFilterInputTypeDefinition typeDefinition, + IFilterFieldDefinition fieldDefinition) => + fieldDefinition is FilterOperationFieldDefinition op && + op.Id == Operation; + + public override bool TryHandleEnter( + QueryableFilterContext context, + IFilterField field, + ObjectFieldNode node, + [NotNullWhen(true)] out ISyntaxVisitorAction? action) + { + if (field is IFilterOperationField filterOperationField) + { + if (node.Value.IsNull()) + { + context.ReportError( + ErrorHelper.CreateNonNullError( + field, node.Value, context)); + action = SyntaxVisitor.Skip; + return true; + } + + if (!TryHandleOperation( + context, + filterOperationField, + node, + out Expression? nestedProperty)) + { + context.ReportError( + ErrorHelper.CouldNotCreateFilterForOperation( + field, node.Value, context)); + action = SyntaxVisitor.Skip; + return true; + } + + context.RuntimeTypes.Push(_runtimeType); + context.PushInstance(nestedProperty ); + action = SyntaxVisitor.SkipAndLeave; + } + else + { + action = SyntaxVisitor.Break; + } + + return true; + } + + protected abstract bool TryHandleOperation( + QueryableFilterContext context, + IFilterOperationField field, + ObjectFieldNode node, + [NotNullWhen(true)] out Expression? result); + + public override bool TryHandleLeave( + QueryableFilterContext context, + IFilterField field, + ObjectFieldNode node, + [NotNullWhen(true)] out ISyntaxVisitorAction? action) + { + // Dequeue last + Expression instance = context.PopInstance(); + context.RuntimeTypes.Pop(); + Expression condition = IsTrue ? instance : FilterExpressionBuilder.Not(instance); + + if (context.InMemory) + { + condition = FilterExpressionBuilder.NotNullAndAlso( + context.GetInstance(), + condition); + } + + context.GetLevel().Enqueue(condition); + action = SyntaxVisitor.Continue; + return true; + } + } +} diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialContainsOperationHandler.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialContainsOperationHandler.cs index d155af854b4..bab9234eb66 100644 --- a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialContainsOperationHandler.cs +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialContainsOperationHandler.cs @@ -1,51 +1,19 @@ -using System.Diagnostics.CodeAnalysis; -using System.Linq.Expressions; -using System.Reflection; -using HotChocolate.Data.Filters.Expressions; -using HotChocolate.Language; using HotChocolate.Types.Descriptors; -using NetTopologySuite.Geometries; namespace HotChocolate.Data.Filters.Spatial { public class QueryableSpatialContainsOperationHandler - : QueryableSpatialMethodHandler + : QueryableSpatialContainsOperationHandlerBase { - private static readonly MethodInfo _contains = - typeof(Geometry).GetMethod(nameof(Geometry.Contains))!; - public QueryableSpatialContainsOperationHandler( IFilterConvention convention, ITypeInspector inspector) - : base(convention, inspector, _contains) + : base(convention, inspector) { } protected override int Operation => SpatialFilterOperations.Contains; - protected override bool TryHandleOperation( - QueryableFilterContext context, - IFilterOperationField field, - ObjectFieldNode node, - [NotNullWhen(true)] out Expression? result) - { - if (TryGetParameter(field, node.Value, GeometryFieldName, out Geometry g)) - { - if (TryGetParameter(field, node.Value, BufferFieldName, out double buffer)) - { - result = ExpressionBuilder.Contains( - context.GetInstance(), - ExpressionBuilder.Buffer(g, buffer)); - - return true; - } - - result = ExpressionBuilder.Contains(context.GetInstance(), g); - return true; - } - - result = null; - return false; - } + protected override bool IsTrue => true; } } diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialContainsOperationHandlerBase.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialContainsOperationHandlerBase.cs new file mode 100644 index 00000000000..bc0acc7d475 --- /dev/null +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialContainsOperationHandlerBase.cs @@ -0,0 +1,50 @@ +using System.Diagnostics.CodeAnalysis; +using System.Linq.Expressions; +using System.Reflection; +using HotChocolate.Data.Filters.Expressions; +using HotChocolate.Language; +using HotChocolate.Types.Descriptors; +using NetTopologySuite.Geometries; +using static HotChocolate.Data.Filters.Spatial.SpatialOperationHandlerHelper; + +namespace HotChocolate.Data.Filters.Spatial +{ + public abstract class QueryableSpatialContainsOperationHandlerBase + : QueryableSpatialBooleanMethodHandler + { + private static readonly MethodInfo _contains = + typeof(Geometry).GetMethod(nameof(Geometry.Contains))!; + + public QueryableSpatialContainsOperationHandlerBase( + IFilterConvention convention, + ITypeInspector inspector) + : base(convention, inspector, _contains) + { + } + + protected override bool TryHandleOperation( + QueryableFilterContext context, + IFilterOperationField field, + ObjectFieldNode node, + [NotNullWhen(true)] out Expression? result) + { + if (TryGetParameter(field, node.Value, GeometryFieldName, out Geometry g)) + { + if (TryGetParameter(field, node.Value, BufferFieldName, out double buffer)) + { + result = ExpressionBuilder.Contains( + context.GetInstance(), + ExpressionBuilder.Buffer(g, buffer)); + + return true; + } + + result = ExpressionBuilder.Contains(context.GetInstance(), g); + return true; + } + + result = null; + return false; + } + } +} diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialDistanceOperationHandler.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialDistanceOperationHandler.cs index 236738bf69b..37b9d99a09c 100644 --- a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialDistanceOperationHandler.cs +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialDistanceOperationHandler.cs @@ -1,11 +1,11 @@ using System.Diagnostics.CodeAnalysis; using System.Linq.Expressions; using System.Reflection; -using HotChocolate.Data.Filters; using HotChocolate.Data.Filters.Expressions; using HotChocolate.Language; using HotChocolate.Types.Descriptors; using NetTopologySuite.Geometries; +using static HotChocolate.Data.Filters.Spatial.SpatialOperationHandlerHelper; namespace HotChocolate.Data.Filters.Spatial { diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialIntersectOperationHandler.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialIntersectOperationHandler.cs index 8a3d0e4e802..bdbdb88837d 100644 --- a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialIntersectOperationHandler.cs +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialIntersectOperationHandler.cs @@ -1,51 +1,19 @@ -using System.Diagnostics.CodeAnalysis; -using System.Linq.Expressions; -using System.Reflection; -using HotChocolate.Data.Filters.Expressions; -using HotChocolate.Language; using HotChocolate.Types.Descriptors; -using NetTopologySuite.Geometries; namespace HotChocolate.Data.Filters.Spatial { public class QueryableSpatialIntersectsOperationHandler - : QueryableSpatialMethodHandler + : QueryableSpatialIntersectsOperationHandlerBase { - private static readonly MethodInfo _intersects = - typeof(Geometry).GetMethod(nameof(Geometry.Intersects))!; - public QueryableSpatialIntersectsOperationHandler( IFilterConvention convention, ITypeInspector inspector) - : base(convention, inspector, _intersects) + : base(convention, inspector) { } protected override int Operation => SpatialFilterOperations.Intersects; - protected override bool TryHandleOperation( - QueryableFilterContext context, - IFilterOperationField field, - ObjectFieldNode node, - [NotNullWhen(true)] out Expression? result) - { - if (TryGetParameter(field, node.Value, GeometryFieldName, out Geometry g)) - { - if (TryGetParameter(field, node.Value, BufferFieldName, out double buffer)) - { - result = ExpressionBuilder.Intersects( - context.GetInstance(), - ExpressionBuilder.Buffer(g, buffer)); - - return true; - } - - result = ExpressionBuilder.Intersects(context.GetInstance(), g); - return true; - } - - result = null; - return false; - } + protected override bool IsTrue => true; } } diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialIntersectsOperationHandlerBase.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialIntersectsOperationHandlerBase.cs new file mode 100644 index 00000000000..524ab176386 --- /dev/null +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialIntersectsOperationHandlerBase.cs @@ -0,0 +1,50 @@ +using System.Diagnostics.CodeAnalysis; +using System.Linq.Expressions; +using System.Reflection; +using HotChocolate.Data.Filters.Expressions; +using HotChocolate.Language; +using HotChocolate.Types.Descriptors; +using NetTopologySuite.Geometries; +using static HotChocolate.Data.Filters.Spatial.SpatialOperationHandlerHelper; + +namespace HotChocolate.Data.Filters.Spatial +{ + public abstract class QueryableSpatialIntersectsOperationHandlerBase + : QueryableSpatialBooleanMethodHandler + { + private static readonly MethodInfo _intersects = + typeof(Geometry).GetMethod(nameof(Geometry.Intersects))!; + + public QueryableSpatialIntersectsOperationHandlerBase( + IFilterConvention convention, + ITypeInspector inspector) + : base(convention, inspector, _intersects) + { + } + + protected override bool TryHandleOperation( + QueryableFilterContext context, + IFilterOperationField field, + ObjectFieldNode node, + [NotNullWhen(true)] out Expression? result) + { + if (TryGetParameter(field, node.Value, GeometryFieldName, out Geometry g)) + { + if (TryGetParameter(field, node.Value, BufferFieldName, out double buffer)) + { + result = ExpressionBuilder.Intersects( + context.GetInstance(), + ExpressionBuilder.Buffer(g, buffer)); + + return true; + } + + result = ExpressionBuilder.Intersects(context.GetInstance(), g); + return true; + } + + result = null; + return false; + } + } +} diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialMethodHandler.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialMethodHandler.cs index f4976fdcc1a..e8a7d8271d4 100644 --- a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialMethodHandler.cs +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialMethodHandler.cs @@ -8,6 +8,7 @@ using HotChocolate.Language.Visitors; using HotChocolate.Types; using HotChocolate.Types.Descriptors; +using static HotChocolate.Data.Filters.Spatial.SpatialOperationHandlerHelper; namespace HotChocolate.Data.Filters.Spatial { @@ -108,35 +109,5 @@ public abstract class QueryableSpatialMethodHandler action = SyntaxVisitor.Continue; return true; } - - protected static bool TryGetParameter( - IFilterField parentField, - IValueNode node, - string fieldName, - [NotNullWhen(true)] out T fieldNode) - { - if (parentField.Type is InputObjectType inputType && - node is ObjectValueNode objectValueNode) - { - for (var i = 0; i < objectValueNode.Fields.Count; i++) - { - if (objectValueNode.Fields[i].Name.Value == fieldName) - { - ObjectFieldNode field = objectValueNode.Fields[i]; - if (inputType.Fields[fieldName].Type.ParseLiteral(field.Value) is T val) - { - fieldNode = val; - return true; - } - - fieldNode = default!; - return false; - } - } - } - - fieldNode = default!; - return false; - } } } diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialNotContainsOperationHandler.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialNotContainsOperationHandler.cs new file mode 100644 index 00000000000..1a1686fb694 --- /dev/null +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialNotContainsOperationHandler.cs @@ -0,0 +1,19 @@ +using HotChocolate.Types.Descriptors; + +namespace HotChocolate.Data.Filters.Spatial +{ + public class QueryableSpatialNotContainsOperationHandler + : QueryableSpatialContainsOperationHandlerBase + { + public QueryableSpatialNotContainsOperationHandler( + IFilterConvention convention, + ITypeInspector inspector) + : base(convention, inspector) + { + } + + protected override int Operation => SpatialFilterOperations.NotContains; + + protected override bool IsTrue => false; + } +} diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialNotIntersectsOperationHandler.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialNotIntersectsOperationHandler.cs new file mode 100644 index 00000000000..b65af94c525 --- /dev/null +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialNotIntersectsOperationHandler.cs @@ -0,0 +1,19 @@ +using HotChocolate.Types.Descriptors; + +namespace HotChocolate.Data.Filters.Spatial +{ + public class QueryableSpatialNotIntersectsOperationHandler + : QueryableSpatialIntersectsOperationHandlerBase + { + public QueryableSpatialNotIntersectsOperationHandler( + IFilterConvention convention, + ITypeInspector inspector) + : base(convention, inspector) + { + } + + protected override int Operation => SpatialFilterOperations.NotIntersects; + + protected override bool IsTrue => false; + } +} diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialNotOverlapsOperationHandler.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialNotOverlapsOperationHandler.cs new file mode 100644 index 00000000000..d0cc9f039e1 --- /dev/null +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialNotOverlapsOperationHandler.cs @@ -0,0 +1,19 @@ +using HotChocolate.Types.Descriptors; + +namespace HotChocolate.Data.Filters.Spatial +{ + public class QueryableSpatialNotOverlapsOperationHandler + : QueryableSpatialOverlapsOperationHandlerBase + { + public QueryableSpatialNotOverlapsOperationHandler( + IFilterConvention convention, + ITypeInspector inspector) + : base(convention, inspector) + { + } + + protected override int Operation => SpatialFilterOperations.NotOverlaps; + + protected override bool IsTrue => false; + } +} diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialNotTouchesOperationHandler.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialNotTouchesOperationHandler.cs new file mode 100644 index 00000000000..74760a08878 --- /dev/null +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialNotTouchesOperationHandler.cs @@ -0,0 +1,19 @@ +using HotChocolate.Types.Descriptors; + +namespace HotChocolate.Data.Filters.Spatial +{ + public class QueryableSpatialNotTouchesOperationHandler + : QueryableSpatialTouchesOperationHandlerBase + { + public QueryableSpatialNotTouchesOperationHandler( + IFilterConvention convention, + ITypeInspector inspector) + : base(convention, inspector) + { + } + + protected override int Operation => SpatialFilterOperations.NotTouches; + + protected override bool IsTrue => false; + } +} diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialNotWithinOperationHandler.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialNotWithinOperationHandler.cs new file mode 100644 index 00000000000..e04f8d36cce --- /dev/null +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialNotWithinOperationHandler.cs @@ -0,0 +1,19 @@ +using HotChocolate.Types.Descriptors; + +namespace HotChocolate.Data.Filters.Spatial +{ + public class QueryableSpatialNotWithinOperationHandler + : QueryableSpatialWithinOperationHandlerBase + { + public QueryableSpatialNotWithinOperationHandler( + IFilterConvention convention, + ITypeInspector inspector) + : base(convention, inspector) + { + } + + protected override int Operation => SpatialFilterOperations.NotWithin; + + protected override bool IsTrue => false; + } +} diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialOverlapsOperationHandler.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialOverlapsOperationHandler.cs index 9c9f2163065..6d7f918db55 100644 --- a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialOverlapsOperationHandler.cs +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialOverlapsOperationHandler.cs @@ -1,50 +1,19 @@ -using System.Diagnostics.CodeAnalysis; -using System.Linq.Expressions; -using System.Reflection; -using HotChocolate.Data.Filters.Expressions; -using HotChocolate.Language; -using HotChocolate.Types.Descriptors; -using NetTopologySuite.Geometries; +using HotChocolate.Types.Descriptors; namespace HotChocolate.Data.Filters.Spatial { public class QueryableSpatialOverlapsOperationHandler - : QueryableSpatialMethodHandler + : QueryableSpatialOverlapsOperationHandlerBase { - private static readonly MethodInfo _overlap = - typeof(Geometry).GetMethod(nameof(Geometry.Overlaps))!; - public QueryableSpatialOverlapsOperationHandler( IFilterConvention convention, ITypeInspector inspector) - : base(convention, inspector, _overlap) + : base(convention, inspector) { } protected override int Operation => SpatialFilterOperations.Overlaps; - protected override bool TryHandleOperation( - QueryableFilterContext context, - IFilterOperationField field, - ObjectFieldNode node, - [NotNullWhen(true)] out Expression? result) - { - if (TryGetParameter(field, node.Value, GeometryFieldName, out Geometry g)) - { - if (TryGetParameter(field, node.Value, BufferFieldName, out double buffer)) - { - result = ExpressionBuilder.Overlaps( - context.GetInstance(), - ExpressionBuilder.Buffer(g, buffer)); - return true; - } - - result = ExpressionBuilder.Overlaps(context.GetInstance(), g); - return true; - } - - result = null; - return false; - } + protected override bool IsTrue => true; } } diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialOverlapsOperationHandlerBase.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialOverlapsOperationHandlerBase.cs new file mode 100644 index 00000000000..35fb0493990 --- /dev/null +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialOverlapsOperationHandlerBase.cs @@ -0,0 +1,49 @@ +using System.Diagnostics.CodeAnalysis; +using System.Linq.Expressions; +using System.Reflection; +using HotChocolate.Data.Filters.Expressions; +using HotChocolate.Language; +using HotChocolate.Types.Descriptors; +using NetTopologySuite.Geometries; +using static HotChocolate.Data.Filters.Spatial.SpatialOperationHandlerHelper; + +namespace HotChocolate.Data.Filters.Spatial +{ + public abstract class QueryableSpatialOverlapsOperationHandlerBase + : QueryableSpatialBooleanMethodHandler + { + private static readonly MethodInfo _overlap = + typeof(Geometry).GetMethod(nameof(Geometry.Overlaps))!; + + public QueryableSpatialOverlapsOperationHandlerBase( + IFilterConvention convention, + ITypeInspector inspector) + : base(convention, inspector, _overlap) + { + } + + protected override bool TryHandleOperation( + QueryableFilterContext context, + IFilterOperationField field, + ObjectFieldNode node, + [NotNullWhen(true)] out Expression? result) + { + if (TryGetParameter(field, node.Value, GeometryFieldName, out Geometry g)) + { + if (TryGetParameter(field, node.Value, BufferFieldName, out double buffer)) + { + result = ExpressionBuilder.Overlaps( + context.GetInstance(), + ExpressionBuilder.Buffer(g, buffer)); + return true; + } + + result = ExpressionBuilder.Overlaps(context.GetInstance(), g); + return true; + } + + result = null; + return false; + } + } +} diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialTouchesOperationHandler.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialTouchesOperationHandler.cs index 72f713e07ea..a4924c7c795 100644 --- a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialTouchesOperationHandler.cs +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialTouchesOperationHandler.cs @@ -1,51 +1,19 @@ -using System.Diagnostics.CodeAnalysis; -using System.Linq.Expressions; -using System.Reflection; -using HotChocolate.Data.Filters.Expressions; -using HotChocolate.Language; -using HotChocolate.Types.Descriptors; -using NetTopologySuite.Geometries; +using HotChocolate.Types.Descriptors; namespace HotChocolate.Data.Filters.Spatial { public class QueryableSpatialTouchesOperationHandler - : QueryableSpatialMethodHandler + : QueryableSpatialTouchesOperationHandlerBase { - private static readonly MethodInfo _touches = - typeof(Geometry).GetMethod(nameof(Geometry.Touches))!; - public QueryableSpatialTouchesOperationHandler( IFilterConvention convention, ITypeInspector inspector) - : base(convention, inspector, _touches) + : base(convention, inspector) { } protected override int Operation => SpatialFilterOperations.Touches; - protected override bool TryHandleOperation( - QueryableFilterContext context, - IFilterOperationField field, - ObjectFieldNode node, - [NotNullWhen(true)] out Expression? result) - { - if (TryGetParameter(field, node.Value, GeometryFieldName, out Geometry g)) - { - if (TryGetParameter(field, node.Value, BufferFieldName, out double buffer)) - { - result = ExpressionBuilder.Touches( - context.GetInstance(), - ExpressionBuilder.Buffer(g, buffer)); - - return true; - } - - result = ExpressionBuilder.Touches(context.GetInstance(), g); - return true; - } - - result = null; - return false; - } + protected override bool IsTrue => true; } } diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialTouchesOperationHandlerBase.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialTouchesOperationHandlerBase.cs new file mode 100644 index 00000000000..aace62e2394 --- /dev/null +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialTouchesOperationHandlerBase.cs @@ -0,0 +1,50 @@ +using System.Diagnostics.CodeAnalysis; +using System.Linq.Expressions; +using System.Reflection; +using HotChocolate.Data.Filters.Expressions; +using HotChocolate.Language; +using HotChocolate.Types.Descriptors; +using NetTopologySuite.Geometries; +using static HotChocolate.Data.Filters.Spatial.SpatialOperationHandlerHelper; + +namespace HotChocolate.Data.Filters.Spatial +{ + public abstract class QueryableSpatialTouchesOperationHandlerBase + : QueryableSpatialBooleanMethodHandler + { + private static readonly MethodInfo _touches = + typeof(Geometry).GetMethod(nameof(Geometry.Touches))!; + + public QueryableSpatialTouchesOperationHandlerBase( + IFilterConvention convention, + ITypeInspector inspector) + : base(convention, inspector, _touches) + { + } + + protected override bool TryHandleOperation( + QueryableFilterContext context, + IFilterOperationField field, + ObjectFieldNode node, + [NotNullWhen(true)] out Expression? result) + { + if (TryGetParameter(field, node.Value, GeometryFieldName, out Geometry g)) + { + if (TryGetParameter(field, node.Value, BufferFieldName, out double buffer)) + { + result = ExpressionBuilder.Touches( + context.GetInstance(), + ExpressionBuilder.Buffer(g, buffer)); + + return true; + } + + result = ExpressionBuilder.Touches(context.GetInstance(), g); + return true; + } + + result = null; + return false; + } + } +} diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialWithinOperationHandler.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialWithinOperationHandler.cs index d32214a02a1..1ea5de02a3d 100644 --- a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialWithinOperationHandler.cs +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialWithinOperationHandler.cs @@ -1,50 +1,19 @@ -using System.Diagnostics.CodeAnalysis; -using System.Linq.Expressions; -using System.Reflection; -using HotChocolate.Data.Filters.Expressions; -using HotChocolate.Language; using HotChocolate.Types.Descriptors; -using NetTopologySuite.Geometries; namespace HotChocolate.Data.Filters.Spatial { public class QueryableSpatialWithinOperationHandler - : QueryableSpatialMethodHandler + : QueryableSpatialWithinOperationHandlerBase { - private static readonly MethodInfo _within = - typeof(Geometry).GetMethod(nameof(Geometry.Within))!; - public QueryableSpatialWithinOperationHandler( IFilterConvention convention, ITypeInspector inspector) - : base(convention, inspector, _within) + : base(convention, inspector) { } protected override int Operation => SpatialFilterOperations.Within; - protected override bool TryHandleOperation( - QueryableFilterContext context, - IFilterOperationField field, - ObjectFieldNode node, - [NotNullWhen(true)] out Expression? result) - { - if (TryGetParameter(field, node.Value, GeometryFieldName, out Geometry g)) - { - if (TryGetParameter(field, node.Value, BufferFieldName, out double buffer)) - { - result = ExpressionBuilder.Within( - context.GetInstance(), - ExpressionBuilder.Buffer(g, buffer)); - return true; - } - - result = ExpressionBuilder.Within(context.GetInstance(), g); - return true; - } - - result = null; - return false; - } + protected override bool IsTrue => true; } } diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialWithinOperationHandlerBase.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialWithinOperationHandlerBase.cs new file mode 100644 index 00000000000..db8265a2197 --- /dev/null +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/Handlers/QueryableSpatialWithinOperationHandlerBase.cs @@ -0,0 +1,49 @@ +using System.Diagnostics.CodeAnalysis; +using System.Linq.Expressions; +using System.Reflection; +using HotChocolate.Data.Filters.Expressions; +using HotChocolate.Language; +using HotChocolate.Types.Descriptors; +using NetTopologySuite.Geometries; +using static HotChocolate.Data.Filters.Spatial.SpatialOperationHandlerHelper; + +namespace HotChocolate.Data.Filters.Spatial +{ + public abstract class QueryableSpatialWithinOperationHandlerBase + : QueryableSpatialBooleanMethodHandler + { + private static readonly MethodInfo _within = + typeof(Geometry).GetMethod(nameof(Geometry.Within))!; + + public QueryableSpatialWithinOperationHandlerBase( + IFilterConvention convention, + ITypeInspector inspector) + : base(convention, inspector, _within) + { + } + + protected override bool TryHandleOperation( + QueryableFilterContext context, + IFilterOperationField field, + ObjectFieldNode node, + [NotNullWhen(true)] out Expression? result) + { + if (TryGetParameter(field, node.Value, GeometryFieldName, out Geometry g)) + { + if (TryGetParameter(field, node.Value, BufferFieldName, out double buffer)) + { + result = ExpressionBuilder.Within( + context.GetInstance(), + ExpressionBuilder.Buffer(g, buffer)); + return true; + } + + result = ExpressionBuilder.Within(context.GetInstance(), g); + return true; + } + + result = null; + return false; + } + } +} diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Expressions/SpatialOperationHandlerHelper.cs b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/SpatialOperationHandlerHelper.cs new file mode 100644 index 00000000000..1037c015fda --- /dev/null +++ b/src/HotChocolate/Spatial/src/Data/Filters/Expressions/SpatialOperationHandlerHelper.cs @@ -0,0 +1,39 @@ +using System.Diagnostics.CodeAnalysis; +using HotChocolate.Language; +using HotChocolate.Types; + +namespace HotChocolate.Data.Filters.Spatial +{ + public static class SpatialOperationHandlerHelper + { + public static bool TryGetParameter( + IFilterField parentField, + IValueNode node, + string fieldName, + [NotNullWhen(true)] out T fieldNode) + { + if (parentField.Type is InputObjectType inputType && + node is ObjectValueNode objectValueNode) + { + for (var i = 0; i < objectValueNode.Fields.Count; i++) + { + if (objectValueNode.Fields[i].Name.Value == fieldName) + { + ObjectFieldNode field = objectValueNode.Fields[i]; + if (inputType.Fields[fieldName].Type.ParseLiteral(field.Value) is T val) + { + fieldNode = val; + return true; + } + + fieldNode = default!; + return false; + } + } + } + + fieldNode = default!; + return false; + } + } +} diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Types/GeometryFilterInputType`1.cs b/src/HotChocolate/Spatial/src/Data/Filters/Types/GeometryFilterInputType`1.cs index 280577db9bf..1a8e01e0c87 100644 --- a/src/HotChocolate/Spatial/src/Data/Filters/Types/GeometryFilterInputType`1.cs +++ b/src/HotChocolate/Spatial/src/Data/Filters/Types/GeometryFilterInputType`1.cs @@ -26,11 +26,16 @@ protected override void Configure(IFilterInputTypeDescriptor descriptor) descriptor.Field(x => x.SRID).Name("srid"); descriptor.Operation(Contains).Type(); + descriptor.Operation(NotContains).Type(); descriptor.Operation(Distance).Type(); descriptor.Operation(Intersects).Type(); + descriptor.Operation(NotIntersects).Type(); descriptor.Operation(Overlaps).Type(); + descriptor.Operation(NotOverlaps).Type(); descriptor.Operation(Touches).Type(); + descriptor.Operation(NotTouches).Type(); descriptor.Operation(Within).Type(); + descriptor.Operation(NotWithin).Type(); } } } diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryContainsOperationFilterInputType.cs b/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryContainsOperationFilterInputType.cs index 9b7ea1aaff2..9857b82ef30 100644 --- a/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryContainsOperationFilterInputType.cs +++ b/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryContainsOperationFilterInputType.cs @@ -4,13 +4,13 @@ namespace HotChocolate.Data.Filters.Spatial { - public class GeometryContainsOperationFilterInputType : BooleanOperationFilterInputType + public class GeometryContainsOperationFilterInputType : FilterInputType { protected override void Configure(IFilterInputTypeDescriptor descriptor) { descriptor.Operation(Geometry).Type>(); descriptor.Operation(Buffer).Type(); - base.Configure(descriptor); + descriptor.AllowAnd(false).AllowOr(false); } } } diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryIntersectsOperationFilterInputType.cs b/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryIntersectsOperationFilterInputType.cs index 27b9233c2c0..8621755021f 100644 --- a/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryIntersectsOperationFilterInputType.cs +++ b/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryIntersectsOperationFilterInputType.cs @@ -4,13 +4,13 @@ namespace HotChocolate.Data.Filters.Spatial { - public class GeometryIntersectsOperationFilterInputType : BooleanOperationFilterInputType + public class GeometryIntersectsOperationFilterInputType : FilterInputType { protected override void Configure(IFilterInputTypeDescriptor descriptor) { descriptor.Operation(Geometry).Type>(); descriptor.Operation(Buffer).Type(); - base.Configure(descriptor); + descriptor.AllowAnd(false).AllowOr(false); } } } diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryOverlapsOperationFilterInputType.cs b/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryOverlapsOperationFilterInputType.cs index cae2fa92fc2..1711c7ccbbc 100644 --- a/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryOverlapsOperationFilterInputType.cs +++ b/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryOverlapsOperationFilterInputType.cs @@ -4,13 +4,13 @@ namespace HotChocolate.Data.Filters.Spatial { - public class GeometryOverlapsOperationFilterInputType : BooleanOperationFilterInputType + public class GeometryOverlapsOperationFilterInputType : FilterInputType { protected override void Configure(IFilterInputTypeDescriptor descriptor) { descriptor.Operation(Geometry).Type>(); descriptor.Operation(Buffer).Type(); - base.Configure(descriptor); + descriptor.AllowAnd(false).AllowOr(false); } } } diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryTouchesOperationFilterInputType.cs b/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryTouchesOperationFilterInputType.cs index ebc1a6f51f3..6bdcaf63e35 100644 --- a/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryTouchesOperationFilterInputType.cs +++ b/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryTouchesOperationFilterInputType.cs @@ -4,13 +4,13 @@ namespace HotChocolate.Data.Filters.Spatial { - public class GeometryTouchesOperationFilterInputType : BooleanOperationFilterInputType + public class GeometryTouchesOperationFilterInputType : FilterInputType { protected override void Configure(IFilterInputTypeDescriptor descriptor) { descriptor.Operation(Geometry).Type>(); descriptor.Operation(Buffer).Type(); - base.Configure(descriptor); + descriptor.AllowAnd(false).AllowOr(false); } } } diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryWithinOperationFilterInputType.cs b/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryWithinOperationFilterInputType.cs index 542a6ceba23..bc474ecf6c4 100644 --- a/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryWithinOperationFilterInputType.cs +++ b/src/HotChocolate/Spatial/src/Data/Filters/Types/Operations/GeometryWithinOperationFilterInputType.cs @@ -4,13 +4,13 @@ namespace HotChocolate.Data.Filters.Spatial { - public class GeometryWithinOperationFilterInputType : BooleanOperationFilterInputType + public class GeometryWithinOperationFilterInputType : FilterInputType { protected override void Configure(IFilterInputTypeDescriptor descriptor) { descriptor.Operation(Geometry).Type>(); descriptor.Operation(Buffer).Type(); - base.Configure(descriptor); + descriptor.AllowAnd(false).AllowOr(false); } } } diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorContainsTests.cs b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorContainsTests.cs index 20e42643693..c5abf84d3b1 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorContainsTests.cs +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorContainsTests.cs @@ -59,8 +59,7 @@ public async Task Create_Contains_Expression() geometry: { type: Point, coordinates: [1, 1] - }, - eq: true + } } } }){ @@ -81,8 +80,7 @@ public async Task Create_Contains_Expression() geometry: { type: Point, coordinates: [-1, -1] - }, - eq: true + } } } }){ @@ -108,12 +106,11 @@ public async Task Create_NotContains_Expression() @"{ root(where: { bar: { - contains: { + ncontains: { geometry: { type: Point, coordinates: [1, 1] - }, - neq: true + } } } }){ @@ -130,12 +127,11 @@ public async Task Create_NotContains_Expression() @"{ root(where: { bar: { - contains: { + ncontains: { geometry: { type: Point, coordinates: [-1, -1] - }, - neq: true + } } } }){ diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorIntersectTests.cs b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorIntersectTests.cs index 9fa2f5b86c8..3702d19728e 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorIntersectTests.cs +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorIntersectTests.cs @@ -10,7 +10,7 @@ public class QueryableFilterVisitorIntersectsTests : SchemaCache , IClassFixture> { - private static readonly Polygon _truePolygon = + private static readonly Polygon _truePolygon = new Polygon(new LinearRing(new[] { new Coordinate(0, 0), @@ -20,7 +20,7 @@ public class QueryableFilterVisitorIntersectsTests new Coordinate(0, 0), })); - private static readonly Polygon _falsePolygon = + private static readonly Polygon _falsePolygon = new Polygon(new LinearRing(new[] { new Coordinate(1000, 1000), @@ -59,8 +59,7 @@ public async Task Create_Intersects_Query() geometry: { type: Polygon, coordinates: [[10 10], [10 90], [90 90], [90 10], [10 10]] - }, - eq: true + } } } }){ @@ -77,12 +76,11 @@ public async Task Create_Intersects_Query() @"{ root(where: { bar: { - intersects: { + nintersects: { geometry: { type: Polygon, coordinates: [[10 10], [10 90], [90 90], [90 10], [10 10]] - }, - eq: false + } } } }){ diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorOverlapsTests.cs b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorOverlapsTests.cs index 5df460659d9..c41d86c661d 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorOverlapsTests.cs +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorOverlapsTests.cs @@ -10,7 +10,7 @@ public class QueryableFilterVisitorOverlapsTests : SchemaCache , IClassFixture> { - private static readonly Polygon _truePolygon = + private static readonly Polygon _truePolygon = new Polygon(new LinearRing(new[] { new Coordinate(150, 150), @@ -22,7 +22,7 @@ public class QueryableFilterVisitorOverlapsTests new Coordinate(150, 150) })); - private static readonly Polygon _falsePolygon = + private static readonly Polygon _falsePolygon = new Polygon(new LinearRing(new[] { new Coordinate(1000, 1000), @@ -69,8 +69,7 @@ public async Task Create_Overlaps_Query() [70 70], [150 150] ] - }, - eq: true + } } } }){ @@ -87,7 +86,7 @@ public async Task Create_Overlaps_Query() @"{ root(where: { bar: { - overlaps: { + noverlaps: { geometry: { type: Polygon, coordinates: [ @@ -99,8 +98,7 @@ public async Task Create_Overlaps_Query() [70 70], [150 150] ] - }, - eq: false + } } } }){ diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorTouchesTests.cs b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorTouchesTests.cs index 0b9a4cb8b77..cd03df08911 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorTouchesTests.cs +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorTouchesTests.cs @@ -67,7 +67,6 @@ public async Task Create_Touches_Query() [240 80] ] }, - eq: true } } }){ @@ -84,7 +83,7 @@ public async Task Create_Touches_Query() @"{ root(where: { bar: { - touches: { + ntouches: { geometry: { type: Polygon, coordinates: [ @@ -95,7 +94,6 @@ public async Task Create_Touches_Query() [240 80] ] }, - eq: false } } }){ diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorWithinTests.cs b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorWithinTests.cs index cd8c375c3c6..d9cd4afb53a 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorWithinTests.cs +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/QueryableFilterVisitorWithinTests.cs @@ -65,8 +65,7 @@ public async Task Create_Within_Query() [20 100 ], [20 20] ] - }, - eq: true + } } } }){ @@ -83,7 +82,7 @@ public async Task Create_Within_Query() @"{ root(where: { bar: { - within: { + nwithin: { geometry: { type: Polygon, coordinates: [ @@ -93,8 +92,7 @@ public async Task Create_Within_Query() [20 100 ], [20 20] ] - }, - eq: false + } } } }){ diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorContainsTests.Create_Contains_Expression_1_sql.snap b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorContainsTests.Create_Contains_Expression_1_sql.snap index 75ae8a24c18..5515c62463a 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorContainsTests.Create_Contains_Expression_1_sql.snap +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorContainsTests.Create_Contains_Expression_1_sql.snap @@ -1,3 +1,3 @@ SELECT d."Id", d."Bar" FROM "Data" AS d -WHERE (ST_Contains(d."Bar", @__p_0) = @__p_1) OR ((ST_Contains(d."Bar", @__p_0) IS NULL) AND (@__p_1 IS NULL)) +WHERE ST_Contains(d."Bar", @__p_0) diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorContainsTests.Create_Contains_Expression_2_sql.snap b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorContainsTests.Create_Contains_Expression_2_sql.snap index 75ae8a24c18..5515c62463a 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorContainsTests.Create_Contains_Expression_2_sql.snap +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorContainsTests.Create_Contains_Expression_2_sql.snap @@ -1,3 +1,3 @@ SELECT d."Id", d."Bar" FROM "Data" AS d -WHERE (ST_Contains(d."Bar", @__p_0) = @__p_1) OR ((ST_Contains(d."Bar", @__p_0) IS NULL) AND (@__p_1 IS NULL)) +WHERE ST_Contains(d."Bar", @__p_0) diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorContainsTests.Create_NotContains_Expression_1_sql.snap b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorContainsTests.Create_NotContains_Expression_1_sql.snap index 5bf891bafd5..f1d2b568334 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorContainsTests.Create_NotContains_Expression_1_sql.snap +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorContainsTests.Create_NotContains_Expression_1_sql.snap @@ -1,3 +1,3 @@ SELECT d."Id", d."Bar" FROM "Data" AS d -WHERE ((ST_Contains(d."Bar", @__p_0) <> @__p_1) OR ((ST_Contains(d."Bar", @__p_0) IS NULL) OR (@__p_1 IS NULL))) AND ((ST_Contains(d."Bar", @__p_0) IS NOT NULL) OR (@__p_1 IS NOT NULL)) +WHERE NOT (ST_Contains(d."Bar", @__p_0)) diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorContainsTests.Create_NotContains_Expression_2_sql.snap b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorContainsTests.Create_NotContains_Expression_2_sql.snap index 5bf891bafd5..f1d2b568334 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorContainsTests.Create_NotContains_Expression_2_sql.snap +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorContainsTests.Create_NotContains_Expression_2_sql.snap @@ -1,3 +1,3 @@ SELECT d."Id", d."Bar" FROM "Data" AS d -WHERE ((ST_Contains(d."Bar", @__p_0) <> @__p_1) OR ((ST_Contains(d."Bar", @__p_0) IS NULL) OR (@__p_1 IS NULL))) AND ((ST_Contains(d."Bar", @__p_0) IS NOT NULL) OR (@__p_1 IS NOT NULL)) +WHERE NOT (ST_Contains(d."Bar", @__p_0)) diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorIntersectsTests.Create_Intersects_Query_false_sql.snap b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorIntersectsTests.Create_Intersects_Query_false_sql.snap index 538e9d37ffe..d33cbab45f9 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorIntersectsTests.Create_Intersects_Query_false_sql.snap +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorIntersectsTests.Create_Intersects_Query_false_sql.snap @@ -1,3 +1,3 @@ SELECT d."Id", d."Bar" FROM "Data" AS d -WHERE (ST_Intersects(d."Bar", @__p_0) = @__p_1) OR ((ST_Intersects(d."Bar", @__p_0) IS NULL) AND (@__p_1 IS NULL)) +WHERE NOT (ST_Intersects(d."Bar", @__p_0)) diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorIntersectsTests.Create_Intersects_Query_true_sql.snap b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorIntersectsTests.Create_Intersects_Query_true_sql.snap index 538e9d37ffe..3e942f5f66a 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorIntersectsTests.Create_Intersects_Query_true_sql.snap +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorIntersectsTests.Create_Intersects_Query_true_sql.snap @@ -1,3 +1,3 @@ SELECT d."Id", d."Bar" FROM "Data" AS d -WHERE (ST_Intersects(d."Bar", @__p_0) = @__p_1) OR ((ST_Intersects(d."Bar", @__p_0) IS NULL) AND (@__p_1 IS NULL)) +WHERE ST_Intersects(d."Bar", @__p_0) diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorOverlapsTests.Create_Overlaps_Query_false_sql.snap b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorOverlapsTests.Create_Overlaps_Query_false_sql.snap index 1b21f861075..88adfa1fce7 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorOverlapsTests.Create_Overlaps_Query_false_sql.snap +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorOverlapsTests.Create_Overlaps_Query_false_sql.snap @@ -1,3 +1,3 @@ SELECT d."Id", d."Bar" FROM "Data" AS d -WHERE (ST_Overlaps(d."Bar", @__p_0) = @__p_1) OR ((ST_Overlaps(d."Bar", @__p_0) IS NULL) AND (@__p_1 IS NULL)) +WHERE NOT (ST_Overlaps(d."Bar", @__p_0)) diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorOverlapsTests.Create_Overlaps_Query_true_sql.snap b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorOverlapsTests.Create_Overlaps_Query_true_sql.snap index 1b21f861075..98f88fcae92 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorOverlapsTests.Create_Overlaps_Query_true_sql.snap +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorOverlapsTests.Create_Overlaps_Query_true_sql.snap @@ -1,3 +1,3 @@ SELECT d."Id", d."Bar" FROM "Data" AS d -WHERE (ST_Overlaps(d."Bar", @__p_0) = @__p_1) OR ((ST_Overlaps(d."Bar", @__p_0) IS NULL) AND (@__p_1 IS NULL)) +WHERE ST_Overlaps(d."Bar", @__p_0) diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorTouchesTests.Create_Touches_Query_false_sql.snap b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorTouchesTests.Create_Touches_Query_false_sql.snap index 8052fe5c0a3..5769112ef3b 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorTouchesTests.Create_Touches_Query_false_sql.snap +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorTouchesTests.Create_Touches_Query_false_sql.snap @@ -1,3 +1,3 @@ SELECT d."Id", d."Bar" FROM "Data" AS d -WHERE (ST_Touches(d."Bar", @__p_0) = @__p_1) OR ((ST_Touches(d."Bar", @__p_0) IS NULL) AND (@__p_1 IS NULL)) +WHERE NOT (ST_Touches(d."Bar", @__p_0)) diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorTouchesTests.Create_Touches_Query_true_sql.snap b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorTouchesTests.Create_Touches_Query_true_sql.snap index 8052fe5c0a3..e6c7a015429 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorTouchesTests.Create_Touches_Query_true_sql.snap +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorTouchesTests.Create_Touches_Query_true_sql.snap @@ -1,3 +1,3 @@ SELECT d."Id", d."Bar" FROM "Data" AS d -WHERE (ST_Touches(d."Bar", @__p_0) = @__p_1) OR ((ST_Touches(d."Bar", @__p_0) IS NULL) AND (@__p_1 IS NULL)) +WHERE ST_Touches(d."Bar", @__p_0) diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorWithinTests.Create_Within_Query_false_sql.snap b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorWithinTests.Create_Within_Query_false_sql.snap index 84d795cdadf..865f0b3b3a8 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorWithinTests.Create_Within_Query_false_sql.snap +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorWithinTests.Create_Within_Query_false_sql.snap @@ -1,3 +1,3 @@ SELECT d."Id", d."Bar" FROM "Data" AS d -WHERE (ST_Within(d."Bar", @__p_0) = @__p_1) OR ((ST_Within(d."Bar", @__p_0) IS NULL) AND (@__p_1 IS NULL)) +WHERE NOT (ST_Within(d."Bar", @__p_0)) diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorWithinTests.Create_Within_Query_true_sql.snap b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorWithinTests.Create_Within_Query_true_sql.snap index 84d795cdadf..f89286c29ad 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorWithinTests.Create_Within_Query_true_sql.snap +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/__snapshots__/QueryableFilterVisitorWithinTests.Create_Within_Query_true_sql.snap @@ -1,3 +1,3 @@ SELECT d."Id", d."Bar" FROM "Data" AS d -WHERE (ST_Within(d."Bar", @__p_0) = @__p_1) OR ((ST_Within(d."Bar", @__p_0) IS NULL) AND (@__p_1 IS NULL)) +WHERE ST_Within(d."Bar", @__p_0) diff --git a/src/HotChocolate/Spatial/test/Data.Tests/Extensions/QueryableFilterVisitorGeometryTests.cs b/src/HotChocolate/Spatial/test/Data.Tests/Extensions/QueryableFilterVisitorGeometryTests.cs index 77449931957..95a77272db9 100644 --- a/src/HotChocolate/Spatial/test/Data.Tests/Extensions/QueryableFilterVisitorGeometryTests.cs +++ b/src/HotChocolate/Spatial/test/Data.Tests/Extensions/QueryableFilterVisitorGeometryTests.cs @@ -23,7 +23,6 @@ public void Line_Contains_Point() type: Point coordinates: [20, 20] } - eq: true } } }"); @@ -69,7 +68,6 @@ public void Polygon_Contains_Buffered_Point() coordinates: [3, 3] } buffer: 2 - eq: true } } }"); @@ -204,7 +202,6 @@ public class IntersectTests: FilterVisitorTestBase { type: Point coordinates: [1, 1] } - eq: true } } }"); @@ -250,7 +247,6 @@ public void Line_in_Poly() type: LineString coordinates: [[1, 1], [3, 1]] } - eq: true } } }"); @@ -296,7 +292,6 @@ public void Poly_in_Poly() type: Polygon coordinates: [[1, 1], [3, 1], [2, 0], [1, 1]] } - eq: true } } }"); @@ -345,7 +340,6 @@ public void Line_and_Line() type: LineString coordinates: [[0, 0], [1, 2], [3, 1]] } - eq: true } } }"); @@ -389,7 +383,6 @@ public void Poly_and_Poly() type: Polygon coordinates: [[1, 1], [3, 1], [2, 0], [1, 1]] } - eq: true } } }"); @@ -439,7 +432,6 @@ public void Point_Within_Line() type: LineString coordinates: [[10, 20], [20, 20], [30, 20]] } - eq: true } } }"); @@ -475,7 +467,6 @@ public void Polygon_Within_Buffered_Point() coordinates: [3, 3] } buffer: 5 - eq: true } } }"); diff --git a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.GeometryFilterType_Native.snap b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.GeometryFilterType_Native.snap index 5589bb025c5..60b786b1a67 100644 --- a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.GeometryFilterType_Native.snap +++ b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.GeometryFilterType_Native.snap @@ -51,8 +51,6 @@ input DimensionOperationFilterInput { input GeometryContainsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryDistanceOperationFilterInput { @@ -90,39 +88,36 @@ input GeometryFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input GeometryIntersectsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryOverlapsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryTouchesOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryWithinOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input OgcGeometryTypeOperationFilterInput { @@ -154,11 +149,16 @@ input PointFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input StringOperationFilterInput { diff --git a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.GeometryFilterType_Native_NETCOREAPP2_1.snap b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.GeometryFilterType_Native_NETCOREAPP2_1.snap index 2a7c8b01d76..c2f27774d9d 100644 --- a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.GeometryFilterType_Native_NETCOREAPP2_1.snap +++ b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.GeometryFilterType_Native_NETCOREAPP2_1.snap @@ -51,8 +51,6 @@ input DimensionOperationFilterInput { input GeometryContainsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryDistanceOperationFilterInput { @@ -104,39 +102,36 @@ input GeometryFilterInput { "Sets the ID of the Spatial Reference System used by the Geometry." srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input GeometryIntersectsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryOverlapsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryTouchesOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryWithinOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input OgcGeometryTypeOperationFilterInput { @@ -172,11 +167,16 @@ input PointFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input StringOperationFilterInput { diff --git a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.LineStringFilterType_Native.snap b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.LineStringFilterType_Native.snap index 5a589bc9206..ae7ffc38960 100644 --- a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.LineStringFilterType_Native.snap +++ b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.LineStringFilterType_Native.snap @@ -51,8 +51,6 @@ input DimensionOperationFilterInput { input GeometryContainsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryDistanceOperationFilterInput { @@ -90,39 +88,36 @@ input GeometryFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input GeometryIntersectsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryOverlapsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryTouchesOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryWithinOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input LineStringFilterInput { @@ -143,11 +138,16 @@ input LineStringFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input OgcGeometryTypeOperationFilterInput { @@ -179,11 +179,16 @@ input PointFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input StringOperationFilterInput { diff --git a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.LineStringFilterType_Native_NETCOREAPP2_1.snap b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.LineStringFilterType_Native_NETCOREAPP2_1.snap index 769b5d57fef..0204af1d305 100644 --- a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.LineStringFilterType_Native_NETCOREAPP2_1.snap +++ b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.LineStringFilterType_Native_NETCOREAPP2_1.snap @@ -51,8 +51,6 @@ input DimensionOperationFilterInput { input GeometryContainsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryDistanceOperationFilterInput { @@ -104,39 +102,36 @@ input GeometryFilterInput { "Sets the ID of the Spatial Reference System used by the Geometry." srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input GeometryIntersectsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryOverlapsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryTouchesOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryWithinOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } "Models an OGC-style LineString" @@ -160,11 +155,16 @@ input LineStringFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input OgcGeometryTypeOperationFilterInput { @@ -200,11 +200,16 @@ input PointFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input StringOperationFilterInput { diff --git a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiLineStringFilterType_Native.snap b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiLineStringFilterType_Native.snap index 153addfac8e..8a655ba9218 100644 --- a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiLineStringFilterType_Native.snap +++ b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiLineStringFilterType_Native.snap @@ -51,8 +51,6 @@ input DimensionOperationFilterInput { input GeometryContainsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryDistanceOperationFilterInput { @@ -90,39 +88,36 @@ input GeometryFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input GeometryIntersectsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryOverlapsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryTouchesOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryWithinOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input MultiLineStringFilterInput { @@ -143,11 +138,16 @@ input MultiLineStringFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input OgcGeometryTypeOperationFilterInput { @@ -179,11 +179,16 @@ input PointFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input StringOperationFilterInput { diff --git a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiLineStringFilterType_Native_NETCOREAPP2_1.snap b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiLineStringFilterType_Native_NETCOREAPP2_1.snap index 245e4b35380..29819741638 100644 --- a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiLineStringFilterType_Native_NETCOREAPP2_1.snap +++ b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiLineStringFilterType_Native_NETCOREAPP2_1.snap @@ -51,8 +51,6 @@ input DimensionOperationFilterInput { input GeometryContainsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryDistanceOperationFilterInput { @@ -104,39 +102,36 @@ input GeometryFilterInput { "Sets the ID of the Spatial Reference System used by the Geometry." srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input GeometryIntersectsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryOverlapsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryTouchesOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryWithinOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } "Models a collection of LineStrings.\n\nAny collection of LineStrings is a valid MultiLineString." @@ -160,11 +155,16 @@ input MultiLineStringFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input OgcGeometryTypeOperationFilterInput { @@ -200,11 +200,16 @@ input PointFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input StringOperationFilterInput { diff --git a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiPointFilterType_Native.snap b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiPointFilterType_Native.snap index b65b39de20f..96f9c710644 100644 --- a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiPointFilterType_Native.snap +++ b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiPointFilterType_Native.snap @@ -51,8 +51,6 @@ input DimensionOperationFilterInput { input GeometryContainsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryDistanceOperationFilterInput { @@ -90,39 +88,36 @@ input GeometryFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input GeometryIntersectsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryOverlapsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryTouchesOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryWithinOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input MultiPointFilterInput { @@ -143,11 +138,16 @@ input MultiPointFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input OgcGeometryTypeOperationFilterInput { @@ -179,11 +179,16 @@ input PointFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input StringOperationFilterInput { diff --git a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiPointFilterType_Native_NETCOREAPP2_1.snap b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiPointFilterType_Native_NETCOREAPP2_1.snap index 3a18af4db68..059fbe5d7be 100644 --- a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiPointFilterType_Native_NETCOREAPP2_1.snap +++ b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiPointFilterType_Native_NETCOREAPP2_1.snap @@ -51,8 +51,6 @@ input DimensionOperationFilterInput { input GeometryContainsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryDistanceOperationFilterInput { @@ -104,39 +102,36 @@ input GeometryFilterInput { "Sets the ID of the Spatial Reference System used by the Geometry." srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input GeometryIntersectsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryOverlapsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryTouchesOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryWithinOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } "Models a collection of Points." @@ -160,11 +155,16 @@ input MultiPointFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input OgcGeometryTypeOperationFilterInput { @@ -200,11 +200,16 @@ input PointFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input StringOperationFilterInput { diff --git a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiPolygonFilterType_Native.snap b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiPolygonFilterType_Native.snap index fae3c6698d8..7803638d99c 100644 --- a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiPolygonFilterType_Native.snap +++ b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiPolygonFilterType_Native.snap @@ -51,8 +51,6 @@ input DimensionOperationFilterInput { input GeometryContainsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryDistanceOperationFilterInput { @@ -90,39 +88,36 @@ input GeometryFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input GeometryIntersectsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryOverlapsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryTouchesOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryWithinOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input MultiPolygonFilterInput { @@ -143,11 +138,16 @@ input MultiPolygonFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input OgcGeometryTypeOperationFilterInput { @@ -179,11 +179,16 @@ input PointFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input StringOperationFilterInput { diff --git a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiPolygonFilterType_Native_NETCOREAPP2_1.snap b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiPolygonFilterType_Native_NETCOREAPP2_1.snap index 7a5c8d39360..879e12f9e78 100644 --- a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiPolygonFilterType_Native_NETCOREAPP2_1.snap +++ b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.MultiPolygonFilterType_Native_NETCOREAPP2_1.snap @@ -51,8 +51,6 @@ input DimensionOperationFilterInput { input GeometryContainsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryDistanceOperationFilterInput { @@ -104,39 +102,36 @@ input GeometryFilterInput { "Sets the ID of the Spatial Reference System used by the Geometry." srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input GeometryIntersectsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryOverlapsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryTouchesOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryWithinOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } "Basic implementation of MultiPolygon." @@ -159,11 +154,16 @@ input MultiPolygonFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input OgcGeometryTypeOperationFilterInput { @@ -199,11 +199,16 @@ input PointFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input StringOperationFilterInput { diff --git a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.PointFilterType_Native.snap b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.PointFilterType_Native.snap index 5589bb025c5..60b786b1a67 100644 --- a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.PointFilterType_Native.snap +++ b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.PointFilterType_Native.snap @@ -51,8 +51,6 @@ input DimensionOperationFilterInput { input GeometryContainsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryDistanceOperationFilterInput { @@ -90,39 +88,36 @@ input GeometryFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input GeometryIntersectsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryOverlapsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryTouchesOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryWithinOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input OgcGeometryTypeOperationFilterInput { @@ -154,11 +149,16 @@ input PointFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input StringOperationFilterInput { diff --git a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.PointFilterType_Native_NETCOREAPP2_1.snap b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.PointFilterType_Native_NETCOREAPP2_1.snap index 2a7c8b01d76..c2f27774d9d 100644 --- a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.PointFilterType_Native_NETCOREAPP2_1.snap +++ b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.PointFilterType_Native_NETCOREAPP2_1.snap @@ -51,8 +51,6 @@ input DimensionOperationFilterInput { input GeometryContainsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryDistanceOperationFilterInput { @@ -104,39 +102,36 @@ input GeometryFilterInput { "Sets the ID of the Spatial Reference System used by the Geometry." srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input GeometryIntersectsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryOverlapsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryTouchesOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryWithinOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input OgcGeometryTypeOperationFilterInput { @@ -172,11 +167,16 @@ input PointFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input StringOperationFilterInput { diff --git a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.PolygonFilterType_Native.snap b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.PolygonFilterType_Native.snap index df45abf96f7..5b8c7e56690 100644 --- a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.PolygonFilterType_Native.snap +++ b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.PolygonFilterType_Native.snap @@ -51,8 +51,6 @@ input DimensionOperationFilterInput { input GeometryContainsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryDistanceOperationFilterInput { @@ -90,39 +88,36 @@ input GeometryFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input GeometryIntersectsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryOverlapsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryTouchesOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryWithinOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input OgcGeometryTypeOperationFilterInput { @@ -154,11 +149,16 @@ input PointFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input PolygonFilterInput { @@ -179,11 +179,16 @@ input PolygonFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input StringOperationFilterInput { diff --git a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.PolygonFilterType_Native_NETCOREAPP2_1.snap b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.PolygonFilterType_Native_NETCOREAPP2_1.snap index 53073e00947..3e4691d77ff 100644 --- a/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.PolygonFilterType_Native_NETCOREAPP2_1.snap +++ b/src/HotChocolate/Spatial/test/Data.Tests/__snapshots__/GeometryFilterInputTypeTest.PolygonFilterType_Native_NETCOREAPP2_1.snap @@ -51,8 +51,6 @@ input DimensionOperationFilterInput { input GeometryContainsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryDistanceOperationFilterInput { @@ -104,39 +102,36 @@ input GeometryFilterInput { "Sets the ID of the Spatial Reference System used by the Geometry." srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input GeometryIntersectsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryOverlapsOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryTouchesOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input GeometryWithinOperationFilterInput { geometry: Geometry! buffer: Float - eq: Boolean - neq: Boolean } input OgcGeometryTypeOperationFilterInput { @@ -172,11 +167,16 @@ input PointFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } "Represents a polygon with linear edges, which may include holes.\nThe outer boundary (shell)\nand inner boundaries (holes) of the polygon are represented by {@link LinearRing}s.\nThe boundary rings of the polygon may have any orientation.\nPolygons are closed, simple geometries by definition.\n\nThe polygon model conforms to the assertions specified in the\nOpenGIS Simple Features\nSpecification for SQL.\n\nA Polygon is topologically valid if and only if:\n\nthe coordinates which define it are valid coordinates\nthe linear rings for the shell and holes are valid\n(i.e. are closed and do not self-intersect)\nholes touch the shell or another hole at at most one point\n(which implies that the rings of the shell and holes must not cross)\nthe interior of the polygon is connected,\nor equivalently no sequence of touching holes\nmakes the interior of the polygon disconnected\n(i.e. effectively split the polygon into two pieces)." @@ -203,11 +203,16 @@ input PolygonFilterInput { pointOnSurface: PointFilterInput srid: ComparableInt32OperationFilterInput contains: GeometryContainsOperationFilterInput + ncontains: GeometryContainsOperationFilterInput distance: GeometryDistanceOperationFilterInput intersects: GeometryIntersectsOperationFilterInput + nintersects: GeometryIntersectsOperationFilterInput overlaps: GeometryOverlapsOperationFilterInput + noverlaps: GeometryOverlapsOperationFilterInput touches: GeometryTouchesOperationFilterInput + ntouches: GeometryTouchesOperationFilterInput within: GeometryWithinOperationFilterInput + nwithin: GeometryWithinOperationFilterInput } input StringOperationFilterInput {