gortiz commented on code in PR #11546:
URL: https://github.com/apache/pinot/pull/11546#discussion_r1319438573


##########
pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/AndOperatorTransformFunction.java:
##########
@@ -45,4 +48,37 @@ int getLogicalFuncResult(int left, int right) {
     }
     return 0;
   }
+
+  @Nullable
+  @Override
+  public RoaringBitmap getNullBitmap(ValueBlock valueBlock) {
+    int numDocs = valueBlock.getNumDocs();
+    int numArguments = _arguments.size();
+    int[][] intValuesSVs = new int[numArguments][numDocs];

Review Comment:
   I think this is incorrect from performance perspective. This sentence 
instantiates the whole matrix (it allocates an array of `numArguments` elements 
pointing to a new array of `numDocs` ints). Few lines later elements on 
`intValuesSVs` are changed to 
`_arguments.get(i).transformToIntValuesSV(valueBlock);`. Therefore we are 
creating the internal arrays for no reason.
   
   What you should do here is `new int[numArguments][];`
   
   You can verify that in jshell:
   
   ```
   ╰─➤  jshell                                                                  
                                                                                
                       microk8s
   |  Welcome to JShell -- Version 11.0.19
   |  For an introduction type: /help intro
   
   jshell> var a = new int[2][3];
   a ==> int[2][] { int[3] { 0, 0, 0 }, int[3] { 0, 0, 0 } }
   
   jshell> a[0]
   $2 ==> int[3] { 0, 0, 0 }
   
   jshell> var b = new int[2][];
   b ==> int[2][] { null, null }
   
   jshell> b[0]
   $4 ==> null
   ```



##########
pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/AndOperatorTransformFunction.java:
##########
@@ -45,4 +48,37 @@ int getLogicalFuncResult(int left, int right) {
     }
     return 0;
   }
+
+  @Nullable
+  @Override
+  public RoaringBitmap getNullBitmap(ValueBlock valueBlock) {
+    int numDocs = valueBlock.getNumDocs();
+    int numArguments = _arguments.size();
+    int[][] intValuesSVs = new int[numArguments][numDocs];

Review Comment:
   I think this is incorrect from performance perspective. This sentence 
instantiates the whole matrix (it allocates an array of `numArguments` elements 
pointing to a new array of `numDocs` ints). Few lines later elements on 
`intValuesSVs` are changed to 
`_arguments.get(i).transformToIntValuesSV(valueBlock);`. Therefore we are 
creating the internal arrays for no reason.
   
   What you should do here is `new int[numArguments][];`
   
   You can verify that in jshell:
   
   ```
   ╰─➤  jshell                                                                  
                                                                                
                       microk8s
   |  Welcome to JShell -- Version 11.0.19
   |  For an introduction type: /help intro
   
   jshell> var a = new int[2][3];
   a ==> int[2][] { int[3] { 0, 0, 0 }, int[3] { 0, 0, 0 } }
   
   jshell> a[0]
   $2 ==> int[3] { 0, 0, 0 }
   
   jshell> var b = new int[2][];
   b ==> int[2][] { null, null }
   
   jshell> b[0]
   $4 ==> null
   ```



-- 
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...@pinot.apache.org

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


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to