Пример #1
0
 public IFilterConventionDefaultOperationDescriptor Operation(FilterOperationKind kind)
 {
     return(_defaultOperations.GetOrAdd(
                kind,
                (FilterOperationKind kind) =>
                FilterConventionDefaultOperationDescriptor.New(this, kind)));
 }
        private ComparableFilterOperationDescriptor CreateComparableOperation(
            FilterOperationKind operationKind)
        {
            var descirptor = new ComparableFilterFieldDescriptor(
                _descriptorContext, _propertyInfo);
            ExtendedTypeReference typeReference = _descriptorContext.TypeInspector.GetTypeRef(
                typeof(Foo),
                TypeContext.Input);
            var definition = new FilterOperationDefintion()
            {
                Name      = "Foo",
                Type      = typeReference,
                Operation = new FilterOperation(typeof(string), operationKind, _propertyInfo),
                Property  = _propertyInfo
            };

            var operation = new FilterOperation(
                typeof(bool),
                operationKind,
                definition.Property);

            return(ComparableFilterOperationDescriptor.New(
                       _descriptorContext,
                       descirptor,
                       "Foo",
                       typeReference,
                       operation));
        }
Пример #3
0
        public void AssertOperation <T>(
            ObjectValueNode value,
            FilterKind kind,
            FilterOperationKind operationKind,
            FilterOperationHandler handler)
        {
            FilterInputType <T> fooType = CreateType(new FilterInputType <T>());

            var helper = ExpressionVisitorMock.Create(handler);

            FilterExpressionVisitorDefinition convention =
                new MockFilterConvention(
                    x => x.UseDefault()
                    .UseExpressionVisitor()
                    .UseDefault()
                    .Kind(kind)
                    .Operation(operationKind)
                    .Handler(helper.FilterOperationHandler))
                .GetExpressionDefinition();

            // act
            var filter = new QueryableFilterVisitorContext(
                fooType,
                typeof(T),
                convention,
                TypeConversion.Default,
                true);

            QueryableFilterVisitor.Default.Visit(value, filter);
            Func <T, bool> func = filter.CreateOrAssert <T>().Compile();

            // assert
            Assert.Equal(1, helper.CallCount(handler));
        }
 protected FilterConventionDefaultOperationDescriptor(
     FilterConventionDescriptor descriptor,
     FilterOperationKind kind) : base(kind)
 {
     _descriptor = descriptor ?? throw new ArgumentNullException(nameof(descriptor));
     Definition.OperationKind = kind;
 }
 protected FilterExpressionOperationDescriptor(
     FilterExpressionTypeDescriptor descriptor,
     FilterOperationKind kind)
 {
     _descriptor = descriptor ?? throw new ArgumentNullException(nameof(descriptor));
     Definition.OperationKind = kind;
 }
 protected override FilterOperationDefintion CreateOperationDefinition(
     FilterOperationKind operationKind)
 {
     return(FilterOperationKind.ArrayAny == operationKind
         ? CreateBooleanOperation(operationKind).CreateDefinition()
         : CreateOperation(operationKind).CreateDefinition());
 }
Пример #7
0
        private ComparableFilterOperationDescriptor CreateComparableOperation(
            FilterOperationKind operationKind)
        {
            var descirptor = new ComparableFilterFieldDescriptor(
                _descriptorContext, _propertyInfo, _filterConvention);
            var typeReference = new ClrTypeReference(typeof(Foo), TypeContext.Input);
            var definition    = new FilterOperationDefintion()
            {
                Name      = "Foo",
                Type      = typeReference,
                Operation = new FilterOperation(typeof(string),
                                                FilterKind.Boolean, operationKind, _propertyInfo),
                Property = _propertyInfo
            };

            var operation = new FilterOperation(
                typeof(bool),
                FilterKind.Boolean,
                operationKind,
                definition.Property);

            return(ComparableFilterOperationDescriptor.New(
                       _descriptorContext,
                       descirptor,
                       "Foo",
                       typeReference,
                       operation,
                       _filterConvention));
        }
Пример #8
0
 protected NameString CreateFieldName(FilterOperationKind kind)
 {
     if (typeof(ISingleFilter).IsAssignableFrom(Definition.Property.DeclaringType))
     {
         Definition.Name = _namingConvention.ArrayFilterPropertyName;
     }
     return(_namingConvention.CreateFieldName(Definition, kind));
 }
 protected FilterOperation GetFilterOperation(
     FilterOperationKind operationKind)
 {
     return(new FilterOperation(
                _type,
                operationKind,
                Definition.Property));
 }
