Esempio n. 1
0
        public virtual IJqlClause VisitJql(JqlExpression clause)
        {
            var               changed = false;
            IJqlClause        filter  = null;
            OrderByExpression orderBy = null;

            if (clause.Filter != null)
            {
                filter   = Visit(clause.Filter);
                changed |= filter != clause.Filter;
            }

            if (clause.OrderBy != null)
            {
                orderBy  = (OrderByExpression)Visit(clause.OrderBy);
                changed |= orderBy != clause.OrderBy;
            }

            return(changed
                ? new JqlExpression
            {
                Filter = filter,
                OrderBy = orderBy
            }
                : clause);
        }
Esempio n. 2
0
 private static string ExtractFieldName(IJqlClause field)
 {
     return(field switch
     {
         FieldReferenceExpression customField => customField.Field,
         _ => throw new JqlCompilationException($"field was not extracted from expression [{field}]")
     });
Esempio n. 3
0
        public BuiltQuery Build()
        {
            IJqlClause query = null;

            if (filters.Count > 0)
            {
                query = filters[0];
                for (var i = 1; i < filters.Count; i++)
                {
                    query = new BinaryExpression
                    {
                        Left     = query,
                        Right    = filters[i],
                        Operator = JqlBinaryExpressionType.And
                    };
                }
            }

            if (orderings.Count > 0)
            {
                var orderingArray = new FieldOrdering[orderings.Count];
                for (var i = 0; i < orderings.Count; i++)
                {
                    orderingArray[i] = orderings[i];
                }
                query = new JqlExpression
                {
                    Filter  = query,
                    OrderBy = new OrderByExpression {
                        Fields = orderingArray
                    }
                };
            }

            return(new BuiltQuery(query, projection, issueType)
            {
                Take = Take,
                Skip = Skip,
                Count = Count,
                IsAny = IsAny,
                IssueFunction = IssueFunction
            });
        }
Esempio n. 4
0
        public virtual IJqlClause VisitCascadeOption(CascadeOptionExpression clause)
        {
            var field   = Visit(clause.Field);
            var changed = false;
            var values  = new IJqlClause[clause.Values.Length];

            for (var i = 0; i < clause.Values.Length; ++i)
            {
                var value = clause.Values[i];
                var v     = Visit(value);
                values[i] = v;
                changed  |= v != value;
            }

            return(field == clause.Field && !changed
                ? clause
                : new CascadeOptionExpression
            {
                Field = field,
                Values = values
            });
        }
Esempio n. 5
0
 public void AddFilter(IJqlClause filter)
 {
     filters.Add(filter);
 }
Esempio n. 6
0
 public virtual IJqlClause Visit(IJqlClause clause)
 {
     return(clause.Accept(this));
 }
Esempio n. 7
0
 public BuiltQuery(IJqlClause query, Projection projection, Type issueType)
 {
     Query      = query;
     Projection = projection;
     IssueType  = issueType;
 }