From 82102340b8ba096bb680a6a7fb0cefed83897389 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Thu, 9 Feb 2017 23:43:45 +1300 Subject: [PATCH] #960 - Incorrect query when using '.betweenProperties' with '@SoftDelete' --- .../server/expression/BetweenPropertyExpression.java | 3 +-- .../server/expression/BetweenPropertyExpressionTest.java | 7 +++++++ .../server/expression/TDSpiExpressionRequest.java | 9 ++++++--- .../io/ebeaninternal/server/grammer/EqlParserTest.java | 4 ++-- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/ebeaninternal/server/expression/BetweenPropertyExpression.java b/src/main/java/io/ebeaninternal/server/expression/BetweenPropertyExpression.java index a9bb15e90..461b568bb 100644 --- a/src/main/java/io/ebeaninternal/server/expression/BetweenPropertyExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/BetweenPropertyExpression.java @@ -81,8 +81,7 @@ class BetweenPropertyExpression extends NonPrepareExpression { @Override public void addSql(SpiExpressionRequest request) { - - request.append(" ? ").append(BETWEEN).append(name(lowProperty)).append(" and ").append(name(highProperty)); + request.append(" ?").append(BETWEEN).append(name(lowProperty)).append(" and ").append(name(highProperty)).append(" "); } @Override diff --git a/src/test/java/io/ebeaninternal/server/expression/BetweenPropertyExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/BetweenPropertyExpressionTest.java index 48b2c1a28..3a2c93a4b 100644 --- a/src/test/java/io/ebeaninternal/server/expression/BetweenPropertyExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/BetweenPropertyExpressionTest.java @@ -12,6 +12,13 @@ public class BetweenPropertyExpressionTest { return new BetweenPropertyExpression(lowProperty, highProperty, value); } + @Test + public void sqlExpression() { + TDSpiExpressionRequest request = new TDSpiExpressionRequest(null); + exp("a", "b", 10).addSql(request); + assertThat(request.getSql()).isEqualTo(" ? between a and b "); + } + @Test public void isSameByPlan_when_same() { assertThat(exp("a", "b", 10).isSameByPlan(exp("a", "b", 10))).isTrue(); diff --git a/src/test/java/io/ebeaninternal/server/expression/TDSpiExpressionRequest.java b/src/test/java/io/ebeaninternal/server/expression/TDSpiExpressionRequest.java index 97a59617d..9bc3ea9d7 100644 --- a/src/test/java/io/ebeaninternal/server/expression/TDSpiExpressionRequest.java +++ b/src/test/java/io/ebeaninternal/server/expression/TDSpiExpressionRequest.java @@ -17,6 +17,8 @@ public class TDSpiExpressionRequest implements SpiExpressionRequest { final BeanDescriptor descriptor; + StringBuilder sql = new StringBuilder(); + public TDSpiExpressionRequest(BeanDescriptor descriptor) { this.descriptor = descriptor; } @@ -42,8 +44,9 @@ public class TDSpiExpressionRequest implements SpiExpressionRequest { } @Override - public SpiExpressionRequest append(String sql) { - return null; + public SpiExpressionRequest append(String sqlExpression) { + sql.append(sqlExpression); + return this; } @Override @@ -58,7 +61,7 @@ public class TDSpiExpressionRequest implements SpiExpressionRequest { @Override public String getSql() { - return null; + return sql.toString(); } @Override diff --git a/src/test/java/io/ebeaninternal/server/grammer/EqlParserTest.java b/src/test/java/io/ebeaninternal/server/grammer/EqlParserTest.java index 5d79d6063..4e6e1922c 100644 --- a/src/test/java/io/ebeaninternal/server/grammer/EqlParserTest.java +++ b/src/test/java/io/ebeaninternal/server/grammer/EqlParserTest.java @@ -239,7 +239,7 @@ public class EqlParserTest extends BaseTestCase { Query query = parse("where 'x' between name and smallnote"); query.findList(); - assertThat(query.getGeneratedSql()).contains("where ? between t0.name and t0.smallnote"); + assertThat(query.getGeneratedSql()).contains("where ? between t0.name and t0.smallnote"); } @Test @@ -249,7 +249,7 @@ public class EqlParserTest extends BaseTestCase { query.setParameter("some", "A"); query.findList(); - assertThat(query.getGeneratedSql()).contains("where ? between t0.name and t0.smallnote"); + assertThat(query.getGeneratedSql()).contains("where ? between t0.name and t0.smallnote"); } @Test