Пример #1
0
        /// <summary>
        /// Do all query translations execpt building the execution plan
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        protected virtual ProjectionExpression Translate(Expression expression)
        {
            // pre-evaluate local sub-trees
            expression = PartialEvaluator.Eval(expression, CanBeEvaluatedLocally);

            // apply mapping (binds LINQ operators too)
            expression = mapping.Translate(expression);

            // any policy specific translations or validations
            expression = policy.Translate(expression);

            // any language specific translations or validations
            expression = language.Translate(expression);

            // do final reduction
            expression = UnusedColumnRemover.Remove(expression);
            expression = RedundantSubqueryRemover.Remove(expression);
            expression = RedundantJoinRemover.Remove(expression);
            expression = RedundantColumnRemover.Remove(expression);


            //HACK: Have to fix invalid COUNT/ORDER BY here
            expression = CountOrderByRemover.Remove(expression);

            return((ProjectionExpression)expression);
        }