diff --git a/Orm/Xtensive.Orm.Tests.Core/Diagnostics/LogMessageTest.cs b/Orm/Xtensive.Orm.Tests.Core/Diagnostics/LogMessageTest.cs index 9e6520e15d..305de8f341 100644 --- a/Orm/Xtensive.Orm.Tests.Core/Diagnostics/LogMessageTest.cs +++ b/Orm/Xtensive.Orm.Tests.Core/Diagnostics/LogMessageTest.cs @@ -57,7 +57,7 @@ public void PerformanceTest() } catch (Exception e) { - TestLog.Warning(e, "Message for {0} log parameters.", param2); + TestLog.Warning(e, "Message for {0} log parameters.", [param2]); } TestLog.InfoRegion("Fatal error logs"); @@ -73,4 +73,4 @@ public void PerformanceTest() } } -} \ No newline at end of file +} diff --git a/Orm/Xtensive.Orm.Tests.Framework/Dynamic.cs b/Orm/Xtensive.Orm.Tests.Framework/Dynamic.cs index 1b943fef94..8c080dd78b 100644 --- a/Orm/Xtensive.Orm.Tests.Framework/Dynamic.cs +++ b/Orm/Xtensive.Orm.Tests.Framework/Dynamic.cs @@ -2226,12 +2226,12 @@ private void ValidateToken(TokenId t) if (token.id != t) throw ParseError(Res.SyntaxError); } - private Exception ParseError(string format, params object[] args) + private Exception ParseError(string format, params ReadOnlySpan args) { return ParseError(token.pos, format, args); } - private Exception ParseError(int pos, string format, params object[] args) + private Exception ParseError(int pos, string format, params ReadOnlySpan args) { return new ParseException(string.Format(CultureInfo.CurrentCulture, format, args), pos); } diff --git a/Orm/Xtensive.Orm/InternalLogs.cs b/Orm/Xtensive.Orm/InternalLogs.cs index 11dc9ad250..5beb272310 100644 --- a/Orm/Xtensive.Orm/InternalLogs.cs +++ b/Orm/Xtensive.Orm/InternalLogs.cs @@ -18,16 +18,16 @@ public static bool IsLogged(LogLevel type) return instance.IsLogged(type); } - public static IndentManager.IndentScope DebugRegion(string messageId, params object[] args) => + public static IndentManager.IndentScope DebugRegion(string messageId, params ReadOnlySpan args) => instance.DebugRegion(messageId, args); - public static IndentManager.IndentScope InfoRegion(string messageId, params object[] args) => + public static IndentManager.IndentScope InfoRegion(string messageId, params ReadOnlySpan args) => instance.InfoRegion(messageId, args); - public static void Debug(string messageId, params object[] args) => + public static void Debug(string messageId, params ReadOnlySpan args) => instance.Debug(messageId, args); - public static Exception Debug(Exception exception, string messageId, params object[] args) + public static Exception Debug(Exception exception, string messageId, params ReadOnlySpan args) { instance.Debug(messageId, args, exception); return exception; @@ -39,10 +39,10 @@ public static Exception Debug(Exception exception) return exception; } - public static void Info(string messageId, params object[] args) => + public static void Info(string messageId, params ReadOnlySpan args) => instance.Info(messageId, args); - public static Exception Info(Exception exception, string messageId, params object[] args) + public static Exception Info(Exception exception, string messageId, params ReadOnlySpan args) { instance.Info(messageId, args, exception); return exception; @@ -54,10 +54,10 @@ public static Exception Info(Exception exception) return exception; } - public static void Warning(string messageId, params object[] args) => + public static void Warning(string messageId, params ReadOnlySpan args) => instance.Warning(messageId, args); - public static Exception Warning(Exception exception, string messageId, params object[] args) + public static Exception Warning(Exception exception, string messageId, params ReadOnlySpan args) { instance.Warning(messageId, args, exception); return exception; @@ -69,10 +69,10 @@ public static Exception Warning(Exception exception) return exception; } - public static void Error(string messageId, params object[] args) => + public static void Error(string messageId, params ReadOnlySpan args) => instance.Error(messageId, args); - public static Exception Error(Exception exception, string messageId, params object[] args) + public static Exception Error(Exception exception, string messageId, params ReadOnlySpan args) { instance.Error(messageId, args, exception); return exception; @@ -84,10 +84,10 @@ public static Exception Error(Exception exception) return exception; } - public static void FatalError(string messageId, params object[] args) => + public static void FatalError(string messageId, params ReadOnlySpan args) => instance.FatalError(messageId, args); - public static Exception FatalError(Exception exception, string messageId, params object[] args) + public static Exception FatalError(Exception exception, string messageId, params ReadOnlySpan args) { instance.FatalError(messageId, args, exception); return exception; @@ -120,16 +120,16 @@ public static bool IsLogged(LogLevel type) return instance.IsLogged(type); } - public static IndentManager.IndentScope DebugRegion(string messageId, params object[] args) => + public static IndentManager.IndentScope DebugRegion(string messageId, params ReadOnlySpan args) => instance.DebugRegion(messageId, args); - public static IndentManager.IndentScope InfoRegion(string messageId, params object[] args) => + public static IndentManager.IndentScope InfoRegion(string messageId, params ReadOnlySpan args) => instance.InfoRegion(messageId, args); - public static void Debug(string messageId, params object[] args) => + public static void Debug(string messageId, params ReadOnlySpan args) => instance.Debug(messageId, args); - public static Exception Debug(Exception exception, string messageId, params object[] args) + public static Exception Debug(Exception exception, string messageId, params ReadOnlySpan args) { instance.Debug(messageId, args, exception); return exception; @@ -141,10 +141,10 @@ public static Exception Debug(Exception exception) return exception; } - public static void Info(string messageId, params object[] args) => + public static void Info(string messageId, params ReadOnlySpan args) => instance.Info(messageId, args); - public static Exception Info(Exception exception, string messageId, params object[] args) + public static Exception Info(Exception exception, string messageId, params ReadOnlySpan args) { instance.Info(messageId, args, exception); return exception; @@ -156,10 +156,10 @@ public static Exception Info(Exception exception) return exception; } - public static void Warning(string messageId, params object[] args) => + public static void Warning(string messageId, params ReadOnlySpan args) => instance.Warning(messageId, args); - public static Exception Warning(Exception exception, string messageId, params object[] args) + public static Exception Warning(Exception exception, string messageId, params ReadOnlySpan args) { instance.Warning(messageId, args, exception); return exception; @@ -171,12 +171,12 @@ public static Exception Warning(Exception exception) return exception; } - public static void Error(string format, params object[] args) + public static void Error(string format, params ReadOnlySpan args) { instance.Error(format, args); } - public static Exception Error(Exception exception, string format, params object[] args) + public static Exception Error(Exception exception, string format, params ReadOnlySpan args) { instance.Error(format, args, exception); return exception; @@ -188,12 +188,12 @@ public static Exception Error(Exception exception) return exception; } - public static void FatalError(string format, params object[] args) + public static void FatalError(string format, params ReadOnlySpan args) { instance.FatalError(format, args); } - public static Exception FatalError(Exception exception, string format, params object[] args) + public static Exception FatalError(Exception exception, string format, params ReadOnlySpan args) { instance.FatalError(format, args, exception); return exception; @@ -226,16 +226,16 @@ public static bool IsLogged(LogLevel type) return instance.IsLogged(type); } - public static IndentManager.IndentScope DebugRegion(string messageId, params object[] args) => + public static IndentManager.IndentScope DebugRegion(string messageId, params ReadOnlySpan args) => instance.DebugRegion(messageId, args); - public static IndentManager.IndentScope InfoRegion(string messageId, params object[] args) => + public static IndentManager.IndentScope InfoRegion(string messageId, params ReadOnlySpan args) => instance.InfoRegion(messageId, args); - public static void Debug(string messageId, params object[] args) => + public static void Debug(string messageId, params ReadOnlySpan args) => instance.Debug(messageId, args); - public static Exception Debug(Exception exception, string format, params object[] args) + public static Exception Debug(Exception exception, string format, params ReadOnlySpan args) { instance.Debug(format, args, exception); return exception; @@ -247,10 +247,10 @@ public static Exception Debug(Exception exception) return exception; } - public static void Info(string messageId, params object[] args) => + public static void Info(string messageId, params ReadOnlySpan args) => instance.Info(messageId, args); - public static Exception Info(Exception exception, string messageId, params object[] args) + public static Exception Info(Exception exception, string messageId, params ReadOnlySpan args) { instance.Info(messageId, args, exception); return exception; @@ -262,10 +262,10 @@ public static Exception Info(Exception exception) return exception; } - public static void Warning(string messageId, params object[] args) => + public static void Warning(string messageId, params ReadOnlySpan args) => instance.Warning(messageId, args); - public static Exception Warning(Exception exception, string messageId, params object[] args) + public static Exception Warning(Exception exception, string messageId, params ReadOnlySpan args) { instance.Warning(messageId, args, exception); return exception; @@ -277,10 +277,10 @@ public static Exception Warning(Exception exception) return exception; } - public static void Error(string messageId, params object[] args) => + public static void Error(string messageId, params ReadOnlySpan args) => instance.Error(messageId, args); - public static Exception Error(Exception exception, string messageId, params object[] args) + public static Exception Error(Exception exception, string messageId, params ReadOnlySpan args) { instance.Error(messageId, args, exception); return exception; @@ -292,10 +292,10 @@ public static Exception Error(Exception exception) return exception; } - public static void FatalError(string messageId, params object[] args) => + public static void FatalError(string messageId, params ReadOnlySpan args) => instance.FatalError(messageId, args); - public static Exception FatalError(Exception exception, string messageId, params object[] args) + public static Exception FatalError(Exception exception, string messageId, params ReadOnlySpan args) { instance.FatalError(messageId, args, exception); return exception; @@ -328,16 +328,16 @@ public static bool IsLogged(LogLevel type) return instance.IsLogged(type); } - public static IndentManager.IndentScope DebugRegion(string messageId, params object[] args) => + public static IndentManager.IndentScope DebugRegion(string messageId, params ReadOnlySpan args) => instance.DebugRegion(messageId, args); - public static IndentManager.IndentScope InfoRegion(string messageId, params object[] args) => + public static IndentManager.IndentScope InfoRegion(string messageId, params ReadOnlySpan args) => instance.InfoRegion(messageId, args); - public static void Debug(string messageId, params object[] args) => + public static void Debug(string messageId, params ReadOnlySpan args) => instance.Debug(messageId, args); - public static Exception Debug(Exception exception, string messageId, params object[] args) + public static Exception Debug(Exception exception, string messageId, params ReadOnlySpan args) { instance.Debug(messageId, args, exception); return exception; @@ -349,10 +349,10 @@ public static Exception Debug(Exception exception) return exception; } - public static void Info(string messageId, params object[] args) => + public static void Info(string messageId, params ReadOnlySpan args) => instance.Info(messageId, args); - public static Exception Info(Exception exception, string messageId, params object[] args) + public static Exception Info(Exception exception, string messageId, params ReadOnlySpan args) { instance.Info(messageId, args, exception); return exception; @@ -364,10 +364,10 @@ public static Exception Info(Exception exception) return exception; } - public static void Warning(string messageId, params object[] args) => + public static void Warning(string messageId, params ReadOnlySpan args) => instance.Warning(messageId, args); - public static Exception Warning(Exception exception, string messageId, params object[] args) + public static Exception Warning(Exception exception, string messageId, params ReadOnlySpan args) { instance.Warning(messageId, args, exception); return exception; @@ -379,10 +379,10 @@ public static Exception Warning(Exception exception) return exception; } - public static void Error(string messageId, params object[] args) => + public static void Error(string messageId, params ReadOnlySpan args) => instance.Error(messageId, args); - public static Exception Error(Exception exception, string messageId, params object[] args) + public static Exception Error(Exception exception, string messageId, params ReadOnlySpan args) { instance.Error(messageId, args, exception); return exception; @@ -394,10 +394,10 @@ public static Exception Error(Exception exception) return exception; } - public static void FatalError(string messageId, params object[] args) => + public static void FatalError(string messageId, params ReadOnlySpan args) => instance.FatalError(messageId, args); - public static Exception FatalError(Exception exception, string messageId, params object[] args) + public static Exception FatalError(Exception exception, string messageId, params ReadOnlySpan args) { instance.FatalError(messageId, args, exception); return exception; @@ -430,16 +430,16 @@ public static bool IsLogged(LogLevel type) return instance.IsLogged(type); } - public static IndentManager.IndentScope DebugRegion(string messageId, params object[] args) => + public static IndentManager.IndentScope DebugRegion(string messageId, params ReadOnlySpan args) => instance.DebugRegion(messageId, args); - public static IndentManager.IndentScope InfoRegion(string messageId, params object[] args) => + public static IndentManager.IndentScope InfoRegion(string messageId, params ReadOnlySpan args) => instance.InfoRegion(messageId, args); - public static void Debug(string messageId, params object[] args) => + public static void Debug(string messageId, params ReadOnlySpan args) => instance.Debug(messageId, args); - public static Exception Debug(Exception exception, string messageId, params object[] args) + public static Exception Debug(Exception exception, string messageId, params ReadOnlySpan args) { instance.Debug(messageId, args, exception); return exception; @@ -451,10 +451,10 @@ public static Exception Debug(Exception exception) return exception; } - public static void Info(string messageId, params object[] args) => + public static void Info(string messageId, params ReadOnlySpan args) => instance.Info(messageId, args); - public static Exception Info(Exception exception, string messageId, params object[] args) + public static Exception Info(Exception exception, string messageId, params ReadOnlySpan args) { instance.Info(messageId, args, exception); return exception; @@ -466,10 +466,10 @@ public static Exception Info(Exception exception) return exception; } - public static void Warning(string messageId, params object[] args) => + public static void Warning(string messageId, params ReadOnlySpan args) => instance.Warning(messageId, args); - public static Exception Warning(Exception exception, string messageId, params object[] args) + public static Exception Warning(Exception exception, string messageId, params ReadOnlySpan args) { instance.Warning(messageId, args, exception); return exception; @@ -481,10 +481,10 @@ public static Exception Warning(Exception exception) return exception; } - public static void Error(string messageId, params object[] args) => + public static void Error(string messageId, params ReadOnlySpan args) => instance.Error(messageId, args); - public static Exception Error(Exception exception, string messageId, params object[] args) + public static Exception Error(Exception exception, string messageId, params ReadOnlySpan args) { instance.Error(messageId, args, exception); return exception; @@ -496,12 +496,12 @@ public static Exception Error(Exception exception) return exception; } - public static void FatalError(string format, params object[] args) + public static void FatalError(string format, params ReadOnlySpan args) { instance.FatalError(format, args); } - public static Exception FatalError(Exception exception, string format, params object[] args) + public static Exception FatalError(Exception exception, string format, params ReadOnlySpan args) { instance.FatalError(format, args, exception); return exception; @@ -534,16 +534,16 @@ public static bool IsLogged(LogLevel type) return instance.IsLogged(type); } - public static IndentManager.IndentScope DebugRegion(string messageId, params object[] args) => + public static IndentManager.IndentScope DebugRegion(string messageId, params ReadOnlySpan args) => instance.DebugRegion(messageId, args); - public static IndentManager.IndentScope InfoRegion(string messageId, params object[] args) => + public static IndentManager.IndentScope InfoRegion(string messageId, params ReadOnlySpan args) => instance.InfoRegion(messageId, args); - public static void Debug(string messageId, params object[] args) => + public static void Debug(string messageId, params ReadOnlySpan args) => instance.Debug(messageId, args); - public static Exception Debug(Exception exception, string messageId, params object[] args) + public static Exception Debug(Exception exception, string messageId, params ReadOnlySpan args) { instance.Debug(messageId, args, exception); return exception; @@ -555,10 +555,10 @@ public static Exception Debug(Exception exception) return exception; } - public static void Info(string messageId, params object[] args) => + public static void Info(string messageId, params ReadOnlySpan args) => instance.Info(messageId, args); - public static Exception Info(Exception exception, string messageId, params object[] args) + public static Exception Info(Exception exception, string messageId, params ReadOnlySpan args) { instance.Info(messageId, args, exception); return exception; @@ -570,10 +570,10 @@ public static Exception Info(Exception exception) return exception; } - public static void Warning(string format, params object[] args) => + public static void Warning(string format, params ReadOnlySpan args) => instance.Warning(format, args); - public static Exception Warning(Exception exception, string format, params object[] args) + public static Exception Warning(Exception exception, string format, params ReadOnlySpan args) { instance.Warning(format, args, exception); return exception; @@ -585,10 +585,10 @@ public static Exception Warning(Exception exception) return exception; } - public static void Error(string messageId, params object[] args) => + public static void Error(string messageId, params ReadOnlySpan args) => instance.Error(messageId, args); - public static Exception Error(Exception exception, string messageId, params object[] args) + public static Exception Error(Exception exception, string messageId, params ReadOnlySpan args) { instance.Error(messageId, args, exception); return exception; @@ -600,10 +600,10 @@ public static Exception Error(Exception exception) return exception; } - public static void FatalError(string messageId, params object[] args) => + public static void FatalError(string messageId, params ReadOnlySpan args) => instance.FatalError(messageId, args); - public static Exception FatalError(Exception exception, string messageId, params object[] args) + public static Exception FatalError(Exception exception, string messageId, params ReadOnlySpan args) { instance.FatalError(messageId, args, exception); return exception; diff --git a/Orm/Xtensive.Orm/InternalLogs.tt b/Orm/Xtensive.Orm/InternalLogs.tt index c178c0bd59..c2ef1ffddf 100644 --- a/Orm/Xtensive.Orm/InternalLogs.tt +++ b/Orm/Xtensive.Orm/InternalLogs.tt @@ -20,23 +20,23 @@ namespace Xtensive return instance.IsLogged(type); } - public static IndentManager.IndentScope DebugRegion(string messageId, params object[] args) + public static IndentManager.IndentScope DebugRegion(string messageId, params ReadOnlySpan args) { return instance.DebugRegion(format, args); } - public static IndentManager.IndentScope InfoRegion(string messageId, params object[] args) + public static IndentManager.IndentScope InfoRegion(string messageId, params ReadOnlySpan args) { return instance.InfoRegion(format, args); } <# foreach (var level in logLevels) { #> - public static void <#= level #>(string messageId, params object[] args) + public static void <#= level #>(string messageId, params ReadOnlySpan args) { instance.<#= level #>(format, args); } - public static Exception <#= level #>(Exception exception, string messageId, params object[] args) + public static Exception <#= level #>(Exception exception, string messageId, params ReadOnlySpan args) { instance.<#= level #>(format, args, exception); return exception; @@ -68,4 +68,4 @@ namespace Xtensive new Tuple("SqlLog", "Xtensive.Orm.Sql"), new Tuple("CoreLog", "Xtensive.Orm.Core"), new Tuple("TestLog", "Xtensive.Orm.Tests")}; - #> \ No newline at end of file + #> diff --git a/Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs b/Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs index 357943d874..b21176c6e3 100644 --- a/Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs +++ b/Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs @@ -35,16 +35,15 @@ public abstract class BaseLog /// /// Values of parameters in (resource string or message itself). /// object. Region will closed by disposing of this object. - public IndentManager.IndentScope DebugRegion(string messageId, params object[] parameters) + public IndentManager.IndentScope DebugRegion(string messageId, params ReadOnlySpan parameters) { ArgumentNullException.ThrowIfNull(messageId, "message"); if (!IsLogged(LogLevel.Debug)) return IndentManager.IncreaseIndent(); var message = Strings.ResourceManager.GetString(messageId, Strings.Culture) ?? messageId; - var title = parameters!=null ? string.Format(message, parameters) : message; - var titleParams = new object[] { title }; - Debug(nameof(Strings.LogRegionBegin), titleParams); - return IndentManager.IncreaseIndent(() => Debug(nameof(Strings.LogRegionEnd), titleParams)); + var title = parameters.Length > 0 ? string.Format(message, parameters) : message; + Debug(nameof(Strings.LogRegionBegin), [title]); + return IndentManager.IncreaseIndent(() => Debug(nameof(Strings.LogRegionEnd), [title])); } /// @@ -58,13 +57,13 @@ public IndentManager.IndentScope DebugRegion(string messageId, params object[] p /// Values of parameters in (resource string or message itself). /// /// object. Region will closed by disposing of this object. - public IndentManager.IndentScope InfoRegion(string messageId, params object[] parameters) + public IndentManager.IndentScope InfoRegion(string messageId, params ReadOnlySpan parameters) { ArgumentNullException.ThrowIfNull(messageId, "message"); if (!IsLogged(LogLevel.Info)) return IndentManager.IncreaseIndent(); var message = Strings.ResourceManager.GetString(messageId, Strings.Culture) ?? messageId; - var title = parameters!=null ? string.Format(message, parameters) : message; + var title = parameters.Length > 0 ? string.Format(message, parameters) : message; Info(string.Format(Strings.LogRegionBegin, title)); return IndentManager.IncreaseIndent(() => Info(string.Format(Strings.LogRegionEnd, title))); } @@ -79,7 +78,7 @@ public IndentManager.IndentScope InfoRegion(string messageId, params object[] pa /// Values of parameters in (resource string or message itself). /// /// Exception, which must be written. - public virtual void Debug(string messageId, object[] parameters = null, Exception exception = null) => + public virtual void Debug(string messageId, ReadOnlySpan parameters = default, Exception exception = null) => Write(LogLevel.Debug, messageId, parameters, exception); /// @@ -91,7 +90,7 @@ public virtual void Debug(string messageId, object[] parameters = null, Exceptio /// Values of parameters in (resource string or message itself). /// /// Exception, which must be written. - public virtual void Info(string messageId, object[] parameters = null, Exception exception = null) => + public virtual void Info(string messageId, ReadOnlySpan parameters = default, Exception exception = null) => Write(LogLevel.Info, messageId, parameters, exception); /// @@ -104,7 +103,7 @@ public virtual void Info(string messageId, object[] parameters = null, Exception /// Values of parameters in (resource string or message itself). /// /// Exception, which must be written. - public virtual void Warning(string messageId, object[] parameters = null, Exception exception = null) => + public virtual void Warning(string messageId, ReadOnlySpan parameters = default, Exception exception = null) => Write(LogLevel.Warning, messageId, parameters, exception); /// @@ -117,7 +116,7 @@ public virtual void Warning(string messageId, object[] parameters = null, Except /// Values of parameters in (resource string or message itself). /// /// Exception, which must be written. - public virtual void Error(string messageId, object[] parameters = null, Exception exception = null) => + public virtual void Error(string messageId, ReadOnlySpan parameters = default, Exception exception = null) => Write(LogLevel.Error, messageId, parameters, exception); /// @@ -130,10 +129,10 @@ public virtual void Error(string messageId, object[] parameters = null, Exceptio /// Values of parameters in (resource string or message itself). /// /// Exception, which must be written. - public virtual void FatalError(string messageId, object[] parameters = null, Exception exception = null) => + public virtual void FatalError(string messageId, ReadOnlySpan parameters = default, Exception exception = null) => Write(LogLevel.FatalError, messageId, parameters, exception); - private void Write(LogLevel logLevel, string messageId, object[] parameters, Exception exception) + private void Write(LogLevel logLevel, string messageId, ReadOnlySpan parameters, Exception exception) { var message = string.IsNullOrEmpty(messageId) ? null diff --git a/Orm/Xtensive.Orm/Orm/Logging/Internals/NullLog.cs b/Orm/Xtensive.Orm/Orm/Logging/Internals/NullLog.cs index 66b3fdaeb9..a95358f7a4 100644 --- a/Orm/Xtensive.Orm/Orm/Logging/Internals/NullLog.cs +++ b/Orm/Xtensive.Orm/Orm/Logging/Internals/NullLog.cs @@ -15,23 +15,23 @@ public override bool IsLogged(LogLevel eventTypes) return false; } - public override void Debug(string message, object[] parameters = null, Exception exception = null) + public override void Debug(string message, ReadOnlySpan parameters = default, Exception exception = null) { } - public override void Info(string message, object[] parameters = null, Exception exception = null) + public override void Info(string message, ReadOnlySpan parameters = default, Exception exception = null) { } - public override void Warning(string message, object[] parameters = null, Exception exception = null) + public override void Warning(string message, ReadOnlySpan parameters = default, Exception exception = null) { } - public override void Error(string message, object[] parameters = null, Exception exception = null) + public override void Error(string message, ReadOnlySpan parameters = default, Exception exception = null) { } - public override void FatalError(string message, object[] parameters = null, Exception exception = null) + public override void FatalError(string message, ReadOnlySpan parameters = default, Exception exception = null) { } @@ -44,4 +44,4 @@ public NullLog(string name) { } } -} \ No newline at end of file +} diff --git a/Orm/Xtensive.Orm/Orm/Logging/LogEventInfo.cs b/Orm/Xtensive.Orm/Orm/Logging/LogEventInfo.cs index e8346e9cfd..5bdea7ae10 100644 --- a/Orm/Xtensive.Orm/Orm/Logging/LogEventInfo.cs +++ b/Orm/Xtensive.Orm/Orm/Logging/LogEventInfo.cs @@ -52,11 +52,11 @@ public override string ToString() return builder.ToString(); } - private static string FormatMessage(string message, object[] parameters) + private static string FormatMessage(string message, ReadOnlySpan parameters) { if (string.IsNullOrEmpty(message)) return null; - if (parameters==null || parameters.Length==0) { + if (parameters.Length == 0) { return message; } try { @@ -83,7 +83,7 @@ private static string AppendIndent(string message) /// Log message. /// Format parameters for log message. /// Exception. - public LogEventInfo(string source, LogLevel level, string message = null, object[] parameters = null, Exception exception = null) + public LogEventInfo(string source, LogLevel level, string message = null, ReadOnlySpan parameters = default, Exception exception = null) { Source = source; Level = level; diff --git a/Orm/Xtensive.Orm/Orm/Model/TypeIndexInfoCollection.cs b/Orm/Xtensive.Orm/Orm/Model/TypeIndexInfoCollection.cs index f53b31dc44..d06e23447e 100644 --- a/Orm/Xtensive.Orm/Orm/Model/TypeIndexInfoCollection.cs +++ b/Orm/Xtensive.Orm/Orm/Model/TypeIndexInfoCollection.cs @@ -48,14 +48,15 @@ public IndexInfo FindFirst(IndexAttributes indexAttributes) => Find(indexAttributes).FirstOrDefault(); [DebuggerStepThrough] - public IndexInfo GetIndex(string fieldName, params string[] fieldNames) + public IndexInfo GetIndex(string fieldName, params ReadOnlySpan fieldNames) { - var names = (fieldNames ?? Array.Empty()).Prepend(fieldName); - var fields = new List(); var reflectedTypeFields = primaryIndex.ReflectedType.Fields; - foreach (var name in names) { - if (reflectedTypeFields.TryGetValue(name, out var field)) { + if (reflectedTypeFields.TryGetValue(fieldName, out var field)) { + fields.Add(field); + } + foreach (var name in fieldNames) { + if (reflectedTypeFields.TryGetValue(name, out field)) { fields.Add(field); } } diff --git a/Orm/Xtensive.Orm/Orm/QueryEndpoint.cs b/Orm/Xtensive.Orm/Orm/QueryEndpoint.cs index 30135d6181..b647d9d401 100644 --- a/Orm/Xtensive.Orm/Orm/QueryEndpoint.cs +++ b/Orm/Xtensive.Orm/Orm/QueryEndpoint.cs @@ -954,12 +954,10 @@ public IQueryable Items(Expression> #region Private / internal methods /// array is empty. - private Key GetKeyByValues(object[] keyValues) + private Key GetKeyByValues(ReadOnlySpan keyValues) where T : class, IEntity { - ArgumentNullException.ThrowIfNull(keyValues); - if (keyValues.Length == 0) - throw new ArgumentException(Strings.ExKeyValuesArrayIsEmpty, "keyValues"); + ArgumentOutOfRangeException.ThrowIfZero(keyValues.Length); if (keyValues.Length == 1) { switch (keyValues[0]) { case Key key: @@ -969,7 +967,7 @@ private Key GetKeyByValues(object[] keyValues) } } var session = Session; - return Key.Create(session.Domain, session.StorageNodeId, typeof(T), TypeReferenceAccuracy.BaseType, keyValues); + return Key.Create(session.Domain, session.StorageNodeId, session.Domain.Model.Types[typeof(T)], TypeReferenceAccuracy.BaseType, keyValues); } private Expression BuildRootExpression(Type elementType) diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/Internals/HintGenerator.cs b/Orm/Xtensive.Orm/Orm/Upgrade/Internals/HintGenerator.cs index f71f2c8640..8baab73b44 100644 --- a/Orm/Xtensive.Orm/Orm/Upgrade/Internals/HintGenerator.cs +++ b/Orm/Xtensive.Orm/Orm/Upgrade/Internals/HintGenerator.cs @@ -949,7 +949,7 @@ private static (string, string)[] AssociateMappedKeyFields( : null; } - private static (string, string)[] AssociateMappedFields(params (StoredFieldInfo, StoredFieldInfo)[] fieldsToProcess) + private static (string, string)[] AssociateMappedFields(params ReadOnlySpan<(StoredFieldInfo, StoredFieldInfo)> fieldsToProcess) { var result = new ChainedBuffer<(StoredFieldInfo, StoredFieldInfo)>(); var tasks = new Queue<(StoredFieldInfo, StoredFieldInfo)>(); diff --git a/Orm/Xtensive.Orm/Sql/Model/Constraints/PrimaryKey.cs b/Orm/Xtensive.Orm/Sql/Model/Constraints/PrimaryKey.cs index 9ca9d85ef9..25118f52e1 100644 --- a/Orm/Xtensive.Orm/Sql/Model/Constraints/PrimaryKey.cs +++ b/Orm/Xtensive.Orm/Sql/Model/Constraints/PrimaryKey.cs @@ -13,9 +13,9 @@ namespace Xtensive.Sql.Model public class PrimaryKey : UniqueConstraint { - internal PrimaryKey(Table table, string name, params TableColumn[] columns) + internal PrimaryKey(Table table, string name, params ReadOnlySpan columns) : base(table, name, columns) { } } -} \ No newline at end of file +} diff --git a/Orm/Xtensive.Orm/Sql/Model/Constraints/UniqueConstraint.cs b/Orm/Xtensive.Orm/Sql/Model/Constraints/UniqueConstraint.cs index bbaabde174..df7f04ac18 100644 --- a/Orm/Xtensive.Orm/Sql/Model/Constraints/UniqueConstraint.cs +++ b/Orm/Xtensive.Orm/Sql/Model/Constraints/UniqueConstraint.cs @@ -47,7 +47,7 @@ public override void Lock(bool recursive) #region Constructors - internal UniqueConstraint(Table table, string name, params TableColumn[] columns) : base(table, name, null, null, null) + internal UniqueConstraint(Table table, string name, params ReadOnlySpan columns) : base(table, name, null, null, null) { this.columns = new NodeCollection(columns.Length); for (int i = 0, count = columns.Length; i /// The name. /// The columns. - public PrimaryKey CreatePrimaryKey(string name, params TableColumn[] columns) + public PrimaryKey CreatePrimaryKey(string name, params ReadOnlySpan columns) { return new PrimaryKey(this, name, columns); } @@ -76,7 +76,7 @@ public PrimaryKey CreatePrimaryKey(string name, params TableColumn[] columns) /// /// The name. /// The columns. - public UniqueConstraint CreateUniqueConstraint(string name, params TableColumn[] columns) + public UniqueConstraint CreateUniqueConstraint(string name, params ReadOnlySpan columns) { return new UniqueConstraint(this, name, columns); }