Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Orm/Xtensive.Orm.Tests.Core/Diagnostics/LogMessageTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand All @@ -73,4 +73,4 @@ public void PerformanceTest()

}
}
}
}
4 changes: 2 additions & 2 deletions Orm/Xtensive.Orm.Tests.Framework/Dynamic.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<object> 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<object> args)
{
return new ParseException(string.Format(CultureInfo.CurrentCulture, format, args), pos);
}
Expand Down
144 changes: 72 additions & 72 deletions Orm/Xtensive.Orm/InternalLogs.cs

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions Orm/Xtensive.Orm/InternalLogs.tt
Original file line number Diff line number Diff line change
Expand Up @@ -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<object> 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<object> 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<object> 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<object> args)
{
instance.<#= level #>(format, args, exception);
return exception;
Expand Down Expand Up @@ -68,4 +68,4 @@ namespace Xtensive
new Tuple<string, string>("SqlLog", "Xtensive.Orm.Sql"),
new Tuple<string, string>("CoreLog", "Xtensive.Orm.Core"),
new Tuple<string, string>("TestLog", "Xtensive.Orm.Tests")};
#>
#>
25 changes: 12 additions & 13 deletions Orm/Xtensive.Orm/Orm/Logging/BaseLog.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,16 +35,15 @@ public abstract class BaseLog
/// </param>
/// <param name="parameters">Values of parameters in <paramref name="messageId"/> (resource string or message itself).</param>
/// <returns><see cref="IDisposable"/> object. Region will closed by disposing of this object.</returns>
public IndentManager.IndentScope DebugRegion(string messageId, params object[] parameters)
public IndentManager.IndentScope DebugRegion(string messageId, params ReadOnlySpan<object> 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]));
}

