use of com.google.common.collect.ImmutableRangeSet.Builder in project flink by apache.
the class RexNodeJsonDeserializer method deserializeSarg.
@SuppressWarnings({ "UnstableApiUsage", "rawtypes", "unchecked" })
private static RexNode deserializeSarg(JsonNode sargNode, RelDataType relDataType, SerdeContext serdeContext) {
final RexBuilder rexBuilder = serdeContext.getRexBuilder();
final ArrayNode rangesNode = (ArrayNode) sargNode.required(FIELD_NAME_RANGES);
final Builder builder = builder();
for (JsonNode rangeNode : rangesNode) {
Range range = all();
if (rangeNode.has(FIELD_NAME_BOUND_LOWER)) {
final JsonNode lowerNode = rangeNode.required(FIELD_NAME_BOUND_LOWER);
final Comparable<?> boundValue = (Comparable<?>) deserializeLiteralValue(lowerNode, relDataType.getSqlTypeName(), serdeContext);
assert boundValue != null;
final BoundType boundType = serializableToCalcite(BoundType.class, lowerNode.required(FIELD_NAME_BOUND_TYPE).asText());
final Range<?> r = boundType == BoundType.OPEN ? greaterThan(boundValue) : atLeast(boundValue);
range = range.intersection(r);
}
if (rangeNode.has(FIELD_NAME_BOUND_UPPER)) {
final JsonNode upperNode = rangeNode.required(FIELD_NAME_BOUND_UPPER);
final Comparable<?> boundValue = (Comparable<?>) deserializeLiteralValue(upperNode, relDataType.getSqlTypeName(), serdeContext);
assert boundValue != null;
final BoundType boundType = serializableToCalcite(BoundType.class, upperNode.required(FIELD_NAME_BOUND_TYPE).asText());
final Range<?> r = boundType == BoundType.OPEN ? lessThan(boundValue) : atMost(boundValue);
range = range.intersection(r);
}
if (range.hasUpperBound() || range.hasLowerBound()) {
builder.add(range);
}
}
final boolean containsNull = sargNode.required(FIELD_NAME_CONTAINS_NULL).booleanValue();
return rexBuilder.makeSearchArgumentLiteral(Sarg.of(containsNull, builder.build()), relDataType);
}
Aggregations