Пример #10
0
 public FilterOperation(
     Type type,
     FilterOperationKind kind,
     PropertyInfo property)
 {
     Type     = type ?? throw new ArgumentNullException(nameof(type));
     Kind     = kind;
     Property = property ?? throw new ArgumentNullException(nameof(property));
 }
        public IFilterConventionTypeDescriptor Ignore(
            FilterOperationKind kind,
            bool ignore = true)
        {
            _operations.GetOrAdd(kind, kind => FilterConventionOperationDescriptor.New(this, kind))
            .Ignore(true);

            return(this);
        }
 protected virtual ITypeReference RewriteType(
     FilterOperationKind operationKind)
 {
     if (ListOperations.Contains(operationKind))
     {
         return(RewriteTypeListType());
     }
     return(RewriteTypeToNullableType());
 }
        private ArrayFilterOperationDescriptor CreateOperation(
            FilterOperationKind operationKind)
        {
            var operation     = GetFilterOperation(operationKind);
            var typeReference = GetTypeReference();

            return(ArrayFilterOperationDescriptor.New(
                       Context,
                       this,
                       CreateFieldName(operationKind),
                       typeReference,
                       operation));
        }
Пример #14
0
 public bool TryGetOperation(
     FilterKind kind,
     FilterOperationKind operationKind,
     [NotNullWhen(true)] out FilterOperationHandler?handler)
 {
     if (Defintion.OperationHandler.TryGetValue(
             (kind, operationKind), out FilterOperationHandler? operationHandler))
     {
         handler = operationHandler;
         return(true);
     }
     handler = null;
     return(false);
 }
Пример #15
0
        private ArrayFilterOperationDescriptor <TArray> CreateOperation(
            FilterOperationKind operationKind)
        {
            FilterOperation? operation     = GetFilterOperation(operationKind);
            ClrTypeReference?typeReference = GetTypeReference();

            return(ArrayFilterOperationDescriptor <TArray> .New(
                       Context,
                       this,
                       CreateFieldName(operationKind),
                       typeReference,
                       operation,
                       FilterConvention));
        }
        private ObjectFilterOperationDescriptor <TObject> CreateOperation(
            FilterOperationKind operationKind)
        {
            var operation = new FilterOperation(
                typeof(TObject),
                operationKind,
                Definition.Property);

            return(ObjectFilterOperationDescriptor <TObject> .New(
                       Context,
                       this,
                       CreateFieldName(operationKind),
                       RewriteType(operationKind),
                       operation));
        }
 protected virtual void AddImplicitOperation(
     IDictionary <NameString, FilterOperationDefintion> fields,
     ISet <FilterOperationKind> handledFilterKinds,
     FilterOperationKind operationKind)
 {
     if (handledFilterKinds.Add(operationKind))
     {
         FilterOperationDefintion definition =
             CreateOperationDefinition(operationKind);
         if (!fields.ContainsKey(definition.Name))
         {
             fields.Add(definition.Name, definition);
         }
     }
 }
Пример #18
0
        private ComparableFilterOperationDescriptor CreateOperation(
            FilterOperationKind operationKind)
        {
            var operation = new FilterOperation(
                typeof(IComparable),
                operationKind,
                Definition.Property);

            return(ComparableFilterOperationDescriptor.New(
                       Context,
                       this,
                       CreateFieldName(operationKind),
                       RewriteType(operationKind),
                       operation));
        }
        private ArrayBooleanFilterOperationDescriptor CreateBooleanOperation(
            FilterOperationKind operationKind)
        {
            var operation = GetFilterOperation(operationKind);

            var typeReference = RewriteTypeToNullableType(
                Context.TypeInspector.GetTypeRef(typeof(bool)),
                Context.TypeInspector);

            return(ArrayBooleanFilterOperationDescriptor.New(
                       Context,
                       this,
                       CreateFieldName(operationKind),
                       typeReference,
                       operation));
        }
Пример #20
0
        private BooleanFilterOperationDescriptor CreateOperation(
            FilterOperationKind operationKind)
        {
            var operation = new FilterOperation(
                typeof(bool),
                Definition.Kind,
                operationKind,
                Definition.Property);

            return(BooleanFilterOperationDescriptor.New(
                       Context,
                       this,
                       CreateFieldName(operationKind),
                       RewriteType(operationKind),
                       operation,
                       FilterConvention));
        }
