Search in sources :

Example 1 with Builder

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);
}
Also used : BoundType(com.google.common.collect.BoundType) Builder(com.google.common.collect.ImmutableRangeSet.Builder) RexBuilder(org.apache.calcite.rex.RexBuilder) RexBuilder(org.apache.calcite.rex.RexBuilder) JsonNode(org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonNode) ArrayNode(org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.node.ArrayNode) Range(com.google.common.collect.Range)

Aggregations

BoundType (com.google.common.collect.BoundType)1 Builder (com.google.common.collect.ImmutableRangeSet.Builder)1 Range (com.google.common.collect.Range)1 RexBuilder (org.apache.calcite.rex.RexBuilder)1 JsonNode (org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonNode)1 ArrayNode (org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.node.ArrayNode)1