dssysolyatin commented on code in PR #2977:
URL: https://github.com/apache/calcite/pull/2977#discussion_r1033016387


##########
core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableWindow.java:
##########
@@ -693,7 +696,7 @@ private static Pair<Expression, Expression> 
getPartitionIterator(
     }
     Expression multiMap_ =
         builder.append(
-            "multiMap", Expressions.new_(SortedMultiMap.class));
+            "multiMap", Expressions.new_(SortedMultiMap.class), false);

Review Comment:
   multiMap works OK at the moment even with optimize = true. But it is very 
unsafe. I will try to explain why. The different between multiMap and tempList 
cases are following.
   
   Code for tempList case looks like:
   ```
   final java.util.List tempList = (java.util.List) 
org.apache.calcite.linq4j.Linq4j.asEnumerable(new Integer[] {1,2})
             .into(new java.util.ArrayList());  <--this expression will be 
reused                                                            
   tempList.clear()
   <-- Second EnumerableWindow will use the same tempList and will not fill 
tempList again -->
   ```
   
   Code for multiMap looks like:
   ```
   final org.apache.calcite.runtime.SortedMultiMap multiMap = 
          new org.apache.calcite.runtime.SortedMultiMap(); <--this expression 
will be reused
   org.apache.calcite.linq4j.Linq4j.asEnumerable(new Integer[] 
{1,2}).foreach(<code for multiMap filling>)
   multiMap.clear()
   <-- Second EnumerableWindow will refill multiMap -->
   ```
   Code works OK for multiMap only because the creation and filling of the 
multiMap are in different expressions. But it is very unsafe. If for some 
reason creating and filling multiMap are in the same expression code will also 
stop working.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@calcite.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to