Пример #21
0
        public FilterOperation(
            Type type,
            FilterKind filterKind,
            FilterOperationKind kind,
            PropertyInfo property)
        {
            Type       = type ?? throw new ArgumentNullException(nameof(type));
            FilterKind = filterKind;
            Kind       = kind;
            Property   = property ?? throw new ArgumentNullException(nameof(property));

            if (Property.DeclaringType != null)
            {
                IsNullable = new NullableHelper(
                    Property.DeclaringType).GetPropertyInfo(Property).IsNullable;
            }
        }
        private ArrayBooleanFilterOperationDescriptor CreateBooleanOperation(
            FilterOperationKind operationKind)
        {
            var operation = GetFilterOperation(operationKind);

            var typeReference = RewriteTypeToNullableType(
                new ClrTypeReference(typeof(bool),
                                     Definition.Type.Context,
                                     true,
                                     true));

            return(ArrayBooleanFilterOperationDescriptor.New(
                       Context,
                       this,
                       CreateFieldName(operationKind),
                       typeReference,
                       operation));
        }
        private ObjectFilterOperationDescriptor CreateOperation(
            FilterOperationKind operationKind)
        {
            var operation = new FilterOperation(
                _type,
                operationKind,
                Definition.Property);

            return(ObjectFilterOperationDescriptor.New(
                       Context,
                       this,
                       CreateFieldName(operationKind),
                       new ClrTypeReference(
                           typeof(FilterInputType <>).MakeGenericType(_type),
                           Definition.Type.Context,
                           true,
                           true),
                       operation));
        }
Пример #24
0
        private ObjectFilterOperationDescriptor CreateOperation(
            FilterOperationKind operationKind)
        {
            var operation = new FilterOperation(
                _type,
                operationKind,
                Definition.Property);

            ExtendedTypeReference typeRef = Context.TypeInspector.GetTypeRef(
                typeof(FilterInputType <>).MakeGenericType(_type),
                Definition.Type.Context);

            return(ObjectFilterOperationDescriptor.New(
                       Context,
                       this,
                       CreateFieldName(operationKind),
                       typeRef,
                       operation));
        }
Пример #25
0
 public IFilterExpressionOperationDescriptor Operation(FilterOperationKind kind) =>
 _operations.GetOrAdd(kind, _ => FilterExpressionOperationDescriptor.New(this, kind));
 public abstract NameString CreateFieldName(FilterFieldDefintion definition, FilterOperationKind kind);
Пример #27
0
 private ComparableFilterOperationDescriptor GetOrCreateOperation(
     FilterOperationKind operationKind)
 {
     return(Filters.GetOrAddOperation(operationKind,
                                      () => CreateOperation(operationKind)));
 }
Пример #28
0
 protected override FilterOperationDefintion CreateOperationDefinition(
     FilterOperationKind operationKind) =>
 CreateOperation(operationKind).CreateDefinition();
 protected abstract FilterOperationDefintion CreateOperationDefinition(
     FilterOperationKind operationKind);
        protected NameString CreateFieldName(FilterOperationKind kind)
        {
            switch (kind)
            {
            case FilterOperationKind.Equals:
                return(Definition.Name);

            case FilterOperationKind.NotEquals:
                return(Definition.Name + "_not");

            case FilterOperationKind.Contains:
                return(Definition.Name + "_contains");

            case FilterOperationKind.NotContains:
                return(Definition.Name + "_not_contains");

            case FilterOperationKind.In:
                return(Definition.Name + "_in");

            case FilterOperationKind.NotIn:
                return(Definition.Name + "_not_in");

            case FilterOperationKind.StartsWith:
                return(Definition.Name + "_starts_with");

            case FilterOperationKind.NotStartsWith:
                return(Definition.Name + "_not_starts_with");

            case FilterOperationKind.EndsWith:
                return(Definition.Name + "_ends_with");

            case FilterOperationKind.NotEndsWith:
                return(Definition.Name + "_not_ends_with");

            case FilterOperationKind.GreaterThan:
                return(Definition.Name + "_gt");

            case FilterOperationKind.NotGreaterThan:
                return(Definition.Name + "_not_gt");

            case FilterOperationKind.GreaterThanOrEquals:
                return(Definition.Name + "_gte");

            case FilterOperationKind.NotGreaterThanOrEquals:
                return(Definition.Name + "_not_gte");

            case FilterOperationKind.LowerThan:
                return(Definition.Name + "_lt");

            case FilterOperationKind.NotLowerThan:
                return(Definition.Name + "_not_lt");

            case FilterOperationKind.LowerThanOrEquals:
                return(Definition.Name + "_lte");

            case FilterOperationKind.NotLowerThanOrEquals:
                return(Definition.Name + "_not_lte");

            case FilterOperationKind.Object:
                return(Definition.Name);

            default:
                throw new NotSupportedException();
            }
        }