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

lakshsingla pushed a commit to branch 28.0.0
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/28.0.0 by this push:
     new 9f500556ce1 preserve Rows.objectToStrings behavior of translating null 
into "null" inside of lists and arrays (#15190) (#15193)
9f500556ce1 is described below

commit 9f500556ce16c527afd53331fbc3f41c2f66aa4e
Author: Clint Wylie <[email protected]>
AuthorDate: Tue Oct 17 22:31:01 2023 -0700

    preserve Rows.objectToStrings behavior of translating null into "null" 
inside of lists and arrays (#15190) (#15193)
---
 .../src/main/java/org/apache/druid/data/input/Rows.java    |  9 ++++++---
 .../apache/druid/segment/transform/TransformerTest.java    | 14 +++++++-------
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/processing/src/main/java/org/apache/druid/data/input/Rows.java 
b/processing/src/main/java/org/apache/druid/data/input/Rows.java
index c10460c86c8..add6781b81b 100644
--- a/processing/src/main/java/org/apache/druid/data/input/Rows.java
+++ b/processing/src/main/java/org/apache/druid/data/input/Rows.java
@@ -25,7 +25,6 @@ import com.google.common.primitives.Longs;
 import org.apache.druid.common.config.NullHandling;
 import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.java.util.common.parsers.ParseException;
-import org.apache.druid.math.expr.Evals;
 
 import javax.annotation.Nullable;
 import java.util.Arrays;
@@ -60,7 +59,11 @@ public final class Rows
   }
 
   /**
-   * Convert an object to a list of strings.
+   * Convert an object to a list of strings. This function translates single 
value nulls into an empty list, and any
+   * nulls inside of a list or array into the string "null". Do not use this 
method if you don't want this behavior,
+   * but note that many implementations of {@link 
InputRow#getDimension(String)} do use this method, so it is
+   * recommended to use {@link InputRow#getRaw(String)} if you want the actual 
value without this coercion. For legacy
+   * reasons, some stuff counts on this incorrect behavior, (such as {@link 
Rows#toGroupKey(long, InputRow)}).
    */
   public static List<String> objectToStrings(final Object inputValue)
   {
@@ -73,7 +76,7 @@ public final class Rows
       // convert byte[] to base64 encoded string
       return Collections.singletonList(StringUtils.encodeBase64String((byte[]) 
inputValue));
     } else if (inputValue instanceof Object[]) {
-      return Arrays.stream((Object[]) 
inputValue).map(Evals::asString).collect(Collectors.toList());
+      return Arrays.stream((Object[]) 
inputValue).map(String::valueOf).collect(Collectors.toList());
     } else {
       return Collections.singletonList(String.valueOf(inputValue));
     }
diff --git 
a/processing/src/test/java/org/apache/druid/segment/transform/TransformerTest.java
 
b/processing/src/test/java/org/apache/druid/segment/transform/TransformerTest.java
index c1aa1d0c6e8..0c33b3c2d1d 100644
--- 
a/processing/src/test/java/org/apache/druid/segment/transform/TransformerTest.java
+++ 
b/processing/src/test/java/org/apache/druid/segment/transform/TransformerTest.java
@@ -389,7 +389,7 @@ public class TransformerTest extends 
InitializedNullHandlingTest
     Assert.assertNotNull(actual);
     Assert.assertEquals(ImmutableList.of("dim"), actual.getDimensions());
     Assert.assertArrayEquals(new Object[]{1L, 2L, null, 3L}, (Object[]) 
actual.getRaw("dim"));
-    Assert.assertArrayEquals(new String[]{"1", "2", null, "3"}, 
actual.getDimension("dim").toArray());
+    Assert.assertEquals(ImmutableList.of("1", "2", "null", "3"), 
actual.getDimension("dim"));
     Assert.assertEquals(row.getTimestamp(), actual.getTimestamp());
   }
 
@@ -416,9 +416,9 @@ public class TransformerTest extends 
InitializedNullHandlingTest
     Assert.assertEquals(2.3, (Double) raw[1], 0.00001);
     Assert.assertNull(raw[2]);
     Assert.assertEquals(3.4, (Double) raw[3], 0.00001);
-    Assert.assertArrayEquals(
-        new String[]{"1.2000000476837158", "2.299999952316284", null, 
"3.4000000953674316"},
-        actual.getDimension("dim").toArray()
+    Assert.assertEquals(
+        ImmutableList.of("1.2000000476837158", "2.299999952316284", "null", 
"3.4000000953674316"),
+        actual.getDimension("dim")
     );
     Assert.assertEquals(row.getTimestamp(), actual.getTimestamp());
   }
@@ -445,12 +445,12 @@ public class TransformerTest extends 
InitializedNullHandlingTest
     Assert.assertEquals(2.3, (Double) raw[1], 0.0);
     Assert.assertNull(raw[2]);
     Assert.assertEquals(3.4, (Double) raw[3], 0.0);
-    Assert.assertArrayEquals(new String[]{"1.2", "2.3", null, "3.4"}, 
actual.getDimension("dim").toArray());
+    Assert.assertEquals(ImmutableList.of("1.2", "2.3", "null", "3.4"), 
actual.getDimension("dim"));
     Assert.assertEquals(row.getTimestamp(), actual.getTimestamp());
   }
 
   @Test
-  public void testTransformWithExpr()
+  public void testTransformWithArrayExpr()
   {
     final Transformer transformer = new Transformer(
         new TransformSpec(
@@ -517,6 +517,6 @@ public class TransformerTest extends 
InitializedNullHandlingTest
     });
     Assert.assertEquals(actualTranformedRow.getDimension("dim"), 
dimList.subList(0, 5));
     Assert.assertArrayEquals(dimList.subList(0, 5).toArray(), (Object[]) 
actualTranformedRow.getRaw("dim"));
-    Assert.assertArrayEquals(new Object[]{"a"}, 
actualTranformedRow.getDimension("dim1").toArray());
+    Assert.assertEquals(ImmutableList.of("a"), 
actualTranformedRow.getDimension("dim1"));
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to