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]