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

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


The following commit(s) were added to refs/heads/master by this push:
     new e42e025296 inject @Json ObjectMapper for to_json_string and parse_json 
expressions (#12900)
e42e025296 is described below

commit e42e02529629de908c1a32a2ff7639a054a4a371
Author: Clint Wylie <[email protected]>
AuthorDate: Mon Aug 15 08:44:24 2022 -0700

    inject @Json ObjectMapper for to_json_string and parse_json expressions 
(#12900)
    
    * inject @Json ObjectMapper for to_json_string and parse_json expressions
    
    * fix npe
    
    * better
---
 .../query/expression/NestedDataExpressions.java    | 31 +++++++++++++++++-----
 .../apache/druid/query/NestedDataTestUtils.java    | 18 ++++++++++---
 .../expression/NestedDataExpressionsTest.java      |  7 +++--
 .../druid/query/expression/TestExprMacroTable.java | 11 ++++++--
 4 files changed, 54 insertions(+), 13 deletions(-)

diff --git 
a/processing/src/main/java/org/apache/druid/query/expression/NestedDataExpressions.java
 
b/processing/src/main/java/org/apache/druid/query/expression/NestedDataExpressions.java
index 4cc561a149..51fc87fad1 100644
--- 
a/processing/src/main/java/org/apache/druid/query/expression/NestedDataExpressions.java
+++ 
b/processing/src/main/java/org/apache/druid/query/expression/NestedDataExpressions.java
@@ -24,7 +24,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
-import org.apache.druid.jackson.DefaultObjectMapper;
+import org.apache.druid.guice.annotations.Json;
 import org.apache.druid.java.util.common.IAE;
 import org.apache.druid.math.expr.Expr;
 import org.apache.druid.math.expr.ExprEval;
@@ -38,6 +38,7 @@ import org.apache.druid.segment.nested.StructuredData;
 import org.apache.druid.segment.nested.StructuredDataProcessor;
 
 import javax.annotation.Nullable;
+import javax.inject.Inject;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
@@ -45,8 +46,6 @@ import java.util.stream.Collectors;
 
 public class NestedDataExpressions
 {
-  private static final ObjectMapper JSON_MAPPER = new DefaultObjectMapper();
-
   public static final ExpressionType TYPE = Preconditions.checkNotNull(
       ExpressionType.fromColumnType(NestedDataComplexTypeSerde.TYPE)
   );
@@ -108,7 +107,7 @@ public class NestedDataExpressions
   public static class JsonObjectExprMacro extends StructExprMacro
   {
     public static final String NAME = "json_object";
-    
+
     @Override
     public String name()
     {
@@ -168,6 +167,16 @@ public class NestedDataExpressions
   {
     public static final String NAME = "to_json_string";
 
+    private final ObjectMapper jsonMapper;
+
+    @Inject
+    public ToJsonStringExprMacro(
+        @Json ObjectMapper jsonMapper
+    )
+    {
+      this.jsonMapper = jsonMapper;
+    }
+
     @Override
     public String name()
     {
@@ -190,7 +199,7 @@ public class NestedDataExpressions
           ExprEval input = args.get(0).eval(bindings);
           try {
             final Object unwrapped = maybeUnwrapStructuredData(input);
-            final String stringify = unwrapped == null ? null : 
JSON_MAPPER.writeValueAsString(unwrapped);
+            final String stringify = unwrapped == null ? null : 
jsonMapper.writeValueAsString(unwrapped);
             return ExprEval.ofType(
                 ExpressionType.STRING,
                 stringify
@@ -223,6 +232,16 @@ public class NestedDataExpressions
   {
     public static final String NAME = "parse_json";
 
+    private final ObjectMapper jsonMapper;
+
+    @Inject
+    public ParseJsonExprMacro(
+        @Json ObjectMapper jsonMapper
+    )
+    {
+      this.jsonMapper = jsonMapper;
+    }
+
     @Override
     public String name()
     {
@@ -246,7 +265,7 @@ public class NestedDataExpressions
           Object parsed = maybeUnwrapStructuredData(arg);
           if (arg.type().is(ExprType.STRING) && arg.value() != null && 
maybeJson(arg.asString())) {
             try {
-              parsed = JSON_MAPPER.readValue(arg.asString(), Object.class);
+              parsed = jsonMapper.readValue(arg.asString(), Object.class);
             }
             catch (JsonProcessingException e) {
               throw new IAE("Bad string input [%s] to [%s]", arg.asString(), 
name());
diff --git 
a/processing/src/test/java/org/apache/druid/query/NestedDataTestUtils.java 
b/processing/src/test/java/org/apache/druid/query/NestedDataTestUtils.java
index a1c9e43a9a..daa4f14b64 100644
--- a/processing/src/test/java/org/apache/druid/query/NestedDataTestUtils.java
+++ b/processing/src/test/java/org/apache/druid/query/NestedDataTestUtils.java
@@ -271,7 +271,11 @@ public class NestedDataTestUtils
     return createIncrementalIndex(Granularities.DAY, true, true, 1000);
   }
 
-  public static List<Segment> 
createDefaultHourlySegments(AggregationTestHelper helper, TemporaryFolder 
tempFolder, Closer closer)
+  public static List<Segment> createDefaultHourlySegments(
+      AggregationTestHelper helper,
+      TemporaryFolder tempFolder,
+      Closer closer
+  )
       throws Exception
   {
     return createSegments(
@@ -284,7 +288,11 @@ public class NestedDataTestUtils
     );
   }
 
-  public static List<Segment> 
createDefaultHourlySegmentsTsv(AggregationTestHelper helper, TemporaryFolder 
tempFolder, Closer closer)
+  public static List<Segment> createDefaultHourlySegmentsTsv(
+      AggregationTestHelper helper,
+      TemporaryFolder tempFolder,
+      Closer closer
+  )
       throws Exception
   {
     return createTsvSegments(
@@ -297,7 +305,11 @@ public class NestedDataTestUtils
     );
   }
 
-  public static List<Segment> createDefaultDaySegments(AggregationTestHelper 
helper, TemporaryFolder tempFolder, Closer closer)
+  public static List<Segment> createDefaultDaySegments(
+      AggregationTestHelper helper,
+      TemporaryFolder tempFolder,
+      Closer closer
+  )
       throws Exception
   {
     return createSegments(
diff --git 
a/processing/src/test/java/org/apache/druid/query/expression/NestedDataExpressionsTest.java
 
b/processing/src/test/java/org/apache/druid/query/expression/NestedDataExpressionsTest.java
index 98f2e9c1f3..ff2daf24e6 100644
--- 
a/processing/src/test/java/org/apache/druid/query/expression/NestedDataExpressionsTest.java
+++ 
b/processing/src/test/java/org/apache/druid/query/expression/NestedDataExpressionsTest.java
@@ -19,9 +19,11 @@
 
 package org.apache.druid.query.expression;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.base.Supplier;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import org.apache.druid.jackson.DefaultObjectMapper;
 import org.apache.druid.java.util.common.Pair;
 import org.apache.druid.math.expr.Expr;
 import org.apache.druid.math.expr.ExprEval;
@@ -38,6 +40,7 @@ import java.util.Map;
 
 public class NestedDataExpressionsTest extends InitializedNullHandlingTest
 {
+  private static final ObjectMapper JSON_MAPPER = new DefaultObjectMapper();
   private static final ExprMacroTable MACRO_TABLE = new ExprMacroTable(
       ImmutableList.of(
           new NestedDataExpressions.StructExprMacro(),
@@ -50,8 +53,8 @@ public class NestedDataExpressionsTest extends 
InitializedNullHandlingTest
           new NestedDataExpressions.JsonValueExprMacro(),
           new NestedDataExpressions.JsonQueryExprMacro(),
           new NestedDataExpressions.ToJsonExprMacro(),
-          new NestedDataExpressions.ToJsonStringExprMacro(),
-          new NestedDataExpressions.ParseJsonExprMacro()
+          new NestedDataExpressions.ToJsonStringExprMacro(JSON_MAPPER),
+          new NestedDataExpressions.ParseJsonExprMacro(JSON_MAPPER)
       )
   );
   private static final Map<String, Object> NEST = ImmutableMap.of(
diff --git 
a/processing/src/test/java/org/apache/druid/query/expression/TestExprMacroTable.java
 
b/processing/src/test/java/org/apache/druid/query/expression/TestExprMacroTable.java
index 3b81187c98..95aecba747 100644
--- 
a/processing/src/test/java/org/apache/druid/query/expression/TestExprMacroTable.java
+++ 
b/processing/src/test/java/org/apache/druid/query/expression/TestExprMacroTable.java
@@ -19,7 +19,9 @@
 
 package org.apache.druid.query.expression;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.collect.ImmutableList;
+import org.apache.druid.jackson.DefaultObjectMapper;
 import org.apache.druid.math.expr.ExprMacroTable;
 
 public class TestExprMacroTable extends ExprMacroTable
@@ -27,6 +29,11 @@ public class TestExprMacroTable extends ExprMacroTable
   public static final ExprMacroTable INSTANCE = new TestExprMacroTable();
 
   private TestExprMacroTable()
+  {
+    this(new DefaultObjectMapper());
+  }
+
+  private TestExprMacroTable(ObjectMapper jsonMapper)
   {
     super(
         ImmutableList.of(
@@ -56,8 +63,8 @@ public class TestExprMacroTable extends ExprMacroTable
             new NestedDataExpressions.JsonValueExprMacro(),
             new NestedDataExpressions.JsonQueryExprMacro(),
             new NestedDataExpressions.ToJsonExprMacro(),
-            new NestedDataExpressions.ToJsonStringExprMacro(),
-            new NestedDataExpressions.ParseJsonExprMacro()
+            new NestedDataExpressions.ToJsonStringExprMacro(jsonMapper),
+            new NestedDataExpressions.ParseJsonExprMacro(jsonMapper)
         )
     );
   }


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

Reply via email to