Skip to content

Commit

Permalink
Lazy load ObjectMappers for array/map/row to json casts
Browse files Browse the repository at this point in the history
Speeds up the tests another ~5% on my laptop
  • Loading branch information
cberner committed Apr 6, 2015
1 parent 66f0c40 commit f54074f
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 12 deletions.
Expand Up @@ -25,6 +25,8 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableList;
import io.airlift.json.ObjectMapperProvider;
Expand All @@ -45,7 +47,7 @@ public class ArrayToJsonCast
extends ParametricOperator
{
public static final ArrayToJsonCast ARRAY_TO_JSON = new ArrayToJsonCast();
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapperProvider().get().registerModule(new SimpleModule().addSerializer(Slice.class, new SliceSerializer()));
private static final Supplier<ObjectMapper> OBJECT_MAPPER = Suppliers.memoize(() -> new ObjectMapperProvider().get().registerModule(new SimpleModule().addSerializer(Slice.class, new SliceSerializer())));
private static final MethodHandle METHOD_HANDLE = methodHandle(ArrayToJsonCast.class, "toJson", Type.class, ConnectorSession.class, Slice.class);

private ArrayToJsonCast()
Expand All @@ -69,7 +71,7 @@ public static Slice toJson(Type arrayType, ConnectorSession session, Slice array
{
Object object = arrayType.getObjectValue(session, createBlock(arrayType, array), 0);
try {
return Slices.utf8Slice(OBJECT_MAPPER.writeValueAsString(object));
return Slices.utf8Slice(OBJECT_MAPPER.get().writeValueAsString(object));
}
catch (JsonProcessingException e) {
throw Throwables.propagate(e);
Expand Down
Expand Up @@ -29,6 +29,8 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableList;
import io.airlift.json.ObjectMapperProvider;
Expand All @@ -51,7 +53,7 @@ public class MapToJsonCast
extends ParametricOperator
{
public static final MapToJsonCast MAP_TO_JSON = new MapToJsonCast();
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapperProvider().get().registerModule(new SimpleModule().addSerializer(Slice.class, new SliceSerializer()).addSerializer(Map.class, new MapSerializer()));
private static final Supplier<ObjectMapper> OBJECT_MAPPER = Suppliers.memoize(() -> new ObjectMapperProvider().get().registerModule(new SimpleModule().addSerializer(Slice.class, new SliceSerializer()).addSerializer(Map.class, new MapSerializer())));
private static final MethodHandle METHOD_HANDLE = methodHandle(MapToJsonCast.class, "toJson", Type.class, Type.class, ConnectorSession.class, Slice.class);

private MapToJsonCast()
Expand All @@ -78,7 +80,7 @@ public static Slice toJson(Type keyType, Type valueType, ConnectorSession sessio
MapType mapType = new MapType(keyType, valueType);
Object object = mapType.getObjectValue(session, createBlock(mapType, slice), 0);
try {
return Slices.utf8Slice(OBJECT_MAPPER.writeValueAsString(object));
return Slices.utf8Slice(OBJECT_MAPPER.get().writeValueAsString(object));
}
catch (JsonProcessingException e) {
throw Throwables.propagate(e);
Expand Down
Expand Up @@ -25,6 +25,8 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableList;
import io.airlift.json.ObjectMapperProvider;
Expand All @@ -45,13 +47,8 @@ public class RowToJsonCast
extends ParametricOperator
{
public static final RowToJsonCast ROW_TO_JSON = new RowToJsonCast();
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapperProvider().get().registerModule(new SimpleModule().addSerializer(Slice.class, new SliceSerializer()));
private static final MethodHandle METHOD_HANDLE;

static
{
METHOD_HANDLE = methodHandle(RowToJsonCast.class, "toJson", Type.class, ConnectorSession.class, Slice.class);
}
private static final Supplier<ObjectMapper> OBJECT_MAPPER = Suppliers.memoize(() -> new ObjectMapperProvider().get().registerModule(new SimpleModule().addSerializer(Slice.class, new SliceSerializer())));
private static final MethodHandle METHOD_HANDLE = methodHandle(RowToJsonCast.class, "toJson", Type.class, ConnectorSession.class, Slice.class);

private RowToJsonCast()
{
Expand All @@ -71,7 +68,7 @@ public static Slice toJson(Type rowType, ConnectorSession session, Slice row)
{
Object object = rowType.getObjectValue(session, createBlock(rowType, row), 0);
try {
return Slices.utf8Slice(OBJECT_MAPPER.writeValueAsString(object));
return Slices.utf8Slice(OBJECT_MAPPER.get().writeValueAsString(object));
}
catch (JsonProcessingException e) {
throw Throwables.propagate(e);
Expand Down

0 comments on commit f54074f

Please sign in to comment.