diff --git a/presto-clickhouse/src/main/java/com/facebook/presto/plugin/clickhouse/ClickHouseClient.java b/presto-clickhouse/src/main/java/com/facebook/presto/plugin/clickhouse/ClickHouseClient.java
index fce660719beff..87eb7606cd841 100755
--- a/presto-clickhouse/src/main/java/com/facebook/presto/plugin/clickhouse/ClickHouseClient.java
+++ b/presto-clickhouse/src/main/java/com/facebook/presto/plugin/clickhouse/ClickHouseClient.java
@@ -854,10 +854,10 @@ private String toWriteMapping(Type type)
if (type == BIGINT) {
return "Int64";
}
- if (type == REAL) {
+ if (type.equals(REAL)) {
return "Float32";
}
- if (type == DOUBLE) {
+ if (type.equals(DOUBLE)) {
return "Float64";
}
if (type instanceof DecimalType) {
diff --git a/presto-clickhouse/src/main/java/com/facebook/presto/plugin/clickhouse/ClickHouseColumnHandle.java b/presto-clickhouse/src/main/java/com/facebook/presto/plugin/clickhouse/ClickHouseColumnHandle.java
index fb4d7148cb891..d0c616554f6cc 100755
--- a/presto-clickhouse/src/main/java/com/facebook/presto/plugin/clickhouse/ClickHouseColumnHandle.java
+++ b/presto-clickhouse/src/main/java/com/facebook/presto/plugin/clickhouse/ClickHouseColumnHandle.java
@@ -195,10 +195,10 @@ public static ClickHouseTypeHandle toMappingDefaultJdbcHandle(Type type)
if (type == BIGINT) {
return new ClickHouseTypeHandle(Types.BIGINT, Optional.of("bigint"), 8, 0, Optional.empty(), Optional.empty());
}
- if (type == REAL) {
+ if (type.equals(REAL)) {
return new ClickHouseTypeHandle(Types.REAL, Optional.of("real"), 16, 4, Optional.empty(), Optional.empty());
}
- if (type == DOUBLE) {
+ if (type.equals(DOUBLE)) {
return new ClickHouseTypeHandle(Types.DOUBLE, Optional.of("double precision"), 32, 4, Optional.empty(), Optional.empty());
}
if (type instanceof CharType || type instanceof VarcharType) {
diff --git a/presto-common/src/main/java/com/facebook/presto/common/predicate/TupleDomainFilterUtils.java b/presto-common/src/main/java/com/facebook/presto/common/predicate/TupleDomainFilterUtils.java
index 526eb64057f88..08c012bb5b684 100644
--- a/presto-common/src/main/java/com/facebook/presto/common/predicate/TupleDomainFilterUtils.java
+++ b/presto-common/src/main/java/com/facebook/presto/common/predicate/TupleDomainFilterUtils.java
@@ -148,7 +148,7 @@ public static TupleDomainFilter toFilter(Domain domain)
/**
* Returns true is ranges represent != or NOT IN filter for double, float or string column.
- *
+ *
* The logic is to return true if ranges are next to each other, but don't include the touch value.
*/
private static boolean isNotIn(List ranges)
@@ -161,7 +161,7 @@ private static boolean isNotIn(List ranges)
Marker previousHigh = firstRange.getHigh();
Type type = previousHigh.getType();
- if (type != DOUBLE && type != REAL && !isVarcharType(type) && !(type instanceof CharType)) {
+ if (!type.equals(DOUBLE) && !type.equals(REAL) && !isVarcharType(type) && !(type instanceof CharType)) {
return false;
}
@@ -219,10 +219,10 @@ private static TupleDomainFilter createRangeFilter(Type type, Range range, boole
checkArgument(range.isSingleValue(), "Unexpected range of boolean values");
return BooleanValue.of(((Boolean) range.getSingleValue()).booleanValue(), nullAllowed);
}
- if (type == DOUBLE) {
+ if (type.equals(DOUBLE)) {
return doubleRangeToFilter(range, nullAllowed);
}
- if (type == REAL) {
+ if (type.equals(REAL)) {
return floatRangeToFilter(range, nullAllowed);
}
if (type instanceof DecimalType) {
diff --git a/presto-common/src/main/java/com/facebook/presto/common/type/DoubleType.java b/presto-common/src/main/java/com/facebook/presto/common/type/DoubleType.java
index 7c36919d7d537..7f49c1f58680a 100644
--- a/presto-common/src/main/java/com/facebook/presto/common/type/DoubleType.java
+++ b/presto-common/src/main/java/com/facebook/presto/common/type/DoubleType.java
@@ -29,11 +29,15 @@ public final class DoubleType
extends AbstractPrimitiveType
implements FixedWidthType
{
- public static final DoubleType DOUBLE = new DoubleType();
+ public static final DoubleType DOUBLE = new DoubleType(true);
+ public static final DoubleType OLD_NAN_DOUBLE = new DoubleType(false);
- private DoubleType()
+ private final boolean useNewNanDefintion;
+
+ private DoubleType(boolean useNewNanDefintion)
{
super(parseTypeSignature(StandardTypes.DOUBLE), double.class);
+ this.useNewNanDefintion = useNewNanDefintion;
}
@Override
@@ -149,7 +153,7 @@ public final BlockBuilder createFixedSizeBlockBuilder(int positionCount)
@SuppressWarnings("EqualsWhichDoesntCheckParameterClass")
public boolean equals(Object other)
{
- return other == DOUBLE;
+ return other instanceof DoubleType;
}
@Override
diff --git a/presto-common/src/main/java/com/facebook/presto/common/type/RealType.java b/presto-common/src/main/java/com/facebook/presto/common/type/RealType.java
index 118caf4c6e67e..3334994ce8bb6 100644
--- a/presto-common/src/main/java/com/facebook/presto/common/type/RealType.java
+++ b/presto-common/src/main/java/com/facebook/presto/common/type/RealType.java
@@ -27,11 +27,14 @@
public final class RealType
extends AbstractIntType
{
- public static final RealType REAL = new RealType();
+ public static final RealType REAL = new RealType(true);
+ public static final RealType OLD_NAN_REAL = new RealType(false);
+ private final boolean useNewNanDefinition;
- private RealType()
+ private RealType(boolean useNewNanDefinition)
{
super(parseTypeSignature(StandardTypes.REAL));
+ this.useNewNanDefinition = useNewNanDefinition;
}
@Override
@@ -86,7 +89,7 @@ public void writeLong(BlockBuilder blockBuilder, long value)
@Override
public boolean equals(Object other)
{
- return other == REAL;
+ return other instanceof RealType;
}
@Override
diff --git a/presto-common/src/main/java/com/facebook/presto/common/type/TypeUtils.java b/presto-common/src/main/java/com/facebook/presto/common/type/TypeUtils.java
index 1de251ac68842..1d82beaa51ed5 100644
--- a/presto-common/src/main/java/com/facebook/presto/common/type/TypeUtils.java
+++ b/presto-common/src/main/java/com/facebook/presto/common/type/TypeUtils.java
@@ -175,10 +175,10 @@ public static boolean isFloatingPointNaN(Type type, Object value)
requireNonNull(type, "type is null");
requireNonNull(value, "value is null");
- if (type == DOUBLE) {
+ if (type.equals(DOUBLE)) {
return Double.isNaN((double) value);
}
- if (type == REAL) {
+ if (type.equals(REAL)) {
return Float.isNaN(intBitsToFloat(toIntExact((long) value)));
}
return false;
diff --git a/presto-common/src/test/java/com/facebook/presto/common/block/TestBlockRetainedSizeBreakdown.java b/presto-common/src/test/java/com/facebook/presto/common/block/TestBlockRetainedSizeBreakdown.java
index 7de089c9cf440..0a26d7a858c35 100644
--- a/presto-common/src/test/java/com/facebook/presto/common/block/TestBlockRetainedSizeBreakdown.java
+++ b/presto-common/src/test/java/com/facebook/presto/common/block/TestBlockRetainedSizeBreakdown.java
@@ -176,7 +176,7 @@ private static Object castIntegerToObject(int value, Type type)
if (type == VARCHAR) {
return String.valueOf(value);
}
- if (type == DOUBLE) {
+ if (type.equals(DOUBLE)) {
return (double) value;
}
throw new UnsupportedOperationException();
diff --git a/presto-druid/src/main/java/com/facebook/presto/druid/column/ColumnReader.java b/presto-druid/src/main/java/com/facebook/presto/druid/column/ColumnReader.java
index 5ff07f5fbae0f..81dc3c5a76fb5 100644
--- a/presto-druid/src/main/java/com/facebook/presto/druid/column/ColumnReader.java
+++ b/presto-druid/src/main/java/com/facebook/presto/druid/column/ColumnReader.java
@@ -35,13 +35,13 @@ static ColumnReader createColumnReader(Type type, ColumnValueSelector valueSelec
if (type == VARCHAR) {
return new StringColumnReader(valueSelector);
}
- if (type == DOUBLE) {
+ if (type.equals(DOUBLE)) {
return new DoubleColumnReader(valueSelector);
}
if (type == BIGINT) {
return new LongColumnReader(valueSelector);
}
- if (type == REAL) {
+ if (type.equals(REAL)) {
return new FloatColumnReader(valueSelector);
}
if (type == TIMESTAMP) {
diff --git a/presto-druid/src/main/java/com/facebook/presto/druid/column/DoubleColumnReader.java b/presto-druid/src/main/java/com/facebook/presto/druid/column/DoubleColumnReader.java
index 0b4fdc4ea6ad0..0cb114fd39458 100644
--- a/presto-druid/src/main/java/com/facebook/presto/druid/column/DoubleColumnReader.java
+++ b/presto-druid/src/main/java/com/facebook/presto/druid/column/DoubleColumnReader.java
@@ -35,7 +35,7 @@ public DoubleColumnReader(ColumnValueSelector valueSelector)
@Override
public Block readBlock(Type type, int batchSize)
{
- checkArgument(type == DOUBLE);
+ checkArgument(type.equals(DOUBLE));
BlockBuilder builder = type.createBlockBuilder(null, batchSize);
for (int i = 0; i < batchSize; i++) {
type.writeDouble(builder, valueSelector.getDouble());
diff --git a/presto-druid/src/main/java/com/facebook/presto/druid/column/FloatColumnReader.java b/presto-druid/src/main/java/com/facebook/presto/druid/column/FloatColumnReader.java
index 48d3b393e70c1..b90be49ca3e27 100644
--- a/presto-druid/src/main/java/com/facebook/presto/druid/column/FloatColumnReader.java
+++ b/presto-druid/src/main/java/com/facebook/presto/druid/column/FloatColumnReader.java
@@ -36,7 +36,7 @@ public FloatColumnReader(ColumnValueSelector valueSelector)
@Override
public Block readBlock(Type type, int batchSize)
{
- checkArgument(type == REAL);
+ checkArgument(type.equals(REAL));
BlockBuilder builder = type.createBlockBuilder(null, batchSize);
for (int i = 0; i < batchSize; i++) {
type.writeLong(builder, floatToRawIntBits(valueSelector.getFloat()));
diff --git a/presto-elasticsearch/src/test/java/com/facebook/presto/elasticsearch/ElasticsearchLoader.java b/presto-elasticsearch/src/test/java/com/facebook/presto/elasticsearch/ElasticsearchLoader.java
index 80545c6488a9b..f8ed7dac0d6eb 100644
--- a/presto-elasticsearch/src/test/java/com/facebook/presto/elasticsearch/ElasticsearchLoader.java
+++ b/presto-elasticsearch/src/test/java/com/facebook/presto/elasticsearch/ElasticsearchLoader.java
@@ -138,7 +138,7 @@ private Object convertValue(Object value, Type type)
if (type == INTEGER) {
return ((Number) value).intValue();
}
- if (type == DOUBLE) {
+ if (type.equals(DOUBLE)) {
return ((Number) value).doubleValue();
}
throw new IllegalArgumentException("Unhandled type: " + type);
diff --git a/presto-hive-function-namespace/src/test/java/com/facebook/presto/hive/functions/AbstractTestHiveFunctions.java b/presto-hive-function-namespace/src/test/java/com/facebook/presto/hive/functions/AbstractTestHiveFunctions.java
index fbaa177ca7718..a9ec89406e4dd 100644
--- a/presto-hive-function-namespace/src/test/java/com/facebook/presto/hive/functions/AbstractTestHiveFunctions.java
+++ b/presto-hive-function-namespace/src/test/java/com/facebook/presto/hive/functions/AbstractTestHiveFunctions.java
@@ -108,7 +108,7 @@ public void assertQuery(@Language("SQL") String sql, Column... cols)
for (int j = 0; j < numColumns; j++) {
Object actual = rows.get(i).getField(j);
Object expected = cols[j].values[i];
- if (cols[j].type == DOUBLE) {
+ if (cols[j].type.equals(DOUBLE)) {
assertEquals(((Number) actual).doubleValue(), ((double) expected), 0.000001);
}
else {
diff --git a/presto-hive-function-namespace/src/test/java/com/facebook/presto/hive/functions/TestHiveAggregationFunctions.java b/presto-hive-function-namespace/src/test/java/com/facebook/presto/hive/functions/TestHiveAggregationFunctions.java
index edf1a2091bbb2..03294c4c98d2d 100644
--- a/presto-hive-function-namespace/src/test/java/com/facebook/presto/hive/functions/TestHiveAggregationFunctions.java
+++ b/presto-hive-function-namespace/src/test/java/com/facebook/presto/hive/functions/TestHiveAggregationFunctions.java
@@ -128,7 +128,7 @@ public void check(@Language("SQL") String query, Column... expectedColumns)
for (int j = 0; j < numColumns; j++) {
Object actual = rows.get(i).getField(j);
Object expected = expectedColumns[j].values[i];
- if (expectedColumns[j].type == DOUBLE) {
+ if (expectedColumns[j].type.equals(DOUBLE)) {
assertEquals(((Number) actual).doubleValue(), ((double) expected), 0.000001);
}
else {
diff --git a/presto-hive/src/main/java/com/facebook/presto/hive/FilteringPageSource.java b/presto-hive/src/main/java/com/facebook/presto/hive/FilteringPageSource.java
index 12006fb329d3d..07f47603e0523 100644
--- a/presto-hive/src/main/java/com/facebook/presto/hive/FilteringPageSource.java
+++ b/presto-hive/src/main/java/com/facebook/presto/hive/FilteringPageSource.java
@@ -246,11 +246,11 @@ private static boolean testNonNullPosition(Block block, int position, Type type,
return filter.testBoolean(type.getBoolean(block, position));
}
- if (type == DOUBLE) {
+ if (type.equals(DOUBLE)) {
return filter.testDouble(longBitsToDouble(block.getLong(position)));
}
- if (type == REAL) {
+ if (type.equals(REAL)) {
return filter.testFloat(intBitsToFloat(block.getInt(position)));
}
diff --git a/presto-kafka/src/main/java/com/facebook/presto/kafka/encoder/AbstractRowEncoder.java b/presto-kafka/src/main/java/com/facebook/presto/kafka/encoder/AbstractRowEncoder.java
index 331b57db5426a..270c349f45a26 100644
--- a/presto-kafka/src/main/java/com/facebook/presto/kafka/encoder/AbstractRowEncoder.java
+++ b/presto-kafka/src/main/java/com/facebook/presto/kafka/encoder/AbstractRowEncoder.java
@@ -91,10 +91,10 @@ else if (type == SMALLINT) {
else if (type == TINYINT) {
appendByte(SignedBytes.checkedCast(type.getLong(block, position)));
}
- else if (type == DOUBLE) {
+ else if (type.equals(DOUBLE)) {
appendDouble(type.getDouble(block, position));
}
- else if (type == REAL) {
+ else if (type.equals(REAL)) {
appendFloat(intBitsToFloat(toIntExact(type.getLong(block, position))));
}
else if (isVarcharType(type)) {
diff --git a/presto-kafka/src/main/java/com/facebook/presto/kafka/encoder/raw/RawRowEncoder.java b/presto-kafka/src/main/java/com/facebook/presto/kafka/encoder/raw/RawRowEncoder.java
index 5d67bde135404..8aaec99b15369 100644
--- a/presto-kafka/src/main/java/com/facebook/presto/kafka/encoder/raw/RawRowEncoder.java
+++ b/presto-kafka/src/main/java/com/facebook/presto/kafka/encoder/raw/RawRowEncoder.java
@@ -196,7 +196,7 @@ else if (columnType == TINYINT) {
else if (columnType == BOOLEAN) {
checkFieldTypeOneOf(fieldType, columnName, columnType, FieldType.BYTE, FieldType.SHORT, FieldType.INT, FieldType.LONG);
}
- else if (columnType == DOUBLE) {
+ else if (columnType.equals(DOUBLE)) {
checkFieldTypeOneOf(fieldType, columnName, columnType, FieldType.DOUBLE, FieldType.FLOAT);
}
else if (isVarcharType(columnType)) {
diff --git a/presto-kudu/src/main/java/com/facebook/presto/kudu/TypeHelper.java b/presto-kudu/src/main/java/com/facebook/presto/kudu/TypeHelper.java
index 8064da45709de..cccfe3ce4c2a6 100644
--- a/presto-kudu/src/main/java/com/facebook/presto/kudu/TypeHelper.java
+++ b/presto-kudu/src/main/java/com/facebook/presto/kudu/TypeHelper.java
@@ -65,10 +65,10 @@ else if (type == SmallintType.SMALLINT) {
else if (type == TinyintType.TINYINT) {
return org.apache.kudu.Type.INT8;
}
- else if (type == RealType.REAL) {
+ else if (type.equals(RealType.REAL)) {
return org.apache.kudu.Type.FLOAT;
}
- else if (type == DoubleType.DOUBLE) {
+ else if (type.equals(DoubleType.DOUBLE)) {
return org.apache.kudu.Type.DOUBLE;
}
else if (type == BooleanType.BOOLEAN) {
@@ -146,10 +146,10 @@ else if (type == SmallintType.SMALLINT) {
else if (type == TinyintType.TINYINT) {
return ((Long) nativeValue).byteValue();
}
- else if (type == DoubleType.DOUBLE) {
+ else if (type.equals(DoubleType.DOUBLE)) {
return nativeValue;
}
- else if (type == RealType.REAL) {
+ else if (type.equals(RealType.REAL)) {
// conversion can result in precision lost
return intBitsToFloat(((Long) nativeValue).intValue());
}
@@ -191,10 +191,10 @@ else if (type == SmallintType.SMALLINT) {
else if (type == TinyintType.TINYINT) {
return row.getByte(field);
}
- else if (type == DoubleType.DOUBLE) {
+ else if (type.equals(DoubleType.DOUBLE)) {
return row.getDouble(field);
}
- else if (type == RealType.REAL) {
+ else if (type.equals(RealType.REAL)) {
return row.getFloat(field);
}
else if (type == BooleanType.BOOLEAN) {
@@ -229,7 +229,7 @@ else if (type == SmallintType.SMALLINT) {
else if (type == TinyintType.TINYINT) {
return row.getByte(field);
}
- else if (type == RealType.REAL) {
+ else if (type.equals(RealType.REAL)) {
return floatToRawIntBits(row.getFloat(field));
}
else if (type instanceof DecimalType) {
@@ -258,7 +258,7 @@ public static boolean getBoolean(Type type, RowResult row, int field)
public static double getDouble(Type type, RowResult row, int field)
{
- if (type == DoubleType.DOUBLE) {
+ if (type.equals(DoubleType.DOUBLE)) {
return row.getDouble(field);
}
else {
diff --git a/presto-main/src/main/java/com/facebook/presto/metadata/BuiltInTypeAndFunctionNamespaceManager.java b/presto-main/src/main/java/com/facebook/presto/metadata/BuiltInTypeAndFunctionNamespaceManager.java
index c9c02abf6cec5..ab87beb5ff99d 100644
--- a/presto-main/src/main/java/com/facebook/presto/metadata/BuiltInTypeAndFunctionNamespaceManager.java
+++ b/presto-main/src/main/java/com/facebook/presto/metadata/BuiltInTypeAndFunctionNamespaceManager.java
@@ -316,6 +316,7 @@
import static com.facebook.presto.common.type.BooleanType.BOOLEAN;
import static com.facebook.presto.common.type.DateType.DATE;
import static com.facebook.presto.common.type.DoubleType.DOUBLE;
+import static com.facebook.presto.common.type.DoubleType.OLD_NAN_DOUBLE;
import static com.facebook.presto.common.type.HyperLogLogType.HYPER_LOG_LOG;
import static com.facebook.presto.common.type.IntegerType.INTEGER;
import static com.facebook.presto.common.type.JsonType.JSON;
@@ -323,6 +324,7 @@
import static com.facebook.presto.common.type.KllSketchParametricType.KLL_SKETCH;
import static com.facebook.presto.common.type.P4HyperLogLogType.P4_HYPER_LOG_LOG;
import static com.facebook.presto.common.type.QuantileDigestParametricType.QDIGEST;
+import static com.facebook.presto.common.type.RealType.OLD_NAN_REAL;
import static com.facebook.presto.common.type.RealType.REAL;
import static com.facebook.presto.common.type.SmallintType.SMALLINT;
import static com.facebook.presto.common.type.TDigestParametricType.TDIGEST;
@@ -605,14 +607,14 @@ public BuiltInTypeAndFunctionNamespaceManager(
.build(CacheLoader.from(this::instantiateParametricType));
registerBuiltInFunctions(getBuiltInFunctions(featuresConfig));
- registerBuiltInTypes();
+ registerBuiltInTypes(featuresConfig);
for (Type type : requireNonNull(types, "types is null")) {
addType(type);
}
}
- private void registerBuiltInTypes()
+ private void registerBuiltInTypes(FeaturesConfig featuresConfig)
{
// always add the built-in types; Presto will not function without these
addType(UNKNOWN);
@@ -621,8 +623,14 @@ private void registerBuiltInTypes()
addType(INTEGER);
addType(SMALLINT);
addType(TINYINT);
- addType(DOUBLE);
- addType(REAL);
+ if(!featuresConfig.getUseNewNanDefinition()) {
+ addType(OLD_NAN_DOUBLE);
+ addType(OLD_NAN_REAL);
+
+ } else {
+ addType(DOUBLE);
+ addType(REAL);
+ }
addType(VARBINARY);
addType(DATE);
addType(TIME);
diff --git a/presto-main/src/main/java/com/facebook/presto/operator/DynamicFilterSourceOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/DynamicFilterSourceOperator.java
index 2cc05aee94f4f..8645258ba7acd 100644
--- a/presto-main/src/main/java/com/facebook/presto/operator/DynamicFilterSourceOperator.java
+++ b/presto-main/src/main/java/com/facebook/presto/operator/DynamicFilterSourceOperator.java
@@ -191,7 +191,7 @@ private DynamicFilterSourceOperator(
for (int channelIndex = 0; channelIndex < channels.size(); ++channelIndex) {
Type type = channels.get(channelIndex).getType();
// Skipping DOUBLE and REAL in collectMinMaxValues to avoid dealing with NaN values
- if (minMaxCollectionLimit > 0 && type.isOrderable() && type != DOUBLE && type != REAL) {
+ if (minMaxCollectionLimit > 0 && type.isOrderable() && !type.equals(DOUBLE) && !type.equals(REAL)) {
minMaxChannelsBuilder.add(channelIndex);
}
this.blockBuilders[channelIndex] = type.createBlockBuilder(null, EXPECTED_BLOCK_BUILDER_SIZE);
diff --git a/presto-main/src/main/java/com/facebook/presto/sql/analyzer/ExpressionAnalyzer.java b/presto-main/src/main/java/com/facebook/presto/sql/analyzer/ExpressionAnalyzer.java
index 2b887077e84ac..40b4b98e8241b 100644
--- a/presto-main/src/main/java/com/facebook/presto/sql/analyzer/ExpressionAnalyzer.java
+++ b/presto-main/src/main/java/com/facebook/presto/sql/analyzer/ExpressionAnalyzer.java
@@ -844,7 +844,7 @@ protected Type visitLongLiteral(LongLiteral node, StackableAstVisitorContext context)
{
- return setExpressionType(node, DOUBLE);
+ return setExpressionType(node, functionAndTypeResolver.getType(DOUBLE.getTypeSignature()));
}
@Override
diff --git a/presto-main/src/main/java/com/facebook/presto/sql/relational/SqlToRowExpressionTranslator.java b/presto-main/src/main/java/com/facebook/presto/sql/relational/SqlToRowExpressionTranslator.java
index 516266ee99951..31889637c4505 100644
--- a/presto-main/src/main/java/com/facebook/presto/sql/relational/SqlToRowExpressionTranslator.java
+++ b/presto-main/src/main/java/com/facebook/presto/sql/relational/SqlToRowExpressionTranslator.java
@@ -358,7 +358,7 @@ protected RowExpression visitLongLiteral(LongLiteral node, Context context)
@Override
protected RowExpression visitDoubleLiteral(DoubleLiteral node, Context context)
{
- return constant(node.getValue(), DOUBLE);
+ return constant(node.getValue(), functionAndTypeManager.getType(DOUBLE.getTypeSignature()));
}
@Override
diff --git a/presto-main/src/test/java/com/facebook/presto/block/BlockAssertions.java b/presto-main/src/test/java/com/facebook/presto/block/BlockAssertions.java
index 24997174e547d..299c196d96c68 100644
--- a/presto-main/src/test/java/com/facebook/presto/block/BlockAssertions.java
+++ b/presto-main/src/test/java/com/facebook/presto/block/BlockAssertions.java
@@ -781,7 +781,7 @@ public static Block createRandomBlockForType(
else if (type == BIGINT) {
block = createRandomLongsBlock(positionCount, primitiveNullRate);
}
- else if (type == INTEGER || type == REAL) {
+ else if (type == INTEGER || type.equals(REAL)) {
block = createRandomIntsBlock(positionCount, primitiveNullRate);
}
else if (type == SMALLINT) {
diff --git a/presto-main/src/test/java/com/facebook/presto/operator/scalar/BenchmarkJsonToArrayCast.java b/presto-main/src/test/java/com/facebook/presto/operator/scalar/BenchmarkJsonToArrayCast.java
index bf1edd7162b4a..5ef9b93f111f7 100644
--- a/presto-main/src/test/java/com/facebook/presto/operator/scalar/BenchmarkJsonToArrayCast.java
+++ b/presto-main/src/test/java/com/facebook/presto/operator/scalar/BenchmarkJsonToArrayCast.java
@@ -151,7 +151,7 @@ private static String generateRandomJsonValue(Type valueType)
if (valueType == BIGINT) {
return Long.toString(ThreadLocalRandom.current().nextLong());
}
- else if (valueType == DOUBLE) {
+ else if (valueType.equals(DOUBLE)) {
return Double.toString(ThreadLocalRandom.current().nextDouble());
}
else if (valueType == VARCHAR) {
diff --git a/presto-main/src/test/java/com/facebook/presto/operator/scalar/BenchmarkJsonToMapCast.java b/presto-main/src/test/java/com/facebook/presto/operator/scalar/BenchmarkJsonToMapCast.java
index dac5dd062d631..9e3712ac72a98 100644
--- a/presto-main/src/test/java/com/facebook/presto/operator/scalar/BenchmarkJsonToMapCast.java
+++ b/presto-main/src/test/java/com/facebook/presto/operator/scalar/BenchmarkJsonToMapCast.java
@@ -155,7 +155,7 @@ private static String generateRandomJsonValue(Type valueType)
if (valueType == BIGINT) {
return Long.toString(ThreadLocalRandom.current().nextLong());
}
- else if (valueType == DOUBLE) {
+ else if (valueType.equals(DOUBLE)) {
return Double.toString(ThreadLocalRandom.current().nextDouble());
}
else if (valueType == VARCHAR) {
diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestExpressionDomainTranslator.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestExpressionDomainTranslator.java
index 8dac150e53b12..2686605fdc6d6 100644
--- a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestExpressionDomainTranslator.java
+++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestExpressionDomainTranslator.java
@@ -1556,7 +1556,7 @@ public T getMax()
public boolean isFractional()
{
- return type == DOUBLE || type == REAL || (type instanceof DecimalType && ((DecimalType) type).getScale() > 0);
+ return type.equals(DOUBLE) || type.equals(REAL) || (type instanceof DecimalType && ((DecimalType) type).getScale() > 0);
}
}
}
diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestRowExpressionDomainTranslator.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestRowExpressionDomainTranslator.java
index 9c73eb2b4450c..1d12d1ddc002a 100644
--- a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestRowExpressionDomainTranslator.java
+++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestRowExpressionDomainTranslator.java
@@ -201,9 +201,9 @@ public void testInOptimization()
assertEquals(toPredicate(tupleDomain), and(lessThan(C_BIGINT, bigintLiteral(4L)), not(bigintIn(C_BIGINT, ImmutableList.of(1L, 2L, 3L)))));
testDomain = Domain.create(ValueSet.ofRanges(
- Range.range(BIGINT, 1L, true, 3L, true),
- Range.range(BIGINT, 5L, true, 7L, true),
- Range.range(BIGINT, 9L, true, 11L, true)),
+ Range.range(BIGINT, 1L, true, 3L, true),
+ Range.range(BIGINT, 5L, true, 7L, true),
+ Range.range(BIGINT, 9L, true, 11L, true)),
false);
tupleDomain = withColumnDomains(ImmutableMap.builder().put(C_BIGINT, testDomain).build());
@@ -212,7 +212,7 @@ public void testInOptimization()
testDomain = Domain.create(
ValueSet.ofRanges(
- Range.lessThan(BIGINT, 4L))
+ Range.lessThan(BIGINT, 4L))
.intersect(ValueSet.all(BIGINT)
.subtract(ValueSet.ofRanges(Range.equal(BIGINT, 1L), Range.equal(BIGINT, 2L), Range.equal(BIGINT, 3L))))
.union(ValueSet.ofRanges(Range.range(BIGINT, 7L, true, 9L, true))), false);
@@ -1444,7 +1444,7 @@ public T getMax()
public boolean isFractional()
{
- return input.getType() == DOUBLE || input.getType() == REAL || (input.getType() instanceof DecimalType && ((DecimalType) input.getType()).getScale() > 0);
+ return input.getType().equals(DOUBLE) || input.getType().equals(REAL) || (input.getType() instanceof DecimalType && ((DecimalType) input.getType()).getScale() > 0);
}
}
}
diff --git a/presto-main/src/test/java/com/facebook/presto/type/khyperloglog/TestKHyperLogLogAggregationFunction.java b/presto-main/src/test/java/com/facebook/presto/type/khyperloglog/TestKHyperLogLogAggregationFunction.java
index 9a774be56f8eb..078144583b11c 100644
--- a/presto-main/src/test/java/com/facebook/presto/type/khyperloglog/TestKHyperLogLogAggregationFunction.java
+++ b/presto-main/src/test/java/com/facebook/presto/type/khyperloglog/TestKHyperLogLogAggregationFunction.java
@@ -173,7 +173,7 @@ private void testAggregation(Type valueType, List> values, Type uiiType, List<
private long toLong(Object value, Type type)
{
- if (type == DOUBLE) {
+ if (type.equals(DOUBLE)) {
return Double.doubleToLongBits((double) value);
}
else if (type == VARCHAR) {
@@ -186,7 +186,7 @@ else if (type == VARCHAR) {
private Block buildBlock(List> values, Type type)
{
- if (type == DOUBLE) {
+ if (type.equals(DOUBLE)) {
return createDoublesBlock(values.stream().map(o -> (Double) o).collect(Collectors.toList()));
}
else if (type == VARCHAR) {
diff --git a/presto-orc/src/main/java/com/facebook/presto/orc/OrcSelectiveRecordReader.java b/presto-orc/src/main/java/com/facebook/presto/orc/OrcSelectiveRecordReader.java
index db6122eca009b..6575b340fd694 100644
--- a/presto-orc/src/main/java/com/facebook/presto/orc/OrcSelectiveRecordReader.java
+++ b/presto-orc/src/main/java/com/facebook/presto/orc/OrcSelectiveRecordReader.java
@@ -519,7 +519,7 @@ private static int scoreType(Type type)
return 20;
}
- if (type == REAL || type == DOUBLE) {
+ if (type.equals(REAL) || type.equals(DOUBLE)) {
return 30;
}
diff --git a/presto-orc/src/main/java/com/facebook/presto/orc/TupleDomainOrcPredicate.java b/presto-orc/src/main/java/com/facebook/presto/orc/TupleDomainOrcPredicate.java
index ce53e37f9784e..f605dabd507c5 100644
--- a/presto-orc/src/main/java/com/facebook/presto/orc/TupleDomainOrcPredicate.java
+++ b/presto-orc/src/main/java/com/facebook/presto/orc/TupleDomainOrcPredicate.java
@@ -167,7 +167,7 @@ public static boolean checkInBloomFilter(BloomFilter bloomFilter, Object predica
return bloomFilter.testLong(((Number) predicateValue).longValue());
}
- if (sqlType == DOUBLE) {
+ if (sqlType.equals(DOUBLE)) {
return bloomFilter.testDouble((Double) predicateValue);
}
diff --git a/presto-orc/src/main/java/com/facebook/presto/orc/metadata/statistics/DoubleStatisticsBuilder.java b/presto-orc/src/main/java/com/facebook/presto/orc/metadata/statistics/DoubleStatisticsBuilder.java
index a99bf8c4cd0ae..e5f79a900fc74 100644
--- a/presto-orc/src/main/java/com/facebook/presto/orc/metadata/statistics/DoubleStatisticsBuilder.java
+++ b/presto-orc/src/main/java/com/facebook/presto/orc/metadata/statistics/DoubleStatisticsBuilder.java
@@ -38,7 +38,7 @@ public void addBlock(Type type, Block block)
for (int position = 0; position < block.getPositionCount(); position++) {
if (!block.isNull(position)) {
double value;
- if (type == RealType.REAL) {
+ if (type.equals(RealType.REAL)) {
value = Float.intBitsToFloat((int) type.getLong(block, position));
}
else {
diff --git a/presto-orc/src/test/java/com/facebook/presto/orc/BenchmarkSelectiveStreamReaders.java b/presto-orc/src/test/java/com/facebook/presto/orc/BenchmarkSelectiveStreamReaders.java
index b97907d2206d2..6aa01e2f3a4fa 100644
--- a/presto-orc/src/test/java/com/facebook/presto/orc/BenchmarkSelectiveStreamReaders.java
+++ b/presto-orc/src/test/java/com/facebook/presto/orc/BenchmarkSelectiveStreamReaders.java
@@ -340,11 +340,11 @@ private Optional getFilter(Type type, float filterRate, boole
return Optional.of(BigintRange.of((long) (Byte.MIN_VALUE * selectionRateForNonNull), (long) (Byte.MAX_VALUE * selectionRateForNonNull), filterAllowNull));
}
- if (type == REAL) {
+ if (type.equals(REAL)) {
return Optional.of(FloatRange.of(0, false, false, selectionRateForNonNull, false, true, filterAllowNull));
}
- if (type == DOUBLE) {
+ if (type.equals(DOUBLE)) {
return Optional.of(DoubleRange.of(0, false, false, selectionRateForNonNull, false, true, filterAllowNull));
}
@@ -423,11 +423,11 @@ private Object createValue(Type type, float filterRate)
return new SqlTimestamp(value, TimeZoneKey.UTC_KEY, MILLISECONDS);
}
- if (type == REAL) {
+ if (type.equals(REAL)) {
return random.nextFloat();
}
- if (type == DOUBLE) {
+ if (type.equals(DOUBLE)) {
return random.nextDouble();
}
diff --git a/presto-orc/src/test/java/com/facebook/presto/orc/OrcTester.java b/presto-orc/src/test/java/com/facebook/presto/orc/OrcTester.java
index 1d9f2eddcb429..3c6a2497b6b78 100644
--- a/presto-orc/src/test/java/com/facebook/presto/orc/OrcTester.java
+++ b/presto-orc/src/test/java/com/facebook/presto/orc/OrcTester.java
@@ -360,9 +360,8 @@ public void testRoundTrip(Type type, List> readValues, List