diff --git a/Orm/Xtensive.Orm/Orm/Providers/Requests/ParameterBinding.cs b/Orm/Xtensive.Orm/Orm/Providers/Requests/ParameterBinding.cs index 91f743798..bd0d826de 100644 --- a/Orm/Xtensive.Orm/Orm/Providers/Requests/ParameterBinding.cs +++ b/Orm/Xtensive.Orm/Orm/Providers/Requests/ParameterBinding.cs @@ -4,10 +4,6 @@ // Created by: Dmitri Maximov // Created: 2008.09.26 -using System; -using System.Collections.Generic; -using System.Linq; -using Xtensive.Core; using Xtensive.Sql; using Xtensive.Sql.Dml; diff --git a/Orm/Xtensive.Orm/Orm/Providers/Requests/ParameterTransmissionType.cs b/Orm/Xtensive.Orm/Orm/Providers/Requests/ParameterTransmissionType.cs index 01aaf4ff6..0e79fc7cc 100644 --- a/Orm/Xtensive.Orm/Orm/Providers/Requests/ParameterTransmissionType.cs +++ b/Orm/Xtensive.Orm/Orm/Providers/Requests/ParameterTransmissionType.cs @@ -12,7 +12,7 @@ namespace Xtensive.Orm.Providers /// Possible way of delivering parameter to server /// for and . /// - public enum ParameterTransmissionType + public enum ParameterTransmissionType : byte { /// /// Indicates that no special handling of parameter is performed. @@ -27,4 +27,4 @@ public enum ParameterTransmissionType /// BinaryLob = 2, } -} \ No newline at end of file +} diff --git a/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistParameterBinding.cs b/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistParameterBinding.cs index 60032d0de..ebf3ef391 100644 --- a/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistParameterBinding.cs +++ b/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistParameterBinding.cs @@ -4,57 +4,39 @@ // Created by: Dmitri Maximov // Created: 2008.09.25 -using System; -using Xtensive.Core; using Xtensive.Sql; -namespace Xtensive.Orm.Providers +namespace Xtensive.Orm.Providers; + +/// +/// A binding of a parameter for . +/// +public sealed class PersistParameterBinding( + TypeMapping typeMapping, + ushort rowIndex, + ColNum fieldIndex, + ParameterTransmissionType transmissionType = ParameterTransmissionType.Regular, + PersistParameterBindingType bindingType = PersistParameterBindingType.Regular +) : ParameterBinding(typeMapping, transmissionType) { - /// - /// A binding of a parameter for . - /// - public sealed class PersistParameterBinding : ParameterBinding - { - public int RowIndex { get; private set; } - - public int FieldIndex { get; private set; } - - public PersistParameterBindingType BindingType { get; private set; } - - // Constructors - - public PersistParameterBinding(TypeMapping typeMapping, int rowIndex, int fieldIndex, - ParameterTransmissionType transmissionType, PersistParameterBindingType bindingType) - : base(typeMapping, transmissionType) - { - RowIndex = rowIndex; - FieldIndex = fieldIndex; - BindingType = bindingType; - } - - public PersistParameterBinding(TypeMapping typeMapping, int fieldIndex, ParameterTransmissionType transmissionType, PersistParameterBindingType bindingType) - : this(typeMapping, 0, fieldIndex, transmissionType, bindingType) - { - } + public ushort RowIndex { get; } = rowIndex; + public ColNum FieldIndex { get; } = fieldIndex; + public PersistParameterBindingType BindingType { get; } = bindingType; - public PersistParameterBinding(TypeMapping typeMapping, int rowIndex, int fieldIndex, ParameterTransmissionType transmissionType) - : this(typeMapping, rowIndex, fieldIndex, transmissionType, PersistParameterBindingType.Regular) - { - } + // Constructors - public PersistParameterBinding(TypeMapping typeMapping, int fieldIndex, ParameterTransmissionType transmissionType) - : this(typeMapping, fieldIndex, transmissionType, PersistParameterBindingType.Regular) - { - } + public PersistParameterBinding(TypeMapping typeMapping, ColNum fieldIndex, ParameterTransmissionType transmissionType, PersistParameterBindingType bindingType) + : this(typeMapping, 0, fieldIndex, transmissionType, bindingType) + { + } - public PersistParameterBinding(TypeMapping typeMapping, int rowIndex, int fieldIndex) - : this(typeMapping, rowIndex, fieldIndex, ParameterTransmissionType.Regular, PersistParameterBindingType.Regular) - { - } + public PersistParameterBinding(TypeMapping typeMapping, ColNum fieldIndex, ParameterTransmissionType transmissionType) + : this(typeMapping, fieldIndex, transmissionType, PersistParameterBindingType.Regular) + { + } - public PersistParameterBinding(TypeMapping typeMapping, int fieldIndex) - : this(typeMapping, fieldIndex, ParameterTransmissionType.Regular, PersistParameterBindingType.Regular) - { - } + public PersistParameterBinding(TypeMapping typeMapping, ColNum fieldIndex) + : this(typeMapping, fieldIndex, ParameterTransmissionType.Regular, PersistParameterBindingType.Regular) + { } -} \ No newline at end of file +} diff --git a/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistParameterBindingType.cs b/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistParameterBindingType.cs index 8c2ea2b0b..f87709a0b 100644 --- a/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistParameterBindingType.cs +++ b/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistParameterBindingType.cs @@ -3,7 +3,7 @@ namespace Xtensive.Orm.Providers /// /// Possible types of . /// - public enum PersistParameterBindingType + public enum PersistParameterBindingType : byte { /// /// Regular parameter. Parameter value is obtained thru difference tuple. @@ -17,4 +17,4 @@ public enum PersistParameterBindingType /// VersionFilter = 1, } -} \ No newline at end of file +} diff --git a/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistRequestBuilder.cs b/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistRequestBuilder.cs index 563352661..255776f57 100644 --- a/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistRequestBuilder.cs +++ b/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistRequestBuilder.cs @@ -63,7 +63,7 @@ internal IReadOnlyList Build(StorageNode node, PersistRequestBui return result.AsSafeWrapper(); } - protected virtual List BuildInsertRequest(PersistRequestBuilderContext context) + protected virtual List BuildInsertRequest(in PersistRequestBuilderContext context) { var result = new List(); foreach (var index in context.AffectedIndexes) { @@ -88,7 +88,7 @@ protected virtual List BuildInsertRequest(PersistRequestBuilderC return result; } - protected virtual List BuildUpdateRequest(PersistRequestBuilderContext context) + protected virtual List BuildUpdateRequest(in PersistRequestBuilderContext context) { var result = new List(); foreach (var index in context.AffectedIndexes) { @@ -130,7 +130,7 @@ protected virtual List BuildUpdateRequest(PersistRequestBuilderC return result; } - protected virtual List BuildRemoveRequest(PersistRequestBuilderContext context) + protected virtual List BuildRemoveRequest(in PersistRequestBuilderContext context) { var result = new List(); for (var i = context.AffectedIndexes.Count - 1; i >= 0; i--) { @@ -147,7 +147,7 @@ protected virtual List BuildRemoveRequest(PersistRequestBuilderC return result; } - private SqlExpression BuildKeyFilter(PersistRequestBuilderContext context, SqlTableRef filteredTable, List currentBindings) + private SqlExpression BuildKeyFilter(in PersistRequestBuilderContext context, SqlTableRef filteredTable, List currentBindings) { SqlExpression result = null; foreach (var column in context.PrimaryIndex.KeyColumns.Keys) { @@ -163,7 +163,7 @@ private SqlExpression BuildKeyFilter(PersistRequestBuilderContext context, SqlTa return result; } - private SqlExpression BuildVersionFilter(PersistRequestBuilderContext context, SqlTableRef filteredTable, List currentBindings) + private SqlExpression BuildVersionFilter(in PersistRequestBuilderContext context, SqlTableRef filteredTable, List currentBindings) { SqlExpression result = null; foreach (var column in context.Type.GetVersionColumns()) { @@ -193,7 +193,7 @@ private SqlExpression BuildVersionFilter(PersistRequestBuilderContext context, S return result; } - private bool AddFakeVersionColumnUpdate(PersistRequestBuilderContext context, SqlUpdate update, SqlTableRef filteredTable) + private bool AddFakeVersionColumnUpdate(in PersistRequestBuilderContext context, SqlUpdate update, SqlTableRef filteredTable) { foreach (var column in context.Type.GetVersionColumns()) { var columnExpression = filteredTable[column.Name]; @@ -210,7 +210,7 @@ private bool AddFakeVersionColumnUpdate(PersistRequestBuilderContext context, Sq return false; } - private PersistParameterBinding GetBinding(PersistRequestBuilderContext context, ColumnInfo column, Table table, int fieldIndex) + private PersistParameterBinding GetBinding(PersistRequestBuilderContext context, ColumnInfo column, Table table, ColNum fieldIndex) { if (!context.ParameterBindings.TryGetValue(column, out var binding)) { var typeMapping = driver.GetTypeMapping(column); @@ -236,15 +236,10 @@ private ParameterTransmissionType GetTransmissionType(TableColumn column) : ParameterTransmissionType.Regular; } - private static int GetFieldIndex(TypeInfo type, ColumnInfo column) - { - if (!type.Fields.TryGetValue(column.Field.Name, out var field) - || field.Column == null - || field.Column.ValueType != column.ValueType) { - return -1; - } - return field.MappingInfo.Offset; - } + private static ColNum GetFieldIndex(TypeInfo type, ColumnInfo column) => + type.Fields.TryGetValue(column.Field.Name, out var field) && field.Column?.ValueType == column.ValueType + ? field.MappingInfo.Offset + : (ColNum)(-1); /// protected override void Initialize() @@ -263,4 +258,4 @@ public PersistRequestBuilder() { } } -} \ No newline at end of file +} diff --git a/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistRequestBuilderContext.cs b/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistRequestBuilderContext.cs index 4b67d9fbb..b25e3d045 100644 --- a/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistRequestBuilderContext.cs +++ b/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistRequestBuilderContext.cs @@ -4,9 +4,6 @@ // Created by: Dmitri Maximov // Created: 2008.08.29 -using System.Collections.Generic; -using System.Linq; -using Xtensive.Collections; using Xtensive.Core; using Xtensive.Orm.Configuration; using Xtensive.Orm.Model; @@ -16,23 +13,23 @@ namespace Xtensive.Orm.Providers /// /// context. /// - public sealed class PersistRequestBuilderContext + public readonly struct PersistRequestBuilderContext { - public PersistRequestBuilderTask Task { get; private set; } + public PersistRequestBuilderTask Task { get; } - public ModelMapping Mapping { get; private set; } + public ModelMapping Mapping { get; } - public NodeConfiguration NodeConfiguration { get; private set; } + public NodeConfiguration NodeConfiguration { get; } - public TypeInfo Type { get; private set; } + public TypeInfo Type { get; } - public IReadOnlyList AffectedIndexes { get; private set;} + public IReadOnlyList AffectedIndexes { get; } - public IndexInfo PrimaryIndex { get; private set; } + public IndexInfo PrimaryIndex { get; } - public Dictionary ParameterBindings { get; private set; } + public Dictionary ParameterBindings { get; } - public Dictionary VersionParameterBindings { get; private set; } + public Dictionary VersionParameterBindings { get; } // Constructors @@ -60,4 +57,4 @@ public PersistRequestBuilderContext(PersistRequestBuilderTask task, ModelMapping VersionParameterBindings = new Dictionary(); } } -} \ No newline at end of file +} diff --git a/Orm/Xtensive.Orm/Orm/Providers/TemporaryTables/TemporaryTableManager.cs b/Orm/Xtensive.Orm/Orm/Providers/TemporaryTables/TemporaryTableManager.cs index 628808a63..7d5199e8d 100644 --- a/Orm/Xtensive.Orm/Orm/Providers/TemporaryTables/TemporaryTableManager.cs +++ b/Orm/Xtensive.Orm/Orm/Providers/TemporaryTables/TemporaryTableManager.cs @@ -106,7 +106,7 @@ public TemporaryTableDescriptor BuildDescriptor(ModelMapping modelMapping, strin return result; - Lazy CreateLazyPersistRequest(int batchSize) + Lazy CreateLazyPersistRequest(ushort batchSize) { return new Lazy(() => { var bindings = new List(batchSize); @@ -214,7 +214,7 @@ private SqlSelect MakeUpSelectQuery(SqlTableRef temporaryTable, bool hasColumns) } private SqlInsert MakeUpInsertQuery(SqlTableRef temporaryTable, - TypeMapping[] typeMappings, List storeRequestBindings, bool hasColumns, int rows = 1) + TypeMapping[] typeMappings, List storeRequestBindings, bool hasColumns, ushort rows = 1) { var insertStatement = SqlDml.Insert(temporaryTable); if (!hasColumns) { @@ -222,8 +222,8 @@ private SqlInsert MakeUpInsertQuery(SqlTableRef temporaryTable, return insertStatement; } - for (var rowIndex = 0; rowIndex < rows; ++rowIndex) { - var fieldIndex = 0; + for (ushort rowIndex = 0; rowIndex < rows; ++rowIndex) { + ColNum fieldIndex = 0; var row = new Dictionary(temporaryTable.Columns.Count); foreach (var column in temporaryTable.Columns) { var typeMapping = typeMappings[fieldIndex]; @@ -249,4 +249,4 @@ protected override void Initialize() backEnd = new EmulatedTemporaryTableBackEnd(); } } -} \ No newline at end of file +} diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/Internals/Metadata/MetadataWriter.cs b/Orm/Xtensive.Orm/Orm/Upgrade/Internals/Metadata/MetadataWriter.cs index c47e407c5..016ed510c 100644 --- a/Orm/Xtensive.Orm/Orm/Upgrade/Internals/Metadata/MetadataWriter.cs +++ b/Orm/Xtensive.Orm/Orm/Upgrade/Internals/Metadata/MetadataWriter.cs @@ -111,7 +111,7 @@ private IPersistDescriptor CreateDescriptor(string tableName, var insert = SqlDml.Insert(tableRef); var bindings = new PersistParameterBinding[columns.Count]; var row = new Dictionary(columns.Count); - for (int i = 0; i < columns.Count; i++) { + for (ColNum i = 0; i < columns.Count; i++) { var binding = new PersistParameterBinding(mappings[i], i, transmissionTypes[i]); row.Add(tableRef.Columns[i], binding.ParameterReference); bindings[i] = binding;