/// <summary> /// Tracks when 'command' is started. /// </summary> public void ExecuteStartImpl(DbCommand command, ExecuteType type) { var id = Tuple.Create((object)command, type); var sqlTiming = new SqlTiming(command, type, Profiler); _inProgress[id] = sqlTiming; }
/// <summary> /// Adds the parameter 'sqlTiming' to this Timing's SqlTimings collection. /// </summary> /// <param name="sqlTiming">A sql statement profiling that was executed in this Timing step.</param> /// <remarks> /// Used outside this assembly for custom deserialization when creating an <see cref="Storage.IStorage"/> implementation. /// </remarks> public void AddSqlTiming(SqlTiming sqlTiming) { if (SqlTimings == null) { SqlTimings = new List <SqlTiming>(); } SqlTimings.Add(sqlTiming); sqlTiming.ParentTiming = this; }
/// <summary> /// Formats the SQL in a Oracle-Server friendly way, with DECLARE statements for the parameters up top. /// </summary> /// <param name="timing">The SqlTiming to format</param> /// <returns>A formatted SQL string</returns> public string FormatSql(SqlTiming timing) { if (timing.Parameters == null || timing.Parameters.Count == 0) { return timing.CommandString; } var buffer = new StringBuilder(); buffer.Append("DECLARE "); var first = true; foreach (var p in timing.Parameters) { if (first) { first = false; } else { buffer.AppendLine(",").Append(new string(' ', 8)); } DbType parsed; string resolvedType = null; if (!Enum.TryParse(p.DbType, out parsed)) { resolvedType = p.DbType; } if (resolvedType.IsNull()) { Func<SqlTimingParameter, string> translator; if (paramTranslator.TryGetValue(parsed, out translator)) { resolvedType = translator(p); } resolvedType = resolvedType ?? p.DbType; } var niceName = p.Name; //variable/paramter prefix //if (!niceName.StartsWith("v_")) //{ // niceName = "v_" + niceName; //} buffer.Append(niceName).Append(" ").Append(resolvedType).Append(" = ").Append(PrepareValue(p)); } return buffer .AppendLine() .AppendLine() .Append(timing.CommandString) .ToString(); }
/// <summary> /// Adds <paramref name="stats"/> to the current <see cref="Timing"/>. /// </summary> internal void AddSqlTiming(SqlTiming stats) { if (Head == null) { return; } int count; stats.IsDuplicate = _sqlExecutionCounts.TryGetValue(stats.CommandString, out count); _sqlExecutionCounts[stats.CommandString] = count + 1; HasSqlTimings = true; if (stats.IsDuplicate) { HasDuplicateSqlTimings = true; } Head.AddSqlTiming(stats); }
/// <summary> /// Adds the parameter 'sqlTiming' to this Timing's SqlTimings collection. /// </summary> /// <param name="sqlTiming">A sql statement profiling that was executed in this Timing step.</param> /// <remarks> /// Used outside this assembly for custom deserialization when creating an <see cref="Storage.IStorage"/> implementation. /// </remarks> public void AddSqlTiming(SqlTiming sqlTiming) { if (SqlTimings == null) SqlTimings = new List<SqlTiming>(); SqlTimings.Add(sqlTiming); sqlTiming.ParentTiming = this; }
/// <summary> /// Adds <paramref name="stats"/> to the current <see cref="Timing"/>. /// </summary> internal void AddSqlTiming(SqlTiming stats) { if (Head == null) return; int count; stats.IsDuplicate = _sqlExecutionCounts.TryGetValue(stats.CommandString, out count); _sqlExecutionCounts[stats.CommandString] = count + 1; HasSqlTimings = true; if (stats.IsDuplicate) { HasDuplicateSqlTimings = true; } Head.AddSqlTiming(stats); }