You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2023/07/20 08:43:38 UTC

[ignite-3] 09/12: Fix dependency resolving in SQL.

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

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

commit f8a7d2019144d7c764a832d73cb61c456fb88b7f
Author: amashenkov <an...@gmail.com>
AuthorDate: Wed Jul 19 18:27:43 2023 +0300

    Fix dependency resolving in SQL.
---
 .../sql/engine/exec/ExecutionServiceImpl.java         | 19 ++++++++++++++-----
 .../sql/engine/prepare/MappingQueryContext.java       | 10 +++++++++-
 .../internal/sql/engine/schema/IgniteSchemaTable.java |  2 +-
 .../sql/engine/exec/ExecutionServiceImplTest.java     |  3 ++-
 .../internal/sql/engine/framework/TestNode.java       |  4 ++--
 .../internal/sql/engine/planner/PlannerTest.java      |  2 +-
 6 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImpl.java
index 5f30d9c0dd..a9238a2725 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImpl.java
@@ -85,6 +85,7 @@ import org.apache.ignite.internal.sql.engine.util.BaseQueryContext;
 import org.apache.ignite.internal.sql.engine.util.Commons;
 import org.apache.ignite.internal.sql.engine.util.HashFunctionFactoryImpl;
 import org.apache.ignite.internal.sql.engine.util.TypeUtils;
+import org.apache.ignite.internal.table.distributed.TableManager;
 import org.apache.ignite.internal.tx.InternalTransaction;
 import org.apache.ignite.internal.util.ExceptionUtils;
 import org.apache.ignite.lang.ErrorGroups.Common;
@@ -130,6 +131,8 @@ public class ExecutionServiceImpl<RowT> implements ExecutionService, TopologyEve
 
     private final ExecutionDependencyResolver dependencyResolver;
 
+    private final TableManager tableManager;
+
     private final ImplementorFactory<RowT> implementorFactory;
 
     private final Map<UUID, DistributedQueryManager> queryManagerMap = new ConcurrentHashMap<>();
@@ -137,6 +140,7 @@ public class ExecutionServiceImpl<RowT> implements ExecutionService, TopologyEve
     /**
      * Creates the execution services.
      *
+     * @param <RowT> Type of the sql row.
      * @param topSrvc Topology service.
      * @param msgSrvc Message service.
      * @param sqlSchemaManager Schema manager.
@@ -145,7 +149,7 @@ public class ExecutionServiceImpl<RowT> implements ExecutionService, TopologyEve
      * @param handler Row handler.
      * @param mailboxRegistry Mailbox registry.
      * @param exchangeSrvc Exchange service.
-     * @param <RowT> Type of the sql row.
+     * @param tableManager Table Manager.
      * @return An execution service.
      */
     public static <RowT> ExecutionServiceImpl<RowT> create(
@@ -157,7 +161,8 @@ public class ExecutionServiceImpl<RowT> implements ExecutionService, TopologyEve
             RowHandler<RowT> handler,
             MailboxRegistry mailboxRegistry,
             ExchangeService exchangeSrvc,
-            ExecutionDependencyResolver dependencyResolver
+            ExecutionDependencyResolver dependencyResolver,
+            TableManager tableManager
     ) {
         return new ExecutionServiceImpl<>(
                 msgSrvc,
@@ -173,7 +178,8 @@ public class ExecutionServiceImpl<RowT> implements ExecutionService, TopologyEve
                         new HashFunctionFactoryImpl<>(sqlSchemaManager, handler),
                         mailboxRegistry,
                         exchangeSrvc,
-                        deps)
+                        deps),
+                tableManager
         );
     }
 
@@ -188,6 +194,7 @@ public class ExecutionServiceImpl<RowT> implements ExecutionService, TopologyEve
      * @param taskExecutor Task executor.
      * @param handler Row handler.
      * @param implementorFactory Relational node implementor factory.
+     * @param tableManager Table manager.
      */
     public ExecutionServiceImpl(
             MessageService messageService,
@@ -198,7 +205,8 @@ public class ExecutionServiceImpl<RowT> implements ExecutionService, TopologyEve
             QueryTaskExecutor taskExecutor,
             RowHandler<RowT> handler,
             ExecutionDependencyResolver dependencyResolver,
-            ImplementorFactory<RowT> implementorFactory
+            ImplementorFactory<RowT> implementorFactory,
+            TableManager tableManager
     ) {
         this.localNode = topSrvc.localMember();
         this.handler = handler;
@@ -210,6 +218,7 @@ public class ExecutionServiceImpl<RowT> implements ExecutionService, TopologyEve
         this.ddlCmdHnd = ddlCmdHnd;
         this.dependencyResolver = dependencyResolver;
         this.implementorFactory = implementorFactory;
+        this.tableManager = tableManager;
     }
 
     /** {@inheritDoc} */
