#2847 - Add support for Sub-query EQ, NE, LT, LE, GT, GE expressions

This commit is contained in:
Rob Bygrave
2022-11-03 00:22:48 +13:00
parent 6f5e144a93
commit 0a61852711
18 changed files with 373 additions and 62 deletions
@@ -35,7 +35,7 @@ public class DefaultExpressionFactoryTest {
public void testEq() {
DefaultExpressionFactory factory = new DefaultExpressionFactory(false, false);
Expression expression = factory.eq("name", null);
Expression expression = factory.eq("name", (String)null);
assertThat(expression).isInstanceOf(NullExpression.class);
assertThat(toQueryPlanHash(expression)).isEqualTo("Null[name]");
}
@@ -44,7 +44,7 @@ public class DefaultExpressionFactoryTest {
public void testNe() {
DefaultExpressionFactory factory = new DefaultExpressionFactory(false, false);
Expression expression = factory.ne("name", null);
Expression expression = factory.ne("name", (String)null);
assertThat(expression).isInstanceOf(NullExpression.class);
assertThat(toQueryPlanHash(expression)).isEqualTo("NotNull[name]");
}
@@ -71,7 +71,7 @@ public class DefaultExpressionFactoryTest {
public void testEq_with_equalsWithNullAsNoop() {
DefaultExpressionFactory factory = new DefaultExpressionFactory(true, false);
Expression expression = factory.eq("name", null);
Expression expression = factory.eq("name", (String)null);
assertThat(expression).isInstanceOf(NoopExpression.class);
}
@@ -79,7 +79,7 @@ public class DefaultExpressionFactoryTest {
public void testNe_with_equalsWithNullAsNoop() {
DefaultExpressionFactory factory = new DefaultExpressionFactory(true, false);
Expression expression = factory.ne("name", null);
Expression expression = factory.ne("name", (String)null);
assertThat(expression).isInstanceOf(NoopExpression.class);
}
@@ -87,7 +87,7 @@ public class DefaultExpressionFactoryTest {
public void testIeq_with_equalsWithNullAsNoop() {
DefaultExpressionFactory factory = new DefaultExpressionFactory(true, false);
Expression expression = factory.ieq("name", null);
Expression expression = factory.ieq("name", (String)null);
assertThat(expression).isInstanceOf(NoopExpression.class);
}
}
@@ -12,14 +12,15 @@ import static org.mockito.Mockito.verify;
public class InQueryExpressionTest extends BaseExpressionTest {
private InQueryExpression exp(String propertyName, boolean not, String sql, Object... bindValues) {
return new InQueryExpression(propertyName, not, sql, Arrays.asList(bindValues));
private SubQueryExpression exp(String propertyName, boolean not, String sql, Object... bindValues) {
var op = not ? SubQueryExpression.SQOp.NOTIN : SubQueryExpression.SQOp.IN;
return new SubQueryExpression(op, propertyName, sql, Arrays.asList(bindValues));
}
@Test
void copy_subQuery_expectNewInstance() {
SpiQuery<?> subQuery = mock(SpiQuery.class);
var orig = new InQueryExpression("name", subQuery, false);
var orig = new SubQueryExpression(SubQueryExpression.SQOp.IN, "name", subQuery);
SpiExpression copy = orig.copy();
assertThat(copy).isNotSameAs(orig);
verify(subQuery).copy();
@@ -27,9 +27,9 @@ public class NoopExpressionTest extends BaseExpressionTest {
initTables();
Query<Customer> query = DB.find(Customer.class)
.select("id")
.where().eq("name", null)
.where().eq("name", (String) null)
.add(NoopExpression.INSTANCE)
.ne("status", null)
.ne("status", (String) null)
.query();
query.findList();