Skip to content

Commit dd9a53a

Browse files
committed
Prevent modifications of JsonOperators's JSON_FACTORY
`JsonFactory` is mutable.
1 parent c56c82c commit dd9a53a

File tree

5 files changed

+18
-7
lines changed

5 files changed

+18
-7
lines changed

core/trino-main/src/main/java/io/trino/operator/scalar/ArrayToJsonCast.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*/
1414
package io.trino.operator.scalar;
1515

16+
import com.fasterxml.jackson.core.JsonFactory;
1617
import com.fasterxml.jackson.core.JsonGenerator;
1718
import com.google.common.collect.ImmutableList;
1819
import io.airlift.slice.DynamicSliceOutput;
@@ -30,7 +31,6 @@
3031
import java.io.IOException;
3132
import java.lang.invoke.MethodHandle;
3233

33-
import static io.trino.operator.scalar.JsonOperators.JSON_FACTORY;
3434
import static io.trino.spi.StandardErrorCode.INVALID_CAST_ARGUMENT;
3535
import static io.trino.spi.function.InvocationConvention.InvocationArgumentConvention.NEVER_NULL;
3636
import static io.trino.spi.function.InvocationConvention.InvocationReturnConvention.FAIL_ON_NULL;
@@ -39,6 +39,7 @@
3939
import static io.trino.type.JsonType.JSON;
4040
import static io.trino.util.Failures.checkCondition;
4141
import static io.trino.util.JsonUtil.canCastToJson;
42+
import static io.trino.util.JsonUtil.createJsonFactory;
4243
import static io.trino.util.JsonUtil.createJsonGenerator;
4344
import static io.trino.util.Reflection.methodHandle;
4445

@@ -49,6 +50,8 @@ public class ArrayToJsonCast
4950

5051
private static final MethodHandle METHOD_HANDLE = methodHandle(ArrayToJsonCast.class, "toJson", JsonGeneratorWriter.class, Block.class);
5152

