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 2025/03/14 13:45:53 UTC
(ignite-3) 01/02: Avoid boxing/unboxing in sql module
This is an automated email from the ASF dual-hosted git repository.
amashenkov pushed a commit to branch ignite-24805
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit 5f720dbf3564775df6481bbb4238d3ce8c6990fb
Author: amashenkov <am...@apache.org>
AuthorDate: Thu Mar 13 20:52:24 2025 +0300
Avoid boxing/unboxing in sql module
---
.../sql/engine/exec/DestinationFactory.java | 8 ++---
.../exec/ExecutionDependencyResolverImpl.java | 8 ++---
.../sql/engine/exec/ExecutionServiceImpl.java | 4 +--
.../sql/engine/exec/ResolvedDependencies.java | 10 +++----
.../engine/exec/exp/agg/AccumulatorsFactory.java | 22 +++++++-------
.../sql/engine/exec/exp/agg/AggregateRow.java | 6 ++--
.../sql/engine/exec/mapping/ColocationGroup.java | 9 +++---
.../sql/engine/exec/mapping/FragmentMapper.java | 3 +-
.../engine/exec/mapping/MappingServiceImpl.java | 10 +++----
.../sql/engine/exec/rel/HashAggregateNode.java | 3 +-
.../sql/engine/exec/rel/SortAggregateNode.java | 16 +++++-----
.../sql/engine/message/MessageServiceImpl.java | 8 ++---
.../sql/engine/prepare/IgniteSqlValidator.java | 8 ++---
.../sql/engine/prepare/PrepareServiceImpl.java | 10 +++----
.../internal/sql/engine/rel/IgniteMergeJoin.java | 4 +--
.../engine/rel/agg/IgniteSortAggregateBase.java | 1 +
.../sql/engine/rel/agg/MapReduceAggregates.java | 35 +++++++++++-----------
.../sql/engine/rule/LogicalScanConverterRule.java | 10 +++----
.../sql/engine/trait/IgniteDistributions.java | 2 +-
.../internal/sql/engine/trait/Partitioned.java | 6 ++--
.../internal/sql/engine/trait/TraitUtils.java | 7 +++++
.../ignite/internal/sql/engine/util/Commons.java | 11 +++++--
.../sql/engine/exec/ExecutionServiceImplTest.java | 3 +-
.../exec/IdentityDistributionFunctionSelfTest.java | 3 +-
.../sql/engine/exec/PartitionProvidersTest.java | 7 +++--
.../exec/mapping/MappingServiceImplTest.java | 15 +++++-----
.../engine/exec/rel/ModifyNodeExecutionTest.java | 3 +-
.../pruning/PartitionPruningPredicateSelfTest.java | 5 ++--
28 files changed, 128 insertions(+), 109 deletions(-)
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/DestinationFactory.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/DestinationFactory.java
index 979a5932e6f..834ef891ba8 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/DestinationFactory.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/DestinationFactory.java
@@ -23,11 +23,8 @@ import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import java.util.Collections;
-import java.util.Map;
-import java.util.Map.Entry;
import java.util.Objects;
import java.util.function.Supplier;
-import java.util.stream.Collectors;
import org.apache.calcite.util.ImmutableIntList;
import org.apache.ignite.internal.sql.engine.exec.mapping.ColocationGroup;
import org.apache.ignite.internal.sql.engine.schema.PartitionCalculator;
@@ -40,6 +37,7 @@ import org.apache.ignite.internal.sql.engine.trait.Identity;
import org.apache.ignite.internal.sql.engine.trait.IgniteDistribution;
import org.apache.ignite.internal.sql.engine.trait.Partitioned;
import org.apache.ignite.internal.sql.engine.trait.RandomNode;
+import org.apache.ignite.internal.util.CollectionUtils;
/**
* Factory that resolves {@link IgniteDistribution} trait, which represents logical {@link DistributionFunction} function, into its
@@ -103,8 +101,8 @@ class DestinationFactory<RowT> {
var resolver = new TablePartitionExtractor<>(calculator.get(), keys.toIntArray(), tableDescriptor, rowHandler);
- Map<Integer, String> partToNode = group.assignments().int2ObjectEntrySet().stream()
- .collect(Collectors.toMap(Entry::getKey, e -> e.getValue().name()));
+ Int2ObjectMap<String> partToNode = group.assignments().int2ObjectEntrySet().stream()
+ .collect(CollectionUtils.toIntMapCollector(Int2ObjectMap.Entry::getIntKey, e -> e.getValue().name()));
return new Partitioned<>(partToNode, resolver);
}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionDependencyResolverImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionDependencyResolverImpl.java
index 3a1ccb159d5..c5344413d89 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionDependencyResolverImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExecutionDependencyResolverImpl.java
@@ -17,8 +17,8 @@
package org.apache.ignite.internal.sql.engine.exec;
-import java.util.HashMap;
-import java.util.Map;
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
+import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import org.apache.ignite.internal.sql.engine.prepare.IgniteRelShuttle;
import org.apache.ignite.internal.sql.engine.rel.IgniteIndexScan;
import org.apache.ignite.internal.sql.engine.rel.IgniteRel;
@@ -55,8 +55,8 @@ public class ExecutionDependencyResolverImpl implements ExecutionDependencyResol
*/
@Override
public ResolvedDependencies resolveDependencies(Iterable<IgniteRel> rels, int catalogVersion) {
- Map<Integer, ExecutableTable> tableMap = new HashMap<>();
- Map<Integer, ScannableDataSource> dataSources = new HashMap<>();
+ Int2ObjectMap<ExecutableTable> tableMap = new Int2ObjectOpenHashMap<>();
+ Int2ObjectMap<ScannableDataSource> dataSources = new Int2ObjectOpenHashMap<>();
IgniteRelShuttle shuttle = new IgniteRelShuttle() {
@Override
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 646eda809c0..c16f77e78f1 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
@@ -1152,8 +1152,8 @@ public class ExecutionServiceImpl<RowT> implements ExecutionService, TopologyEve
tx.assignCommitPartition(targetReplicationGroupId(tableId, zoneId, ThreadLocalRandom.current().nextInt(partsCnt)));
- for (Map.Entry<Integer, NodeWithConsistencyToken> partWithToken : assignments.int2ObjectEntrySet()) {
- ReplicationGroupId replicationGroupId = targetReplicationGroupId(tableId, zoneId, partWithToken.getKey());
+ for (Int2ObjectMap.Entry<NodeWithConsistencyToken> partWithToken : assignments.int2ObjectEntrySet()) {
+ ReplicationGroupId replicationGroupId = targetReplicationGroupId(tableId, zoneId, partWithToken.getIntKey());
NodeWithConsistencyToken assignment = partWithToken.getValue();
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ResolvedDependencies.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ResolvedDependencies.java
index 871ff9aeb6f..0ba8de48327 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ResolvedDependencies.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ResolvedDependencies.java
@@ -17,7 +17,7 @@
package org.apache.ignite.internal.sql.engine.exec;
-import java.util.Map;
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import java.util.function.Supplier;
import org.apache.ignite.internal.sql.engine.schema.PartitionCalculator;
import org.apache.ignite.internal.sql.engine.schema.TableDescriptor;
@@ -27,14 +27,14 @@ import org.apache.ignite.internal.sql.engine.schema.TableDescriptor;
*/
public class ResolvedDependencies {
- private final Map<Integer, ExecutableTable> tableMap;
+ private final Int2ObjectMap<ExecutableTable> tableMap;
- private final Map<Integer, ScannableDataSource> dataSourceMap;
+ private final Int2ObjectMap<ScannableDataSource> dataSourceMap;
/** Constructor. */
public ResolvedDependencies(
- Map<Integer, ExecutableTable> tableMap,
- Map<Integer, ScannableDataSource> dataSourceMap
+ Int2ObjectMap<ExecutableTable> tableMap,
+ Int2ObjectMap<ScannableDataSource> dataSourceMap
) {
this.tableMap = tableMap;
this.dataSourceMap = dataSourceMap;
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/AccumulatorsFactory.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/AccumulatorsFactory.java
index 5f504eac53f..ebc560c9f7a 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/AccumulatorsFactory.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/AccumulatorsFactory.java
@@ -23,6 +23,8 @@ import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
+import it.unimi.dsi.fastutil.ints.IntArrayList;
+import it.unimi.dsi.fastutil.ints.IntList;
import java.lang.reflect.Modifier;
import java.util.List;
import java.util.Map;
@@ -53,6 +55,7 @@ import org.apache.ignite.internal.sql.engine.exec.exp.SqlScalar;
import org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
import org.apache.ignite.internal.sql.engine.util.Commons;
import org.apache.ignite.internal.sql.engine.util.Primitives;
+import org.apache.ignite.internal.util.IgniteUtils;
import org.jetbrains.annotations.Nullable;
/**
@@ -255,13 +258,15 @@ public class AccumulatorsFactory<RowT> {
}
private static final class AccumulatorWrapperImpl<RowT> implements AccumulatorWrapper<RowT> {
+ static final IntList SINGLE_ARG_LIST = IntList.of(0);
+
private final Accumulator accumulator;
private final Function<Object[], Object[]> inAdapter;
private final Function<Object, Object> outAdapter;
- private final List<Integer> argList;
+ private final IntList argList;
private final boolean literalAgg;
@@ -289,10 +294,11 @@ public class AccumulatorsFactory<RowT> {
this.distinct = call.isDistinct();
literalAgg = call.getAggregation() == LITERAL_AGG;
- argList = call.getArgList();
ignoreNulls = call.ignoreNulls();
filterArg = call.hasFilter() ? call.filterArg : -1;
+ argList = distinct && call.getArgList().isEmpty() ? SINGLE_ARG_LIST : new IntArrayList(call.getArgList());
+
if (literalAgg) {
assert call.getArgList().isEmpty() : "LiteralAgg should have no operands: " + call;
@@ -323,20 +329,16 @@ public class AccumulatorsFactory<RowT> {
return new Object[]{preOperand};
}
- int params = argList.size();
-
- List<Integer> argList0 = argList;
-
- if ((distinct && argList.isEmpty())) {
+ if (IgniteUtils.assertionsEnabled() && argList == SINGLE_ARG_LIST) {
int cnt = handler.columnCount(row);
assert cnt <= 1;
- argList0 = List.of(0);
- params = 1;
}
+ int params = argList.size();
+
Object[] args = new Object[params];
for (int i = 0; i < params; i++) {
- int argPos = argList0.get(i);
+ int argPos = argList.getInt(i);
args[i] = handler.get(argPos, row);
if (ignoreNulls && args[i] == null) {
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/AggregateRow.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/AggregateRow.java
index 9437ec87d8f..bf7be3cb594 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/AggregateRow.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/AggregateRow.java
@@ -17,7 +17,7 @@
package org.apache.ignite.internal.sql.engine.exec.exp.agg;
-import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import java.util.List;
import java.util.Set;
import org.apache.calcite.util.ImmutableBitSet;
@@ -32,12 +32,12 @@ public class AggregateRow<RowT> {
private final AccumulatorsState state;
- private final Int2ObjectArrayMap<Set<Object>> distinctSets;
+ private final Int2ObjectMap<Set<Object>> distinctSets;
/** Constructor. */
public AggregateRow(
AccumulatorsState state,
- Int2ObjectArrayMap<Set<Object>> distinctSets
+ Int2ObjectMap<Set<Object>> distinctSets
) {
this.state = state;
this.distinctSets = distinctSets;
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/mapping/ColocationGroup.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/mapping/ColocationGroup.java
index 67c789b038d..5fc8a3deeac 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/mapping/ColocationGroup.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/mapping/ColocationGroup.java
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.sql.engine.exec.mapping;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
+import it.unimi.dsi.fastutil.longs.LongList;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
@@ -37,7 +38,7 @@ import org.apache.ignite.internal.sql.engine.exec.PartitionWithConsistencyToken;
public class ColocationGroup implements Serializable {
private static final long serialVersionUID = 1370403193139083025L;
- private final List<Long> sourceIds;
+ private final LongList sourceIds;
private final List<String> nodeNames;
@@ -46,7 +47,7 @@ public class ColocationGroup implements Serializable {
private final Map<String, List<PartitionWithConsistencyToken>> partitionsPerNode;
/** Constructor. */
- public ColocationGroup(List<Long> sourceIds, List<String> nodeNames, Int2ObjectMap<NodeWithConsistencyToken> assignments) {
+ public ColocationGroup(LongList sourceIds, List<String> nodeNames, Int2ObjectMap<NodeWithConsistencyToken> assignments) {
this.sourceIds = Objects.requireNonNull(sourceIds, "sourceIds");
this.nodeNames = Objects.requireNonNull(nodeNames, "nodeNames");
this.assignments = Objects.requireNonNull(assignments, "assignments");
@@ -55,7 +56,7 @@ public class ColocationGroup implements Serializable {
/** Constructor for colocation group with applied partition pruning. */
public ColocationGroup(
- List<Long> sourceIds,
+ LongList sourceIds,
List<String> nodeNames,
Int2ObjectMap<NodeWithConsistencyToken> assignments,
Map<String, List<PartitionWithConsistencyToken>> partitionsPerNode
@@ -69,7 +70,7 @@ public class ColocationGroup implements Serializable {
/**
* Get lists of colocation group sources.
*/
- public List<Long> sourceIds() {
+ public LongList sourceIds() {
return sourceIds;
}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/mapping/FragmentMapper.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/mapping/FragmentMapper.java
index 8fb7c3e6386..a83dfe0bf45 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/mapping/FragmentMapper.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/mapping/FragmentMapper.java
@@ -813,9 +813,10 @@ class FragmentMapper {
List<String> nodes = context.targetFactory().resolveNodes(target);
Int2ObjectMap<NodeWithConsistencyToken> assignments = context.targetFactory().resolveAssignments(target);
+
return List.of(
new ColocationGroup(
- List.copyOf(sourceIds),
+ new LongArrayList(sourceIds),
nodes,
assignments
)
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/mapping/MappingServiceImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/mapping/MappingServiceImpl.java
index bacb28deb16..0837fb9990c 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/mapping/MappingServiceImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/mapping/MappingServiceImpl.java
@@ -36,8 +36,8 @@ import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
+import java.util.function.LongSupplier;
import java.util.function.Predicate;
-import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.calcite.plan.RelOptCluster;
@@ -79,7 +79,7 @@ public class MappingServiceImpl implements MappingService {
private final Cache<PlanId, FragmentsTemplate> templatesCache;
private final Cache<MappingsCacheKey, MappingsCacheValue> mappingsCache;
private final PartitionPruner partitionPruner;
- private final Supplier<Long> logicalTopologyVerSupplier;
+ private final LongSupplier logicalTopologyVerSupplier;
private final ExecutionDistributionProvider distributionProvider;
private final boolean enabledColocation = IgniteSystemProperties.enabledColocation();
@@ -101,7 +101,7 @@ public class MappingServiceImpl implements MappingService {
CacheFactory cacheFactory,
int cacheSize,
PartitionPruner partitionPruner,
- Supplier<Long> logicalTopologyVerSupplier,
+ LongSupplier logicalTopologyVerSupplier,
ExecutionDistributionProvider distributionProvider
) {
this.localNodeName = localNodeName;
@@ -158,14 +158,14 @@ public class MappingServiceImpl implements MappingService {
}
}
- long topVer = topologyAware ? logicalTopologyVerSupplier.get() : Long.MAX_VALUE;
+ long topVer = topologyAware ? logicalTopologyVerSupplier.getAsLong() : Long.MAX_VALUE;
assert nodeExclusionFilter == null;
return new MappingsCacheValue(topVer, tableIds, mapFragments(template, mapOnBackups, null));
}
- long topologyVer = logicalTopologyVerSupplier.get();
+ long topologyVer = logicalTopologyVerSupplier.getAsLong();
if (val.topologyVersion < topologyVer) {
return new MappingsCacheValue(topologyVer, val.tableIds, mapFragments(template, mapOnBackups, null));
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/HashAggregateNode.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/HashAggregateNode.java
index fe8df767d40..0783403aeb7 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/HashAggregateNode.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/HashAggregateNode.java
@@ -21,6 +21,7 @@ import static java.util.stream.Collectors.toCollection;
import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.HashMap;
@@ -300,7 +301,7 @@ public class HashAggregateNode<RowT> extends AbstractNode<RowT> implements Singl
}
private AggregateRow<RowT> create() {
- Int2ObjectArrayMap<Set<Object>> distinctSets = new Int2ObjectArrayMap<>();
+ Int2ObjectMap<Set<Object>> distinctSets = new Int2ObjectArrayMap<>();
for (int i = 0; i < accs.size(); i++) {
AccumulatorWrapper<RowT> acc = accs.get(i);
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/SortAggregateNode.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/SortAggregateNode.java
index 3e7b2cb2522..587df79d90a 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/SortAggregateNode.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/SortAggregateNode.java
@@ -21,6 +21,8 @@ import static org.apache.ignite.internal.util.ArrayUtils.OBJECT_EMPTY_ARRAY;
import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
+import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import java.util.ArrayDeque;
import java.util.Comparator;
import java.util.Deque;
@@ -204,16 +206,12 @@ public class SortAggregateNode<RowT> extends AbstractNode<RowT> implements Singl
}
private Group newGroup(RowT r) {
- final Object[] grpKeys = new Object[grpSet.cardinality()];
- List<Integer> fldIdxs = grpSet.asList();
+ RowHandler<RowT> rowHandler =rowFactory.handler();
+ ObjectArrayList<Object> grpKeys = new ObjectArrayList<>(grpSet.cardinality());
- final RowHandler<RowT> rowHandler = rowFactory.handler();
+ grpSet.forEachInt(fldIdx -> grpKeys.add(rowHandler.get(fldIdx, r)));
- for (int i = 0; i < grpKeys.length; ++i) {
- grpKeys[i] = rowHandler.get(fldIdxs.get(i), r);
- }
-
- Group grp = new Group(grpKeys);
+ Group grp = new Group(grpKeys.elements());
grp.add(r);
@@ -254,7 +252,7 @@ public class SortAggregateNode<RowT> extends AbstractNode<RowT> implements Singl
AccumulatorsState state = new AccumulatorsState(accs.size());
- Int2ObjectArrayMap<Set<Object>> distinctSets = new Int2ObjectArrayMap<>();
+ Int2ObjectMap<Set<Object>> distinctSets = new Int2ObjectArrayMap<>();
for (int i = 0; i < accs.size(); i++) {
AccumulatorWrapper<RowT> acc = accs.get(i);
if (acc.isDistinct()) {
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/message/MessageServiceImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/message/MessageServiceImpl.java
index a751c290719..7f55e59b1f9 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/message/MessageServiceImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/message/MessageServiceImpl.java
@@ -21,8 +21,8 @@ import static org.apache.ignite.internal.sql.engine.message.SqlQueryMessageGroup
import static org.apache.ignite.internal.util.CompletableFutures.nullCompletedFuture;
import static org.apache.ignite.internal.util.ExceptionUtils.sneakyThrow;
-import java.util.HashMap;
-import java.util.Map;
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
+import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import org.apache.ignite.internal.hlc.ClockService;
@@ -51,7 +51,7 @@ public class MessageServiceImpl implements MessageService {
private final ClockService clockService;
- private volatile Map<Short, MessageListener> lsnrs;
+ private volatile Int2ObjectMap<MessageListener> lsnrs;
/**
* Constructor.
@@ -112,7 +112,7 @@ public class MessageServiceImpl implements MessageService {
@Override
public void register(MessageListener lsnr, short type) {
if (lsnrs == null) {
- lsnrs = new HashMap<>();
+ lsnrs = new Int2ObjectOpenHashMap<>();
}
MessageListener old = lsnrs.put(type, lsnr);
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgniteSqlValidator.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgniteSqlValidator.java
index 0ab21dfced9..0861083e2c5 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgniteSqlValidator.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgniteSqlValidator.java
@@ -29,6 +29,7 @@ import static org.apache.ignite.lang.ErrorGroups.Sql.STMT_VALIDATION_ERR;
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.IntArraySet;
+import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import it.unimi.dsi.fastutil.ints.IntSet;
import java.math.BigDecimal;
import java.util.AbstractList;
@@ -36,7 +37,6 @@ import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumSet;
-import java.util.HashSet;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
@@ -169,9 +169,9 @@ public class IgniteSqlValidator extends SqlValidatorImpl {
super(opTab, catalogReader, typeFactory, config);
this.dynamicParameters = new Int2ObjectArrayMap<>(parameters.size());
- for (Map.Entry<Integer, Object> param : parameters.int2ObjectEntrySet()) {
+ for (Int2ObjectMap.Entry<Object> param : parameters.int2ObjectEntrySet()) {
Object value = param.getValue();
- dynamicParameters.put(param.getKey().intValue(), new DynamicParamState(value));
+ dynamicParameters.put(param.getIntKey(), new DynamicParamState(value));
}
}
@@ -588,7 +588,7 @@ public class IgniteSqlValidator extends SqlValidatorImpl {
targetField.getType());
}
}
- final Set<Integer> assignedFields = new HashSet<>();
+ final IntSet assignedFields = new IntOpenHashSet(targetColumnList.size());
final RelOptTable relOptTable = table instanceof RelOptTable
? ((RelOptTable) table) : null;
for (SqlNode node : targetColumnList) {
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImpl.java
index acc0ee60b42..06f31f130e4 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImpl.java
@@ -25,10 +25,10 @@ import static org.apache.ignite.internal.sql.engine.util.Commons.fastQueryOptimi
import static org.apache.ignite.internal.thread.ThreadOperation.NOTHING_ALLOWED;
import static org.apache.ignite.lang.ErrorGroups.Sql.EXECUTION_CANCELLED_ERR;
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import java.util.Map;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
@@ -657,10 +657,10 @@ public class PrepareServiceImpl implements PrepareService {
@Nullable
private static CacheKey tryCreateCacheKeyFromParameterValues(ParsedResult parsedResult, PlanningContext ctx) {
- Map<Integer, Object> parameters = ctx.parameters();
+ Int2ObjectMap<Object> parameters = ctx.parameters();
int maxParamNum = 0;
- for (Integer key : parameters.keySet()) {
+ for (int key : parameters.keySet()) {
maxParamNum = Math.max(maxParamNum, key);
}
@@ -684,7 +684,7 @@ public class PrepareServiceImpl implements PrepareService {
} else {
ColumnType[] result = new ColumnType[parameters.size()];
- for (Map.Entry<Integer, Object> entry : parameters.entrySet()) {
+ for (Int2ObjectMap.Entry<Object> entry : parameters.int2ObjectEntrySet()) {
Object value = entry.getValue();
ColumnType columnType;
if (value != null) {
@@ -692,7 +692,7 @@ public class PrepareServiceImpl implements PrepareService {
} else {
columnType = ColumnType.NULL;
}
- result[entry.getKey()] = columnType;
+ result[entry.getIntKey()] = columnType;
}
paramTypes = result;
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/IgniteMergeJoin.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/IgniteMergeJoin.java
index 264548957d4..1b8b4079d00 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/IgniteMergeJoin.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/IgniteMergeJoin.java
@@ -346,9 +346,7 @@ public class IgniteMergeJoin extends AbstractIgniteJoin {
ImmutableBitSet colKeysBitset = ImmutableBitSet.of(collation.getKeys());
ImmutableBitSet exceptBitset = keysBitset.except(colKeysBitset);
- for (Integer i : exceptBitset) {
- fieldsForNewCollation.add(new RelFieldCollation(i));
- }
+ exceptBitset.forEachInt(i -> fieldsForNewCollation.add(new RelFieldCollation(i)));
return RelCollations.of(fieldsForNewCollation);
}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/agg/IgniteSortAggregateBase.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/agg/IgniteSortAggregateBase.java
index 5b50a9bbd5f..c933a350271 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/agg/IgniteSortAggregateBase.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/agg/IgniteSortAggregateBase.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.sql.engine.rel.agg;
import static org.apache.ignite.internal.sql.engine.util.Commons.maxPrefix;
import it.unimi.dsi.fastutil.ints.IntList;
+import it.unimi.dsi.fastutil.ints.IntLists;
import java.util.ArrayList;
import java.util.List;
import java.util.function.IntPredicate;
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/agg/MapReduceAggregates.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/agg/MapReduceAggregates.java
index 727bce836a4..2ae38dfb6d4 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/agg/MapReduceAggregates.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/agg/MapReduceAggregates.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.sql.engine.rel.agg;
import static org.apache.ignite.internal.lang.IgniteStringFormatter.format;
import com.google.common.collect.ImmutableList;
+import it.unimi.dsi.fastutil.ints.IntList;
import java.math.BigDecimal;
import java.util.AbstractMap.SimpleEntry;
import java.util.ArrayList;
@@ -78,7 +79,7 @@ public class MapReduceAggregates {
* Should be used by aggregates that use the same operator for both MAP and REDUCE phases.
*/
private static final MakeReduceExpr USE_INPUT_FIELD = (rexBuilder, input, args, typeFactory) ->
- rexBuilder.makeInputRef(input, args.get(0));
+ rexBuilder.makeInputRef(input, args.getInt(0));
private MapReduceAggregates() {
@@ -210,7 +211,7 @@ public class MapReduceAggregates {
int argIdx = groupByColumns + argOffset;
for (int j = 0; j < mapReduceAgg.reduceCalls.size(); j++) {
- RexNode projExpr = mapReduceAgg.makeReduceInputExpr.makeExpr(rexBuilder, map, List.of(argIdx), typeFactory);
+ RexNode projExpr = mapReduceAgg.makeReduceInputExpr.makeExpr(rexBuilder, map, IntList.of(argIdx), typeFactory);
reduceInputExprs.set(argIdx, projExpr);
if (mapReduceAgg.makeReduceInputExpr != USE_INPUT_FIELD) {
@@ -246,7 +247,7 @@ public class MapReduceAggregates {
// Build a list of projections (arg-list, expr) that accept reduce phase and combine/collect/cast results.
List<AggregateCall> reduceAggCalls = new ArrayList<>();
- List<Map.Entry<List<Integer>, MakeReduceExpr>> projection = new ArrayList<>(mapReduceAggs.size());
+ List<Map.Entry<IntList, MakeReduceExpr>> projection = new ArrayList<>(mapReduceAggs.size());
for (MapReduceAgg mapReduceAgg : mapReduceAggs) {
// Update row type returned by REDUCE node.
@@ -258,7 +259,7 @@ public class MapReduceAggregates {
}
// Update projection list
- List<Integer> reduceArgList = mapReduceAgg.argList;
+ IntList reduceArgList = mapReduceAgg.argList;
MakeReduceExpr projectionExpr = mapReduceAgg.makeReduceOutputExpr;
projection.add(new SimpleEntry<>(reduceArgList, projectionExpr));
@@ -320,7 +321,7 @@ public class MapReduceAggregates {
projectionList.add(ref);
}
- for (Map.Entry<List<Integer>, MakeReduceExpr> expr : projection) {
+ for (Map.Entry<IntList, MakeReduceExpr> expr : projection) {
RexNode resultExpr = expr.getValue().makeExpr(rexBuilder, reduce, expr.getKey(), typeFactory);
projectionList.add(resultExpr);
}
@@ -393,7 +394,7 @@ public class MapReduceAggregates {
public static class MapReduceAgg {
/** Argument list on reduce phase. */
- final List<Integer> argList;
+ final IntList argList;
/** MAP phase aggregate, an initial aggregation function was transformed into. */
final List<AggregateCall> mapCalls;
@@ -408,7 +409,7 @@ public class MapReduceAggregates {
final MakeReduceExpr makeReduceOutputExpr;
MapReduceAgg(
- List<Integer> argList,
+ IntList argList,
AggregateCall mapCalls,
AggregateCall reduceCalls,
MakeReduceExpr makeReduceOutputExpr
@@ -417,7 +418,7 @@ public class MapReduceAggregates {
}
MapReduceAgg(
- List<Integer> argList,
+ IntList argList,
List<AggregateCall> mapCalls,
MakeReduceExpr makeReduceInputExpr,
List<AggregateCall> reduceCalls,
@@ -438,7 +439,7 @@ public class MapReduceAggregates {
}
private static MapReduceAgg createCountAgg(AggregateCall call, int reduceArgumentOffset) {
- List<Integer> argList = List.of(reduceArgumentOffset);
+ IntList argList = IntList.of(reduceArgumentOffset);
AggregateCall sum0 = AggregateCall.create(
SqlStdOperatorTable.SUM0,
@@ -457,7 +458,7 @@ public class MapReduceAggregates {
// COUNT(x) aggregate have type BIGINT, but the type of SUM(COUNT(x)) is DECIMAL,
// so we should convert it to back to BIGINT.
MakeReduceExpr exprBuilder = (rexBuilder, input, args, typeFactory) -> {
- RexInputRef ref = rexBuilder.makeInputRef(input, args.get(0));
+ RexInputRef ref = rexBuilder.makeInputRef(input, args.getInt(0));
return rexBuilder.makeCast(typeFactory.createSqlType(SqlTypeName.BIGINT), ref, true, false);
};
@@ -465,7 +466,7 @@ public class MapReduceAggregates {
}
private static MapReduceAgg createSimpleAgg(AggregateCall call, int reduceArgumentOffset) {
- List<Integer> argList = List.of(reduceArgumentOffset);
+ IntList argList = IntList.of(reduceArgumentOffset);
AggregateCall reduceCall = AggregateCall.create(
call.getAggregation(),
@@ -507,7 +508,7 @@ public class MapReduceAggregates {
*
* @return Expression.
*/
- RexNode makeExpr(RexBuilder rexBuilder, RelNode input, List<Integer> args, IgniteTypeFactory typeFactory);
+ RexNode makeExpr(RexBuilder rexBuilder, RelNode input, IntList args, IgniteTypeFactory typeFactory);
}
private static MapReduceAgg createAvgAgg(
@@ -566,7 +567,7 @@ public class MapReduceAggregates {
"AVG_COUNT" + reduceArgumentOffset);
// REDUCE : SUM(s) as reduce_sum, SUM0(c) as reduce_count
- List<Integer> reduceSumArgs = List.of(reduceArgumentOffset);
+ IntList reduceSumArgs = IntList.of(reduceArgumentOffset);
// SUM0(s)
RelDataType reduceSumType = typeSystem.deriveSumType(tf, mapSumType);
@@ -591,7 +592,7 @@ public class MapReduceAggregates {
// SUM0(c)
RelDataType reduceSumCountType = typeSystem.deriveSumType(tf, mapCount0.type);
- List<Integer> reduceSumCountArgs = List.of(reduceArgumentOffset + 1);
+ IntList reduceSumCountArgs = IntList.of(reduceArgumentOffset + 1);
AggregateCall reduceSumCount = AggregateCall.create(
SqlStdOperatorTable.SUM0,
@@ -610,9 +611,9 @@ public class MapReduceAggregates {
RelDataType finalReduceSumType = reduceSumType;
MakeReduceExpr reduceInputExpr = (rexBuilder, input, args, typeFactory) -> {
- RexInputRef argExpr = rexBuilder.makeInputRef(input, args.get(0));
+ RexInputRef argExpr = rexBuilder.makeInputRef(input, args.getInt(0));
- if (args.get(0) == reduceArgumentOffset) {
+ if (args.getInt(0) == reduceArgumentOffset) {
// Accumulator functions handle NULL, so it is safe to ignore it.
if (!SqlTypeUtil.equalSansNullability(finalReduceSumType, argExpr.getType())) {
return rexBuilder.makeCast(finalReduceSumType, argExpr, true, false);
@@ -661,7 +662,7 @@ public class MapReduceAggregates {
}
};
- List<Integer> argList = List.of(reduceArgumentOffset, reduceArgumentOffset + 1);
+ IntList argList = IntList.of(reduceArgumentOffset, reduceArgumentOffset + 1);
return new MapReduceAgg(
argList,
List.of(mapSum0, mapCount0),
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/LogicalScanConverterRule.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/LogicalScanConverterRule.java
index e8acec834f8..af5fe05b537 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/LogicalScanConverterRule.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/LogicalScanConverterRule.java
@@ -17,9 +17,8 @@
package org.apache.ignite.internal.sql.engine.rule;
-import java.util.HashMap;
+import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
import org.apache.calcite.plan.RelOptCluster;
import org.apache.calcite.plan.RelOptPlanner;
import org.apache.calcite.plan.RelTraitSet;
@@ -31,6 +30,7 @@ import org.apache.calcite.rel.metadata.RelMetadataQuery;
import org.apache.calcite.rex.RexLocalRef;
import org.apache.calcite.rex.RexNode;
import org.apache.calcite.util.ImmutableBitSet;
+import org.apache.calcite.util.mapping.IntPair;
import org.apache.calcite.util.mapping.Mapping;
import org.apache.calcite.util.mapping.Mappings;
import org.apache.ignite.internal.sql.engine.rel.IgniteConvention;
@@ -184,8 +184,8 @@ public abstract class LogicalScanConverterRule<T extends ProjectableFilterableTa
? Mappings.invert(Mappings.source(requiredColumns.asList(), tableRowSize))
: Mappings.createIdentity(tableRowSize);
- Map<Integer, Integer> mappingMap = new HashMap<>();
+ List<IntPair> pairs = new ArrayList<>(projects.size());
for (int i = 0; i < projects.size(); i++) {
RexNode rex = projects.get(i);
if (!(rex instanceof RexLocalRef)) {
@@ -194,11 +194,11 @@ public abstract class LogicalScanConverterRule<T extends ProjectableFilterableTa
RexLocalRef ref = (RexLocalRef) rex;
- mappingMap.put(trimmingMapping.getSource(ref.getIndex()), i);
+ pairs.add(IntPair.of(trimmingMapping.getSource(ref.getIndex()), i));
}
return Mappings.target(
- mappingMap,
+ pairs,
tableRowSize,
projects.size()
);
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/trait/IgniteDistributions.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/trait/IgniteDistributions.java
index 7ae9594e939..ff37c2ceae3 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/trait/IgniteDistributions.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/trait/IgniteDistributions.java
@@ -120,7 +120,7 @@ public class IgniteDistributions {
* @return Identity distribution.
*/
public static IgniteDistribution identity(int key) {
- return canonize(new DistributionTrait(List.of(key), DistributionFunction.identity()));
+ return canonize(new DistributionTrait(ImmutableIntList.of(key), DistributionFunction.identity()));
}
/**
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/trait/Partitioned.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/trait/Partitioned.java
index ab6448ca484..5bdf94b1c8f 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/trait/Partitioned.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/trait/Partitioned.java
@@ -17,8 +17,8 @@
package org.apache.ignite.internal.sql.engine.trait;
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import java.util.List;
-import java.util.Map;
import java.util.stream.Collectors;
import org.apache.ignite.internal.sql.engine.exec.RowPartitionExtractor;
@@ -27,7 +27,7 @@ import org.apache.ignite.internal.sql.engine.exec.RowPartitionExtractor;
* TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
*/
public final class Partitioned<RowT> implements Destination<RowT> {
- private final Map<Integer, String> assignments;
+ private final Int2ObjectMap<String> assignments;
private final RowPartitionExtractor<RowT> calc;
@@ -35,7 +35,7 @@ public final class Partitioned<RowT> implements Destination<RowT> {
* Constructor.
* TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
*/
- public Partitioned(Map<Integer, String> assignments, RowPartitionExtractor<RowT> calc) {
+ public Partitioned(Int2ObjectMap<String> assignments, RowPartitionExtractor<RowT> calc) {
this.calc = calc;
this.assignments = assignments;
}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/trait/TraitUtils.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/trait/TraitUtils.java
index 644b9c4251f..38ac3cb166e 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/trait/TraitUtils.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/trait/TraitUtils.java
@@ -29,6 +29,7 @@ import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
import com.google.common.collect.ImmutableList;
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
+import it.unimi.dsi.fastutil.ints.IntList;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Collection;
@@ -408,6 +409,12 @@ public class TraitUtils {
* @param keys The keys to create collation from.
* @return New collation.
*/
+ public static RelCollation createCollation(IntList keys) {
+ return RelCollations.of(
+ keys.intStream().mapToObj(TraitUtils::createFieldCollation).collect(Collectors.toList())
+ );
+ }
+
public static RelCollation createCollation(Collection<Integer> keys) {
return RelCollations.of(
keys.stream().map(TraitUtils::createFieldCollation).collect(Collectors.toList())
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/Commons.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/Commons.java
index ae0802b7160..abe90afaff8 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/Commons.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/Commons.java
@@ -56,7 +56,6 @@ import java.util.stream.Collectors;
import org.apache.calcite.DataContexts;
import org.apache.calcite.config.CalciteSystemProperty;
import org.apache.calcite.config.NullCollation;
-import org.apache.calcite.linq4j.Ord;
import org.apache.calcite.plan.Contexts;
import org.apache.calcite.plan.ConventionTraitDef;
import org.apache.calcite.plan.RelOptCluster;
@@ -488,8 +487,14 @@ public final class Commons {
*/
public static Mapping trimmingMapping(int sourceSize, ImmutableBitSet requiredElements) {
Mapping mapping = Mappings.create(MappingType.INVERSE_SURJECTION, sourceSize, requiredElements.cardinality());
- for (Ord<Integer> ord : Ord.zip(requiredElements)) {
- mapping.set(ord.e, ord.i);
+
+ int i = 0;
+ for (int idx = requiredElements.nextSetBit(0); idx >= 0; idx = requiredElements.nextSetBit(idx + 1)) {
+ mapping.set(idx, i++);
+
+ if (idx == Integer.MAX_VALUE) {
+ break; // or (i+1) would overflow
+ }
}
return mapping;
}
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 89cb42b4c9c..38cb46a8d34 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
@@ -70,6 +70,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BiFunction;
import java.util.function.Function;
+import java.util.function.LongSupplier;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -1085,7 +1086,7 @@ public class ExecutionServiceImplTest extends BaseIgniteAbstractTest {
) {
PartitionPruner partitionPruner = (mappedFragments, dynamicParameters) -> mappedFragments;
- Supplier<Long> topologyVerSupplier = () -> Long.MAX_VALUE;
+ LongSupplier topologyVerSupplier = () -> Long.MAX_VALUE;
return new MappingServiceImpl(nodeName, clock, cacheFactory, 0, partitionPruner, topologyVerSupplier,
new TestExecutionDistributionProvider(logicalNodes, () -> mappingException));
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/IdentityDistributionFunctionSelfTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/IdentityDistributionFunctionSelfTest.java
index cf4689a49d3..72fad396b0d 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/IdentityDistributionFunctionSelfTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/IdentityDistributionFunctionSelfTest.java
@@ -24,6 +24,7 @@ import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.is;
import it.unimi.dsi.fastutil.ints.Int2ObjectMaps;
+import it.unimi.dsi.fastutil.longs.LongList;
import java.util.Collection;
import java.util.List;
import org.apache.calcite.rel.RelDistribution.Type;
@@ -55,7 +56,7 @@ public class IdentityDistributionFunctionSelfTest {
.addField(NativeTypes.STRING)
.build();
- private final ColocationGroup colocationGroup = new ColocationGroup(List.of(1L), List.of(NODE_1, NODE_2, NODE_3),
+ private final ColocationGroup colocationGroup = new ColocationGroup(LongList.of(1L), List.of(NODE_1, NODE_2, NODE_3),
Int2ObjectMaps.emptyMap());
private final DestinationFactory<Object[]> destinationFactory = new DestinationFactory<>(rowHandler, null);
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/PartitionProvidersTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/PartitionProvidersTest.java
index 217342b829e..669e05eec69 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/PartitionProvidersTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/PartitionProvidersTest.java
@@ -27,6 +27,7 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
import it.unimi.dsi.fastutil.longs.Long2ObjectMaps;
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
+import it.unimi.dsi.fastutil.longs.LongList;
import java.util.List;
import java.util.Map;
import org.apache.calcite.rex.RexNode;
@@ -80,7 +81,7 @@ public class PartitionProvidersTest extends BaseIgniteAbstractTest {
.build();
ColocationGroup group = new ColocationGroup(
- List.of(1L, 2L), List.of("n1", "n2", "n3"),
+ LongList.of(1L, 2L), List.of("n1", "n2", "n3"),
assignments,
partitionsPerNode
);
@@ -125,7 +126,7 @@ public class PartitionProvidersTest extends BaseIgniteAbstractTest {
.build();
ColocationGroup group = new ColocationGroup(
- List.of(1L, 2L), List.of("n1", "n2", "n3"),
+ LongList.of(1L, 2L), List.of("n1", "n2", "n3"),
assignments
);
@@ -169,7 +170,7 @@ public class PartitionProvidersTest extends BaseIgniteAbstractTest {
.build();
ColocationGroup group = new ColocationGroup(
- List.of(1L, 2L), List.of("n1", "n2", "n3"),
+ LongList.of(1L, 2L), List.of("n1", "n2", "n3"),
assignments,
Map.of()
);
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/mapping/MappingServiceImplTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/mapping/MappingServiceImplTest.java
index ee3790aa53c..cda9b718fce 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/mapping/MappingServiceImplTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/mapping/MappingServiceImplTest.java
@@ -41,6 +41,7 @@ import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
+import java.util.function.LongSupplier;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import org.apache.ignite.internal.TestHybridClock;
@@ -127,7 +128,7 @@ public class MappingServiceImplTest extends BaseIgniteAbstractTest {
List<String> nodeNames = List.of(localNodeName, "NODE1");
// Initialize mapping service.
- Supplier<Long> logicalTopologyVerSupplier = createChangingTopologySupplier();
+ LongSupplier logicalTopologyVerSupplier = createChangingTopologySupplier();
TestExecutionDistributionProvider execProvider = Mockito.spy(new TestExecutionDistributionProvider(nodeNames));
MappingServiceImpl mappingService = Mockito.spy(new MappingServiceImpl(
@@ -196,7 +197,7 @@ public class MappingServiceImplTest extends BaseIgniteAbstractTest {
String localNodeName = "NODE";
List<String> nodeNames = List.of(localNodeName, "NODE1");
- Supplier<Long> logicalTopologyVerSupplier = createTriggeredTopologySupplier();
+ LongSupplier logicalTopologyVerSupplier = createTriggeredTopologySupplier();
TestExecutionDistributionProvider execProvider = Mockito.spy(new TestExecutionDistributionProvider(nodeNames));
MappingServiceImpl mappingService = Mockito.spy(new MappingServiceImpl(
@@ -258,7 +259,7 @@ public class MappingServiceImplTest extends BaseIgniteAbstractTest {
};
// Initialize mapping service.
- Supplier<Long> logicalTopologyVerSupplier = createStableTopologySupplier();
+ LongSupplier logicalTopologyVerSupplier = createStableTopologySupplier();
ExecutionDistributionProvider execProvider = Mockito.spy(new TestExecutionDistributionProvider(nodeNames));
MappingServiceImpl mappingService = Mockito.spy(new MappingServiceImpl(
@@ -291,7 +292,7 @@ public class MappingServiceImplTest extends BaseIgniteAbstractTest {
}
private MappingServiceImpl createMappingService(String localNodeName, List<String> nodeNames, int cacheSize) {
- Supplier<Long> logicalTopologyVerSupplier = createChangingTopologySupplier();
+ LongSupplier logicalTopologyVerSupplier = createChangingTopologySupplier();
ExecutionDistributionProvider execProvider = new TestExecutionDistributionProvider(nodeNames);
return new MappingServiceImpl(
@@ -342,15 +343,15 @@ public class MappingServiceImplTest extends BaseIgniteAbstractTest {
}
}
- private static Supplier<Long> createStableTopologySupplier() {
+ private static LongSupplier createStableTopologySupplier() {
return () -> 1L;
}
- private Supplier<Long> createTriggeredTopologySupplier() {
+ private LongSupplier createTriggeredTopologySupplier() {
return () -> topologyChange ? ++topologyVer : topologyVer;
}
- private Supplier<Long> createChangingTopologySupplier() {
+ private LongSupplier createChangingTopologySupplier() {
return () -> topologyVer++;
}
}
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/ModifyNodeExecutionTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/ModifyNodeExecutionTest.java
index 56344e5de16..4f0791b2392 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/ModifyNodeExecutionTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/ModifyNodeExecutionTest.java
@@ -35,6 +35,7 @@ import static org.mockito.Mockito.when;
import it.unimi.dsi.fastutil.ints.Int2ObjectMaps;
import it.unimi.dsi.fastutil.longs.Long2ObjectMaps;
+import it.unimi.dsi.fastutil.longs.LongList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -507,7 +508,7 @@ public class ModifyNodeExecutionTest extends AbstractExecutionTest<RowWrapper> {
@Override
protected FragmentDescription getFragmentDescription() {
- ColocationGroup colocationGroup = new ColocationGroup(List.of(), List.of(), Int2ObjectMaps.emptyMap());
+ ColocationGroup colocationGroup = new ColocationGroup(LongList.of(), List.of(), Int2ObjectMaps.emptyMap());
return new FragmentDescription(0, true, Long2ObjectMaps.singleton(SOURCE_ID, colocationGroup), null, null, null);
}
}
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/pruning/PartitionPruningPredicateSelfTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/pruning/PartitionPruningPredicateSelfTest.java
index 0184af5a813..3f54c5f7129 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/pruning/PartitionPruningPredicateSelfTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/pruning/PartitionPruningPredicateSelfTest.java
@@ -24,6 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectMaps;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
+import it.unimi.dsi.fastutil.longs.LongList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@@ -111,7 +112,7 @@ public class PartitionPruningPredicateSelfTest extends BaseIgniteAbstractTest {
List<String> nodeNames = List.of("n1", "n2", "n3");
Int2ObjectMap<NodeWithConsistencyToken> assignments = randomAssignments(table, nodeNames);
- ColocationGroup group = new ColocationGroup(List.of(0L), nodeNames, assignments);
+ ColocationGroup group = new ColocationGroup(LongList.of(0L), nodeNames, assignments);
expectPartitionsPruned(table, columns, new Object[0], group, val);
}
@@ -159,7 +160,7 @@ public class PartitionPruningPredicateSelfTest extends BaseIgniteAbstractTest {
List<String> nodeNames = List.of("n1", "n2", "n3");
Int2ObjectMap<NodeWithConsistencyToken> assignments = randomAssignments(table, nodeNames);
- ColocationGroup group = new ColocationGroup(List.of(0L), nodeNames, assignments);
+ ColocationGroup group = new ColocationGroup(LongList.of(0L), nodeNames, assignments);
expectPartitionsPruned(table, columns, dynamicParameters, group, val);
}