Refine search
@Test public void testSingleValue() { assertTrue(Range.range(BIGINT, 1L, true, 1L, true).isSingleValue()); assertFalse(Range.range(BIGINT, 1L, true, 2L, true).isSingleValue()); assertTrue(Range.range(DOUBLE, 1.1, true, 1.1, true).isSingleValue()); assertTrue(Range.range(VARCHAR, utf8Slice("a"), true, utf8Slice("a"), true).isSingleValue()); assertTrue(Range.range(BOOLEAN, true, true, true, true).isSingleValue()); assertFalse(Range.range(BOOLEAN, false, true, true, true).isSingleValue()); }
@Test public void testIntersect() { assertEquals(Range.greaterThan(BIGINT, 1L).intersect(Range.lessThanOrEqual(BIGINT, 2L)), Range.range(BIGINT, 1L, false, 2L, true)); assertEquals(Range.range(BIGINT, 1L, true, 3L, false).intersect(Range.equal(BIGINT, 2L)), Range.equal(BIGINT, 2L)); assertEquals(Range.range(BIGINT, 1L, true, 3L, false).intersect(Range.range(BIGINT, 2L, false, 10L, false)), Range.range(BIGINT, 2L, false, 3L, false)); assertEquals(Range.range(BIGINT, 1L, true, 3L, true).intersect(Range.range(BIGINT, 3L, true, 10L, false)), Range.equal(BIGINT, 3L)); assertEquals(Range.all(BIGINT).intersect(Range.equal(BIGINT, Long.MAX_VALUE)), Range.equal(BIGINT, Long.MAX_VALUE)); }
@Test public void testSpan() { assertEquals(Range.greaterThan(BIGINT, 1L).span(Range.lessThanOrEqual(BIGINT, 2L)), Range.all(BIGINT)); assertEquals(Range.greaterThan(BIGINT, 2L).span(Range.lessThanOrEqual(BIGINT, 0L)), Range.all(BIGINT)); assertEquals(Range.range(BIGINT, 1L, true, 3L, false).span(Range.equal(BIGINT, 2L)), Range.range(BIGINT, 1L, true, 3L, false)); assertEquals(Range.range(BIGINT, 1L, true, 3L, false).span(Range.range(BIGINT, 2L, false, 10L, false)), Range.range(BIGINT, 1L, true, 10L, false)); assertEquals(Range.greaterThan(BIGINT, 1L).span(Range.equal(BIGINT, 0L)), Range.greaterThanOrEqual(BIGINT, 0L)); assertEquals(Range.greaterThan(BIGINT, 1L).span(Range.greaterThanOrEqual(BIGINT, 10L)), Range.greaterThan(BIGINT, 1L)); assertEquals(Range.lessThan(BIGINT, 1L).span(Range.lessThanOrEqual(BIGINT, 1L)), Range.lessThanOrEqual(BIGINT, 1L)); assertEquals(Range.all(BIGINT).span(Range.lessThanOrEqual(BIGINT, 1L)), Range.all(BIGINT)); }
@Test public void testOverlaps() { assertTrue(Range.greaterThan(BIGINT, 1L).overlaps(Range.lessThanOrEqual(BIGINT, 2L))); assertFalse(Range.greaterThan(BIGINT, 2L).overlaps(Range.lessThan(BIGINT, 2L))); assertTrue(Range.range(BIGINT, 1L, true, 3L, false).overlaps(Range.equal(BIGINT, 2L))); assertTrue(Range.range(BIGINT, 1L, true, 3L, false).overlaps(Range.range(BIGINT, 2L, false, 10L, false))); assertFalse(Range.range(BIGINT, 1L, true, 3L, false).overlaps(Range.range(BIGINT, 3L, true, 10L, false))); assertTrue(Range.range(BIGINT, 1L, true, 3L, true).overlaps(Range.range(BIGINT, 3L, true, 10L, false))); assertTrue(Range.all(BIGINT).overlaps(Range.equal(BIGINT, Long.MAX_VALUE))); }
@Test public void testJsonSerialization() throws Exception { TestingTypeManager typeManager = new TestingTypeManager(); TestingBlockEncodingSerde blockEncodingSerde = new TestingBlockEncodingSerde(typeManager); ObjectMapper mapper = new ObjectMapperProvider().get() .registerModule(new SimpleModule() .addDeserializer(Type.class, new TestingTypeDeserializer(typeManager)) .addSerializer(Block.class, new TestingBlockJsonSerde.Serializer(blockEncodingSerde)) .addDeserializer(Block.class, new TestingBlockJsonSerde.Deserializer(blockEncodingSerde))); Domain domain = Domain.all(BIGINT); assertEquals(domain, mapper.readValue(mapper.writeValueAsString(domain), Domain.class)); domain = Domain.none(DOUBLE); assertEquals(domain, mapper.readValue(mapper.writeValueAsString(domain), Domain.class)); domain = Domain.notNull(BOOLEAN); assertEquals(domain, mapper.readValue(mapper.writeValueAsString(domain), Domain.class)); domain = Domain.notNull(HYPER_LOG_LOG); assertEquals(domain, mapper.readValue(mapper.writeValueAsString(domain), Domain.class)); domain = Domain.onlyNull(VARCHAR); assertEquals(domain, mapper.readValue(mapper.writeValueAsString(domain), Domain.class)); domain = Domain.onlyNull(HYPER_LOG_LOG); assertEquals(domain, mapper.readValue(mapper.writeValueAsString(domain), Domain.class)); domain = Domain.singleValue(BIGINT, Long.MIN_VALUE); assertEquals(domain, mapper.readValue(mapper.writeValueAsString(domain), Domain.class)); domain = Domain.singleValue(ID, Long.MIN_VALUE); assertEquals(domain, mapper.readValue(mapper.writeValueAsString(domain), Domain.class)); domain = Domain.create(ValueSet.ofRanges(Range.lessThan(BIGINT, 0L), Range.equal(BIGINT, 1L), Range.range(BIGINT, 2L, true, 3L, true)), true); assertEquals(domain, mapper.readValue(mapper.writeValueAsString(domain), Domain.class)); }
@Test public void testExceptionalIntersect() { try { Range.greaterThan(BIGINT, 2L).intersect(Range.lessThan(BIGINT, 2L)); fail(); } catch (IllegalArgumentException e) { } try { Range.range(BIGINT, 1L, true, 3L, false).intersect(Range.range(BIGINT, 3L, true, 10L, false)); fail(); } catch (IllegalArgumentException e) { } }
@Test public void testUnboundedSet() Range.greaterThan(BIGINT, 10L), Range.lessThanOrEqual(BIGINT, 0L), Range.range(BIGINT, 2L, true, 4L, false), Range.range(BIGINT, 4L, true, 6L, false), Range.range(BIGINT, 1L, false, 2L, false), Range.range(BIGINT, 9L, false, 11L, false)); Range.range(BIGINT, 1L, false, 6L, false), Range.greaterThan(BIGINT, 9L)); Range.range(BIGINT, 0L, false, 1L, true), Range.range(BIGINT, 6L, true, 9L, true)); assertEquals(rangeSet.getType(), BIGINT); assertFalse(rangeSet.isNone()); assertFalse(rangeSet.isAll()); assertFalse(rangeSet.isSingleValue()); assertTrue(Iterables.elementsEqual(rangeSet.getOrderedRanges(), normalizedResult)); assertEquals(rangeSet, SortedRangeSet.copyOf(BIGINT, normalizedResult)); assertEquals(rangeSet.getRangeCount(), 3); assertEquals(rangeSet.complement(), complement); assertTrue(rangeSet.includesMarker(Marker.lowerUnbounded(BIGINT)));
@Test public void testContains() { assertTrue(Range.all(BIGINT).contains(Range.all(BIGINT))); assertTrue(Range.all(BIGINT).contains(Range.equal(BIGINT, 0L))); assertTrue(Range.all(BIGINT).contains(Range.greaterThan(BIGINT, 0L))); assertTrue(Range.equal(BIGINT, 0L).contains(Range.equal(BIGINT, 0L))); assertFalse(Range.equal(BIGINT, 0L).contains(Range.greaterThan(BIGINT, 0L))); assertFalse(Range.equal(BIGINT, 0L).contains(Range.greaterThanOrEqual(BIGINT, 0L))); assertFalse(Range.equal(BIGINT, 0L).contains(Range.all(BIGINT))); assertTrue(Range.greaterThanOrEqual(BIGINT, 0L).contains(Range.greaterThan(BIGINT, 0L))); assertTrue(Range.greaterThan(BIGINT, 0L).contains(Range.greaterThan(BIGINT, 1L))); assertFalse(Range.greaterThan(BIGINT, 0L).contains(Range.lessThan(BIGINT, 0L))); assertTrue(Range.range(BIGINT, 0L, true, 2L, true).contains(Range.range(BIGINT, 1L, true, 2L, true))); assertFalse(Range.range(BIGINT, 0L, true, 2L, true).contains(Range.range(BIGINT, 1L, true, 3L, false))); }
@Test public void testBuildSqlWithVarchar() throws SQLException { TupleDomain<ColumnHandle> tupleDomain = TupleDomain.withColumnDomains(ImmutableMap.of( columns.get(3), Domain.create(SortedRangeSet.copyOf(VARCHAR, ImmutableList.of( Range.range(VARCHAR, utf8Slice("test_str_700"), true, utf8Slice("test_str_702"), false), Range.equal(VARCHAR, utf8Slice("test_str_180")), Range.equal(VARCHAR, utf8Slice("test_str_196")))), false))); Connection connection = database.getConnection(); try (PreparedStatement preparedStatement = new QueryBuilder("\"").buildSql(jdbcClient, connection, "", "", "test_table", columns, tupleDomain, Optional.empty()); ResultSet resultSet = preparedStatement.executeQuery()) { ImmutableSet.Builder<String> builder = ImmutableSet.builder(); while (resultSet.next()) { builder.add((String) resultSet.getObject("col_3")); } assertEquals(builder.build(), ImmutableSet.of("test_str_700", "test_str_701", "test_str_180", "test_str_196")); assertContains(preparedStatement.toString(), "\"col_3\" >= ?"); assertContains(preparedStatement.toString(), "\"col_3\" < ?"); assertContains(preparedStatement.toString(), "\"col_3\" IN (?,?)"); } }
@Test public void testRoundTrip() { TupleDomain<Symbol> tupleDomain = withColumnDomains(ImmutableMap.<Symbol, Domain>builder() .put(C_BIGINT, Domain.singleValue(BIGINT, 1L)) .put(C_DOUBLE, Domain.onlyNull(DOUBLE)) .put(C_VARCHAR, Domain.notNull(VARCHAR)) .put(C_BOOLEAN, Domain.singleValue(BOOLEAN, true)) .put(C_BIGINT_1, Domain.singleValue(BIGINT, 2L)) .put(C_DOUBLE_1, Domain.create(ValueSet.ofRanges(Range.lessThanOrEqual(DOUBLE, 1.1), Range.equal(DOUBLE, 2.0), Range.range(DOUBLE, 3.0, false, 3.5, true)), true)) .put(C_VARCHAR_1, Domain.create(ValueSet.ofRanges(Range.lessThanOrEqual(VARCHAR, utf8Slice("2013-01-01")), Range.greaterThan(VARCHAR, utf8Slice("2013-10-01"))), false)) .put(C_TIMESTAMP, Domain.singleValue(TIMESTAMP, TIMESTAMP_VALUE)) .put(C_DATE, Domain.singleValue(DATE, DATE_VALUE)) .put(C_COLOR, Domain.singleValue(COLOR, COLOR_VALUE_1)) .put(C_HYPER_LOG_LOG, Domain.notNull(HYPER_LOG_LOG)) .build()); assertPredicateTranslates(toPredicate(tupleDomain), tupleDomain); }
@Test public void testBuildSqlWithChar() throws SQLException { CharType charType = CharType.createCharType(0); TupleDomain<ColumnHandle> tupleDomain = TupleDomain.withColumnDomains(ImmutableMap.of( columns.get(11), Domain.create(SortedRangeSet.copyOf(charType, ImmutableList.of( Range.range(charType, utf8Slice("test_str_700"), true, utf8Slice("test_str_702"), false), Range.equal(charType, utf8Slice("test_str_180")), Range.equal(charType, utf8Slice("test_str_196")))), false))); Connection connection = database.getConnection(); try (PreparedStatement preparedStatement = new QueryBuilder("\"").buildSql(jdbcClient, connection, "", "", "test_table", columns, tupleDomain, Optional.empty()); ResultSet resultSet = preparedStatement.executeQuery()) { ImmutableSet.Builder<String> builder = ImmutableSet.builder(); while (resultSet.next()) { builder.add((String) resultSet.getObject("col_11")); } assertEquals(builder.build(), ImmutableSet.of("test_str_700", "test_str_701", "test_str_180", "test_str_196")); assertContains(preparedStatement.toString(), "\"col_11\" >= ?"); assertContains(preparedStatement.toString(), "\"col_11\" < ?"); assertContains(preparedStatement.toString(), "\"col_11\" IN (?,?)"); } }
@Test public void testTupleDomain() ImmutableMap.of(textColumn, Domain.create(ValueSet.ofRanges(Range.range(VARCHAR, utf8Slice("bar"), true, utf8Slice("foo"), true)), false)))); textColumn, Domain.create(ValueSet.ofRanges( Range.range(VARCHAR, utf8Slice("bar"), true, utf8Slice("foo"), true), Range.range(VARCHAR, utf8Slice("hello"), false, utf8Slice("world"), false)), false), Range.range(createVarcharType(32), utf8Slice("bar"), true, utf8Slice("foo"), true), Range.range(createVarcharType(32), utf8Slice("hello"), false, utf8Slice("world"), false)), false)))); textColumn, Domain.create(ValueSet.ofRanges( Range.range(VARCHAR, utf8Slice("bar"), true, utf8Slice("foo"), true), Range.range(VARCHAR, utf8Slice("hello"), false, utf8Slice("world"), false), Range.equal(VARCHAR, utf8Slice("apple")), Range.equal(VARCHAR, utf8Slice("banana")), Range.range(BIGINT, 1L, true, 5L, true), Range.range(BIGINT, 10L, false, 20L, false)), true))));
@Test public void testBuildQuery() { TupleDomain<ColumnHandle> tupleDomain = TupleDomain.withColumnDomains(ImmutableMap.of( COL1, Domain.create(ValueSet.ofRanges(range(BIGINT, 100L, false, 200L, true)), false), COL2, Domain.singleValue(createUnboundedVarcharType(), utf8Slice("a value")))); Document query = MongoSession.buildQuery(tupleDomain); Document expected = new Document() .append(COL1.getName(), new Document().append("$gt", 100L).append("$lte", 200L)) .append(COL2.getName(), new Document("$eq", "a value")); assertEquals(query, expected); }
@Test public void testFromInPredicate() { assertPredicateTranslates( in(C_BIGINT, ImmutableList.of(1L)), withColumnDomains(ImmutableMap.of(C_BIGINT, Domain.singleValue(BIGINT, 1L)))); assertPredicateTranslates( in(C_COLOR, ImmutableList.of(colorLiteral(COLOR_VALUE_1))), withColumnDomains(ImmutableMap.of(C_COLOR, Domain.singleValue(COLOR, COLOR_VALUE_1)))); assertPredicateTranslates( in(C_BIGINT, ImmutableList.of(1L, 2L)), withColumnDomains(ImmutableMap.of(C_BIGINT, Domain.create(ValueSet.ofRanges(Range.equal(BIGINT, 1L), Range.equal(BIGINT, 2L)), false)))); assertPredicateTranslates( in(C_COLOR, ImmutableList.of(colorLiteral(COLOR_VALUE_1), colorLiteral(COLOR_VALUE_2))), withColumnDomains(ImmutableMap.of(C_COLOR, Domain.create(ValueSet.of(COLOR, COLOR_VALUE_1, COLOR_VALUE_2), false)))); assertPredicateTranslates( not(in(C_BIGINT, ImmutableList.of(1L, 2L))), withColumnDomains(ImmutableMap.of(C_BIGINT, Domain.create(ValueSet.ofRanges(Range.lessThan(BIGINT, 1L), Range.range(BIGINT, 1L, false, 2L, false), Range.greaterThan(BIGINT, 2L)), false)))); assertPredicateTranslates( not(in(C_COLOR, ImmutableList.of(colorLiteral(COLOR_VALUE_1), colorLiteral(COLOR_VALUE_2)))), withColumnDomains(ImmutableMap.of(C_COLOR, Domain.create(ValueSet.of(COLOR, COLOR_VALUE_1, COLOR_VALUE_2).complement(), false)))); }
Range.equal(BIGINT, 233L), Range.lessThan(BIGINT, 25L), Range.range(BIGINT, 66L, true, 96L, true), Range.greaterThan(BIGINT, 192L))), false)) Range.equal(DOUBLE, 200017.0), Range.equal(DOUBLE, 200116.5), Range.range(DOUBLE, 200030.0, true, 200036.0, true), Range.range(DOUBLE, 200048.0, true, 200099.0, true))), false)) .put(columns.get(7), Domain.create(SortedRangeSet.copyOf(TINYINT, ImmutableList.of( Range.range(TINYINT, 60L, true, 70L, false), Range.range(TINYINT, 52L, true, 55L, false))), false)) .put(columns.get(8), Domain.create(SortedRangeSet.copyOf(SMALLINT, ImmutableList.of( Range.range(SMALLINT, -75L, true, -68L, true), Range.range(SMALLINT, -200L, true, -100L, false))), false)) .put(columns.get(9), Domain.create(SortedRangeSet.copyOf(INTEGER, builder.add((Long) resultSet.getObject("col_0")); assertEquals(builder.build(), ImmutableSet.of(68L, 180L, 196L));
@Test public void testFromBetweenPredicate() { assertPredicateTranslates( between(C_BIGINT, bigintLiteral(1L), bigintLiteral(2L)), withColumnDomains(ImmutableMap.of(C_BIGINT, Domain.create(ValueSet.ofRanges(Range.range(BIGINT, 1L, true, 2L, true)), false)))); assertPredicateTranslates( between(cast(C_INTEGER, DOUBLE), cast(bigintLiteral(1L), DOUBLE), doubleLiteral(2.1)), withColumnDomains(ImmutableMap.of(C_INTEGER, Domain.create(ValueSet.ofRanges(Range.range(INTEGER, 1L, true, 2L, true)), false)))); assertPredicateIsAlwaysFalse(between(C_BIGINT, bigintLiteral(1L), nullLiteral(BIGINT))); // Test complements assertPredicateTranslates( not(between(C_BIGINT, bigintLiteral(1L), bigintLiteral(2L))), withColumnDomains(ImmutableMap.of(C_BIGINT, Domain.create(ValueSet.ofRanges(Range.lessThan(BIGINT, 1L), Range.greaterThan(BIGINT, 2L)), false)))); assertPredicateTranslates( not(between(cast(C_INTEGER, DOUBLE), cast(bigintLiteral(1L), DOUBLE), doubleLiteral(2.1))), withColumnDomains(ImmutableMap.of(C_INTEGER, Domain.create(ValueSet.ofRanges(Range.lessThan(INTEGER, 1L), Range.greaterThan(INTEGER, 2L)), false)))); assertPredicateTranslates( not(between(C_BIGINT, bigintLiteral(1L), nullLiteral(BIGINT))), withColumnDomains(ImmutableMap.of(C_BIGINT, Domain.create(ValueSet.ofRanges(Range.lessThan(BIGINT, 1L)), false)))); }
@Test public void testBoundedSet() Range.equal(BIGINT, 10L), Range.equal(BIGINT, 0L), Range.range(BIGINT, 9L, true, 11L, false), Range.equal(BIGINT, 0L), Range.range(BIGINT, 2L, true, 4L, true), Range.range(BIGINT, 4L, false, 5L, true)); Range.range(BIGINT, 2L, true, 5L, true), Range.range(BIGINT, 9L, true, 11L, false)); Range.range(BIGINT, 0L, false, 2L, false), Range.range(BIGINT, 5L, false, 9L, false), Range.greaterThanOrEqual(BIGINT, 11L)); assertEquals(rangeSet.getType(), BIGINT); assertFalse(rangeSet.isNone()); assertFalse(rangeSet.isAll()); assertFalse(rangeSet.isSingleValue()); assertTrue(Iterables.elementsEqual(rangeSet.getOrderedRanges(), normalizedResult)); assertEquals(rangeSet, SortedRangeSet.copyOf(BIGINT, normalizedResult)); assertEquals(rangeSet.getRangeCount(), 3); assertEquals(rangeSet.complement(), complement); assertFalse(rangeSet.includesMarker(Marker.lowerUnbounded(BIGINT)));
@Test public void testUnion() { assertUnion(SortedRangeSet.none(BIGINT), SortedRangeSet.none(BIGINT), SortedRangeSet.none(BIGINT)); assertUnion(SortedRangeSet.all(BIGINT), SortedRangeSet.all(BIGINT), SortedRangeSet.all(BIGINT)); assertUnion(SortedRangeSet.none(BIGINT), SortedRangeSet.all(BIGINT), SortedRangeSet.all(BIGINT)); assertUnion( SortedRangeSet.of(Range.equal(BIGINT, 1L), Range.equal(BIGINT, 2L)), SortedRangeSet.of(Range.equal(BIGINT, 2L), Range.equal(BIGINT, 3L)), SortedRangeSet.of(Range.equal(BIGINT, 1L), Range.equal(BIGINT, 2L), Range.equal(BIGINT, 3L))); assertUnion(SortedRangeSet.all(BIGINT), SortedRangeSet.of(Range.equal(BIGINT, 0L)), SortedRangeSet.all(BIGINT)); assertUnion( SortedRangeSet.of(Range.range(BIGINT, 0L, true, 4L, false)), SortedRangeSet.of(Range.greaterThan(BIGINT, 3L)), SortedRangeSet.of(Range.greaterThanOrEqual(BIGINT, 0L))); assertUnion( SortedRangeSet.of(Range.greaterThanOrEqual(BIGINT, 0L)), SortedRangeSet.of(Range.lessThanOrEqual(BIGINT, 0L)), SortedRangeSet.of(Range.all(BIGINT))); assertUnion( SortedRangeSet.of(Range.greaterThan(BIGINT, 0L)), SortedRangeSet.of(Range.lessThan(BIGINT, 0L)), SortedRangeSet.of(BIGINT, 0L).complement()); }
@Test public void testRange() { Range range = Range.range(BIGINT, 0L, false, 2L, true); assertEquals(range.getLow(), Marker.above(BIGINT, 0L)); assertEquals(range.getHigh(), Marker.exactly(BIGINT, 2L)); assertFalse(range.isSingleValue()); assertFalse(range.isAll()); assertEquals(range.getType(), BIGINT); assertFalse(range.includes(Marker.lowerUnbounded(BIGINT))); assertFalse(range.includes(Marker.exactly(BIGINT, 0L))); assertTrue(range.includes(Marker.exactly(BIGINT, 1L))); assertTrue(range.includes(Marker.exactly(BIGINT, 2L))); assertFalse(range.includes(Marker.exactly(BIGINT, 3L))); assertFalse(range.includes(Marker.upperUnbounded(BIGINT))); }
@Test public void testTupleDomain() ImmutableMap.of(textColumn, Domain.create(ValueSet.ofRanges(Range.range(VARCHAR, utf8Slice("bar"), true, utf8Slice("foo"), true)), false)))); textColumn, Domain.create(ValueSet.ofRanges( Range.range(VARCHAR, utf8Slice("bar"), true, utf8Slice("foo"), true), Range.range(VARCHAR, utf8Slice("hello"), false, utf8Slice("world"), false)), false), Range.range(createVarcharType(32), utf8Slice("bar"), true, utf8Slice("foo"), true), Range.range(createVarcharType(32), utf8Slice("hello"), false, utf8Slice("world"), false)), false)))); textColumn, Domain.create(ValueSet.ofRanges( Range.range(VARCHAR, utf8Slice("bar"), true, utf8Slice("foo"), true), Range.range(VARCHAR, utf8Slice("hello"), false, utf8Slice("world"), false), Range.equal(VARCHAR, utf8Slice("apple")), Range.equal(VARCHAR, utf8Slice("banana")), Range.range(BIGINT, 1L, true, 5L, true), Range.range(BIGINT, 10L, false, 20L, false)), true))));