示例#1
0
 public ScriptExecutor
 (
     IServerSession session,
     String script,
     QueryLanguage language,
     ReportScriptProgressHandler executeProgress,
     ExecuteFinishedHandler executeFinished,
     DebugLocator locator
 )
 {
     _session         = session;
     _script          = script;
     _language        = language;
     _executeFinished = executeFinished;
     _executeProgress = executeProgress;
     _locator         = locator;
 }
        public static void ExecuteScript(IServerProcess process, string script, ScriptExecuteOption options, out ErrorList errors, out TimeSpan timeElapsed, ReportScriptProgressHandler reportScriptProgress, DebugLocator locator)
        {
            StringBuilder result = new StringBuilder();

            errors      = new ErrorList();
            timeElapsed = TimeSpan.Zero;

            bool     attemptExecute = true;
            DateTime startTime      = DateTime.Now;

            try
            {
                IServerScript localScript = process.PrepareScript(script, locator);
                try
                {
                    if (ConvertParserErrors(localScript.Messages, errors))
                    {
                        foreach (IServerBatch batch in localScript.Batches)
                        {
                            PlanStatistics statistics = null;
                            try
                            {
                                if (batch.IsExpression())
                                {
                                    IServerExpressionPlan plan = batch.PrepareExpression(null);
                                    try
                                    {
                                        attemptExecute &= ConvertCompilerErrors(plan.Messages, errors);
                                        if (attemptExecute)
                                        {
                                            int rowCount = ReadResult(result, plan);

                                            AppendStatistics(result, options, plan.PlanStatistics, plan.ProgramStatistics, rowCount);
                                            statistics = plan.PlanStatistics;
                                        }
                                    }
                                    finally
                                    {
                                        batch.UnprepareExpression(plan);
                                    }
                                }
                                else
                                {
                                    IServerStatementPlan plan = batch.PrepareStatement(null);
                                    try
                                    {
                                        attemptExecute &= ConvertCompilerErrors(plan.Messages, errors);
                                        if (attemptExecute)
                                        {
                                            plan.Execute(null);

                                            AppendStatistics(result, options, plan.PlanStatistics, plan.ProgramStatistics, -1);
                                            statistics = plan.PlanStatistics;
                                        }
                                    }
                                    finally
                                    {
                                        batch.UnprepareStatement(plan);
                                    }
                                }
                            }
                            finally
                            {
                                if (reportScriptProgress != null)
                                {
                                    reportScriptProgress(statistics, result.ToString());
                                }
                                result.Length = 0;
                            }
                        }                       // foreach batch...
                    }                           // if (no parser errors)...
                }
                finally
                {
                    process.UnprepareScript(localScript);
                }
            }
            catch (Exception exception)
            {
                errors.Add(exception);
            }
            timeElapsed = DateTime.Now - startTime;
        }
        public static void ExecuteScript(IServerSession session, string script, ScriptExecuteOption options, out ErrorList errors, out TimeSpan timeElapsed, ReportScriptProgressHandler reportScriptProgress, DebugLocator locator)
        {
            IServerProcess process = session.StartProcess(new ProcessInfo(session.SessionInfo));

            try
            {
                ExecuteScript(process, script, options, out errors, out timeElapsed, reportScriptProgress, locator);
            }
            finally
            {
                session.StopProcess(process);
            }
        }