public virtual Expression Translate(Expression expression) { Expression expression2 = RelationshipIncluder.Include(this.translator.Mapper, expression); if (expression2 != expression) { expression = expression2; expression = UnusedColumnRemover.Remove(expression); expression = RedundantColumnRemover.Remove(expression); expression = RedundantSubqueryRemover.Remove(expression); expression = RedundantJoinRemover.Remove(expression); } expression2 = SingletonProjectionRewriter.Rewrite(this.translator.Linguist.Language, expression); if (expression2 != expression) { expression = expression2; expression = UnusedColumnRemover.Remove(expression); expression = RedundantColumnRemover.Remove(expression); expression = RedundantSubqueryRemover.Remove(expression); expression = RedundantJoinRemover.Remove(expression); } expression2 = ClientJoinedProjectionRewriter.Rewrite(this.policy, this.translator.Linguist.Language, expression); if (expression2 != expression) { expression = expression2; expression = UnusedColumnRemover.Remove(expression); expression = RedundantColumnRemover.Remove(expression); expression = RedundantSubqueryRemover.Remove(expression); expression = RedundantJoinRemover.Remove(expression); } return(expression); }
private static bool CanMergeWithFrom(SelectExpression select, bool isTopLevel) { SelectExpression leftMostSelect = GetLeftMostSelect(select.From); if (leftMostSelect == null) { return(false); } if (!IsColumnProjection(leftMostSelect)) { return(false); } bool flag = RedundantSubqueryRemover.IsNameMapProjection(select); bool flag2 = (select.OrderBy != null) && (select.OrderBy.Count > 0); bool flag3 = (select.GroupBy != null) && (select.GroupBy.Count > 0); bool flag4 = AggregateChecker.HasAggregates(select); bool flag5 = select.From is JoinExpression; bool flag6 = (leftMostSelect.OrderBy != null) && (leftMostSelect.OrderBy.Count > 0); bool flag7 = (leftMostSelect.GroupBy != null) && (leftMostSelect.GroupBy.Count > 0); bool flag8 = AggregateChecker.HasAggregates(leftMostSelect); if (flag2 && flag6) { return(false); } if (flag3 && flag7) { return(false); } if (select.IsReverse || leftMostSelect.IsReverse) { return(false); } if (flag6 && ((flag3 || flag4) || select.IsDistinct)) { return(false); } if (flag7) { return(false); } if ((leftMostSelect.Take != null) && (((((select.Take != null) || (select.Skip != null)) || (select.IsDistinct || flag4)) || flag3) || flag5)) { return(false); } if ((leftMostSelect.Skip != null) && ((((select.Skip != null) || select.IsDistinct) || (flag4 || flag3)) || flag5)) { return(false); } if (leftMostSelect.IsDistinct && (((((select.Take != null) || (select.Skip != null)) || (!flag || flag3)) || (flag4 || (flag2 && !isTopLevel))) || flag5)) { return(false); } if (flag8 && (((((select.Take != null) || (select.Skip != null)) || (select.IsDistinct || flag4)) || flag3) || flag5)) { return(false); } return(true); }
public virtual Expression Translate(Expression expression) { expression = UnusedColumnRemover.Remove(expression); expression = RedundantColumnRemover.Remove(expression); expression = RedundantSubqueryRemover.Remove(expression); Expression expression2 = CrossJoinRewriter.Rewrite(CrossApplyRewriter.Rewrite(this.language, expression)); if (expression2 != expression) { expression = expression2; expression = UnusedColumnRemover.Remove(expression); expression = RedundantSubqueryRemover.Remove(expression); expression = RedundantJoinRemover.Remove(expression); expression = RedundantColumnRemover.Remove(expression); } return(expression); }
public virtual Expression Translate(Expression expression) { expression = QueryBinder.Bind(this, expression); expression = AggregateRewriter.Rewrite(this.Translator.Linguist.Language, expression); expression = UnusedColumnRemover.Remove(expression); expression = RedundantColumnRemover.Remove(expression); expression = RedundantSubqueryRemover.Remove(expression); expression = RedundantJoinRemover.Remove(expression); Expression expression2 = RelationshipBinder.Bind(this, expression); if (expression2 != expression) { expression = expression2; expression = RedundantColumnRemover.Remove(expression); expression = RedundantJoinRemover.Remove(expression); } expression = ComparisonRewriter.Rewrite(this.Mapping, expression); return(expression); }
public static Expression Remove(Expression expression) { expression = new RedundantSubqueryRemover().Visit(expression); expression = SubqueryMerger.Merge(expression); return(expression); }
private static bool IsRedudantSubquery(SelectExpression select) { return(((((RedundantSubqueryRemover.IsSimpleProjection(select) || RedundantSubqueryRemover.IsNameMapProjection(select)) && (!select.IsDistinct && !select.IsReverse)) && (((select.Take == null) && (select.Skip == null)) && (select.Where == null))) && ((select.OrderBy == null) || (select.OrderBy.Count == 0))) && ((select.GroupBy == null) || (select.GroupBy.Count == 0))); }