protected virtual BaseQuery HandleBetween(BetweenNode node, ElasticSearchQueryMapperState state)
        {
            var excludeLowerBound = !(node.Inclusion == Inclusion.Both || node.Inclusion == Inclusion.Lower);
            var excludeUpperBound = !(node.Inclusion == Inclusion.Both || node.Inclusion == Inclusion.Upper);
            var fieldName         = GetFormattedFieldName(node.Field);
            var lowerBound        = ValueFormatter.FormatValueForIndexStorage(node.From);
            var upperBound        = ValueFormatter.FormatValueForIndexStorage(node.To);

            return(Query.Range(delegate(RangeQueryDescriptor <dynamic> descriptor)
            {
                descriptor.From(lowerBound.ToString());
                if (excludeLowerBound)
                {
                    descriptor.FromExclusive();
                }

                descriptor.To(upperBound.ToString());
                if (excludeUpperBound)
                {
                    descriptor.ToExclusive();
                }

                descriptor.OnField(fieldName);
            }));
        }
Exemple #2
0
 /// <summary>
 ///     Visit Between node in DFS manner.
 /// </summary>
 /// <param name="node">Between node that will be visited.</param>
 public void Visit(BetweenNode node)
 {
     foreach (var item in node.Descendants)
     {
         item.Accept(this);
     }
     node.Accept(_visitor);
 }
Exemple #3
0
        private RdlSyntaxNode ComposeEqualityOperators()
        {
            var node = ComposeArithmeticOperators(Precendence.Level1);

            while (IsEqualityOperator(Current))
            {
                switch (Current.TokenType)
                {
                case StatementType.GreaterEqual:
                    Consume(StatementType.GreaterEqual);
                    node = new GreaterEqualNode(node, ComposeEqualityOperators());
                    break;

                case StatementType.Greater:
                    Consume(StatementType.Greater);
                    node = new GreaterNode(node, ComposeEqualityOperators());
                    break;

                case StatementType.LessEqual:
                    Consume(StatementType.LessEqual);
                    node = new LessEqualNode(node, ComposeEqualityOperators());
                    break;

                case StatementType.Less:
                    Consume(StatementType.Less);
                    node = new LessNode(node, ComposeEqualityOperators());
                    break;

                case StatementType.Equality:
                    Consume(StatementType.Equality);
                    node = new EqualityNode(node, ComposeEqualityOperators());
                    break;

                case StatementType.Diff:
                    Consume(StatementType.Diff);
                    node = new DiffNode(node, ComposeEqualityOperators());
                    break;

                case StatementType.Between:
                    node = new BetweenNode(ConsumeAndGetToken(), node,
                                           ComposeAndSkip(f => f.ComposeArithmeticOperators(Precendence.Level1), StatementType.And),
                                           ComposeArithmeticOperators(Precendence.Level1));
                    break;

                case StatementType.Not:
                    Consume(StatementType.Not);
                    node = new NotNode(Current, node);
                    break;

                default:
                    throw new NotSupportedException();
                }
            }

            return(node);
        }
Exemple #4
0
        /// <summary>
        ///     Performs "Between" specific operations.
        /// </summary>
        /// <param name="node">The "Between" node.</param>
        public void Visit(BetweenNode node)
        {
            switch (node.Expression.ReturnType.Name)
            {
            case nameof(Boolean):
            case nameof(Int16):
            case nameof(Int32):
            case nameof(Int64):
                Instructions.Add(new BetweenNumeric());
                break;

            case nameof(DateTimeOffset):
                Instructions.Add(new BetweenDatetime());
                break;
            }
        }
        protected QueryBase VisitBetween(BetweenNode node, ElasticQueryMapperState state)
        {
            // TODO: Same as GreaterThan etc. - i.e. check type for date, number or string etc.
            var fieldName    = FormatFieldName(node.Field);
            var includeLower = node.Inclusion == Inclusion.Both || node.Inclusion == Inclusion.Lower;
            var includeUpper = node.Inclusion == Inclusion.Both || node.Inclusion == Inclusion.Upper;

            // TODO: Allow null as one of parameters?

            // TODO: If number
            if (true)
            {
                var lowerNumber = double.Parse(node.From.ToString()); // TODO:
                var upperNumber = double.Parse(node.To.ToString());   // TODO:

                var query = new NumericRangeQuery
                {
                    Field = fieldName,
                    Boost = node.Boost
                };

                // TODO: Refactor this shit to something less shitty looking
                if (includeLower)
                {
                    query.GreaterThanOrEqualTo = lowerNumber;
                }
                else
                {
                    query.GreaterThan = lowerNumber;
                }

                if (includeUpper)
                {
                    query.LessThanOrEqualTo = upperNumber;
                }
                else
                {
                    query.LessThan = upperNumber;
                }
            }

            // TODO: If date
            // TODO: If term (string)

            throw new NotImplementedException();
        }
 protected virtual QueryNode VisitBetween(BetweenNode node, AzureQueryOptimizerState state)
 {
     return((QueryNode) new BetweenNode(node.Field, node.From, node.To, node.Inclusion, state.Boost));
 }
 public override void Visit(BetweenNode node)
 {
 }
Exemple #8
0
 /// <summary>
 ///     Visit Between node.
 /// </summary>
 /// <param name="node">Between node of AST</param>
 public abstract void Visit(BetweenNode node);
Exemple #9
0
 public void Visit(BetweenNode node)
 {
 }