From f9800dd59e05716303159445f93339e78af4b5ef Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Tue, 5 Jan 2016 09:11:14 +1300 Subject: [PATCH] #509 - ExpressList.notIn method does not work --- .../server/expression/InExpression.java | 10 ++++---- .../com/avaje/tests/basic/TestInEmpty.java | 24 +++++++++++++++---- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/avaje/ebeaninternal/server/expression/InExpression.java b/src/main/java/com/avaje/ebeaninternal/server/expression/InExpression.java index 9dc22158a..f4e23718d 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/expression/InExpression.java +++ b/src/main/java/com/avaje/ebeaninternal/server/expression/InExpression.java @@ -1,13 +1,13 @@ package com.avaje.ebeaninternal.server.expression; -import java.util.Collection; - import com.avaje.ebean.bean.EntityBean; import com.avaje.ebean.event.BeanQueryRequest; import com.avaje.ebeaninternal.api.HashQueryPlanBuilder; import com.avaje.ebeaninternal.api.SpiExpressionRequest; import com.avaje.ebeaninternal.server.el.ElPropertyValue; +import java.util.Collection; + class InExpression extends AbstractExpression { private static final long serialVersionUID = 3150665801693551260L; @@ -54,10 +54,8 @@ class InExpression extends AbstractExpression { public void addSql(SpiExpressionRequest request) { if (values.length == 0) { - if (!not) { - // 'no match' for in empty collection - request.append("1=0"); - } + String expr = not ? "1=1" : "1=0"; + request.append(expr); return; } diff --git a/src/test/java/com/avaje/tests/basic/TestInEmpty.java b/src/test/java/com/avaje/tests/basic/TestInEmpty.java index 239ab9b78..846d183c0 100644 --- a/src/test/java/com/avaje/tests/basic/TestInEmpty.java +++ b/src/test/java/com/avaje/tests/basic/TestInEmpty.java @@ -2,23 +2,37 @@ package com.avaje.tests.basic; import java.util.List; -import org.junit.Assert; +import com.avaje.ebean.Query; import org.junit.Test; import com.avaje.ebean.BaseTestCase; import com.avaje.ebean.Ebean; import com.avaje.tests.model.basic.Order; +import static org.assertj.core.api.StrictAssertions.assertThat; +import static org.junit.Assert.assertEquals; + public class TestInEmpty extends BaseTestCase { @Test - public void test() { + public void test_in_empty() { - List list = Ebean.find(Order.class).where().gt("id", 0).in("id", new Object[0]) - .findList(); + Query query = Ebean.find(Order.class).where().in("id", new Object[0]).gt("id", 0) + .query(); - Assert.assertEquals(0, list.size()); + List list = query.findList(); + assertThat(query.getGeneratedSql()).contains("1=0"); + assertEquals(0, list.size()); + } + @Test + public void test_notIn_empty() { + + Query query = Ebean.find(Order.class).where().notIn("id", new Object[0]).gt("id", 0) + .query(); + + query.findList(); + assertThat(query.getGeneratedSql()).contains("1=1"); } }