@@ -643,7 +652,7 @@ public class ExecutionServiceImpl<RowT> implements ExecutionService, TopologyEve
         private AsyncCursor<List<Object>> execute(InternalTransaction tx, MultiStepPlan plan) {
             taskExecutor.execute(() -> {
                 try {
-                    plan.init(new MappingQueryContext(localNode.name(), mappingSrvc));
+                    plan.init(new MappingQueryContext(localNode.name(), mappingSrvc, tableManager));
 
                     List<Fragment> fragments = plan.fragments();
 
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/MappingQueryContext.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/MappingQueryContext.java
index d1ebb46fad..da7658b596 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/MappingQueryContext.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/MappingQueryContext.java
@@ -23,6 +23,7 @@ import org.apache.ignite.internal.sql.engine.metadata.IgniteMetadata;
 import org.apache.ignite.internal.sql.engine.metadata.MappingService;
 import org.apache.ignite.internal.sql.engine.metadata.RelMetadataQueryEx;
 import org.apache.ignite.internal.sql.engine.util.Commons;
+import org.apache.ignite.internal.table.distributed.TableManager;
 
 /**
  * Query mapping context.
@@ -30,6 +31,7 @@ import org.apache.ignite.internal.sql.engine.util.Commons;
 public class MappingQueryContext {
     private final String locNodeName;
     private final MappingService mappingService;
+    private final TableManager tableManager;
 
     private RelOptCluster cluster;
 
@@ -41,10 +43,12 @@ public class MappingQueryContext {
      */
     public MappingQueryContext(
             String locNodeName,
-            MappingService mappingService
+            MappingService mappingService,
+            TableManager tableManager
     ) {
         this.locNodeName = locNodeName;
         this.mappingService = mappingService;
+        this.tableManager = tableManager;
     }
 
     /** Creates a cluster. */
@@ -66,4 +70,8 @@ public class MappingQueryContext {
     public MappingService mappingService() {
         return mappingService;
     }
+
+    public TableManager tableManager() {
+        return tableManager;
+    }
 }
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/IgniteSchemaTable.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/IgniteSchemaTable.java
index 4181054e0d..e6d34557e7 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/IgniteSchemaTable.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/IgniteSchemaTable.java
@@ -193,7 +193,7 @@ public final class IgniteSchemaTable extends AbstractTable implements IgniteTabl
     /** {@inheritDoc} */
     @Override
     public ColocationGroup colocationGroup(MappingQueryContext ctx) {
-        throw new UnsupportedOperationException("Execution related methods are not available.");
+        return IgniteTableImpl.partitionedGroup(ctx.tableManager().getTable(id).internalTable()).get();
     }
 
     /** {@inheritDoc} */
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImplTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImplTest.java
index f96eed7c9c..53c80ce587 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImplTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImplTest.java
@@ -614,7 +614,8 @@ public class ExecutionServiceImplTest {
                 taskExecutor,
                 ArrayRowHandler.INSTANCE,
                 dependencyResolver,
-                (ctx, deps) -> node.implementor(ctx, mailboxRegistry, exchangeService, deps)
+                (ctx, deps) -> node.implementor(ctx, mailboxRegistry, exchangeService, deps),
+                null
         );
 
         taskExecutor.start();
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestNode.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestNode.java
index 934d30d4c7..632ee782a8 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestNode.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestNode.java
@@ -150,8 +150,8 @@ public class TestNode implements LifecycleAware {
 
                         return new ScanNode<>(ctx, dataProvider);
                     }
-                }
-        ));
+                },
+                null));
 
         parserService = new ParserServiceImpl(0, EmptyCacheFactory.INSTANCE);
     }
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PlannerTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PlannerTest.java
index 2f887ffb83..3499c20e0b 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PlannerTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PlannerTest.java
@@ -915,6 +915,6 @@ public class PlannerTest extends AbstractPlannerTest {
 
     private static MappingQueryContext mapContext(String locNodeName,
             MappingService mappingService) {
-        return new MappingQueryContext(locNodeName, mappingService);
+        return new MappingQueryContext(locNodeName, mappingService, null);
     }
 }