private static void AppendStatistics(StringBuilder result, ScriptExecuteOption options, PlanStatistics statistics, ProgramStatistics programStatistics, int rowCount) { if ((options & ScriptExecuteOption.ShowSuccessStatus) != 0) { result.Append(Strings.Get("ExecuteSuccess")); if (rowCount != -1) { if (rowCount == 1) { result.Append(Strings.Get("ExecuteSuccessRowCountSingular")); } else { result.AppendFormat(Strings.Get("ExecuteSuccessRowCountPlural"), rowCount.ToString("#,##0")); } } result.Append("\r\n"); } if ((options & ScriptExecuteOption.ShowPrepareTime) != 0) { result.AppendFormat(Strings.Get("PrepareTime"), statistics.PrepareTime.ToString(), statistics.CompileTime.ToString(), statistics.OptimizeTime.ToString(), statistics.BindingTime.ToString()); result.Append("\r\n"); } if ((options & ScriptExecuteOption.ShowExecutionTime) != 0) { result.AppendFormat(Strings.Get("ExecuteTime"), programStatistics.ExecuteTime.ToString(), programStatistics.DeviceExecuteTime.ToString(), programStatistics.ExecuteTime == TimeSpan.Zero ? "N/A" : String.Format("{0}%", ((Convert.ToDecimal(programStatistics.DeviceExecuteTime.Ticks) / programStatistics.ExecuteTime.Ticks) * 100).ToString("F6"))); result.Append("\r\n"); } }
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); } }
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; }