From 4cebb367debec308a665dd74cee8a8bfd2e934c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20P=C3=B6hler?= Date: Thu, 29 Jul 2021 17:09:24 +0200 Subject: [PATCH] FIX: subquery could not not have a where clause --- .../server/query/CQueryPredicates.java | 3 ++- .../test/java/org/tests/query/TestQueryExists.java | 14 +++++++++++++- .../test/java/org/tests/query/TestSubQuery.java | 12 +++++++++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPredicates.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPredicates.java index c41f830c6..bc0588949 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPredicates.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPredicates.java @@ -22,6 +22,7 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Timestamp; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -411,7 +412,7 @@ public class CQueryPredicates { * Return the bind values for the where expression. */ public List getWhereExprBindValues() { - return where.getBindValues(); + return where == null ? Collections.emptyList() : where.getBindValues(); } /** diff --git a/ebean-core/src/test/java/org/tests/query/TestQueryExists.java b/ebean-core/src/test/java/org/tests/query/TestQueryExists.java index 93155bf9a..d72a1ae0d 100644 --- a/ebean-core/src/test/java/org/tests/query/TestQueryExists.java +++ b/ebean-core/src/test/java/org/tests/query/TestQueryExists.java @@ -4,7 +4,6 @@ import io.ebean.BaseTestCase; import io.ebean.Ebean; import io.ebean.Query; import io.ebeantest.LoggedSql; - import org.junit.Test; import org.tests.model.basic.Customer; import org.tests.model.basic.Order; @@ -111,4 +110,17 @@ public class TestQueryExists extends BaseTestCase { assertThat(sql).contains("not exists ("); } + + @Test + public void testExistsNoWhere() { + ResetBasicData.reset(); + + Query subQuery = Ebean.find(Order.class).alias("sq").select("id"); + Query query = Ebean.find(Customer.class).alias("qt").where().notExists(subQuery).query(); + + query.findList(); + String sql = query.getGeneratedSql(); + + assertThat(sql).contains("not exists (select sq.id from o_order sq)"); + } } diff --git a/ebean-core/src/test/java/org/tests/query/TestSubQuery.java b/ebean-core/src/test/java/org/tests/query/TestSubQuery.java index db9eb7cbd..5de3f9290 100644 --- a/ebean-core/src/test/java/org/tests/query/TestSubQuery.java +++ b/ebean-core/src/test/java/org/tests/query/TestSubQuery.java @@ -44,7 +44,17 @@ public class TestSubQuery extends BaseTestCase { Query sq = DB.createQuery(Order.class).select("id").where() .isIn("details.product.id", productIds).query(); - DB.find(Order.class).where().isIn("id", sq).findList(); + assertThat(DB.find(Order.class).where().isIn("id", sq).findList()).hasSize(2); + } + + @Test + public void test_IsInNoWhere() { + ResetBasicData.reset(); + + Query sq = DB.createQuery(Order.class).select("id"); + int expectedSize = DB.find(Order.class).findCount(); // expect everything + + assertThat(DB.find(Order.class).where().isIn("id", sq).findList()).hasSize(expectedSize); } public void testCompositeKey() {