/// <summary>
Expand All @@ -58,13 +57,13 @@ public IndentManager.IndentScope DebugRegion(string messageId, params object[] p
/// Values of parameters in <paramref name="messageId"/> (resource string or message itself).
/// </param>
/// <returns><see cref="IDisposable"/> object. Region will closed by disposing of this object.</returns>
public IndentManager.IndentScope InfoRegion(string messageId, params object[] parameters)
public IndentManager.IndentScope InfoRegion(string messageId, params ReadOnlySpan<object> 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)));
}
Expand All @@ -79,7 +78,7 @@ public IndentManager.IndentScope InfoRegion(string messageId, params object[] pa
/// Values of parameters in <paramref name="messageId"/> (resource string or message itself).
/// </param>
/// <param name="exception">Exception, which must be written.</param>
public virtual void Debug(string messageId, object[] parameters = null, Exception exception = null) =>
public virtual void Debug(string messageId, ReadOnlySpan<object> parameters = default, Exception exception = null) =>
Write(LogLevel.Debug, messageId, parameters, exception);

/// <summary>
Expand All @@ -91,7 +90,7 @@ public virtual void Debug(string messageId, object[] parameters = null, Exceptio
/// Values of parameters in <paramref name="messageId"/> (resource string or message itself).
/// </param>
/// <param name="exception">Exception, which must be written.</param>
public virtual void Info(string messageId, object[] parameters = null, Exception exception = null) =>
public virtual void Info(string messageId, ReadOnlySpan<object> parameters = default, Exception exception = null) =>
Write(LogLevel.Info, messageId, parameters, exception);

/// <summary>
Expand All @@ -104,7 +103,7 @@ public virtual void Info(string messageId, object[] parameters = null, Exception
/// Values of parameters in <paramref name="messageId"/> (resource string or message itself).
/// </param>
/// <param name="exception">Exception, which must be written.</param>
public virtual void Warning(string messageId, object[] parameters = null, Exception exception = null) =>
public virtual void Warning(string messageId, ReadOnlySpan<object> parameters = default, Exception exception = null) =>
Write(LogLevel.Warning, messageId, parameters, exception);

/// <summary>
Expand All @@ -117,7 +116,7 @@ public virtual void Warning(string messageId, object[] parameters = null, Except
/// Values of parameters in <paramref name="messageId"/> (resource string or message itself).
/// </param>
/// <param name="exception">Exception, which must be written.</param>
public virtual void Error(string messageId, object[] parameters = null, Exception exception = null) =>
public virtual void Error(string messageId, ReadOnlySpan<object> parameters = default, Exception exception = null) =>
Write(LogLevel.Error, messageId, parameters, exception);

/// <summary>
Expand All @@ -130,10 +129,10 @@ public virtual void Error(string messageId, object[] parameters = null, Exceptio
/// Values of parameters in <paramref name="messageId"/> (resource string or message itself).
/// </param>
/// <param name="exception">Exception, which must be written.</param>
public virtual void FatalError(string messageId, object[] parameters = null, Exception exception = null) =>
public virtual void FatalError(string messageId, ReadOnlySpan<object> 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<object> parameters, Exception exception)
{
var message = string.IsNullOrEmpty(messageId)
? null
Expand Down
12 changes: 6 additions & 6 deletions Orm/Xtensive.Orm/Orm/Logging/Internals/NullLog.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<object> parameters = default, Exception exception = null)
{
}

public override void Info(string message, object[] parameters = null, Exception exception = null)
public override void Info(string message, ReadOnlySpan<object> parameters = default, Exception exception = null)
{
}

public override void Warning(string message, object[] parameters = null, Exception exception = null)
public override void Warning(string message, ReadOnlySpan<object> parameters = default, Exception exception = null)
{
}

public override void Error(string message, object[] parameters = null, Exception exception = null)
public override void Error(string message, ReadOnlySpan<object> parameters = default, Exception exception = null)
{
}

public override void FatalError(string message, object[] parameters = null, Exception exception = null)
public override void FatalError(string message, ReadOnlySpan<object> parameters = default, Exception exception = null)
{
}

Expand All @@ -44,4 +44,4 @@ public NullLog(string name)
{
}
}
}
}
6 changes: 3 additions & 3 deletions Orm/Xtensive.Orm/Orm/Logging/LogEventInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<object> parameters)
{
if (string.IsNullOrEmpty(message))
return null;
if (parameters==null || parameters.Length==0) {
if (parameters.Length == 0) {
return message;
}
try {
Expand All @@ -83,7 +83,7 @@ private static string AppendIndent(string message)
/// <param name="message">Log message.</param>
/// <param name="parameters">Format parameters for log message.</param>
/// <param name="exception">Exception.</param>
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<object> parameters = default, Exception exception = null)
{
Source = source;
Level = level;
Expand Down
11 changes: 6 additions & 5 deletions Orm/Xtensive.Orm/Orm/Model/TypeIndexInfoCollection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<string> fieldNames)
{
var names = (fieldNames ?? Array.Empty<string>()).Prepend(fieldName);

var fields = new List<FieldInfo>();
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);
}
}
Expand Down
8 changes: 3 additions & 5 deletions Orm/Xtensive.Orm/Orm/QueryEndpoint.cs
Original file line number Diff line number Diff line change
Expand Up @@ -954,12 +954,10 @@ public IQueryable<TElement> Items<TElement>(Expression<Func<EntitySet<TElement>>
#region Private / internal methods

/// <exception cref="ArgumentException"><paramref name="keyValues"/> array is empty.</exception>
private Key GetKeyByValues<T>(object[] keyValues)
private Key GetKeyByValues<T>(ReadOnlySpan<object> 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:
Expand All @@ -969,7 +967,7 @@ private Key GetKeyByValues<T>(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)
Expand Down
2 changes: 1 addition & 1 deletion Orm/Xtensive.Orm/Orm/Upgrade/Internals/HintGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)>();
Expand Down
4 changes: 2 additions & 2 deletions Orm/Xtensive.Orm/Sql/Model/Constraints/PrimaryKey.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<TableColumn> columns)
: base(table, name, columns)
{
}
}
}
}
4 changes: 2 additions & 2 deletions Orm/Xtensive.Orm/Sql/Model/Constraints/UniqueConstraint.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<TableColumn> columns) : base(table, name, null, null, null)
{
this.columns = new NodeCollection<TableColumn>(columns.Length);
for (int i = 0, count = columns.Length; i<count; i++)
Expand All @@ -56,4 +56,4 @@ internal UniqueConstraint(Table table, string name, params TableColumn[] columns

#endregion
}
}
}
4 changes: 2 additions & 2 deletions Orm/Xtensive.Orm/Sql/Model/Table.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public DefaultConstraint CreateDefaultConstraint(string name, TableColumn column
/// </summary>
/// <param name="name">The name.</param>
/// <param name="columns">The columns.</param>
public PrimaryKey CreatePrimaryKey(string name, params TableColumn[] columns)
public PrimaryKey CreatePrimaryKey(string name, params ReadOnlySpan<TableColumn> columns)
{
return new PrimaryKey(this, name, columns);
}
Expand All @@ -76,7 +76,7 @@ public PrimaryKey CreatePrimaryKey(string name, params TableColumn[] columns)
/// </summary>
/// <param name="name">The name.</param>
/// <param name="columns">The columns.</param>
public UniqueConstraint CreateUniqueConstraint(string name, params TableColumn[] columns)
public UniqueConstraint CreateUniqueConstraint(string name, params ReadOnlySpan<TableColumn> columns)
{
return new UniqueConstraint(this, name, columns);
}
Expand Down