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

mihaibudiu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/main by this push:
     new c3e3e6b86b [CALCITE-7632] Replace java.util.Stack with 
java.util.ArrayDeque in Pattern and TopDownRuleDriver
c3e3e6b86b is described below

commit c3e3e6b86bc6af7501ad7298fc4260b7557437c2
Author: liuzhengri <[email protected]>
AuthorDate: Wed Jul 1 01:46:18 2026 +0800

    [CALCITE-7632] Replace java.util.Stack with java.util.ArrayDeque in Pattern 
and TopDownRuleDriver
    
    Replace java.util.Stack (which extends Vector and provides unnecessary
    synchronized access) with java.util.ArrayDeque in:
    - runtime/Pattern.java: PatternBuilder.stack field
    - plan/volcano/TopDownRuleDriver.java: tasks field
    
    Also remove @SuppressWarnings("JdkObsolete") annotations and TODO
    comments that requested this change.
    
    Stack is officially discouraged by the Java documentation, which
    recommends using Deque implementations like ArrayDeque instead.
    ArrayDeque is faster for single-threaded use since it avoids the
    synchronization overhead inherited from Vector.
---
 .../org/apache/calcite/plan/volcano/TopDownRuleDriver.java     | 10 +++++-----
 core/src/main/java/org/apache/calcite/runtime/Pattern.java     |  6 +++---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git 
a/core/src/main/java/org/apache/calcite/plan/volcano/TopDownRuleDriver.java 
b/core/src/main/java/org/apache/calcite/plan/volcano/TopDownRuleDriver.java
index 8e25a8e45b..6940b0b1ae 100644
--- a/core/src/main/java/org/apache/calcite/plan/volcano/TopDownRuleDriver.java
+++ b/core/src/main/java/org/apache/calcite/plan/volcano/TopDownRuleDriver.java
@@ -28,12 +28,13 @@
 import org.checkerframework.checker.nullness.qual.Nullable;
 import org.slf4j.Logger;
 
+import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Deque;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import java.util.Stack;
 import java.util.function.Predicate;
 
 import static java.util.Objects.requireNonNull;
@@ -47,7 +48,6 @@
  * A Task is a piece of work to be executed, it may apply some rules
  * or schedule other tasks.
  */
-@SuppressWarnings("JdkObsolete")
 class TopDownRuleDriver implements RuleDriver {
 
   private static final Logger LOGGER = CalciteTrace.getPlannerTaskTracer();
@@ -62,7 +62,7 @@ class TopDownRuleDriver implements RuleDriver {
   /**
    * All tasks waiting for execution.
    */
-  private final Stack<Task> tasks = new Stack<>(); // TODO: replace with Deque
+  private final Deque<Task> tasks = new ArrayDeque<>();
 
   /**
    * A task that is currently applying and may generate new RelNode.
@@ -350,7 +350,7 @@ private class OptimizeGroup implements Task {
       for (RelNode rel : physicals) {
         Task task = getOptimizeInputTask(rel, group);
         if (task != null) {
-          tasks.add(task);
+          tasks.push(task);
         }
       }
     }
@@ -602,7 +602,7 @@ private class ApplyRule implements GeneratorTask {
                     requireNonNull(group.getTraitSet().getConvention(),
                         () -> "convention for " + group))));
     if (match != null) {
-      tasks.add(new ApplyRule(match, group, false));
+      tasks.push(new ApplyRule(match, group, false));
     }
     return null;
   }
diff --git a/core/src/main/java/org/apache/calcite/runtime/Pattern.java 
b/core/src/main/java/org/apache/calcite/runtime/Pattern.java
index 6fb331d80c..dfeaac3634 100644
--- a/core/src/main/java/org/apache/calcite/runtime/Pattern.java
+++ b/core/src/main/java/org/apache/calcite/runtime/Pattern.java
@@ -18,7 +18,8 @@
 
 import com.google.common.collect.ImmutableList;
 
-import java.util.Stack;
+import java.util.ArrayDeque;
+import java.util.Deque;
 import java.util.stream.Collectors;
 
 import static com.google.common.base.Preconditions.checkArgument;
@@ -68,9 +69,8 @@ enum Op {
   }
 
   /** Builds a pattern expression. */
-  @SuppressWarnings("JdkObsolete")
   class PatternBuilder {
-    final Stack<Pattern> stack = new Stack<>(); // TODO: replace with Deque
+    final Deque<Pattern> stack = new ArrayDeque<>();
 
     private PatternBuilder() {}
 

Reply via email to