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);
}
}