siddharthteotia commented on code in PR #10128:
URL: https://github.com/apache/pinot/pull/10128#discussion_r1073857754


##########
pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/BaseDistinctAggregateAggregationFunction.java:
##########
@@ -136,8 +202,84 @@ public void aggregate(int length, AggregationResultHolder 
aggregationResultHolde
     }
   }
 
-  @Override
-  public void aggregateGroupBySV(int length, int[] groupKeyArray, 
GroupByResultHolder groupByResultHolder,
+  /**
+   * Performs aggregation for a MV column
+   */
+  protected void mvAggregate(int length, AggregationResultHolder 
aggregationResultHolder,
+      Map<ExpressionContext, BlockValSet> blockValSetMap) {
+    BlockValSet blockValSet = blockValSetMap.get(_expression);
+
+    // For dictionary-encoded expression, store dictionary ids into the bitmap
+    Dictionary dictionary = blockValSet.getDictionary();
+    if (dictionary != null) {
+      RoaringBitmap dictIdBitmap = getDictIdBitmap(aggregationResultHolder, 
dictionary);
+      int[][] dictIds = blockValSet.getDictionaryIdsMV();
+      for (int i = 0; i < length; i++) {
+        dictIdBitmap.add(dictIds[i]);
+      }
+      return;
+    }
+
+    // For non-dictionary-encoded expression, store values into the value set
+    DataType storedType = blockValSet.getValueType().getStoredType();
+    Set valueSet = getValueSet(aggregationResultHolder, storedType);
+    switch (storedType) {
+      case INT:
+        IntOpenHashSet intSet = (IntOpenHashSet) valueSet;
+        int[][] intValues = blockValSet.getIntValuesMV();
+        for (int i = 0; i < length; i++) {
+          for (int value : intValues[i]) {
+            intSet.add(value);
+          }
+        }
+        break;
+      case LONG:
+        LongOpenHashSet longSet = (LongOpenHashSet) valueSet;
+        long[][] longValues = blockValSet.getLongValuesMV();
+        for (int i = 0; i < length; i++) {
+          for (long value : longValues[i]) {
+            longSet.add(value);
+          }
+        }
+        break;
+      case FLOAT:
+        FloatOpenHashSet floatSet = (FloatOpenHashSet) valueSet;
+        float[][] floatValues = blockValSet.getFloatValuesMV();
+        for (int i = 0; i < length; i++) {
+          for (float value : floatValues[i]) {
+            floatSet.add(value);
+          }
+        }
+        break;
+      case DOUBLE:
+        DoubleOpenHashSet doubleSet = (DoubleOpenHashSet) valueSet;
+        double[][] doubleValues = blockValSet.getDoubleValuesMV();
+        for (int i = 0; i < length; i++) {
+          for (double value : doubleValues[i]) {
+            doubleSet.add(value);
+          }
+        }
+        break;
+      case STRING:
+        ObjectOpenHashSet<String> stringSet = (ObjectOpenHashSet<String>) 
valueSet;
+        String[][] stringValues = blockValSet.getStringValuesMV();
+        for (int i = 0; i < length; i++) {
+          //noinspection ManualArrayToCollectionCopy
+          for (String value : stringValues[i]) {
+            //noinspection UseBulkOperation
+            stringSet.add(value);
+          }
+        }
+        break;
+      default:
+        throw new IllegalStateException("Illegal data type for 
DISTINCT_COUNT_MV aggregation function: " + storedType);

Review Comment:
   Doesn't look like exception message is correct probably because copied over 
from existing code ?



-- 
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