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

commit 4bea46cc3b31f33c74cc1695996689a1da8552ef
Author: Pavel Tupitsyn <[email protected]>
AuthorDate: Tue Dec 23 12:47:53 2025 +0200

    wip SQL
---
 .../dotnet/Apache.Ignite/Internal/Sql/Sql.cs       | 24 ++++++++++++++++++++++
 modules/platforms/dotnet/Apache.Ignite/Sql/ISql.cs | 18 ++++++++++++++++
 2 files changed, 42 insertions(+)

diff --git a/modules/platforms/dotnet/Apache.Ignite/Internal/Sql/Sql.cs 
b/modules/platforms/dotnet/Apache.Ignite/Internal/Sql/Sql.cs
index 2c955ebb201..038b50f03f2 100644
--- a/modules/platforms/dotnet/Apache.Ignite/Internal/Sql/Sql.cs
+++ b/modules/platforms/dotnet/Apache.Ignite/Internal/Sql/Sql.cs
@@ -27,6 +27,7 @@ namespace Apache.Ignite.Internal.Sql
     using Common;
     using Ignite.Sql;
     using Ignite.Table;
+    using Ignite.Table.Mapper;
     using Ignite.Transactions;
     using Linq;
     using Proto;
@@ -74,6 +75,29 @@ namespace Apache.Ignite.Internal.Sql
                     cancellationToken)
                 .ConfigureAwait(false);
 
+        /// <inheritdoc/>
+        public async Task<IResultSet<T>> ExecuteAsync<T>(
+            ITransaction? transaction,
+            SqlStatement statement,
+            IMapper<T> mapper,
+            CancellationToken cancellationToken,
+            params object?[]? args)
+        {
+            // TODO: Cache or avoid allocation?
+            RowReaderFactory<T> rowReaderFactory = cols =>
+            {
+                return (IReadOnlyList<IColumnMetadata> list, ref 
BinaryTupleReader reader) => { return default(T)!; };
+            };
+
+            return await ExecuteAsyncInternal(
+                    transaction,
+                    statement,
+                    rowReaderFactory,
+                    args,
+                    cancellationToken)
+                .ConfigureAwait(false);
+        }
+
         /// <inheritdoc/>
         public async Task<IgniteDbDataReader> ExecuteReaderAsync(
             ITransaction? transaction, SqlStatement statement, 
CancellationToken cancellationToken, params object?[]? args)
diff --git a/modules/platforms/dotnet/Apache.Ignite/Sql/ISql.cs 
b/modules/platforms/dotnet/Apache.Ignite/Sql/ISql.cs
index 3122de15909..656a0f27250 100644
--- a/modules/platforms/dotnet/Apache.Ignite/Sql/ISql.cs
+++ b/modules/platforms/dotnet/Apache.Ignite/Sql/ISql.cs
@@ -24,6 +24,7 @@ namespace Apache.Ignite.Sql
     using System.Threading.Tasks;
     using Internal.Table.Serialization;
     using Table;
+    using Table.Mapper;
     using Transactions;
 
     /// <summary>
@@ -77,6 +78,23 @@ namespace Apache.Ignite.Sql
         Task<IResultSet<T>> ExecuteAsync<T>(
             ITransaction? transaction, SqlStatement statement, 
CancellationToken cancellationToken, params object?[]? args);
 
+        /// <summary>
+        /// Executes a single SQL statement and returns rows deserialized into 
the specified user type <typeparamref name="T"/>.
+        /// </summary>
+        /// <param name="transaction">Optional transaction.</param>
+        /// <param name="statement">Statement to execute.</param>
+        /// <param name="mapper">Mapper for the result type.</param>
+        /// <param name="cancellationToken">Cancellation token.</param>
+        /// <param name="args">Arguments for the statement.</param>
+        /// <typeparam name="T">Row type.</typeparam>
+        /// <returns>SQL result set.</returns>
+        Task<IResultSet<T>> ExecuteAsync<T>(
+            ITransaction? transaction,
+            SqlStatement statement,
+            IMapper<T> mapper,
+            CancellationToken cancellationToken,
+            params object?[]? args);
+
         /// <summary>
         /// Executes a single SQL statement and returns a <see 
cref="DbDataReader"/> to consume them in an efficient, forward-only way.
         /// </summary>

Reply via email to