@Override
protected ExtractionResult visitComparisonExpression(ComparisonExpression node, Boolean complement)
{
Optional<NormalizedSimpleComparison> optionalNormalized = toNormalizedSimpleComparison(session, metadata, types, node);
if (!optionalNormalized.isPresent()) {
return super.visitComparisonExpression(node, complement);
}
NormalizedSimpleComparison normalized = optionalNormalized.get();
Symbol symbol = Symbol.fromQualifiedName(normalized.getNameReference().getName());
Type fieldType = checkedTypeLookup(symbol);
NullableValue value = normalized.getValue();
if (value.getType().equals(DOUBLE) && fieldType.equals(BIGINT)) {
return process(coerceDoubleToLongComparison(normalized), complement);
}
Optional<NullableValue> coercedValue = coerce(value, fieldType);
if (!coercedValue.isPresent()) {
return super.visitComparisonExpression(node, complement);
}
return createComparisonExtractionResult(normalized.getComparisonType(), symbol, fieldType, coercedValue.get().getValue(), complement);
}