walterddr commented on code in PR #9554:
URL: https://github.com/apache/pinot/pull/9554#discussion_r990215072


##########
pinot-common/src/main/java/org/apache/pinot/common/function/scalar/ArrayFunctions.java:
##########
@@ -151,4 +151,29 @@ public static double[] arrayConcatDouble(double[] values1, 
double[] values2) {
   public static String[] arrayConcatString(String[] values1, String[] values2) 
{
     return ArrayUtils.addAll(values1, values2);
   }
+
+  @ScalarFunction
+  public static int arrayElementAtInt(int[] arr, int idx) {
+    return arr[idx];
+  }
+
+  @ScalarFunction
+  public static long arrayElementAtLong(long[] arr, int idx) {
+    return arr[idx];
+  }
+
+  @ScalarFunction
+  public static float arrayElementAtFloat(float[] arr, int idx) {
+    return arr[idx];

Review Comment:
   ```suggestion
       return arr[idx - 1];
   ```



##########
pinot-common/src/main/java/org/apache/pinot/common/function/scalar/ArrayFunctions.java:
##########
@@ -151,4 +151,29 @@ public static double[] arrayConcatDouble(double[] values1, 
double[] values2) {
   public static String[] arrayConcatString(String[] values1, String[] values2) 
{
     return ArrayUtils.addAll(values1, values2);
   }
+
+  @ScalarFunction
+  public static int arrayElementAtInt(int[] arr, int idx) {
+    return arr[idx];
+  }
+
+  @ScalarFunction
+  public static long arrayElementAtLong(long[] arr, int idx) {
+    return arr[idx];
+  }
+
+  @ScalarFunction
+  public static float arrayElementAtFloat(float[] arr, int idx) {
+    return arr[idx];
+  }
+
+  @ScalarFunction
+  public static double arrayElementAtDouble(double[] arr, int idx) {
+    return arr[idx];

Review Comment:
   ```suggestion
       return arr[idx - 1];
   ```



##########
pinot-common/src/main/java/org/apache/pinot/common/function/scalar/ArrayFunctions.java:
##########
@@ -151,4 +151,29 @@ public static double[] arrayConcatDouble(double[] values1, 
double[] values2) {
   public static String[] arrayConcatString(String[] values1, String[] values2) 
{
     return ArrayUtils.addAll(values1, values2);
   }
+
+  @ScalarFunction
+  public static int arrayElementAtInt(int[] arr, int idx) {
+    return arr[idx];

Review Comment:
   ```suggestion
       return arr[idx - 1];
   ```



##########
pinot-common/src/main/java/org/apache/pinot/common/function/scalar/ArrayFunctions.java:
##########
@@ -151,4 +151,29 @@ public static double[] arrayConcatDouble(double[] values1, 
double[] values2) {
   public static String[] arrayConcatString(String[] values1, String[] values2) 
{
     return ArrayUtils.addAll(values1, values2);
   }
+
+  @ScalarFunction
+  public static int arrayElementAtInt(int[] arr, int idx) {
+    return arr[idx];
+  }
+
+  @ScalarFunction
+  public static long arrayElementAtLong(long[] arr, int idx) {
+    return arr[idx];
+  }
+
+  @ScalarFunction
+  public static float arrayElementAtFloat(float[] arr, int idx) {
+    return arr[idx];
+  }
+
+  @ScalarFunction
+  public static double arrayElementAtDouble(double[] arr, int idx) {
+    return arr[idx];
+  }
+
+  @ScalarFunction
+  public static String arrayElementAtString(String[] arr, int idx) {
+    return arr[idx];

Review Comment:
   ```suggestion
       return arr[idx - 1];
   ```



##########
pinot-core/src/test/java/org/apache/pinot/core/operator/transform/function/ScalarTransformFunctionWrapperTest.java:
##########
@@ -865,6 +866,91 @@ public void testConcatStringTransformFunction() {
     testTransformFunctionMV(transformFunction, expectedValues);
   }
 
+  @Test
+  public void testArrayElementAtInt() {
+    Random rand = new Random(42);
+    int index = 1 + rand.nextInt(_mvColumnLength);
+    ExpressionContext expression = RequestContextUtils.getExpression(
+        String.format("array_element_at_int(%s, %d)", INT_MV_COLUMN, index));
+    TransformFunction transformFunction = 
TransformFunctionFactory.get(expression, _dataSourceMap);
+    assertTrue(transformFunction instanceof ScalarTransformFunctionWrapper);
+    assertEquals(transformFunction.getResultMetadata().getDataType(), 
DataType.INT);
+    assertTrue(transformFunction.getResultMetadata().isSingleValue());
+    int[] expectedValues = new int[NUM_ROWS];
+    for (int i = 0; i < NUM_ROWS; i++) {
+      expectedValues[i] = _intMVValues[i][index];
+    }
+    testTransformFunction(transformFunction, expectedValues);
+  }
+
+  @Test
+  public void testArrayElementAtLong() {
+    Random rand = new Random(42);
+    int index = 1 + rand.nextInt(_mvColumnLength);
+    ExpressionContext expression = RequestContextUtils.getExpression(
+        String.format("array_element_at_long(%s, %d)", LONG_MV_COLUMN, index));
+    TransformFunction transformFunction = 
TransformFunctionFactory.get(expression, _dataSourceMap);
+    assertTrue(transformFunction instanceof ScalarTransformFunctionWrapper);
+    assertEquals(transformFunction.getResultMetadata().getDataType(), 
DataType.LONG);
+    assertTrue(transformFunction.getResultMetadata().isSingleValue());
+    long[] expectedValues = new long[NUM_ROWS];
+    for (int i = 0; i < NUM_ROWS; i++) {
+      expectedValues[i] = _longMVValues[i][index];
+    }
+    testTransformFunction(transformFunction, expectedValues);
+  }
+
+  @Test
+  public void testArrayElementAtFloat() {
+    Random rand = new Random(42);
+    int index = 1 + rand.nextInt(_mvColumnLength);
+    ExpressionContext expression = RequestContextUtils.getExpression(
+        String.format("array_element_at_float(%s, %d)", FLOAT_MV_COLUMN, 
index));
+    TransformFunction transformFunction = 
TransformFunctionFactory.get(expression, _dataSourceMap);
+    assertTrue(transformFunction instanceof ScalarTransformFunctionWrapper);
+    assertEquals(transformFunction.getResultMetadata().getDataType(), 
DataType.FLOAT);
+    assertTrue(transformFunction.getResultMetadata().isSingleValue());
+    float[] expectedValues = new float[NUM_ROWS];
+    for (int i = 0; i < NUM_ROWS; i++) {
+      expectedValues[i] = _floatMVValues[i][index];
+    }
+    testTransformFunction(transformFunction, expectedValues);
+  }
+
+  @Test
+  public void testArrayElementAtDouble() {
+    Random rand = new Random(42);
+    int index = 1 + rand.nextInt(_mvColumnLength);
+    ExpressionContext expression = RequestContextUtils.getExpression(
+        String.format("array_element_at_double(%s, %d)", DOUBLE_MV_COLUMN, 
index));
+    TransformFunction transformFunction = 
TransformFunctionFactory.get(expression, _dataSourceMap);
+    assertTrue(transformFunction instanceof ScalarTransformFunctionWrapper);
+    assertEquals(transformFunction.getResultMetadata().getDataType(), 
DataType.DOUBLE);
+    assertTrue(transformFunction.getResultMetadata().isSingleValue());
+    double[] expectedValues = new double[NUM_ROWS];
+    for (int i = 0; i < NUM_ROWS; i++) {
+      expectedValues[i] = _doubleMVValues[i][index];
+    }
+    testTransformFunction(transformFunction, expectedValues);
+  }
+
+  @Test
+  public void testArrayElementAtString() {
+    Random rand = new Random(42);
+    int index = 1 + rand.nextInt(_mvColumnLength);
+    ExpressionContext expression = RequestContextUtils.getExpression(
+        String.format("array_element_at_string(%s, %d)", STRING_MV_COLUMN, 
index));

Review Comment:
   ```suggestion
           String.format("array_element_at_string(%s, %d)", STRING_MV_COLUMN, 
index + 1));
   ```



##########
pinot-common/src/main/java/org/apache/pinot/common/function/scalar/ArrayFunctions.java:
##########
@@ -151,4 +151,29 @@ public static double[] arrayConcatDouble(double[] values1, 
double[] values2) {
   public static String[] arrayConcatString(String[] values1, String[] values2) 
{
     return ArrayUtils.addAll(values1, values2);
   }
+
+  @ScalarFunction
+  public static int arrayElementAtInt(int[] arr, int idx) {
+    return arr[idx];
+  }
+
+  @ScalarFunction
+  public static long arrayElementAtLong(long[] arr, int idx) {
+    return arr[idx];

Review Comment:
   ```suggestion
       return arr[idx - 1];
   ```



##########
pinot-core/src/test/java/org/apache/pinot/core/operator/transform/function/ScalarTransformFunctionWrapperTest.java:
##########
@@ -865,6 +866,91 @@ public void testConcatStringTransformFunction() {
     testTransformFunctionMV(transformFunction, expectedValues);
   }
 
+  @Test
+  public void testArrayElementAtInt() {
+    Random rand = new Random(42);
+    int index = 1 + rand.nextInt(_mvColumnLength);
+    ExpressionContext expression = RequestContextUtils.getExpression(
+        String.format("array_element_at_int(%s, %d)", INT_MV_COLUMN, index));
+    TransformFunction transformFunction = 
TransformFunctionFactory.get(expression, _dataSourceMap);
+    assertTrue(transformFunction instanceof ScalarTransformFunctionWrapper);
+    assertEquals(transformFunction.getResultMetadata().getDataType(), 
DataType.INT);
+    assertTrue(transformFunction.getResultMetadata().isSingleValue());
+    int[] expectedValues = new int[NUM_ROWS];
+    for (int i = 0; i < NUM_ROWS; i++) {
+      expectedValues[i] = _intMVValues[i][index];
+    }
+    testTransformFunction(transformFunction, expectedValues);
+  }
+
+  @Test
+  public void testArrayElementAtLong() {
+    Random rand = new Random(42);
+    int index = 1 + rand.nextInt(_mvColumnLength);
+    ExpressionContext expression = RequestContextUtils.getExpression(
+        String.format("array_element_at_long(%s, %d)", LONG_MV_COLUMN, index));
+    TransformFunction transformFunction = 
TransformFunctionFactory.get(expression, _dataSourceMap);
+    assertTrue(transformFunction instanceof ScalarTransformFunctionWrapper);
+    assertEquals(transformFunction.getResultMetadata().getDataType(), 
DataType.LONG);
+    assertTrue(transformFunction.getResultMetadata().isSingleValue());
+    long[] expectedValues = new long[NUM_ROWS];
+    for (int i = 0; i < NUM_ROWS; i++) {
+      expectedValues[i] = _longMVValues[i][index];
+    }
+    testTransformFunction(transformFunction, expectedValues);
+  }
+
+  @Test
+  public void testArrayElementAtFloat() {
+    Random rand = new Random(42);
+    int index = 1 + rand.nextInt(_mvColumnLength);
+    ExpressionContext expression = RequestContextUtils.getExpression(
+        String.format("array_element_at_float(%s, %d)", FLOAT_MV_COLUMN, 
index));
+    TransformFunction transformFunction = 
TransformFunctionFactory.get(expression, _dataSourceMap);
+    assertTrue(transformFunction instanceof ScalarTransformFunctionWrapper);
+    assertEquals(transformFunction.getResultMetadata().getDataType(), 
DataType.FLOAT);
+    assertTrue(transformFunction.getResultMetadata().isSingleValue());
+    float[] expectedValues = new float[NUM_ROWS];
+    for (int i = 0; i < NUM_ROWS; i++) {
+      expectedValues[i] = _floatMVValues[i][index];
+    }
+    testTransformFunction(transformFunction, expectedValues);
+  }
+
+  @Test
+  public void testArrayElementAtDouble() {
+    Random rand = new Random(42);
+    int index = 1 + rand.nextInt(_mvColumnLength);
+    ExpressionContext expression = RequestContextUtils.getExpression(
+        String.format("array_element_at_double(%s, %d)", DOUBLE_MV_COLUMN, 
index));
+    TransformFunction transformFunction = 
TransformFunctionFactory.get(expression, _dataSourceMap);
+    assertTrue(transformFunction instanceof ScalarTransformFunctionWrapper);
+    assertEquals(transformFunction.getResultMetadata().getDataType(), 
DataType.DOUBLE);
+    assertTrue(transformFunction.getResultMetadata().isSingleValue());
+    double[] expectedValues = new double[NUM_ROWS];
+    for (int i = 0; i < NUM_ROWS; i++) {
+      expectedValues[i] = _doubleMVValues[i][index];
+    }
+    testTransformFunction(transformFunction, expectedValues);
+  }
+
+  @Test
+  public void testArrayElementAtString() {
+    Random rand = new Random(42);
+    int index = 1 + rand.nextInt(_mvColumnLength);

Review Comment:
   ```suggestion
       int index = rand.nextInt(_mvColumnLength);
   ```



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