Ejemplo n.º 1
0
        public override bool TryHandleOperation(
            QueryableFilterContext context,
            IFilterOperationField field,
            ObjectFieldNode node,
            [NotNullWhen(true)] out Expression?result)
        {
            IValueNode    value       = node.Value;
            IExtendedType runtimeType = context.RuntimeTypes.Peek();

            Type type = field.Type.IsListType()
                ? runtimeType.Source.MakeArrayType()
                : runtimeType.Source;

            object?parsedValue = InputParser.ParseLiteral(value, field, type);

            if ((!runtimeType.IsNullable || !CanBeNull) && parsedValue is null)
            {
                IError error = ErrorHelper.CreateNonNullError(field, value, context);
                context.ReportError(error);
                result = null !;
                return(false);
            }

            result = HandleOperation(context, field, value, parsedValue);
            return(true);
        }
 /// <inheritdoc />
 public override MongoDbFilterDefinition HandleOperation(
     MongoDbFilterVisitorContext context,
     IFilterOperationField field,
     IValueNode value,
     object?parsedValue)
 {
     if (parsedValue is {})
        /// <inheritdoc/>
        public override bool TryHandleOperation(
            MongoDbFilterVisitorContext context,
            IFilterOperationField field,
            ObjectFieldNode node,
            [NotNullWhen(true)] out MongoDbFilterDefinition result)
        {
            IValueNode value       = node.Value;
            object?    parsedValue = field.Type.ParseLiteral(value);

            if ((!context.RuntimeTypes.Peek().IsNullable || !CanBeNull) &&
                parsedValue is null)
            {
                context.ReportError(ErrorHelper.CreateNonNullError(field, value, context));

                result = null !;
                return(false);
            }

            if (field.Type.IsInstanceOfType(value))
            {
                result = HandleOperation(
                    context,
                    field,
                    value,
                    parsedValue);

                return(true);
            }

            throw new InvalidOperationException();
        }
    public override Expression HandleOperation(
        QueryableFilterContext context,
        IFilterOperationField field,
        IValueNode value,
        object?parsedValue)
    {
        if (context.RuntimeTypes.Count > 0 &&
            context.RuntimeTypes.Peek().TypeArguments is { Count : > 0 } args&&
            parsedValue is bool parsedBool)
        {
            Expression?property = context.GetInstance();

            Expression expression;
            if (parsedBool)
            {
                expression = FilterExpressionBuilder.Any(args[0].Source, property);
            }
            else
            {
                expression = FilterExpressionBuilder.Not(
                    FilterExpressionBuilder.Any(args[0].Source, property));
            }

            if (context.InMemory)
            {
                expression = FilterExpressionBuilder.NotNullAndAlso(property, expression);
            }

            return(expression);
        }

        throw ThrowHelper.Filtering_CouldNotParseValue(this, value, field.Type, field);
    }
    public override Expression HandleOperation(
        QueryableFilterContext context,
        IFilterOperationField field,
        IValueNode value,
        object parsedValue)
    {
        // We get the instance of the context. This is the expression path to the propert
        // e.g. ~> y.Street
        Expression property = context.GetInstance();

        // the parsed value is what was specified in the query
        // e.g. ~> eq: "221B Baker Street"
        if (parsedValue is string str)
        {
            // Creates and returnes the operation
            // e.g. ~> y.Street.ToLower().Contains("221b baker street")
            // return Expression.Lambda<Func<string, bool>>(
            // Expression.Call(Expression.Call(property, _toLower), _contains, Expression.Constant(str.ToLower()))
            // );
            return(Expression.Equal(
                       property, Expression.Constant(str.ToLower())
                       ));
        }

        // Something went wrong 😱
        throw new InvalidOperationException();
    }
Ejemplo n.º 6
0
 /// <inheritdoc />
 public override MongoDbFilterDefinition HandleOperation(
     MongoDbFilterVisitorContext context,
     IFilterOperationField field,
     IValueNode value,
     object?parsedValue)
 {
     if (context.RuntimeTypes.Count > 0 &&
         context.RuntimeTypes.Peek().TypeArguments is { Count : > 0 } &&
Ejemplo n.º 7
0
 public override Expression HandleOperation(
     QueryableFilterContext context,
     IFilterOperationField field,
     IValueNode value,
     object parsedValue)
 {
     throw new System.NotImplementedException();
 }
Ejemplo n.º 8
0
        public override Expression HandleOperation(
            QueryableFilterContext context,
            IFilterOperationField field,
            IValueNode value,
            object?parsedValue)
        {
            Expression property = context.GetInstance();

            return(FilterExpressionBuilder.Contains(property, parsedValue));
        }
Ejemplo n.º 9
0
        /// <inheritdoc />
        public override MongoDbFilterDefinition HandleOperation(
            MongoDbFilterVisitorContext context,
            IFilterOperationField field,
            IValueNode value,
            object?parsedValue)
        {
            var doc = new MongoDbFilterOperation("$eq", parsedValue);

            return(new MongoDbFilterOperation(context.GetMongoFilterScope().GetPath(), doc));
        }
        public override Expression HandleOperation(
            QueryableFilterContext context,
            IFilterOperationField field,
            IValueNode value,
            object?parsedValue)
        {
            Expression property = context.GetInstance();

            parsedValue = ParseValue(value, parsedValue, field.Type, context);
            return(FilterExpressionBuilder.NotEquals(property, parsedValue));
        }
Ejemplo n.º 11
0
        public override Expression HandleOperation(
            QueryableFilterContext context,
            IFilterOperationField field,
            IValueNode value,
            object parsedValue)
        {
            Expression property = context.GetInstance();

            return(FilterExpressionBuilder.In(
                       property,
                       context.RuntimeTypes.Peek().Source,
                       parsedValue));
        }
Ejemplo n.º 12
0
        public override Expression HandleOperation(QueryableFilterContext context, IFilterOperationField field, IValueNode value, object?parsedValue)
        {
            Expression property = context.GetInstance();

            if (parsedValue is string fieldValue)
            {
                //Compiles to:
                //false == property.ToLower().Contains(input.ToLower());

                return(Expression.Equal(Expression.Constant(false), Expression.Call(Expression.Call(property, Expressions.ToLower), Expressions.Contains, Expression.Constant(fieldValue.ToLower()))));
            }

            throw new InvalidOperationException();
        }
        public override Condition HandleOperation(
            Neo4JFilterVisitorContext context,
            IFilterOperationField field,
            IValueNode value,
            object?parsedValue)
        {
            if (parsedValue is not string str)
            {
                throw new InvalidOperationException();
            }

            return(context
                   .GetNode()
                   .Property(context.GetNeo4JFilterScope().GetPath())
                   .EndsWith(Cypher.LiteralOf(str)));
        }
        public override Expression HandleOperation(
            QueryableFilterContext context,
            IFilterOperationField field,
            IValueNode value,
            object?parsedValue)
        {
            Expression property = context.GetInstance();

            parsedValue = ParseValue(value, parsedValue, field.Type, context);

            if (parsedValue is null)
            {
                throw new InvalidOperationException();
            }

            return(FilterExpressionBuilder.GreaterThan(property, parsedValue));
        }
Ejemplo n.º 15
0
    public override Expression HandleOperation(
        QueryableFilterContext context,
        IFilterOperationField field,
        IValueNode value,
        object?parsedValue)
    {
        Expression property = context.GetInstance();

        parsedValue = ParseValue(value, parsedValue, field.Type, context);

        if (parsedValue is null)
        {
            throw ThrowHelper.Filtering_CouldNotParseValue(this, value, field.Type, field);
        }

        return(FilterExpressionBuilder.LowerThanOrEqual(property, parsedValue));
    }
        /// <inheritdoc />
        public override Condition HandleOperation(
            Neo4JFilterVisitorContext context,
            IFilterOperationField field,
            IValueNode value,
            object?parsedValue)
        {
            if (parsedValue is null)
            {
                throw new InvalidOperationException();
            }

            return(context
                   .GetNode()
                   .Property(context.GetNeo4JFilterScope().GetPath())
                   .GreaterThanOEqualTo(Cypher.LiteralOf(parsedValue))
                   .Not());
        }
Ejemplo n.º 17
0
        public override MongoDbFilterDefinition HandleOperation(
            MongoDbFilterVisitorContext context,
            IFilterOperationField field,
            IValueNode value,
            object?parsedValue)
        {
            if (parsedValue is string str)
            {
                var doc = new MongoDbFilterOperation(
                    "$regex",
                    new BsonRegularExpression($"/^{Regex.Escape(str)}/"));

                return(new MongoDbFilterOperation(context.GetMongoFilterScope().GetPath(), doc));
            }

            throw new InvalidOperationException();
        }
Ejemplo n.º 18
0
        public override Expression HandleOperation(
            QueryableFilterContext context,
            IFilterOperationField field,
            IValueNode value,
            object parsedValue)
        {
            // We get the instance of the context. This is the expression path to the propert
            // e.g. ~> y.Street
            Expression property = context.GetInstance();

            // the parsed value is what was specified in the query
            // e.g. ~> eq: "221B Baker Street"
            if (parsedValue is string str)
            {
                // Creates and returns the operation
                // e.g. ~> y.Street.ToLower() == "221b baker street"

                //MethodInfo contains = typeof(string).GetMethod("Contains");
                //var bodyLike = Expression.Call(expressionParameter, contains, Expression.Constant(fieldValue, prop.PropertyType));
                //return Expression.Lambda<Func<T, bool>>(bodyLike, parameter);

                //var lowerString = Expression.Call(property, _toLower).ToString();
                //var lowerSearchTerm = str.ToLower();

//        return lowerString.Contains(lowerSearchTerm, StringComparison.InvariantCultureIgnoreCase);

                return(Expression.Call(
                           Expression.Call(property, _toLower),
                           "Contains",
                           Type.EmptyTypes,
                           Expression.Constant(str.ToLower())
                           ));

                //return Expression.Equal(
                //  Expression.Call(property, _toLower),
                //  Expression.Constant(str.ToLower()));
            }
            // Something went wrong 😱
            throw new InvalidOperationException();
        }
        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);
        }
 /// <summary>
 /// Maps a operation field to a provider specific result.
 /// This method is called when the <see cref="FilterVisitor{TContext,T}"/> enters a
 /// field
 /// </summary>
 /// <param name="context">The <see cref="IFilterVisitorContext{T}"/> of the visitor</param>
 /// <param name="field">The field that is currently being visited</param>
 /// <param name="value">The value node of this field</param>
 /// <param name="parsedValue">The value of the value node</param>
 /// <returns>If <c>true</c> is returned the action is used for further processing</returns>
 public abstract MongoDbFilterDefinition HandleOperation(
     MongoDbFilterVisitorContext context,
     IFilterOperationField field,
     IValueNode value,
     object?parsedValue);
Ejemplo n.º 21
0
 /// <summary>
 /// Maps a operation field to a provider specific result.
 /// This method is called when the <see cref="FilterVisitor{TContext,T}"/> enters a
 /// field
 /// </summary>
 /// <param name="context">The <see cref="IFilterVisitorContext{T}"/> of the visitor</param>
 /// <param name="field">The field that is currently being visited</param>
 /// <param name="value">The value node of this field</param>
 /// <param name="parsedValue">The value of the value node</param>
 /// <returns>If <c>true</c> is returned the action is used for further processing</returns>
 public abstract Condition HandleOperation(
     Neo4JFilterVisitorContext context,
     IFilterOperationField field,
     IValueNode value,
     object?parsedValue);
Ejemplo n.º 22
0
 protected abstract bool TryHandleOperation(
     QueryableFilterContext context,
     IFilterOperationField field,
     ObjectFieldNode node,
     [NotNullWhen(true)] out Expression?result);
Ejemplo n.º 23
0
 public abstract Expression HandleOperation(
     QueryableFilterContext context,
     IFilterOperationField field,
     IValueNode value,
     object?parsedValue);