diff --git a/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoSession.java b/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoSession.java index 4def572a7af4..7a8e64148fe0 100644 --- a/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoSession.java +++ b/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoSession.java @@ -461,6 +461,10 @@ private static Optional translateValue(Object trinoNativeValue, Type typ requireNonNull(type, "type is null"); checkArgument(Primitives.wrap(type.getJavaType()).isInstance(trinoNativeValue), "%s (%s) is not a valid representation for %s", trinoNativeValue, trinoNativeValue.getClass(), type); + if (type == BOOLEAN) { + return Optional.of(trinoNativeValue); + } + if (type == TINYINT) { return Optional.of((long) SignedBytes.checkedCast(((Long) trinoNativeValue))); } diff --git a/plugin/trino-mongodb/src/test/java/io/trino/plugin/mongodb/BaseMongoConnectorTest.java b/plugin/trino-mongodb/src/test/java/io/trino/plugin/mongodb/BaseMongoConnectorTest.java index a7ea4ad0d528..7694250ab30c 100644 --- a/plugin/trino-mongodb/src/test/java/io/trino/plugin/mongodb/BaseMongoConnectorTest.java +++ b/plugin/trino-mongodb/src/test/java/io/trino/plugin/mongodb/BaseMongoConnectorTest.java @@ -531,6 +531,19 @@ public void testDropTable() assertQueryFails("SELECT * FROM test.drop_table", ".*Table 'mongodb.test.drop_table' does not exist"); } + @Test + public void testBooleanPredicates() + { + assertUpdate("CREATE TABLE boolean_predicates(id integer, value boolean)"); + assertUpdate("INSERT INTO boolean_predicates VALUES(1, true)", 1); + assertUpdate("INSERT INTO boolean_predicates VALUES(2, false)", 1); + + assertQuery("SELECT id FROM boolean_predicates WHERE value = true", "VALUES 1"); + assertQuery("SELECT id FROM boolean_predicates WHERE value = false", "VALUES 2"); + + assertUpdate("DROP TABLE boolean_predicates"); + } + @Test public void testNullPredicates() { diff --git a/plugin/trino-mongodb/src/test/java/io/trino/plugin/mongodb/TestMongoSession.java b/plugin/trino-mongodb/src/test/java/io/trino/plugin/mongodb/TestMongoSession.java index 297715382d25..6d86fd9ac773 100644 --- a/plugin/trino-mongodb/src/test/java/io/trino/plugin/mongodb/TestMongoSession.java +++ b/plugin/trino-mongodb/src/test/java/io/trino/plugin/mongodb/TestMongoSession.java @@ -31,6 +31,7 @@ import static io.trino.spi.predicate.Range.lessThan; import static io.trino.spi.predicate.Range.range; import static io.trino.spi.type.BigintType.BIGINT; +import static io.trino.spi.type.BooleanType.BOOLEAN; import static io.trino.spi.type.VarcharType.createUnboundedVarcharType; import static java.util.Arrays.asList; import static org.testng.Assert.assertEquals; @@ -40,6 +41,7 @@ public class TestMongoSession private static final MongoColumnHandle COL1 = new MongoColumnHandle("col1", BIGINT, false, Optional.empty()); private static final MongoColumnHandle COL2 = new MongoColumnHandle("col2", createUnboundedVarcharType(), false, Optional.empty()); private static final MongoColumnHandle COL3 = new MongoColumnHandle("col3", createUnboundedVarcharType(), false, Optional.empty()); + private static final MongoColumnHandle COL4 = new MongoColumnHandle("col4", BOOLEAN, false, Optional.empty()); @Test public void testBuildQuery() @@ -105,4 +107,14 @@ public void testBuildQueryNull() new Document(COL1.getName(), new Document("$eq", null)))); assertEquals(query, expected); } + + @Test + public void testBooleanPredicatePushdown() + { + TupleDomain tupleDomain = TupleDomain.withColumnDomains(ImmutableMap.of(COL4, Domain.singleValue(BOOLEAN, true))); + + Document query = MongoSession.buildQuery(tupleDomain); + Document expected = new Document().append(COL4.getName(), new Document("$eq", true)); + assertEquals(query, expected); + } }