From 7775de505c1106d0f9921da0a4f77dc83aeec49f Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Fri, 17 Oct 2025 13:24:16 -0700 Subject: [PATCH 1/9] Use `ReadOnlySpan<>` in arguments --- Orm/Xtensive.Orm/Orm/QueryEndpoint.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Orm/Xtensive.Orm/Orm/QueryEndpoint.cs b/Orm/Xtensive.Orm/Orm/QueryEndpoint.cs index 30135d618..b647d9d40 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) From dae3b37e9bcc120f1009313452dc3e07c422d2d7 Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Fri, 17 Oct 2025 14:10:04 -0700 Subject: [PATCH 2/9] Refactor logging methods --- Orm/Xtensive.Orm/InternalLogs.cs | 6 +++--- Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs | 16 ++++++++-------- .../Orm/Logging/Internals/NullLog.cs | 12 ++++++------ Orm/Xtensive.Orm/Orm/Logging/LogEventInfo.cs | 6 +++--- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Orm/Xtensive.Orm/InternalLogs.cs b/Orm/Xtensive.Orm/InternalLogs.cs index 11dc9ad25..911cb8abd 100644 --- a/Orm/Xtensive.Orm/InternalLogs.cs +++ b/Orm/Xtensive.Orm/InternalLogs.cs @@ -229,7 +229,7 @@ public static bool IsLogged(LogLevel type) public static IndentManager.IndentScope DebugRegion(string messageId, params object[] 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) => @@ -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; diff --git a/Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs b/Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs index 357943d87..1ded1a612 100644 --- a/Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs +++ b/Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs @@ -58,13 +58,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 +79,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 +91,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 +104,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 +117,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 +130,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 66b3fdaeb..a95358f7a 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 e8346e9cf..5bdea7ae1 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; From 9b102a28dba6fcb34682ec05db29b30896243fa4 Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Fri, 17 Oct 2025 14:21:05 -0700 Subject: [PATCH 3/9] Refactor logging methods --- Orm/Xtensive.Orm/InternalLogs.cs | 130 ++++++++++++------------ Orm/Xtensive.Orm/InternalLogs.tt | 10 +- Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs | 4 +- 3 files changed, 72 insertions(+), 72 deletions(-) diff --git a/Orm/Xtensive.Orm/InternalLogs.cs b/Orm/Xtensive.Orm/InternalLogs.cs index 911cb8abd..c9b7e20fb 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 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; @@ -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; @@ -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; @@ -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 c178c0bd5..c2ef1ffdd 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 1ded1a612..d6bb9fc62 100644 --- a/Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs +++ b/Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs @@ -35,13 +35,13 @@ 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 title = parameters.Length > 0 ? string.Format(message, parameters) : message; var titleParams = new object[] { title }; Debug(nameof(Strings.LogRegionBegin), titleParams); return IndentManager.IncreaseIndent(() => Debug(nameof(Strings.LogRegionEnd), titleParams)); From 0b960c11cee907864b0e8dd01ef5d82bc9c1f38d Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Fri, 17 Oct 2025 14:30:06 -0700 Subject: [PATCH 4/9] Refactor logging methods --- Orm/Xtensive.Orm.Tests.Core/Diagnostics/LogMessageTest.cs | 4 ++-- Orm/Xtensive.Orm.Tests.Framework/Dynamic.cs | 4 ++-- Orm/Xtensive.Orm/InternalLogs.cs | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Orm/Xtensive.Orm.Tests.Core/Diagnostics/LogMessageTest.cs b/Orm/Xtensive.Orm.Tests.Core/Diagnostics/LogMessageTest.cs index 9e6520e15..305de8f34 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 1b943fef9..8c080dd78 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 c9b7e20fb..7205e137e 100644 --- a/Orm/Xtensive.Orm/InternalLogs.cs +++ b/Orm/Xtensive.Orm/InternalLogs.cs @@ -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; @@ -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, ReadOnlySpan args) { instance.Warning(format, args, exception); return exception; From d7605f0dcc7fb72baccf6859074a03ae3a213591 Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Fri, 17 Oct 2025 14:34:39 -0700 Subject: [PATCH 5/9] GetIndex() --- Orm/Xtensive.Orm/Orm/Model/TypeIndexInfoCollection.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Orm/Xtensive.Orm/Orm/Model/TypeIndexInfoCollection.cs b/Orm/Xtensive.Orm/Orm/Model/TypeIndexInfoCollection.cs index f53b31dc4..d06e23447 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); } } From da7fd06ca7ed1e2ff9978a7468cae5b98c1fec8f Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Fri, 17 Oct 2025 14:37:38 -0700 Subject: [PATCH 6/9] DebugRegion --- Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs b/Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs index d6bb9fc62..b21176c6e 100644 --- a/Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs +++ b/Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs @@ -42,9 +42,8 @@ public IndentManager.IndentScope DebugRegion(string messageId, params ReadOnlySp return IndentManager.IncreaseIndent(); var message = Strings.ResourceManager.GetString(messageId, Strings.Culture) ?? messageId; var title = parameters.Length > 0 ? string.Format(message, parameters) : message; - var titleParams = new object[] { title }; - Debug(nameof(Strings.LogRegionBegin), titleParams); - return IndentManager.IncreaseIndent(() => Debug(nameof(Strings.LogRegionEnd), titleParams)); + Debug(nameof(Strings.LogRegionBegin), [title]); + return IndentManager.IncreaseIndent(() => Debug(nameof(Strings.LogRegionEnd), [title])); } /// From e2d65c485e1a0a74b9cca855d2fd29457b2e9720 Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Fri, 17 Oct 2025 14:52:23 -0700 Subject: [PATCH 7/9] CreatePrimaryKey --- Orm/Xtensive.Orm/Sql/Model/Constraints/PrimaryKey.cs | 4 ++-- Orm/Xtensive.Orm/Sql/Model/Constraints/UniqueConstraint.cs | 4 ++-- Orm/Xtensive.Orm/Sql/Model/Table.cs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Orm/Xtensive.Orm/Sql/Model/Constraints/PrimaryKey.cs b/Orm/Xtensive.Orm/Sql/Model/Constraints/PrimaryKey.cs index 9ca9d85ef..25118f52e 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 bbaabde17..df7f04ac1 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); } From 44278c4f71626309c1740eda8ee14819f1c0627c Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Fri, 17 Oct 2025 14:58:22 -0700 Subject: [PATCH 8/9] AssociateMappedFields --- Orm/Xtensive.Orm/Orm/Upgrade/Internals/HintGenerator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/Internals/HintGenerator.cs b/Orm/Xtensive.Orm/Orm/Upgrade/Internals/HintGenerator.cs index f71f2c864..8baab73b4 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)>(); From 864c7ff39ab32760c4a30511e86063e166e7db82 Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Sat, 18 Oct 2025 15:23:11 -0700 Subject: [PATCH 9/9] Update Orm/Xtensive.Orm/InternalLogs.cs Co-authored-by: Sergey Naumenko <152863015+snaumenko-st@users.noreply.github.com> --- Orm/Xtensive.Orm/InternalLogs.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Orm/Xtensive.Orm/InternalLogs.cs b/Orm/Xtensive.Orm/InternalLogs.cs index 7205e137e..5beb27231 100644 --- a/Orm/Xtensive.Orm/InternalLogs.cs +++ b/Orm/Xtensive.Orm/InternalLogs.cs @@ -573,7 +573,7 @@ public static Exception Info(Exception exception) public static void Warning(string format, params ReadOnlySpan args) => instance.Warning(format, args); - public static Exception Warning(Exception exception, string format, ReadOnlySpan args) + public static Exception Warning(Exception exception, string format, params ReadOnlySpan args) { instance.Warning(format, args, exception); return exception;