This is an automated email from the ASF dual-hosted git repository.

ptupitsyn pushed a commit to branch ignite-27278
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/ignite-27278 by this push:
     new 4ed20e5c6d7 Finalize refactoring
4ed20e5c6d7 is described below

commit 4ed20e5c6d78c05f42ef805015799b04ebbd2e8f
Author: Pavel Tupitsyn <[email protected]>
AuthorDate: Tue Dec 23 14:05:23 2025 +0200

    Finalize refactoring
---
 .../dotnet/Apache.Ignite/Internal/Sql/ResultSet.cs |  4 +--
 .../Internal/Sql/ResultSetMetadata.cs              | 31 +++++++++++++++++-----
 .../dotnet/Apache.Ignite/Internal/Sql/Sql.cs       |  7 ++---
 .../Table/Serialization/MapperSerializerHandler.cs |  2 +-
 .../dotnet/Apache.Ignite/Table/Mapper/RowReader.cs |  6 ++---
 5 files changed, 32 insertions(+), 18 deletions(-)

diff --git a/modules/platforms/dotnet/Apache.Ignite/Internal/Sql/ResultSet.cs 
b/modules/platforms/dotnet/Apache.Ignite/Internal/Sql/ResultSet.cs
index 0036cdc87a9..db541ff3ec8 100644
--- a/modules/platforms/dotnet/Apache.Ignite/Internal/Sql/ResultSet.cs
+++ b/modules/platforms/dotnet/Apache.Ignite/Internal/Sql/ResultSet.cs
@@ -291,7 +291,7 @@ namespace Apache.Ignite.Internal.Sql
         {
             var size = reader.ReadInt32();
 
-            var columns = new List<IColumnMetadata>(size);
+            var columns = new ColumnMetadata[size];
 
             for (int i = 0; i < size; i++)
             {
@@ -313,7 +313,7 @@ namespace Apache.Ignite.Internal.Sql
                         TableName: reader.TryReadInt(out idx) ? 
columns[idx].Origin!.TableName : reader.ReadString())
                     : null;
 
-                columns.Add(new ColumnMetadata(name, type, precision, scale, 
nullable, origin));
+                columns[i] = new ColumnMetadata(name, type, precision, scale, 
nullable, origin);
             }
 
             return new ResultSetMetadata(columns);
diff --git 
a/modules/platforms/dotnet/Apache.Ignite/Internal/Sql/ResultSetMetadata.cs 
b/modules/platforms/dotnet/Apache.Ignite/Internal/Sql/ResultSetMetadata.cs
index 644a713c354..372562fb7e5 100644
--- a/modules/platforms/dotnet/Apache.Ignite/Internal/Sql/ResultSetMetadata.cs
+++ b/modules/platforms/dotnet/Apache.Ignite/Internal/Sql/ResultSetMetadata.cs
@@ -20,16 +20,33 @@ namespace Apache.Ignite.Internal.Sql
     using System.Collections.Generic;
     using Common;
     using Ignite.Sql;
+    using Ignite.Table.Mapper;
 
     /// <summary>
     /// Result set metadata.
     /// </summary>
-    /// <param name="Columns">Columns.</param>
-    internal sealed record ResultSetMetadata(IReadOnlyList<IColumnMetadata> 
Columns) : IResultSetMetadata
+    internal sealed record ResultSetMetadata : IResultSetMetadata, 
IMapperSchema
     {
+        private readonly ColumnMetadata[] _columns;
+
         /** Column index by name. Initialized on first access. */
         private Dictionary<string, int>? _indices;
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ResultSetMetadata"/> 
class.
+        /// </summary>
+        /// <param name="columns">Columns.</param>
+        internal ResultSetMetadata(ColumnMetadata[] columns)
+        {
+            _columns = columns;
+        }
+
+        /// <inheritdoc/>
+        public IReadOnlyList<IColumnMetadata> Columns => _columns;
+
+        /// <inheritdoc/>
+        IReadOnlyList<IMapperColumn> IMapperSchema.Columns => _columns;
+
         /// <inheritdoc/>
         public int IndexOf(string columnName)
         {
@@ -37,23 +54,23 @@ namespace Apache.Ignite.Internal.Sql
 
             if (indices == null)
             {
-                indices = new Dictionary<string, int>(Columns.Count);
+                indices = new Dictionary<string, int>(_columns.Length);
 
-                for (var i = 0; i < Columns.Count; i++)
+                for (var i = 0; i < _columns.Length; i++)
                 {
-                    indices[Columns[i].Name] = i;
+                    indices[_columns[i].Name] = i;
                 }
 
                 _indices = indices;
             }
 
-            return indices.TryGetValue(columnName, out var idx) ? idx : -1;
+            return indices.GetValueOrDefault(columnName, -1);
         }
 
         /// <inheritdoc/>
         public override string ToString() =>
             new IgniteToStringBuilder(GetType())
-                .AppendList(Columns)
+                .AppendList(_columns)
                 .Build();
     }
 }
