internal Expression Funcletize( Expression expression, out Func <bool> recompileRequired) { expression = this.ReplaceRootContextParameter(expression); Func <Expression, bool> isClientConstant; Func <Expression, bool> isClientVariable; if (this._mode == Funcletizer.Mode.CompiledQueryEvaluation) { isClientConstant = Funcletizer.Nominate(expression, new Func <Expression, bool>(this.IsClosureExpression)); isClientVariable = Funcletizer.Nominate(expression, new Func <Expression, bool>(this.IsCompiledQueryParameterVariable)); } else if (this._mode == Funcletizer.Mode.CompiledQueryLockdown) { isClientConstant = Funcletizer.Nominate(expression, new Func <Expression, bool>(this.IsClosureExpression)); isClientVariable = (Func <Expression, bool>)(exp => false); } else { isClientConstant = Funcletizer.Nominate(expression, new Func <Expression, bool>(this.IsImmutable)); isClientVariable = Funcletizer.Nominate(expression, new Func <Expression, bool>(this.IsClosureExpression)); } Funcletizer.FuncletizingVisitor funcletizingVisitor = new Funcletizer.FuncletizingVisitor(this, isClientConstant, isClientVariable); Expression expression1 = funcletizingVisitor.Visit(expression); recompileRequired = funcletizingVisitor.GetRecompileRequiredFunction(); return(expression1); }
// <summary> // Overrides CreateExpressionConverter to return a converter that uses a binding context based on the compiled query parameters, // rather than a default binding context. // </summary> // <returns> An expression converter appropriate for converting this compiled query state instance </returns> protected override ExpressionConverter CreateExpressionConverter() { var lambda = (LambdaExpression)base.Expression; var funcletizer = Funcletizer.CreateCompiledQueryEvaluationFuncletizer( ObjectContext, lambda.Parameters.First(), new ReadOnlyCollection <ParameterExpression>(lambda.Parameters.Skip(1).ToList())); // Return a new expression converter that uses the initialized command tree and binding context. return(new ExpressionConverter(funcletizer, lambda.Body)); }
internal FuncletizingVisitor( Funcletizer funcletizer, Func <Expression, bool> isClientConstant, Func <Expression, bool> isClientVariable) { this._funcletizer = funcletizer; this._isClientConstant = isClientConstant; this._isClientVariable = isClientVariable; }
internal FuncletizingVisitor( Funcletizer funcletizer, Func <Expression, bool> isClientConstant, Func <Expression, bool> isClientVariable) { DebugCheck.NotNull(funcletizer); DebugCheck.NotNull(isClientConstant); DebugCheck.NotNull(isClientVariable); _funcletizer = funcletizer; _isClientConstant = isClientConstant; _isClientVariable = isClientVariable; }
protected virtual ExpressionConverter CreateExpressionConverter() { return(new ExpressionConverter(Funcletizer.CreateQueryFuncletizer(this.ObjectContext), this._expression)); }
internal FuncletizingVisitor( Funcletizer funcletizer, Func<Expression, bool> isClientConstant, Func<Expression, bool> isClientVariable) { DebugCheck.NotNull(funcletizer); DebugCheck.NotNull(isClientConstant); DebugCheck.NotNull(isClientVariable); _funcletizer = funcletizer; _isClientConstant = isClientConstant; _isClientVariable = isClientVariable; }
internal ExpressionConverter(Funcletizer funcletizer, Expression expression) { DebugCheck.NotNull(funcletizer); DebugCheck.NotNull(expression); // Funcletize the expression (identify subexpressions that should be evaluated // locally) _funcletizer = funcletizer; expression = funcletizer.Funcletize(expression, out _recompileRequired); // Normalize the expression (replace obfuscated parts of the tree with simpler nodes) var normalizer = new LinqExpressionNormalizer(); _expression = normalizer.Visit(expression); _perspective = funcletizer.RootContext.Perspective; _bindingContext = new BindingContext(); _ignoreInclude = 0; _orderByLifter = new OrderByLifter(_aliasGenerator); }
internal FuncletizingVisitor( Funcletizer funcletizer, Func<Expression, bool> isClientConstant, Func<Expression, bool> isClientVariable) { Contract.Requires(funcletizer != null); Contract.Requires(isClientConstant != null); Contract.Requires(isClientVariable != null); _funcletizer = funcletizer; _isClientConstant = isClientConstant; _isClientVariable = isClientVariable; }
protected virtual ExpressionConverter CreateExpressionConverter() { var funcletizer = Funcletizer.CreateQueryFuncletizer(ObjectContext); return(new ExpressionConverter(funcletizer, _expression)); }
protected override ExpressionConverter CreateExpressionConverter() { LambdaExpression expression = (LambdaExpression)base.Expression; return(new ExpressionConverter(Funcletizer.CreateCompiledQueryEvaluationFuncletizer(this.ObjectContext, expression.Parameters.First <ParameterExpression>(), new ReadOnlyCollection <ParameterExpression>((IList <ParameterExpression>)expression.Parameters.Skip <ParameterExpression>(1).ToList <ParameterExpression>())), expression.Body)); }