public override object Run() { Action cleanup = null; QueryExecutionManager executionManager = new QueryExecutionManager(DataContextBase.SqlLog); object[] queryArgs = null; DataContextDriver dcDriver = base.Server.ResultsWriter.DCDriver = base.Server.DataContextDriver; if (dcDriver != null) { queryArgs = dcDriver.GetContextConstructorArguments(base.Server.Repository); } Type type = (this._queryAssem == null) ? null : this._queryAssem.GetType("UserQuery"); object clrQuery = null; if (type != null) { clrQuery = Activator.CreateInstance(type, queryArgs); } if ((dcDriver != null) && (clrQuery != null)) { dcDriver.InitializeContext(base.Server.Repository, clrQuery, executionManager); if (cleanup == null) { cleanup = delegate { try { if (!this.Server.HasUserCacheChanged) { dcDriver.TearDownContext(this.Server.Repository, clrQuery, executionManager, queryArgs); } } catch (Exception exception) { Log.Write(exception, "Calling custom driver TearDownContext"); } }; } base.Server.AddFinalCleanup(cleanup); } base.Server.RegisterQueryStart(); object obj2 = null; if (clrQuery != null) { MethodInfo method = null; try { method = clrQuery.GetType().GetMethod("Main", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance); } catch { } if (method == null) { method = clrQuery.GetType().GetMethod("RunUserAuthoredQuery", BindingFlags.NonPublic | BindingFlags.Instance); } obj2 = method.Invoke(clrQuery, null); if ((dcDriver == null) || (executionManager == null)) { return(obj2); } try { dcDriver.OnQueryFinishing(base.Server.Repository, clrQuery, executionManager); return(obj2); } catch { return(obj2); } } if ((this._queryAssem != null) && (this._queryAssem.EntryPoint != null)) { this._queryAssem.EntryPoint.Invoke(null, null); } return(obj2); }