diff --git a/modules/platforms/dotnet/Apache.Ignite/Internal/Sql/Sql.cs 
b/modules/platforms/dotnet/Apache.Ignite/Internal/Sql/Sql.cs
index 986d345e1e0..182d5dc528e 100644
--- a/modules/platforms/dotnet/Apache.Ignite/Internal/Sql/Sql.cs
+++ b/modules/platforms/dotnet/Apache.Ignite/Internal/Sql/Sql.cs
@@ -33,7 +33,6 @@ namespace Apache.Ignite.Internal.Sql
     using Proto;
     using Proto.BinaryTuple;
     using Proto.MsgPack;
-    using Table;
     using Table.Serialization;
     using Transactions;
 
@@ -89,10 +88,8 @@ namespace Apache.Ignite.Internal.Sql
             {
                 return (ResultSetMetadata meta, ref BinaryTupleReader reader) 
=>
                 {
-                    var mapperCols = 
meta.Columns.Cast<IMapperColumn>().ToList();
-
-                    var mapperReader = new RowReader(ref reader, mapperCols);
-                    return mapper.Read(ref mapperReader, new 
MapperSchema(mapperCols));
+                    var mapperReader = new RowReader(ref reader, meta);
+                    return mapper.Read(ref mapperReader, meta);
                 };
             };
 
diff --git 
a/modules/platforms/dotnet/Apache.Ignite/Internal/Table/Serialization/MapperSerializerHandler.cs
 
b/modules/platforms/dotnet/Apache.Ignite/Internal/Table/Serialization/MapperSerializerHandler.cs
index 46aa17f761d..8327f188bae 100644
--- 
a/modules/platforms/dotnet/Apache.Ignite/Internal/Table/Serialization/MapperSerializerHandler.cs
+++ 
b/modules/platforms/dotnet/Apache.Ignite/Internal/Table/Serialization/MapperSerializerHandler.cs
@@ -55,7 +55,7 @@ internal sealed class MapperSerializerHandler<T> : 
IRecordSerializerHandler<T>
         IMapperSchema mapperSchema = schema.GetMapperSchema(keyOnly);
 
         var binaryTupleReader = new BinaryTupleReader(reader.ReadBinary(), 
mapperSchema.Columns.Count);
-        var mapperReader = new RowReader(ref binaryTupleReader, 
mapperSchema.Columns);
+        var mapperReader = new RowReader(ref binaryTupleReader, mapperSchema);
 
         return _mapper.Read(ref mapperReader, mapperSchema);
     }
diff --git a/modules/platforms/dotnet/Apache.Ignite/Table/Mapper/RowReader.cs 
b/modules/platforms/dotnet/Apache.Ignite/Table/Mapper/RowReader.cs
index 26b2baf4ff3..c36fbb77325 100644
--- a/modules/platforms/dotnet/Apache.Ignite/Table/Mapper/RowReader.cs
+++ b/modules/platforms/dotnet/Apache.Ignite/Table/Mapper/RowReader.cs
@@ -39,11 +39,11 @@ public ref struct RowReader
     /// Initializes a new instance of the <see cref="RowReader"/> struct.
     /// </summary>
     /// <param name="reader">Reader.</param>
-    /// <param name="columns">Columns.</param>
-    internal RowReader(ref BinaryTupleReader reader, 
IReadOnlyList<IMapperColumn> columns)
+    /// <param name="schema">Schema.</param>
+    internal RowReader(ref BinaryTupleReader reader, IMapperSchema schema)
     {
         _reader = reader;
-        _columns = columns;
+        _columns = schema.Columns;
     }
 
     private readonly IMapperColumn Column

Reply via email to