@Override
    public Query rangeQuery(
        Object lowerTerm, Object upperTerm, boolean includeLower, boolean includeUpper) {
      failIfNotIndexed();
      InetAddress lower;
      if (lowerTerm == null) {
        lower = XInetAddressPoint.MIN_VALUE;
      } else {
        lower = parse(lowerTerm);
        if (includeLower == false) {
          if (lower.equals(XInetAddressPoint.MAX_VALUE)) {
            return new MatchNoDocsQuery();
          }
          lower = XInetAddressPoint.nextUp(lower);
        }
      }

      InetAddress upper;
      if (upperTerm == null) {
        upper = XInetAddressPoint.MAX_VALUE;
      } else {
        upper = parse(upperTerm);
        if (includeUpper == false) {
          if (upper.equals(XInetAddressPoint.MIN_VALUE)) {
            return new MatchNoDocsQuery();
          }
          upper = XInetAddressPoint.nextDown(upper);
        }
      }

      return InetAddressPoint.newRangeQuery(name(), lower, upper);
    }