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); }
private static string ExtractFieldName(IJqlClause field) { return(field switch { FieldReferenceExpression customField => customField.Field, _ => throw new JqlCompilationException($"field was not extracted from expression [{field}]") });
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 }); }
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 }); }
public void AddFilter(IJqlClause filter) { filters.Add(filter); }
public virtual IJqlClause Visit(IJqlClause clause) { return(clause.Accept(this)); }
public BuiltQuery(IJqlClause query, Projection projection, Type issueType) { Query = query; Projection = projection; IssueType = issueType; }