private Expression PartialEvaluate(Expression expression) { Logger.Log($"Partial evaluating expression '{expression}'", Indentation.One); var expressionAnalyzer = new LocalExpressionAnalyzer(CanBeEvaluatedLocally); Logger.Log("Identifying candidates for partial evaluation", Indentation.Two); var candidates = expressionAnalyzer.GetLocalExpressions(expression).ToList(); Logger.Log($"Identified {candidates.Count} candidates for local evaluation", Indentation.Two, candidates); ValidateCandidates(expression, candidates); var partialEvaluated = new LocalExpressionEvaluator(candidates).Evaluate(expression); Logger.Log($"Reduced expression to '{partialEvaluated}'", Indentation.Two); return(partialEvaluated); }
public IEnumerable <TResult> ExecuteEnumerable <TResult>(Expression expression) { PrintTree(expression, "Original tree"); expression = LocalExpressionEvaluator.Evaluate(expression); PrintTree(expression, "Locals evaluated"); if (_client.UseTopOptimization) { bool change; expression = TopOptimizer.Optimize(expression, out change); if (change) { PrintTree(expression, "TopOptimized"); } } Console.WriteLine("^ Final tree ^"); var query = MakeQuery(expression); Console.WriteLine(query); #if true var res = _client.RunAnalytics(query); #else string res; if (typeof(TResult) == typeof(Request)) { res = DummyData.DummyJsonResultFull; } else { res = DummyData.DummyJsonResult; } #endif var tbls = JsonConvert.DeserializeObject <TablesWrapper>(res); if (_builder == null) { _builder = DefaultBuilderFactory.Get <TResult>(); } var items = _builder.Build <TResult>(tbls.Tables[0]); return(items); }