Пример #1
0
        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);
        }