예제 #1
0
        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);
            }
예제 #3
0
        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);
        }
예제 #4
0
        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)));
 }