53+
private static final JsonFactory JSON_FACTORY = createJsonFactory();
54+
5255
private ArrayToJsonCast()
5356
{
5457
super(FunctionMetadata.scalarBuilder()

core/trino-main/src/main/java/io/trino/operator/scalar/JsonOperators.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
package io.trino.operator.scalar;
1515

1616
import com.fasterxml.jackson.core.JsonFactory;
17-
import com.fasterxml.jackson.core.JsonFactoryBuilder;
1817
import com.fasterxml.jackson.core.JsonGenerator;
1918
import com.fasterxml.jackson.core.JsonParser;
2019
import io.airlift.slice.DynamicSliceOutput;
@@ -30,7 +29,6 @@
3029

3130
import java.io.IOException;
3231

33-
import static com.fasterxml.jackson.core.JsonFactory.Feature.CANONICALIZE_FIELD_NAMES;
3432
import static io.trino.spi.StandardErrorCode.INVALID_CAST_ARGUMENT;
3533
import static io.trino.spi.StandardErrorCode.NUMERIC_VALUE_OUT_OF_RANGE;
3634
import static io.trino.spi.function.OperatorType.CAST;
@@ -46,6 +44,7 @@
4644
import static io.trino.spi.type.StandardTypes.VARCHAR;
4745
import static io.trino.util.DateTimeUtils.printDate;
4846
import static io.trino.util.Failures.checkCondition;
47+
import static io.trino.util.JsonUtil.createJsonFactory;
4948
import static io.trino.util.JsonUtil.createJsonGenerator;
5049
import static io.trino.util.JsonUtil.createJsonParser;
5150
import static io.trino.util.JsonUtil.currentTokenAsBigint;
@@ -61,7 +60,7 @@
6160

6261
public final class JsonOperators
6362
{
64-
public static final JsonFactory JSON_FACTORY = new JsonFactoryBuilder().disable(CANONICALIZE_FIELD_NAMES).build();
63+
private static final JsonFactory JSON_FACTORY = createJsonFactory();
6564

6665
private JsonOperators()
6766
{

core/trino-main/src/main/java/io/trino/operator/scalar/MapToJsonCast.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*/
1414
package io.trino.operator.scalar;
1515

16+
import com.fasterxml.jackson.core.JsonFactory;
1617
import com.fasterxml.jackson.core.JsonGenerator;
1718
import com.google.common.collect.ImmutableList;
1819
import io.airlift.slice.DynamicSliceOutput;
@@ -33,7 +34,6 @@
3334
import java.util.Map;
3435
import java.util.TreeMap;
3536

36-
import static io.trino.operator.scalar.JsonOperators.JSON_FACTORY;
3737
import static io.trino.spi.StandardErrorCode.INVALID_CAST_ARGUMENT;
3838
import static io.trino.spi.function.InvocationConvention.InvocationArgumentConvention.NEVER_NULL;
3939
import static io.trino.spi.function.InvocationConvention.InvocationReturnConvention.FAIL_ON_NULL;
@@ -45,6 +45,7 @@
4545
import static io.trino.util.JsonUtil.JsonGeneratorWriter;
4646
import static io.trino.util.JsonUtil.ObjectKeyProvider;
4747
import static io.trino.util.JsonUtil.canCastToJson;
48+
import static io.trino.util.JsonUtil.createJsonFactory;
4849
import static io.trino.util.JsonUtil.createJsonGenerator;
4950
import static io.trino.util.Reflection.methodHandle;
5051

@@ -54,6 +55,8 @@ public class MapToJsonCast
5455
public static final MapToJsonCast MAP_TO_JSON = new MapToJsonCast();
5556
private static final MethodHandle METHOD_HANDLE = methodHandle(MapToJsonCast.class, "toJson", ObjectKeyProvider.class, JsonGeneratorWriter.class, Block.class);
5657

58+
private static final JsonFactory JSON_FACTORY = createJsonFactory();
59+
5760
private MapToJsonCast()
5861
{
5962
super(FunctionMetadata.scalarBuilder()

core/trino-main/src/main/java/io/trino/operator/scalar/RowToJsonCast.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*/
1414
package io.trino.operator.scalar;
1515

16+
import com.fasterxml.jackson.core.JsonFactory;
1617
import com.fasterxml.jackson.core.JsonGenerator;
1718
import com.google.common.collect.ImmutableList;
1819
import io.airlift.slice.DynamicSliceOutput;
@@ -35,7 +36,6 @@
3536
import java.util.ArrayList;
3637
import java.util.List;
3738

38-
import static io.trino.operator.scalar.JsonOperators.JSON_FACTORY;
3939
import static io.trino.spi.StandardErrorCode.INVALID_CAST_ARGUMENT;
4040
import static io.trino.spi.function.InvocationConvention.InvocationArgumentConvention.NEVER_NULL;
4141
import static io.trino.spi.function.InvocationConvention.InvocationReturnConvention.FAIL_ON_NULL;
@@ -44,6 +44,7 @@
4444
import static io.trino.util.Failures.checkCondition;
4545
import static io.trino.util.JsonUtil.JsonGeneratorWriter.createJsonGeneratorWriter;
4646
import static io.trino.util.JsonUtil.canCastToJson;
47+
import static io.trino.util.JsonUtil.createJsonFactory;
4748
import static io.trino.util.JsonUtil.createJsonGenerator;
4849
import static io.trino.util.Reflection.methodHandle;
4950

@@ -54,6 +55,8 @@ public class RowToJsonCast
5455

5556
private static final MethodHandle METHOD_HANDLE = methodHandle(RowToJsonCast.class, "toJsonObject", List.class, List.class, Block.class);
5657

58+
private static final JsonFactory JSON_FACTORY = createJsonFactory();
59+
5760
private RowToJsonCast()
5861
{
5962
super(FunctionMetadata.scalarBuilder()

core/trino-main/src/main/java/io/trino/type/DecimalCasts.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*/
1414
package io.trino.type;
1515

16+
import com.fasterxml.jackson.core.JsonFactory;
1617
import com.fasterxml.jackson.core.JsonGenerator;
1718
import com.fasterxml.jackson.core.JsonParser;
1819
import com.google.common.collect.ImmutableList;
@@ -39,7 +40,6 @@
3940
import java.math.BigDecimal;
4041

4142
import static io.airlift.slice.Slices.utf8Slice;
42-
import static io.trino.operator.scalar.JsonOperators.JSON_FACTORY;
4343
import static io.trino.spi.StandardErrorCode.INVALID_CAST_ARGUMENT;
4444
import static io.trino.spi.function.InvocationConvention.InvocationReturnConvention.FAIL_ON_NULL;
4545
import static io.trino.spi.function.InvocationConvention.InvocationReturnConvention.NULLABLE_RETURN;
@@ -61,6 +61,7 @@
6161
import static io.trino.spi.type.VarcharType.UNBOUNDED_LENGTH;
6262
import static io.trino.type.JsonType.JSON;
6363
import static io.trino.util.Failures.checkCondition;
64+
import static io.trino.util.JsonUtil.createJsonFactory;
6465
import static io.trino.util.JsonUtil.createJsonGenerator;
6566
import static io.trino.util.JsonUtil.createJsonParser;
6667
import static io.trino.util.JsonUtil.currentTokenAsLongDecimal;
@@ -92,6 +93,8 @@ public final class DecimalCasts
9293
public static final SqlScalarFunction DECIMAL_TO_JSON_CAST = castFunctionFromDecimalTo(JSON.getTypeSignature(), "shortDecimalToJson", "longDecimalToJson");
9394
public static final SqlScalarFunction JSON_TO_DECIMAL_CAST = castFunctionToDecimalFromBuilder(JSON.getTypeSignature(), true, "jsonToShortDecimal", "jsonToLongDecimal");
9495

96+
private static final JsonFactory JSON_FACTORY = createJsonFactory();
97+
9598
private static SqlScalarFunction castFunctionFromDecimalTo(TypeSignature to, String... methodNames)
9699
{
97100
Signature signature = Signature.builder()

0 commit comments

Comments
 (0)