private Expression BuildInner(Expression expression)
        {
            var eb = new DbExecutionBuilder(this.linguist, this.policy, this.executor)
            {
                scope           = this.scope,
                receivingMember = this.receivingMember,
                nReaders        = this.nReaders,
                nLookup         = this.nLookup,
                variableMap     = this.variableMap
            };

            return(eb.Build(expression));
        }
        public static Expression Build(QueryLinguist linguist, QueryPolicy policy, Expression expression, Expression provider)
        {
            var executor = Expression.Parameter(typeof(QueryExecutor), "executor");
            var builder  = new DbExecutionBuilder(linguist, policy, executor);

            if (builder != null)
            {
                builder.variables.Add(executor);
                builder.initializers.Add(Expression.Call(Expression.Convert(provider, typeof(ICreateExecutor)), nameof(ICreateExecutor.CreateExecutor), null, null));
            }

            return(builder.Build(expression));
        }
 public virtual Expression BuildExecutionPlan(Expression query, Expression provider)
 {
     return(DbExecutionBuilder.Build(this.Translator.Linguist, this.Policy, query, provider));
 }