Pavel Tupitsyn created IGNITE-24621: ---------------------------------------
Summary: .NET: LINQ: field names not distinct exception Key: IGNITE-24621 URL: https://issues.apache.org/jira/browse/IGNITE-24621 Project: Ignite Issue Type: Bug Components: platforms, thin client Affects Versions: 3.0 Reporter: Pavel Tupitsyn Assignee: Pavel Tupitsyn {code} await client.Sql.ExecuteAsync(null, "CREATE TABLE IF NOT EXISTS FOO (ID INT PRIMARY KEY, NAME VARCHAR)"); var table = await client.Tables.GetTableAsync("FOO"); var view = table!.GetRecordView<Rec>(); await view.UpsertAsync(null, new Rec(1, "X")); var query = view.AsQueryable() .Join( view.AsQueryable(), x => x.Id, y => y.Id, (x, y) => new { Id1 = x.Id, Id2 = y.Id, Name3 = x.Name + "_" + y.Name }) .OrderBy(x => x.Name3); Console.WriteLine(query); Console.WriteLine(query.First()); {code} Exception: {code} Apache.Ignite.Sql.SqlException : field names not distinct: RecordType(INTEGER ID, INTEGER ID, VARCHAR NAME3) ----> Apache.Ignite.IgniteException : org.apache.ignite.sql.SqlException: IGN-CMN-65535 TraceId:3ef89464-183f-4820-a5bb-63ef21c91983 field names not distinct: RecordType(INTEGER ID, INTEGER ID, VARCHAR NAME3) at org.apache.ignite.internal.lang.SqlExceptionMapperUtil.mapToPublicSqlException(SqlExceptionMapperUtil.java:73) at org.apache.ignite.internal.sql.engine.prepare.PrepareServiceImpl.lambda$prepareAsync$0(PrepareServiceImpl.java:260) at java.base/java.util.concurrent.CompletableFuture.uniExceptionally(CompletableFuture.java:990) at java.base/java.util.concurrent.CompletableFuture$UniExceptionally.tryFire(CompletableFuture.java:974) at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: org.apache.ignite.lang.IgniteException: IGN-CMN-65535 TraceId:3ef89464-183f-4820-a5bb-63ef21c91983 field names not distinct: RecordType(INTEGER ID, INTEGER ID, VARCHAR NAME3) at org.apache.ignite.internal.lang.IgniteExceptionMapperUtil.lambda$mapToPublicException$2(IgniteExceptionMapperUtil.java:88) at org.apache.ignite.internal.lang.IgniteExceptionMapperUtil.mapCheckingResultIsPublic(IgniteExceptionMapperUtil.java:141) at org.apache.ignite.internal.lang.IgniteExceptionMapperUtil.mapToPublicException(IgniteExceptionMapperUtil.java:110) at org.apache.ignite.internal.lang.IgniteExceptionMapperUtil.mapToPublicException(IgniteExceptionMapperUtil.java:88) at org.apache.ignite.internal.lang.SqlExceptionMapperUtil.mapToPublicSqlException(SqlExceptionMapperUtil.java:63) ... 8 more Caused by: java.lang.AssertionError: field names not distinct: RecordType(INTEGER ID, INTEGER ID, VARCHAR NAME3) at org.apache.calcite.util.Litmus.lambda$static$0(Litmus.java:31) at org.apache.calcite.rel.core.Project.isValid(Project.java:267) at org.apache.calcite.rel.core.Project.<init>(Project.java:106) at org.apache.calcite.rel.core.Project.<init>(Project.java:117) at org.apache.ignite.internal.sql.engine.rel.IgniteProject.<init>(IgniteProject.java:75) at org.apache.ignite.internal.sql.engine.prepare.PlannerHelper.optimize(PlannerHelper.java:200) at org.apache.ignite.internal.sql.engine.prepare.PrepareServiceImpl.doOptimize(PrepareServiceImpl.java:764) at org.apache.ignite.internal.sql.engine.prepare.PrepareServiceImpl.lambda$prepareQuery$5(PrepareServiceImpl.java:418) at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ... 3 more at Apache.Ignite.Internal.ClientSocket.DoOutInOpAsyncInternal(ClientOp clientOp, PooledArrayBuffer request, Boolean expectNotifications) in /home/pavel/w/ignite-3/modules/platforms/dotnet/Apache.Ignite/Internal/ClientSocket.cs:line 665 at Apache.Ignite.Internal.ClientFailoverSocket.DoOutInOpAndGetSocketAsync(ClientOp clientOp, Transaction tx, PooledArrayBuffer request, PreferredNode preferredNode, IRetryPolicy retryPolicyOverride, Boolean expectNotifications) in /home/pavel/w/ignite-3/modules/platforms/dotnet/Apache.Ignite/Internal/ClientFailoverSocket.cs:line 219 at Apache.Ignite.Internal.Sql.Sql.ExecuteAsyncInternal[T](ITransaction transaction, SqlStatement statement, RowReaderFactory`1 rowReaderFactory, ICollection`1 args) in /home/pavel/w/ignite-3/modules/platforms/dotnet/Apache.Ignite/Internal/Sql/Sql.cs:line 167 at Apache.Ignite.Internal.Linq.IgniteQueryExecutor.ExecuteResultSetInternalAsync[T](QueryModel queryModel) in /home/pavel/w/ignite-3/modules/platforms/dotnet/Apache.Ignite/Internal/Linq/IgniteQueryExecutor.cs:line 132 at Apache.Ignite.Internal.Linq.IgniteQueryExecutor.ExecuteSingleInternalAsync[T](QueryModel queryModel, ExecutionOptions options) in /home/pavel/w/ignite-3/modules/platforms/dotnet/Apache.Ignite/Internal/Linq/IgniteQueryExecutor.cs:line 152 at Apache.Ignite.Internal.Linq.IgniteQueryExecutor.ExecuteSingle[T](QueryModel queryModel, Boolean returnDefaultWhenEmpty) in /home/pavel/w/ignite-3/modules/platforms/dotnet/Apache.Ignite/Internal/Linq/IgniteQueryExecutor.cs:line 72 at Remotion.Linq.Clauses.StreamedData.StreamedSingleValueInfo.ExecuteSingleQueryModel[T](QueryModel queryModel, IQueryExecutor executor) at Remotion.Linq.Clauses.StreamedData.StreamedSingleValueInfo.ExecuteQueryModel(QueryModel queryModel, IQueryExecutor executor) at Remotion.Linq.QueryModel.Execute(IQueryExecutor executor) at Apache.Ignite.Internal.Linq.IgniteQueryProvider.Execute(Expression expression) in /home/pavel/w/ignite-3/modules/platforms/dotnet/Apache.Ignite/Internal/Linq/IgniteQueryProvider.cs:line 162 at Apache.Ignite.Internal.Linq.IgniteQueryProvider.Execute[TResult](Expression expression) in /home/pavel/w/ignite-3/modules/platforms/dotnet/Apache.Ignite/Internal/Linq/IgniteQueryProvider.cs:line 91 {code} Generated SQL: {code} IgniteQueryable`1[<>f__AnonymousType26`3[Int32, Int32, String]] { Query = select _T0.ID, _T1.ID, concat(concat(_T0.NAME, ?), _T1.NAME) as NAME3 from PUBLIC.FOO as _T0 inner join PUBLIC.FOO as _T1 on (_T1.ID = _T0.ID) order by concat(concat(_T0.NAME, ?), _T1.NAME) asc, Parameters = [ _, _ ] } {code} The query works if you remove *OrderBy*, produces correct SQL with aliases: {code} IgniteQueryable`1[<>f__AnonymousType26`3[Int32, Int32, String]] { Query = select _T0.ID, _T1.ID, concat(concat(_T0.NAME, ?), _T1.NAME) as NAME3 from PUBLIC.FOO as _T0 inner join PUBLIC.FOO as _T1 on (_T1.ID = _T0.ID), Parameters = [ _ ] } { Id1 = 1, Id2 = 1, Name3 = X_X } {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)